我在C#(Windows窗体)一个程序,它利用了一个PictureBox一些矩形。 他们可以在太(旋转)的角度得出。
我知道每个矩形起始点(左上角),它们的尺寸(宽度+高度)和它们的角度。 由于旋转,起点是不是necessarely的左上角,但是这并不此处所。 然后,当我点击PictureBox的,我需要检查其中的矩形(如果有的话)我点击了。
所以,我需要检查,如果一个点在一个长方形的一些方式,但我还需要考虑到每个矩形的旋转。 有谁知道的方式在C#这样做吗?
我在C#(Windows窗体)一个程序,它利用了一个PictureBox一些矩形。 他们可以在太(旋转)的角度得出。
我知道每个矩形起始点(左上角),它们的尺寸(宽度+高度)和它们的角度。 由于旋转,起点是不是necessarely的左上角,但是这并不此处所。 然后,当我点击PictureBox的,我需要检查其中的矩形(如果有的话)我点击了。
所以,我需要检查,如果一个点在一个长方形的一些方式,但我还需要考虑到每个矩形的旋转。 有谁知道的方式在C#这样做吗?
是否有可能将施加到矩形反向点相同的旋转?
例如,矩形A从它的起源(左上角)顺时针旋转45度,你会那么就绕同一产地逆时针45度B点,然后检查,看它是否落入矩形中的预先旋转
你可以保持一秒钟,未显示的图像您画矩形的副本,每个颜色独特。 当用户点击该PictureBox的,找到第二图像中的对应像素,其将识别被点击该矩形的颜色。
编辑:回头看后,我使用MonoGame和OP使用的是Windows窗体。 以下是MonoGame。
我一直在搞乱这一段时间,并已发现一对夫妇的答案,只是他们没有实际工作。 下面是不完全一样OP描述,如果不是因为OP然后其他人谷歌搜索,好像我是一个C#的功能。
这是一个让人头疼的数字了这一点。 很多典型的猜测。
bool PointIsInRotatedRectangle(Vector2 P, Rectangle rect, float rotation)
{
Matrix rotMat = Matrix.CreateRotationZ(-rotation);
Vector2 Localpoint = P - (rect.Location).ToVector2();
Localpoint = Vector2.Transform(Localpoint, rotMat);
Localpoint += (rect.Location).ToVector2();
if (rect.Contains(Localpoint)) { return true; }
return false;
}
在这里,它是在一个单一的代码行。 可能更快地使用。
bool PointIsInRotatedRectangle(Vector2 P, Rectangle rect, float rotation)
{
if (
rect.Contains(Vector2.Transform(P - (rect.Location).ToVector2(), Matrix.CreateRotationZ(-rotation)) + (rect.Location).ToVector2())
) { return true; }
return false;
}
我知道这已经回答了,但我必须做同样的事情前一阵子。 我创建了System.Windows.Point类,帮助做什么尼尔提出的扩展方法:
public static double GetAngle(this Point pt)
{
return Math.Atan2(pt.X, -pt.Y) * 180 / Math.PI;
}
public static Point SetAngle(this Point pt, double angle)
{
var rads = angle * (Math.PI / 180);
var dist = Math.Sqrt(pt.X * pt.X + pt.Y * pt.Y);
pt.X = Math.Sin(rads) * dist;
pt.Y = -(Math.Cos(rads) * dist);
return pt;
}
这将让我配点的角度在0附近上班,0。所以,如果你知道你正在测试你会被这个值的负偏移点(例如矩形的中心:pt.X - = 32 ; pt.Y - = 32),然后您将适用矩形的负旋转(如由Neil建议:-45 pt.SetAngle();)...
现在,如果点中64,64,你知道你打的矩形。 更具体地讲,我检查旋转的图像的像素,以确保我打了一个特定颜色的像素。
请问矩形被允许重叠? 如果是这样,你想在一个点所有的矩形,或只是一个在顶层?
如果你知道矩形的角的坐标,这是仅涉及几个点,并标产品的快速,优雅的解决方案: https://math.stackexchange.com/a/190373/178768