我将从img开始,帮助我描述我的问题:
我有两个连接的段AB& BC(我知道coords)。如何计算第一个和最后一个绿点之间的弧。第一&最后一个绿点位于距离B点(黑色段)的指定距离处。 我希望列出所有绿点的坐标。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
问题归结为在给定半径 r 的情况下找到圆 K 的圆心,点 B 和方向 BC 和 BA 。
请按照以下步骤操作:
使用
计算圆弧包含角ψ ψ = 2*arcsin(cot(φ/2))
计算弧线结束时 BC 的距离 s
s = r*cot(φ/2)
如果 BC 的方向为e_BC=(ex,ey)
而法线为n_BC=(ey,-ex)
,那么弧 M 的结尾
(mx,my) = (bx,by) + s*(ex,ey)
圆圈中心是
(kx,ky) = (mx,my) + r*(nx,ny)
现在取 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)
我改变了你的形状:
事实:因为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