一、不帶方向
分享給有需要的人,代碼質量勿噴
//點與線的位置關係:左上、點在線上、右下
//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;
}