我需要一种可以在一条线和一条弧之间转角的算法。我的起始信息是P0起点,P角点,P2终点,P和P2之间弧的R2半径和圆角的R半径(在第二张图上)。
输出或想要的点是圆截面C0和C2以及圆弧圆的中心点-O
答案 0 :(得分:0)
没有足够的规格来选择独特的弧线。您需要弄清楚您想要的端点。然后求解与这两个点相切的椭圆。有关方程,请参阅Wikipedia/ellipse。我推荐一个数学包(例如SciKit)为你解决。
答案 1 :(得分:0)
在我的草图中BF是给定段的一部分(F尚未知),C是给定弧的中心,B是粗略共轭点。 c
是线,与BF平行,|GF|=|GH| = r
- 小弧半径。
为了实现平滑共轭,F点的小弧切线应与BF方向共线,因此GF垂直于BF,H点的两个弧的切线应重合 - 因此半径矢量CH和GH位于同一行。
设BF段的单位方向矢量为ud=(dx,dy)
,因此单位法线为un=(-dy, dx)
。 (BF的另一侧的弧线的法线否定)
小弧G的中心有坐标(其中t是未知参数 - BF的长度)
G = B + ud * t + un * r
和距离GC是弧半径的差异,所以
|G - C| = |R - r|
or in coordinates:
(B.x + dx * t - dy * r - C.x)^2 + (B.y + dy * t + dx * r - C.y)^2 = (R - r)^2
打开括号,求解未知t的二次方程。如果存在解,请选择右根,您将获得共轭弧G的中心坐标及其末端
快速检查1: 线Y = 5,大弧,R = 5,我们想要小弧,r = 2
B=(5,5)
ud=(-1,0)
un=(0,-1)
(5-t)^2 + (5-2-5)^2 = (5-2)^2
solution gives
t = 5 +/- Sqrt(5), the second root is valid
E = (5 - (5 - Sqrt(5)), 3) = (2.23, 3)
产生的平滑弧是c-f
快速检查2: 线Y = 5,大弧,R = 5,我们想要小弧,r = 2
B=(5,5)
big arc center (H here) = (1,2)
ud=(-1,0)
un=(0,-1)
(4-t)^2 + (5-2-2)^2 = (5-2)^2
solution gives
t = 4 +/- Sqrt(8), the second root is valid
E = (5 - (4 - Sqrt(8)), 3) = (3.83, 3)
产生的平滑弧是F-G
(在两种情况下,较大的根对应于与大弧的互补部分的共轭)