您的位置:首页 > 其它

判断一个点是否在旋转过任意角度的矩形内

2016-01-07 15:57 369 查看
今天在做图像旋转时遇到了一个问题。图像是转好了,鼠标点按下的坐标也知道了,但是就不知道怎么判断在不在旋转后的图像里(当然用眼睛去看鼠标点按下的的位置,肯定是知道在不在旋转后的图像里的。~_~)。后面在网上查了一下,也没有一个现成可以用的算法代码。没办法,只能结合网上查的资料自己写了。现在已经写好了,所以就写出来供大家参考一下。

矩形没经过旋转时的左上角的坐标为(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 + (X - center.X)*cos((-O)*(PI/180)) - (Y - center.Y) *
sin((-O)*(PI/180));

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

/*2、判断还原后的鼠标点在不在没旋转的矩形内,如果还原后的鼠标点在没旋转的矩形内,那么鼠标点(X,Y)同样在旋转O度之后的矩形内,否则不在。*/

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

{

//鼠标点(X,Y)在旋转O度之后的矩形内

}

第一次写博客,不好的地方请大家多多谅解!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: