我有两个点 A 和 B(坐标为 ax, ay 和 bx, by)。 这两点位于给定圆 C 内(给定坐标 cx、cy 和半径 cr)。
如何找到T1和T2点? 点 T1 和 T2 必须位于圆 C 与假想圆 D1 和 D2 之间的切线上(两者都在点 A 和 B 上)。
示例值:
A (30, 30)
B (40, 20)
C (50, 50, 40)
正确的解决方案:
T1 (28.6061, 16.202)
T2 (87.3939, 35.798)
我从中间点M开始:
mx, my = (ax+bx)/2, (ay+by)/2
与AB线垂直的线:
m1x, m1y = mx + (ay-my), my - (ax-mx)
m2x, m2y = mx + (by-my), my - (bx-mx)
如何获得圆D1和D2?
你已经快完成了,但是这里的代数很复杂 - 所以我只会给你一个想法,但不是完整的答案。我会考虑一个以
D1
为中心的圆。
注意,
distance(A,D1) = distance(B,D1) = distance(D1,T1)
。您可以找到垂直于线 N
的 unit向量
AB
,并用中点向量 D1
和向量 M
乘以标量参数 N
来表示向量 t
:
D1 = M + t*N
已知
distance(C,T1)
等于 cr
,并且也等于总和:
distance(C,T1) = distance(C,D1) + distance(D1,T1) = cr
这可以重写为:
distance(C,M + t*N) + distance(A,M + t*N) = cr
这是一个带有单个未知变量
t
的方程,可以用代数方法求解(这并不容易) - 它的解会给你两个点D1
和D2
。