检查点是否在旋转的矩形中(C#)

Ove*_*Ove 16 c# math graphics geometry

我有一个C#程序(Windows窗体),它在一个图片框上绘制一些矩形.它们也可以以一定角度绘制(旋转).

我知道每个矩形的起点(左上角),它们的大小(宽度+高度)和它们的角度.由于旋转,起点不一定是左上角,但这并不重要.然后当我点击图片框时,我需要检查我点击了哪个矩形(如果有的话).

所以我需要一些检查点是否在矩形中的方法,但我还需要考虑每个矩形的旋转.有人知道在C#中这样做的方法吗?

Nei*_*l N 22

是否可以将应用于矩形的相同旋转应用于反向点?

例如,矩形A从其原点(左上角)顺时针旋转45度,然后您将顺时针旋转点B绕同一原点45度逆时针旋转,然后检查它是否属于矩形A预旋转


out*_*tis 5

您可以保留第二个未显示的图像,其中绘制矩形的副本,每个矩形都是唯一着色的.当用户点击图片框时,找到第二张图片中相应像素的颜色,这将识别被点击的矩形.

  • 它会使用一大块内存,但不必那么多.可能会有少于256个矩形; 800x600灰度图像将占用468k,这完全符合现代计算机的容量和程序内存使用情况.怎么会慢?根据您存储矩形列表的方式,查找一个像素O(1)或O(log(n))以将像素映射到矩形将是O(1).比检查每个矩形更快.这是一个标准的时空权衡. (3认同)
  • 那会浪费内存,而且速度会很慢。 (2认同)