地图中如何判断点和线的位置关系

时间:2022-06-06 12:50:58
在地图坐标系统中,如何确定一个点和一条线的位置关系:
例如:
点A:104.6385,38.9510
线Line:104.6934,40.2433 - 106.0000,37.0000

如何确定A和Line关系呢???

说明一般有三中关系:逆时针方向,顺时针方向,在线上

我有叉积的计算方法,行不通啊.

有谁知道,怎么地图的关系算法,指点下.谢谢.

10 个解决方案

#1


哎 还别说 这个用叉乘还真的是有问题 地图实际上应该是一个曲面啊

如果没有别的方法的话使用地图的转换方法试试吧 把直线先按照屏幕坐标 得到直线方程 然后把点也转换到屏幕坐标 
在屏幕坐标下用叉乘是不是就可以了啊? 至少屏幕上的左右和地图上的左右应该是统一的吧。

#2


那是不是把经纬度坐标系统转换成XY直角坐标.在进行计算.

那有没有直接用经纬度来算的关系的算法呢。 

#3


还是不行,我把经纬度转换成直角XY坐标,在用叉积来算向量.
发现得的结果是错误的.
郁闷了.

#4


求得直线方程后,再求点到线的重心(求垂),从而确定点是否在线上。如果不在线上,根据重心点和点确定法线的方程的K,根据两个直线的K,确定点所在方向。

#5


这里有几个问题啊:
1.怎么通过经纬度求直线方程
2.点和线距离,是不是通过求三角形的高,获得.
3.中心点和法线的方程的K怎么求.

#6


这个。。。。
1、你的直线总有两个点吧,直线方程根据两点一线公式获得。具体见:http://zhidao.baidu.com/question/66874640.html?si=8
2、不是。是点到直线距离公式。具体见:http://iask.sina.com.cn/b/2707564.html?from=related
3、这个,还是看下1和2.

呵呵,另:有时间的话,可以看下高二的数学。

#7


只有在直线有方向的情况下,点和线才存在三种关系:逆时针方向,顺时针方向,在线上。所以准确的说法应该是点和矢量的位置关系! 而点和矢量的关系用叉积判断就足够了。

#8


/* 点结构 */ 
struct Point 

 double x; 
 double y; 
 Point (double a=0, double b=0) { x=a; y=b;} //constructor 
}; 


/****************************************************************************** 
r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积 
r>0:ep在矢量opsp的逆时针方向; 
r=0:opspep三点共线; 
r<0:ep在矢量opsp的顺时针方向 
*******************************************************************************/ 
double multiply(Point sp,Point ep,Point op) 

 return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y)); 

#9


我看到有人用直线方程式 ,根据一点的y值求直线上的x值来对比.
不知道准确不准确啊.
有谁知道不.

#10


楼上那样计算的话,是不是没有考虑直线的方向呢?那就不是矢量了吧。

#1


哎 还别说 这个用叉乘还真的是有问题 地图实际上应该是一个曲面啊

如果没有别的方法的话使用地图的转换方法试试吧 把直线先按照屏幕坐标 得到直线方程 然后把点也转换到屏幕坐标 
在屏幕坐标下用叉乘是不是就可以了啊? 至少屏幕上的左右和地图上的左右应该是统一的吧。

#2


那是不是把经纬度坐标系统转换成XY直角坐标.在进行计算.

那有没有直接用经纬度来算的关系的算法呢。 

#3


还是不行,我把经纬度转换成直角XY坐标,在用叉积来算向量.
发现得的结果是错误的.
郁闷了.

#4


求得直线方程后,再求点到线的重心(求垂),从而确定点是否在线上。如果不在线上,根据重心点和点确定法线的方程的K,根据两个直线的K,确定点所在方向。

#5


这里有几个问题啊:
1.怎么通过经纬度求直线方程
2.点和线距离,是不是通过求三角形的高,获得.
3.中心点和法线的方程的K怎么求.

#6


这个。。。。
1、你的直线总有两个点吧,直线方程根据两点一线公式获得。具体见:http://zhidao.baidu.com/question/66874640.html?si=8
2、不是。是点到直线距离公式。具体见:http://iask.sina.com.cn/b/2707564.html?from=related
3、这个,还是看下1和2.

呵呵,另:有时间的话,可以看下高二的数学。

#7


只有在直线有方向的情况下,点和线才存在三种关系:逆时针方向,顺时针方向,在线上。所以准确的说法应该是点和矢量的位置关系! 而点和矢量的关系用叉积判断就足够了。

#8


/* 点结构 */ 
struct Point 

 double x; 
 double y; 
 Point (double a=0, double b=0) { x=a; y=b;} //constructor 
}; 


/****************************************************************************** 
r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积 
r>0:ep在矢量opsp的逆时针方向; 
r=0:opspep三点共线; 
r<0:ep在矢量opsp的顺时针方向 
*******************************************************************************/ 
double multiply(Point sp,Point ep,Point op) 

 return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y)); 

#9


我看到有人用直线方程式 ,根据一点的y值求直线上的x值来对比.
不知道准确不准确啊.
有谁知道不.

#10


楼上那样计算的话,是不是没有考虑直线的方向呢?那就不是矢量了吧。