说实话,这更像是一个普遍的问题,只是想知道是否有人对这个问题进行了任何研究。
基本上我正在为我自己创建的小型游戏引擎添加事件支持。我希望像素完美悬停在2d对象事件支持上,我只想到最好的方法。实际上,对于我个人而言,仅仅将我的对象绘制到透明画布上并检查鼠标x y是否在透明像素上是否会更快,因为我不必创建一组定义对象外部的点。这也可以让我在我的物体上留下洞,它仍然可以正确地知道我是否徘徊过。
我想知道的是使用此处显示的方法:How can I determine whether a 2D Point is within a Polygon?
我的方法对那里显示的方法要慢多少?
我目前还在学习,所以我不容易实现所有这些,只是自己测试一下,因为我可能需要很长时间才能正常工作并测试速度。
旁注:我仍然会有一个基本的边界框来保存每次重绘和测试。
答案 0 :(得分:0)
检查某个点是否在多边形中,99.999999%的时间会大大加快。
要慢一点,多边形需要非常复杂。
要执行另一种方法,您需要使用getImageData
,并且在画布上获取图像数据非常慢。
多边形算法中的点执行正确地考虑了洞。确保你有一个服从non-zero winding number rule,因为这是画布使用的(而不是奇怪的规则),你可能想要与画布中构建的路径兼容(现在或以后)。