2

希望任何人都可以帮助解决这个问题,即使我的英语很差。我在画一个正方形,上面有一个图形,它有一个变换,工作得很好,但是应该允许用户点击那个正方形内的一个点,我需要知道这个点,就好像这个正方形是没有绘制的一样转换。我需要用其他词来知道用户点击了哪个方块。希望有些人明白我的意思。谢谢!

也许这有助于理解问题

Matrix m = new Matrix();
m.RotateAt(rot, new PointF(imgrect.Left + imgrect.Width / 2, imgrect.Top + imgrect.Height / 2));
Graphics.Transform = m;
Graphics.DrawImage(img, imgrect);
4

2 回答 2

0

您需要将鼠标坐标带入矩形的对象空间

bool RotatedRectContains(Rectangle rect, Matrix transform, Point mousePos)
{
  Point[] pts = { mousePos };
  Matrix inverseMat = transform.Clone();
  inverseMat.Inverse();
  inverseMat.TransformPoints(pts);

  return rect.Contains(pts[0]);
}
于 2013-06-25T11:48:54.657 回答
0

ups ...我自己找到了解决方案,如果我们说用户点击了一个点 p 转换将是: Point[] pts = new Point[1]; pts[0] = p; m.Invert(); m.VectorTransformPoints(pts); pts[0].X += (int)m.OffsetX; pts[0].Y += (int)m.OffsetY;

现在 pts[0] 可以用来查找被点击的方块,

于 2013-06-25T12:22:25.963 回答