我正在尝试使用LatLng点在Java中解决这个问题。
我看了这篇帖子Circle line-segment collision detection algorithm?
我有一个找到2点之间距离的方法。指令如下:
将向量AC投影到AB上。 投影向量AD给出新点D。 如果D和C之间的距离小于(或等于)R,则有交点。
我不了解向量,有人能告诉我如何在这里找到点D吗?
提前致谢
我正在尝试使用LatLng点在Java中解决这个问题。
我看了这篇帖子Circle line-segment collision detection algorithm?
我有一个找到2点之间距离的方法。指令如下:
将向量AC投影到AB上。 投影向量AD给出新点D。 如果D和C之间的距离小于(或等于)R,则有交点。
我不了解向量,有人能告诉我如何在这里找到点D吗?
提前致谢
CF=((B.X-A.X)*(C.X-A.X)+(B.Y-A.Y)*(C.Y-A.Y))/((B.X-A.X)^2+(B.Y-A.Y)^2)
D.X=A.X+(B.X-A.X)*CF
D.Y=A.Y+(B.Y-A.Y)*CF
正如David Wallace所写,距离CD为
|CD| = |AC x AB|/|AB| (x = 叉积)
AD = cf * AB
中的无量纲参数(它与角CAB的余弦和AC长度成比例)。 - MBo让我们将A,B,C
和D
视为向量,并让
*
表示2个向量的标量积,即结果是操作数对应坐标的乘积之和,以及
|X|
表示向量x的长度,即坐标X
的平方值之和的平方根
首先,我们找到垂直于F =(B-A)
且包含C
的平面P
(对于2D空间,该平面是一条线):
该平面由以下方程描述(其中Z
是平面上的任意点):
F * Z = F * C
从A
到B
的线G
的方程是(t
为实数):
F * t + A
要相交P
和G
,您必须解决以下方程:
(F * t + A) * F = F * C
t * |F|^2 + A * F = F * C
t * |F|^2 = F * C - A * F
t = (F * (C - A)) / (|F|^2)
t = ((B - A) * (C - A)) / (|B-A|^2)
要得到 D
,将 t
插入到 G
中:
D = F * t + A
= (B-A) * t + A
ca1 = C1-A1
ca2 = C2-A2
ba1 = B1-A1
ba2 = B2-A2
t = (ba1 * ca1 + ba2 * ca2) / (ba1 * ba1 + ba2 * ba2)
D1 = ba1 * t + A1
D2 = ba2 * t + A2
其中C1
和C2
是C
的坐标,
A1
和A2
是A
的坐标,等等。
A
的坐标为(ax,ay)
,B,C,D
同理,则线段CD
的长度为|(cy-ay)(bx-ax)-(cx-ax)(by-ay)|/sqrt((bx-ax)^2+(by-ay)^2)
- 如果我有时间,我会写一个详细的答案和证明。或者您可以去math.stackexchange.com寻求此类问题的专家帮助。 - Dawood ibn Kareem