2009-08-31 72 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的,以延长命中测试,以位图图像的支持,以及。