一、不帶方向

分享給有需要的人,代碼品質勿噴
//點與線的位置關系:左上、點線上上、右下
//p:待确定位置的點
//SP:線上某點
//EP:線上某點,與SP不重合
//傳回值:LeftTop、PL、RightBottom
string xjSpatialLocationRelationPointLine(LPoint p, LPoint SP, LPoint EP)
{
string xjLocation="";
double xp=p.x, yp=p.y;
double sx=SP.x, sy=SP.y;
double ex=EP.x, ey=EP.y;
double deltaY=ey-sy;
double deltaX=ex-sx;
double yl = deltaY * (xp-sx) / deltaX + sy;
//豎線
if(deltaX==0)
{
if(xp<sx)
xjLocation="Left";
else if(xp==sx)
xjLocation="PL";
else
xjLocation="Right";
}
else
{
if(yp>yl)
xjLocation="Top";
else if(yp==yl)
xjLocation="PL";
else
xjLocation="Bottom";
}
return xjLocation;
}
二、帶方向 左右位置
2.1 ΔX=0
2.2 ΔX>0
2.3 ΔX<0
分享給有需要的人,代碼品質勿噴
//點與向量的位置關系:左、點線上上、右
//p:待确定位置的點
//SP:線上某點
//EP:線上某點,與SP不重合
//傳回值:Left、PL、Right
string xjSpatialLocationRelationPointLineLR(LPoint p, LPoint SP, LPoint EP)
{
string xjLocation="PL";
double xp=p.x, yp=p.y;
double sx=SP.x, sy=SP.y;
double ex=EP.x, ey=EP.y;
double deltaY=ey-sy;
double deltaX=ex-sx;
double yl = deltaY * (xp-sx) / deltaX + sy;
if(deltaX==0)
{
if(deltaY>0)
{
if(xp<sx)
xjLocation="Left";
else if(xp>sx)
xjLocation="Right";
}
else if(deltaY<0)
{
if(xp<sx)
xjLocation="Right";
else if(xp>sx)
xjLocation="Left";
}
}
else if(deltaX>0)
{
if(yp>yl)
xjLocation="Left";
else if(yp<yl)
xjLocation="Right";
}
else
{
if(yp>yl)
xjLocation="Right";
else if(yp<yl)
xjLocation="Left";
}
return xjLocation;
}