我正在尝试编写一个java方法,如果一个点(x,y)在一个线段上,则返回一个布尔值true,否则返回false。
我试过了:
public static boolean OnDistance(MyLocation a, MyLocation b, MyLocation queryPoint) {
double value = java.lang.Math.signum((a.mLongitude - b.mLongitude) * (queryPoint.mLatitude - a.mLatitude)
- (b.mLatitude - a.mLatitude) * (queryPoint.mLongitude - a.mLongitude));
double compare = 1;
if (value == compare) {
return true;
}
return false;
}
但它不起作用。 非常感谢帮助和建议。谢谢!
答案 0 :(得分:2)
我不是JAVA编码器所以我坚持数学背后......对于初学者来说假设你在飞机上(不是球面)
我会使用Vector数学,所以让我们:
a,b
- 是行终点q
- 查询点c=q-a
- 查询行方向向量d=b-a
- 行方向向量使用点积进行参数提取
t=dot(c,d)/(|c|*|d|)
t
是行参数<0,1>
,如果超出范围q
不在行内|c|=sqrt(c.x*c.x+c.y*c.y)
矢量大小dot(c,d)=c.x*d.x+c.y*d.y
标量矢量mutiply 现在计算在线的对应点
e=a+(t*d)
e
是q
ab
的最近点
计算q
和ab
的垂直距离
l=|q-e|;
(l>treshold)
,则q
不在行ab
,否则就行ab
l
sqrt-ed阈值常数可由2而不是速度提供如果将所有这些添加到单个等式中
l=|q-a-(dot(q-a,b-a)/|q-a|)|;
l=|c-(dot(c,d)/|c|)|;
return (l<=treshold)
<强> [注释] 强>
e