我想写一个应用程序来绘制包含矩形,线条和圆形的示意图。现在我想添加另一个功能来将矩形拖到不同的位置。我面临的问题是检测我是否在矩形内点击过。我知道有一个功能,如Rectangle.Contains(Point)
。要使用这种方法,我需要使用for循环来检查每个矩形。如果我有大量的矩形存在,那么使用这种方法并不明智。有没有其他的方式来完成这项任务。如何检测我的鼠标位置是否在矩形c#内?
回答
我会将显示区域划分为象限。 然后将矩形放置到左上角,右上角,左下角,右下角的网格中。 放置它们意味着,为每个象限创建一个列表,并在其中放置矩形。
点击该点后,确定它属于哪个区域并仅在那些矩形中搜索。这种方法将您的线性搜索减少了4倍。
请记住,您还需要注意重叠的地方可以属于许多矩形。这里矩形的z顺序很重要。因此,虽然列表是为象限维护的,但它应该按z顺序作为关键字进行排序。
希望这会有所帮助。
你需要计算机图形学教科书,经常讨论这个和类似的问题。
如果记忆为我服务,请确保该点位于矩形的顶部边缘之下,底部边缘之上,左边缘的左边缘和左边缘的右边之上。
关于测试循环中的一串矩形。考虑让每个矩形都有一个圆圈,一个边界圆。首先测试该点是否远离圆的起点,而不是圆的半径。如果是这样,则不需要测试矩形,它是一个小姐。好的,那是一个非常理论上的答案。实际上,计算从点到原点的距离可能是一个非常昂贵的计算,它涉及平方根,所以在矩形检查中进行四点比较可能会更快。再次,如果内存服务器我,我们并不在乎距离原点的距离只有大于半径。所以只需部分执行距离计算,省略最终的平方根,然后与半径的平方进行比较。当然,您仍然需要进行实验和配置文件,以确保此边界圆检查比矩形检查和中的常规点更快,您需要确保您有足够的失误来抵消最终会做的点击边界圆和矩形都检查。
可能是这样的吗?
public bool isRectangelContainPoint(RectangleF rec, PointF pt)
{
if (pt.X >= rec.Left && pt.X <= rec.Right && pt.Y <= rec.Bottom && pt.Y >= rec.Top)
return true;
else
return false;
}
您需要使用空间索引快速查找鼠标所在的矩形。我建议一个R树,这里的理论框架部分:
http://en.wikipedia.org/wiki/R-tree
和C#,执行:
http://sourceforge.net/projects/cspatialindexrt/
创建rtee,添加矩形,然后调用rtree.nearest方法用鼠标坐标来知道包含鼠标光标的矩形。您可以使用距离参数进行游戏。
希望它能帮助,
鞍本Panglose。
- 1. 检测鼠标位置是否在一组位置规则内?
- 2. 在AS3中,如何检查鼠标是否在矩形内?
- 3. C#LabelLink LinkArea检测鼠标位置
- 4. 检测鼠标在iframe上的位置
- 5. 如何检测鼠标是否为真?
- 6. 将矩形移动到与矩形相同的鼠标位置?
- 7. 如何检测并突出显示鼠标悬停的矩形
- 8. 如何让我的组件检测鼠标位置?
- 9. 在C++中检测dlib矩形坐标
- 10. 如何检测鼠标是否在WPF/C#中的窗口范围内移动?
- 11. HTML5中旋转矩形内的鼠标位置Canvas
- 12. 测试点是否在矩形内
- 13. 如何在循环中检测鼠标在datagrid上的位置?
- 14. XNA - 检查Vector2是否在矩形内
- 15. C++ sdl基于鼠标位置绘制动态矩形
- 16. 如何检测鼠标点击在自定义形状的光标在c + +图像上的位置
- 17. 计算2点之间的矩形并检测位置是否在
- 18. 检测矩形是否完全在圈内d3js
- 19. 检测鼠标点击位置
- 20. 检查位置是否在矩形外围内的有效方法?
- 21. 检测鼠标是否在5秒内移动的功能
- 22. Matplotlib:确定鼠标在轴文本矩形中的位置
- 23. 如何在java中检测鼠标位置
- 24. 如何在鼠标上显示矩形?
- 25. 如何检测鼠标是否在picturebox中的图像?
- 26. 如何检查鼠标是否在freeglut的三角形区域内被点击?
- 27. 如何检查标准字符串内的位置是否存在? (C++)
- 28. 如何在鼠标单击时在SVG文档中找到矩形的位置?
- 29. 在Elm中,我如何检测相对于html元素的鼠标位置?
- 30. 寻找我的鼠标在Java中的矩形内