弄清楚这个简单的算法

时间:2017-03-13 07:41:37

标签: algorithm

PSA:这是一个家庭作业问题

需要在屏幕上的两个不同位置绘制两个圆圈 假设在(100,200)处绘制了一个圆,而在(200,100)处绘制了第二个圆 如果第一个圆的半径为80且圆的半径为70,则两个圆将相交。如果第一个圆的半径为80,第二个圆的半径为60,则两个圆不相交。编写一种算法,要求用户输入第一个和第二个圆的半径并显示正确的信息。假设两个圆的中心的位置是固定的。

1 个答案:

答案 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

我们有圆圈相交案例