Java 当圆心对齐时,如何判断圆和正方形是否重叠

Java 当圆心对齐时,如何判断圆和正方形是否重叠,java,math,geometry,Java,Math,Geometry,我不一定要寻找代码来解决这个问题,但更多的是如何找出背后的逻辑 我正在做一个计算机科学课的家庭作业,其中一个问题是,方法是解开的,它接受两个参数:一个圆的直径和一个正方形的边长,都是double类型。当且仅当圆和正方形在其中心对齐时不相交时,返回true 这是为帮助理解而提供的图像: 我试着简单地返回True,如果直径小于正方形的边长,或者返回True,如果正方形的边长小于圆的直径。现在回想起来,我明白为什么它不起作用了 我更想看看是否有人能解释出可以用来解决这个问题的逻辑/数学 多谢各位 r

我不一定要寻找代码来解决这个问题,但更多的是如何找出背后的逻辑

我正在做一个计算机科学课的家庭作业,其中一个问题是,方法是解开的,它接受两个参数:一个圆的直径和一个正方形的边长,都是double类型。当且仅当圆和正方形在其中心对齐时不相交时,返回true

这是为帮助理解而提供的图像:

我试着简单地返回True,如果直径小于正方形的边长,或者返回True,如果正方形的边长小于圆的直径。现在回想起来,我明白为什么它不起作用了

我更想看看是否有人能解释出可以用来解决这个问题的逻辑/数学

多谢各位

return diameter > length && diameter / 2 < length / Math.sqrt(2)

第一个条件检查圆圈是否不在正方形内,第二个条件检查正方形是否不在圆圈内。中心对齐时,有三种情况:

在广场外兜圈子 圆与方相交 方圆内圆。 如果圆的直径小于平方长度的一半,则“3”适用

如果圆的直径大于从方形中心到方形角的距离,则“1”适用。这是正方形对角线长度的一半


“2”适用于所有其他情况。

圆的方程式为x^2+y^2=r^2 您只需要计算出正方形的一条线是否与圆发生碰撞,就可以看到它们是否发生碰撞,因为它们在中心对齐。直线的方程是x=c,其中c是常数。可以将x或y的值替换为圆方程。例如,对于x=2:

2^2+y^2=r^2=>4+y^2=r^2

r也是给你们的,所以用r=1=>4+y^2=1^2=1代替

=>y^2=-3

因此,因为-3没有真正的平方根,所以它们不会碰撞


如果圆相对于正方形足够大,那么最后一部分将有一个真正的解决方案。我们的表示正方形边的直线方程实际上应该受到约束,因为正方形直线不会永远保持不变,它们在x=y=+-square_长度/2处停止。因此,从方程中检查y是否与高度或x和宽度相同。因此,基本上,有两种情况需要检查。您可以将其转换为代码。

理解逻辑有两种方法

1.中方形柔性圆 假设有一个中等大小的正方形&在它的中心,有一个非常小的圆。 增大圆的直径并检查所有情况。 首先,在正方形的内侧完全旋转。 当直径和边长相同时,在中点处旋转接触边。共4次触摸 之后,圆与每边相交2次,直到步骤4.8相交 上次圆圈只接触正方形的角。这时我们需要找出圆的直径是多少?共4次触摸 正方形的时间对角线接触圆,它的弦也穿过圆心,所以对角线是直径 直径=对角线=侧面*√2. 然后,圆圈完全离开正方形。 2.中圆柔性正方形 假设有一个中等大小的圆&在它的中心是一个非常小的正方形。 增加正方形边的长度并检查所有箱子。 首先,在圆内完全方正。 第一时间广场的触角圆圈。总共4次触摸,此时我们需要找出边的长度是多少?共4次触摸 正方形的时间对角线接触圆,它的弦也穿过圆心,所以对角线是直径 侧面=对角线/√2=直径/√2. 之后,正方形的每边与圆相交2次,直到第4步。共相交8次 上一次,当直径和边长相同时,只有正方形的边中点接触圆。 然后,正方形完全离开圆圈。
所以,在这两种情况下,圆和方在这两种状态之间相切,在这两种情况下是相同的

不完全是OP想要的,因为他想要理解这个问题,而不仅仅是给出答案。除此之外,我相信连接的后半部分-&是说圆的直径大于到角的距离。。。见毕达哥拉斯。