用矢量投影找点

时间:2014-05-21 02:23:47

标签: java algorithm math

pic

我正在尝试使用LatLng点

在java中解决这个问题

我在这里查看这篇文章Circle line-segment collision detection algorithm?

我有一种方法可以找到2点之间的距离。指示说

将矢量AC投影到AB上。投影矢量AD给出新点D. 如果D和C之间的距离小于(或等于)R,则我们有一个交点。

我没有关于矢量的知识,有人能帮助我如何在这里找到D点吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果你真的需要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 | = | AC x AB | / | AB | (x =交叉产品)

答案 1 :(得分:0)

让我们将A, B, CD视为向量,然后让

对于2个向量,

*是标量乘积,即结果是操作数的相应坐标的乘积之和,并且

|X|是向量x的长度,即坐标X

的平方值之和的平方根

首先我们找到平面P(对于2D空间,平面是一条线)与F = (B-A)正交,包含C

此平面由以下等式描述(其中Z是平面中的任意点):

F * Z = F * C

GA的{​​{1}}行的等式是(B实数):

t

要与F * t + AP相交,您必须解决以下等式:

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

在2D空间中,你得到

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 C1C2的坐标,  CA1A2的坐标,等等。