C++:點 線 位置關係

一、不帶方向

         

分享給有需要的人,代碼質量勿噴

//點與線的位置關係:左上、點在線上、右下
//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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章