有效地查找圆和网格的交点

时间:2013-10-30 18:38:22

标签: algorithm language-agnostic

找到由它的中心点和半径以及任意网格定义的圆的交点是什么方法?

我想要找到的要点的说明: enter image description here

到目前为止我想到的可能的解决方案:

  1. 找到位于中心+ - 半径之间的所有线条。对于每条线计算交点。

  2. 使圆形成为双面多边形,并使用几何库查找多边形和网格线之间的交点。这样也可以使用除圆圈之外的其他形状。

1 个答案:

答案 0 :(得分:2)

迭代线的坐标集,找到每个网格线与圆的交点似乎是合理的。但是,为避免病态计算,有时应使用y线,有时使用x线坐标作为自变量。具体而言,将圆分为四个圆弧,分割点为°45°,135°,225°和315°。

假设圆心位于xₒ,yₒ,半径为r。 在δ=(r·√2)/ 2的情况下,顶部和底部弧的x坐标范围是从xₒ-δ到xₒ+δ。右弧和左弧的y坐标范围是从yₒ-δ到yₒ+δ。

令y 1,y 2为对应于x的顶部和底部y坐标。对于顶部和底部电弧,使用公式d =√(r²-(x-xₒ)²); Y 1 =yₒ+ d; Y 2 =yₒ-d。

设x 1,x 2为左右x坐标对应于y。对于左右弧,使用公式d =√(r²-(y-yₒ)²); X 1 =xₒ+ d; X 2 =xₒ-d。

如评论中所述,方程式来自圆方程。在这种情况下,那是(x-xₒ)²+(y-yₒ)²=r²,我们得到(x-xₒ)²=r² - (y-yₒ)²使得x-xₒ=±√( r² - (y-yₒ)²)等,或(y-yₒ)²=r² - (x-xₒ)²使得y-yₒ=±√(r² - (x-xₒ)²)等。