Math 如何找到连接两个线段的圆弧?
我将从帮助我描述问题的img开始:Math 如何找到连接两个线段的圆弧?,math,2d,Math,2d,我将从帮助我描述问题的img开始: 我有两个连接段AB和BC(我知道coords)。如何计算第一个和最后一个绿点之间的弧。第一个和最后一个绿色点位于距离B点(黑色段)指定距离处我希望所有绿点坐标都在阵列中。有人能帮我解决这个问题吗?我稍微改变了你的形状: 事实:因为Ta和Tc是切线,所以OTaA和OTcC是垂直的,O是循环的中心 从上述事实中,我们可以发现并非每两对Ta和Tc都存在这样一个循环,但如果存在,OTa=OTc。所以你需要做的就是找到O。在找到O之后,你就有了一个循环的R和O(光线
我有两个连接段AB和BC(我知道coords)。如何计算第一个和最后一个绿点之间的弧。第一个和最后一个绿色点位于距离B点(黑色段)指定距离处我希望所有绿点坐标都在阵列中。有人能帮我解决这个问题吗?我稍微改变了你的形状: 事实:因为Ta和Tc是切线,所以OTaA和OTcC是垂直的,O是循环的中心
从上述事实中,我们可以发现并非每两对Ta和Tc都存在这样一个循环,但如果存在,OTa=OTc。所以你需要做的就是找到O。在找到O之后,你就有了一个循环的R和O(光线和中心),这样你就可以找到它表面的每个坐标。我不确定你最终的目标是什么,但在我看来,你基本上想把“角”B弄圆 果不其然,圆圈是圆的。你要的不是圆,而是圆上的点。 我觉得你最终会用直线把这些点连接起来,近似成一个圆。显然,5点就足以满足您所需的拐角“圆度” 如果这是真的,为了使角圆,你只需要近似一个圆,那么贝塞尔曲线对你来说也很有趣。 A通过第三个定位点插值,以圆形方式连接两个点。在你的情况下,B将是锚定点。这种曲线的一个缺点是它不是一个圆,看起来会有所不同,但仍然会产生一个圆形。 优点是: 许多语言都有内置函数来绘制这些曲线。 某些边缘情况处理得更好,例如,如果所有三个点都在一条线上,相同,等等。对于圆解决方案,您必须自己处理这些情况 如何开始从Ta到Tc绘制点 要获取圆弧上的插值点(给定圆弧的中心,第一个点和最后一个点),请使用slerp:
问题归结为给定半径r、点B和方向BC和BA,求圆K的中心 遵循以下步骤:
ψ=2*arcin(cot(φ/2))
s=r*cot(φ/2)
e_BC=(ex,ey)
,法线为n_BC=(ey,-ex)
,则弧M的末端为
(mx,my)=(bx,by)+s*(ex,ey)
(kx,ky)=(mx,my)+r*(nx,ny)
i-th点: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)*ψ)
第一个点和最后一个点是切点吗?@AliAmiri是的,它们是切点。我认为这可能是离题的,因为这是关于数学的,应该被问到。请准确描述你有什么。线段是如何参数化的,以及它们被约束为与圆相切。这只是一个常规的寻找拐角B的圆角吗?谢谢!它帮助了我;)@如果有帮助,请使用3688059别忘了投票并将其标记为答案:)呃,我不明白。还在想办法-也许有人能帮我。我有切点,圆心,还有半径。问题是ABC可以有不同的角度和坐标。如何开始从Ta到Tc绘制点?为了“分割”当前弧,我使用了类似的东西:
double angle=((degree*I/divider)*Math.PI/180.0)
它可以工作,但如何从特定角度(从Ta点)开始?是@null我想使角B变圆。不幸的是,我不能使用贝塞尔曲线,因为我需要直接对点等进行额外控制@user3688059“额外控制”到底是什么意思?您可以在这条曲线上分布5个点,就像您对圆弧所做的那样。实际上更容易,因为整个算法都是基于插值的。在我提供的链接中,插值参数命名为t,将t设置为0、0.2、0.4、0.6、0.8、1,以获得分布在曲线上的5个点。我还为我的答案添加了关于如何获得圆弧上的点的信息,如果你有中心点和第一点和最后一点,它被称为slerp。