找到给定圆的两个切点和圆内的两个点,Lua

问题描述 投票:0回答:1

我有两个点 A 和 B(坐标为 ax, ay 和 bx, by)。 这两点位于给定圆 C 内(给定坐标 cx、cy 和半径 cr)。

如何找到T1和T2点? 点 T1 和 T2 必须位于圆 C 与假想圆 D1 和 D2 之间的切线上(两者都在点 A 和 B 上)。

tangent points

示例值:

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)

points D1 and D2

如何获得圆D1和D2?

math vector lua trigonometry
1个回答
0
投票

你已经快完成了,但是这里的代数很复杂 - 所以我只会给你一个想法,但不是完整的答案。我会考虑一个以

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

© www.soinside.com 2019 - 2024. All rights reserved.