www.gusucode.com > VC++开源的SHP格式GIS地图查看软件源程序源码程序 > VC++开源的SHP格式GIS地图查看软件源程序源码程序\code\MapPoint.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "global.h" #include "MapPoint.h" IMPLEMENT_DYNAMIC(CMapPoint,CObject) CMapPoint::CMapPoint() { m_bStatus = 0; m_uiIndex = 0; m_dbX = 0.0; m_dbY = 0.0; } CMapPoint::CMapPoint(CMapPoint& pt) { m_bStatus = pt.m_bStatus; m_uiIndex = pt.m_uiIndex; m_dbX = pt.m_dbX; m_dbY = pt.m_dbY ; } CMapPoint::~CMapPoint() { } /***************************************************************************** 描述: 两点距离 参数: 点对象 返回值 距离 ******************************************************************************/ double CMapPoint::Distance(CMapPoint& pt ) { return(sqrt((pt.GetX()-m_dbX)*(pt.GetX()-m_dbX)+(pt.GetY()-m_dbY)*(pt.GetY()-m_dbY))); } bool CMapPoint::IsEqual(CMapPoint& pt ) { if ( fabs(m_dbX-pt.GetX()) < EP && fabs(m_dbY-pt.GetY()) < EP ) return TRUE; else return FALSE; } /***************************************************************************** 描述: 判断指定点是否在线段上 参数: p1 --- 线段起点 p2 --- 线段终点 返回值 在线段上 返回TRUE 否则返回FALSE ******************************************************************************/ bool CMapPoint::IsPointInLine(CMapPoint& p1 , CMapPoint& p2 ) { double dblMulti; // 判断点是否在外接矩形范围内 if ( m_dbX < min(p1.GetX() ,p2.GetX()) || m_dbX > max(p1.GetX() ,p2.GetX()) || m_dbY < min(p1.GetY() ,p2.GetY()) || m_dbY > max(p1.GetY() ,p2.GetY())) return FALSE; //计算叉积 dblMulti = (double)((m_dbX -p1.GetX())*(p2.GetY() -p1.GetY())-(p2.GetX()-p1.GetX())*(m_dbY -p1.GetY())); if ( dblMulti == 0 ) return TRUE; else return FALSE; }