我正在尝试使用LatLng点
在java中解决这个问题我在这里查看这篇文章Circle line-segment collision detection algorithm?
我有一种方法可以找到2点之间的距离。指示说
将矢量AC投影到AB上。投影矢量AD给出新点D. 如果D和C之间的距离小于(或等于)R,则我们有一个交点。
我没有关于矢量的知识,有人能帮助我如何在这里找到D点吗?
提前致谢
答案 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, C
和D
视为向量,然后让
*
是标量乘积,即结果是操作数的相应坐标的乘积之和,并且
|X|
是向量x的长度,即坐标X
首先我们找到平面P
(对于2D空间,平面是一条线)与F = (B-A)
正交,包含C
:
此平面由以下等式描述(其中Z
是平面中的任意点):
F * Z = F * C
从G
到A
的{{1}}行的等式是(B
实数):
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
在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
和C1
是C2
的坐标,
C
和A1
是A2
的坐标,等等。