已知线段各点经纬度,判断线段相交函数
来源:互联网 发布:微博短文情感数据集 编辑:程序博客网 时间:2024/04/28 15:53
判断线段相交,往往都是以平面坐标系为基础来判断,如果坐标系是地球坐标系,知道的是经纬度应该如何判断呢?本文主要关注的就是此问题。
假设:线段各点之间距离不是很大,可认为都在同一平面上。
如果线段长度很长,无法满足假设的情况,则此算法未必适用。
提供功能:
* 函数名称: GetXY
* 功能描述: 获得点A相对于点B的平面坐标系
* 函数名称: CrossFuntion
* 功能描述: 求两矢量的叉积
*类名称:TLine
*功能:判断两线段是否相交
struct TSectorPoint
{
double dCellLon;
double dCellLat;
};
struct TXYPoint
{
double X;
double Y;
};
//线段类
class TLine
{
public:
TLine(const TSectorPoint StartPoint,const TSectorPoint EndPoint);
bool IsLineCross(TLine line);
private:
TSectorPoint P1;
TSectorPoint P2;
};
/**********************************************************************
* 函数名称: GetXY
* 功能描述: 获得点A相对于点B的平面坐标系
* 输入参数:
* 输出参数:
* 返 回 值: 无
* 其它说明: 无
* 修改日期 版本号 修改人:philbert 修改内容
***********************************************************************/
void GetXY(TSectorPoint pointA,TSectorPoint pointB,TXYPoint &pointAB)
{
double disAB=CalcDistance(pointA.dCellLon,pointA.dCellLat,pointB.dCellLon,pointB.dCellLat);
double ABAngel=CalcAngleByLonLat(pointB.dCellLon,pointB.dCellLat,pointA.dCellLon,pointA.dCellLat);
pointAB.X=disAB*sin(ABAngel*PI/HALF_CIRCLE_ANGLE);
pointAB.Y=disAB*cos(ABAngel*PI/HALF_CIRCLE_ANGLE);
}
/**********************************************************************
* 函数名称: CrossFuntion
* 功能描述: 求两矢量的叉积
* 输入参数:
* 输出参数:
* 返 回 值: 无
* 其它说明: 无
* 修改日期 版本号 修改人:philbert 修改内容
***********************************************************************/
double CrossFuntion(TXYPoint pointA,TXYPoint pointB)
{
return(pointA.X*pointB.Y-pointB.X*pointA.Y);
}
TLine::TLine(TSectorPoint StartPoint,TSectorPoint EndPoint)
{
P1=StartPoint;
P2=EndPoint;
}
bool TLine::IsLineCross(TLine line)
{
//以line的P2为坐标原点的平面坐标系坐标
TXYPoint P1Q2;
GetXY(P1,line.P2,P1Q2);
TXYPoint Q1Q2;
GetXY(line.P1,line.P2,Q1Q2);
TXYPoint P2Q2;
GetXY(P2,line.P2,P2Q2);
//以P1为坐标原点的平面坐标系坐标
TXYPoint Q1P1;
GetXY(line.P1,P1,Q1P1);
TXYPoint P2P1;
GetXY(P2,P1,P2P1);
TXYPoint Q2P1;
GetXY(line.P2,P1,Q2P1);
if(CrossFuntion(P1Q2,Q1Q2)*CrossFuntion(Q1Q2,P2Q2)>0
&&(CrossFuntion(Q1P1,P2P1)*CrossFuntion(P2P1,Q2P1)>0))
{
return true;
}
return false;
}
- 已知线段各点经纬度,判断线段相交函数
- 判断线段相交
- 判断线段相交程序
- 判断线段相交
- 怎样判断线段相交
- POJ1269(判断线段相交)
- 判断线段相交
- 判断线段相交
- 判断线段相交
- 判断线段相交
- 判断两个线段相交
- 判断线段相交思想
- 判断线段相交模板
- 线段相交的判断
- 判断线段是否相交
- poj3565Ants【线段相交判断】
- 判断线段相交
- 判断线段相交
- 史上最全的C位域总结(转)
- 管理者的三层境界- 管事、管人、管组织
- 基于Servlet3.0规范的一个HelloWorld
- linux samba服务
- UIMA架构简介
- 已知线段各点经纬度,判断线段相交函数
- #include和#include" "搜索路径的区别。
- jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- 对系统进程的一些操作!
- 堆 栈 字符数组 字符指针的区别
- Sql语句批量插入(转载)
- 市场部
- web.config如何禁止文件夹目录浏览
- ASP.Net筆記一:ReportViewer出現 "RSClientController is undefined"