2009-08-31 55 views
2

我在Silverlight中有一個Polygon(棋盤遊戲的Hex),類似於;Silverlight多邊形 - 單擊內?

public class GridHex : IGridShape 
{ 
    ..... 
    public IList<Point> Points { get; protected set; } 
    public bool Intersects(Point point) { ... } 
} 

我想能夠說

if(myHex.Intersects(clickedPoint)) { ... } 

但是我不確定到相交方法中使用的算法 - 目前我使用的是內部的「邊界框」內的每個六角形檢測一個點是否在它內部,但是必須有一個算法來解決這個問題?我知道每個Hexagon的6個點的座標。

我想我可以創建一個Silverlight多邊形並進行某種打擊測試?當然,這將是相當大的內存密集(我會迭代大量的Hexes來查看鼠標點擊的是哪個Hex),所以使用數學公式來計算點是否在一個十六進制....

回答

2

This page很好地解釋了一個算法,找出一個點是否在一個多邊形內。

1

您是否使用FindElementsInHostCoordinates查看了本地支持?我預計這會更快,因爲它可能使用非託管代碼。

這裏有一個sample與矢量圖形,在Silverlight 2支持

作品和這裏的an updated sample它利用WriteableBitmap的,以延長命中測試,以位圖圖像的支持,以及。