PSA:这是一个家庭作业问题
需要在屏幕上的两个不同位置绘制两个圆圈
假设在(100,200)
处绘制了一个圆,而在(200,100)
处绘制了第二个圆
如果第一个圆的半径为80
且圆的半径为70
,则两个圆将相交。如果第一个圆的半径为80,第二个圆的半径为60,则两个圆不相交。编写一种算法,要求用户输入第一个和第二个圆的半径并显示正确的信息。假设两个圆的中心的位置是固定的。
答案 0 :(得分:2)
这是你的家庭任务,是你应该实施的任务。这就是为什么让我出现这个想法的原因。如果{x1, y1, r1}
是第一个圈子而{x2, y2, r2}
是第二个圈子,那么
if ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) == (r1 + r2) * (r1 + r2))
// circles touch from outside
else if ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) == (r1 - r2) * (r1 - r2))
// circles touch from inside
else if ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) > (r1 + r2) * (r1 + r2))
// circles don't cross, they are separated
else if ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) < (r1 - r2) * (r1 - r2))
// circles don't cross, one circle is within the other
if (r1 < r2)
// 1st circle is inside 2nd
else
// 2nd circle is inside 1st
else
// circles intersect
在您的测试用例中
x1 = 100
y1 = 200
r1 = 80
x2 = 200
y2 = 100
r2 = 70
计算表明
(x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) ==
(100 - 200) * (100 - 200) + (200 - 100) * (200 - 100) ==
20000
(r1 + r2) * (r1 + r2) ==
(70 + 80) * (70 + 80) ==
22500
(r1 - r2) * (r1 -r2) ==
10 * 10 ==
100
我们有圆圈相交案例