1. 程式人生 > >判斷一個點是否在旋轉過任意角度的矩形內

判斷一個點是否在旋轉過任意角度的矩形內

今天在做影象旋轉時遇到了一個問題。影象是轉好了,滑鼠點按下的座標也知道了,但是就不知道怎麼判斷在不在旋轉後的影象裡(當然用眼睛去看滑鼠點按下的的位置,肯定是知道在不在旋轉後的影象裡的。~_~)。後面在網上查了一下,也沒有一個現成可以用的演算法程式碼。沒辦法,只能結合網上查的資料自己寫了。現在已經寫好了,所以就寫出來供大家參考一下。

矩形沒經過旋轉時的左上角的座標為(LeftUpX,LeftUpY), 右下角的座標為(RightDownX,RightDownY),在矩形旋轉角度為O之後,求此時按下的滑鼠點(X,Y)在不在矩形內。

解決方案如下:(以下)

/*1、此時的矩形已經旋轉了O度,那麼第一步就是要還原滑鼠點*/

/*矩形的長寬*/

int w = RightDownX - LeftUpX;
int h = RightDownY - LeftUpY;

/*矩形中心點座標*/

Point center;
center.X = LeftUpX + w/2;
center.Y = LeftUpY+ h/2;

/*還原滑鼠點*/

int nTempX, nTempY;
nTempX = center.X + (
- center.X)*cos((-O)*(PI/180)) - (- center.Y) * sin((-O)*(PI/180));
nTempY = center.Y + (
- center.X)*sin((-O)*(PI/180)) + (

- center.Y) * cos((-O)*(PI/180));

/*2、判斷還原後的滑鼠點在不在沒旋轉的矩形內,如果還原後的滑鼠點在沒旋轉的矩形內,那麼滑鼠點(X,Y)同樣在旋轉O度之後的矩形內,否則不在。*/

if(nTempX> LeftUpX && nTempX< RightDownX&& nTempY> LeftUpY && nTempY< RightDownY)    

{

//滑鼠點(X,Y)在旋轉O度之後的矩形內

}

第一次寫部落格,不好的地方請大家多多諒解!!!