Java 用矢量投影求点
我正试图用java和LatLng point解决这个问题 我在看这篇文章 我有一个方法来找出两点之间的距离。说明书上说 将向量AC投影到AB上。投影向量AD给出新的点D。 如果D和C之间的距离小于(或等于)R,我们就有一个交点 我不知道向量,有人能帮我找到D点吗Java 用矢量投影求点,java,algorithm,math,Java,Algorithm,Math,我正试图用java和LatLng point解决这个问题 我在看这篇文章 我有一个方法来找出两点之间的距离。说明书上说 将向量AC投影到AB上。投影向量AD给出新的点D。 如果D和C之间的距离小于(或等于)R,我们就有一个交点 我不知道向量,有人能帮我找到D点吗 如果您确实需要D点坐标,请提前感谢——让我们来看看矢量 AB=(B.X-A.X,B.Y-A.Y) AC=(C.X-A.X,C.Y-A.Y) 那么C到AB的最简单(我相信)投影形式是: AD=AB*(AB.dot.AC)/(AB.dot.
如果您确实需要D点坐标,请提前感谢——让我们来看看矢量
AB=(B.X-A.X,B.Y-A.Y)
AC=(C.X-A.X,C.Y-A.Y)
那么C到AB的最简单(我相信)投影形式是: AD=AB*(AB.dot.AC)/(AB.dot.AB)
在坐标中:
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|=|ACxAB|/|AB|(x=叉积)让我们把
A、B、C
和D
看作向量,让
*
对于2个向量,应为标量积,即结果为操作数对应坐标的乘积之和,以及
|X |
是向量X的长度,即X
首先,我们找到平面p
(对于二维空间,平面是一条线)或与F=(B-a)
,它包含C
:
该平面由以下等式描述(其中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,那里有这方面的专家。谢谢你的快速回复,同时,我也会尝试实现它。问题仍然存在。我仍然在寻找找到点DD=a+AC*cos(角度)的方法。我想角度是30度=>D=A+AC/2我想你只是想知道CD的长度是大于还是小于R。为什么你需要知道D的坐标?谢谢,我会尝试验证,但可能需要一些时间来测试,因此,答案投票将是慢的CF变量是什么?CF是向量方程中的无量纲参数AD=CF*AB
(它与角CAB的余弦和AC长度成正比)