【问题标题】:Check line and arc intersected or not检查直线和圆弧是否相交
【发布时间】:2015-10-02 16:21:03
【问题描述】:

我正在寻找一种可以显示直线和圆弧是否相交的算法。 对于直线,我有起点和终点,对于弧,我有起点、终点和中心点。我也有弧的开始和结束角度。

正如您在上图中所见,我绘制了一条弧线和一条线,因为两者相交。如何计算相交与否?

我找到了一个链接,它可以显示直线和圆 Circle Line Intersection points 之间的交点,但在我的情况下,我有直线和圆弧。甚至我还有另一个问题是计算两个 ARC 之间的交集的最佳方法是什么?

有什么建议吗?

【问题讨论】:

标签: math geometry line


【解决方案1】:

通过将线和圆的参数方程等同起来,

X = Sx + t SEx = Cx + R cos(u)
Y = Sy + t SEy = Cy + R sin(u)

可以写

 t SEx + CSx = R cos(u)
 t SEy + CSy = R sin(u)

你可以通过添加方块来消除u

(SEx² + SEy²) t² + 2 (SEx.CSx + SEy.CSy) t + CSx² + CSy² - R² = 0

求解t 的二次方程并检查0<t<1(可能有两个解)。

然后计算 XY 并从这些

tan(u) = (Y - Cy) / (X - Cx)

(使用atan2)。然后检查u 是否在有效范围内。


对于两条弧线,

C0x + R0 cos(u) = C1x + R1 cos(v)
C0y + R0 sin(u) = C1y + R1 sin(v)

Dx + R0 cos(u) = R1 cos(v)
Dy + R0 sin(u) = R1 sin(v)

对平方求和,

2R.Dx cos(u) + 2R.Dy sin(u) + Dx² + Dy² + R0² = R1²

除以2R√(Dx²+Dy²)输入表格

c cos(u) + s sin(u) = e

可以写成

cos(u-w) = e, where tan(w) = s/c

然后

u = w ± arcos(e) 

为您提供潜在的交叉点。

【讨论】:

  • @ShiladittyaChakraborty:我希望您这样做并发布。 SO 不是免费的代码工厂。
  • 能否请您解释一下使用的变量,以便我可以轻松实现?
  • S 开始,E 结束,C 中心。 SE 是从 S 到 E 的 2D 矢量。R:半径。 x 和 y 索引应该很明显。
  • 弧的 u 和 v 是什么?还有 Dx, Dy
  • 它们是参数方程的参数(阅读圆的参数方程);它们的范围是弧的角度范围。 Dx 和 Dy 从方程中显而易见。
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 2015-07-12
  • 2016-07-29
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
相关资源
最近更新 更多