【问题标题】:Calculate intersect point between arc and line计算圆弧与直线的交点
【发布时间】:2015-07-12 10:09:58
【问题描述】:

我想计算圆弧和直线的交点。我有直线和圆弧的所有数据。

对于线:起点和终点。
对于圆弧:起点/终点、起点/终点角度、半径和中心点。

我在这里附上一张图片。在下图中,我绘制了一条弧线和一条线,线与弧线相交。

所以现在我想找到交点。请给我一些算法或想法,或者如果有任何可用的代码。

【问题讨论】:

标签: java geometry


【解决方案1】:

让我们定义一个弧和一条线:

弧线:

  • xa=X 坐标
  • ya=Y 坐标
  • a1=起始角度(较小的角度)
  • a2=结束角度(更大的角度)
  • r=半径

行:

  • x1=第一个 X 坐标
  • x2=第二个 X 坐标
  • y1=第一个 Y 坐标
  • y1=第二个 Y 坐标

从中可以计算:

  • dx=x2-x1
  • dy=y2-y1
  • al=arctan(dy/dx)(线的角度)

当 al a2 时,圆弧和直线不会相交,换句话说,直线的夹角不在圆弧的夹角之间。 相交的方程式如下:

  • xa+rcos(al)=x1+cdx
  • ya+rsin(al)=y1+cdy

其中 c (0

  • (xa+r * cos(al)-x1)/dx=c
  • (ya+r * sin(al)-y1)/dy=c

因此交点在 (x1+c * dx),(y1+c * dy)

该算法仅在圆弧和直线只有一个交点时有效。如果这条线两次穿过圆弧,那么它不会记录任何交点。

【讨论】:

  • 感谢您的回复。这个答案真的帮助了我。 xa=X-坐标 ya=Y-坐标 上一行中xa、ya是什么意思,坐标是弧坐标?
  • c 的计算值显示超出范围(0 到 1)。
  • xa 和 ya 是圆弧中心点的坐标。如果 c 大于 1,则不存在交点,因为线在穿过圆弧之前就停止了。如果 c 为负数,那么您很可能在某个地方犯了错误,很可能是在计算 dx 和 dy 期间。
  • 这假设线穿过中心,不是吗?
  • 我写了和上面一样的算法,但是我没有得到正确的结果。 C 的值,有时显示在 0 -1 之间,有时大于 1 或小于 0。
猜你喜欢
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多