如何找到连接两个段的弧?

时间:2015-01-18 12:22:15

标签: math 2d

我将从img开始,帮助我描述我的问题:

我有两个连接的段AB& BC(我知道coords)。如何计算第一个和最后一个绿点之间的弧。第一&最后一个绿点位于距离B点(黑色段)的指定距离处。 我希望列出所有绿点的坐标。任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

问题归结为在给定半径 r 的情况下找到圆 K 的圆心,点 B 和方向 BC BA

pic

请按照以下步骤操作:

  1. 使用您找到的任何“两个平面矢量之间的角度”算法(有很多种方法)找到 BC AB 之间的角度φ
  2. 使用

    计算圆弧包含角ψ

    ψ = 2*arcsin(cot(φ/2))

  3. 计算弧线结束时 BC 的距离 s

    s = r*cot(φ/2)

  4. 如果 BC 的方向为e_BC=(ex,ey)而法线为n_BC=(ey,-ex),那么弧 M 的结尾

    (mx,my) = (bx,by) + s*(ex,ey)

  5. 圆圈中心是

    (kx,ky) = (mx,my) + r*(nx,ny)

  6. 现在取 N = 4个角度增量来旋转 M K 以获得绿点

    i-th point: i=1..4

    gx = kx + (mx-kx)*cos((i/4)*ψ)+(my-ky)*sin((i/4)*ψ)

    gy = ky - (mx-kx)*sin((i/4)*ψ)+(my-ky)*cos((i/4)*ψ)

答案 1 :(得分:1)

我改变了你的形状:

enter image description here

事实:因为Ta和Tc是切线所以OT a A和OT c C是垂线,O是循环的中心

从上述事实,我们可以发现不是每两对Ta和Tc都存在这样一个循环,但如果存在OT a = OT c 。所以你需要做的就是在找到O之后找到O.你有一个循环的R和O(光线和中心),这样你就可以找到它表面的每个坐标。

答案 2 :(得分:1)

我最终不确定你的目标是什么,但在我看来,你基本上想要制造"角落" B轮。

圆圈是圆的。你不是要求圆圈而是圆圈上的点。 我觉得你最终会用直线连接这些点来近似一个圆圈。显然,5分足以满足您的期望"圆度"角落。

如果这是真的并且您只是近似一个圆圈以使角落成圆形,那么贝塞尔曲线对您来说也很有趣。 quadratic bezier curve通过第三个锚点插值以圆形方式连接两个点。在你的情况下,B将是那个锚点。这种曲线的一个缺点是,它不是一个圆形,看起来会有所不同,但仍会产生圆形。 优点是: 许多语言都有内置函数来绘制这些曲线。 一些边缘情况处理得更好,例如,如果所有三个点在一条线上,相同,等等。使用圆形解决方案,您必须自己处理这些情况。

  

如何开始从Ta到Tc绘制点?

要获得弧上的插值点(给定弧的中心,第一个和最后一个点),请使用slerp: http://en.wikipedia.org/wiki/Slerp