我想寫一個應用程序來繪製包含矩形,線條和圓形的示意圖。現在我想添加另一個功能來將矩形拖到不同的位置。我面臨的問題是檢測我是否在矩形內點擊過。我知道有一個功能,如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中的矩形內