Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用矢量投影求点_Java_Algorithm_Math - Fatal编程技术网

Java 用矢量投影求点

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.

我正试图用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.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长度成正比)