用于反转矩形内多边形的算法?

时间:2015-08-20 02:11:49

标签: algorithm math 2d polygon light

我正试图制作一个"手电筒"在我的游戏中,玩家只能看到他视线内的地方。

我通过光线投射到游戏世界中的每个顶点完成了大部分效果,并添加了额外的光线投射+ -0.0001 rad,然后按顺时针顺序连接它们以形成this shape in red。我试图在矩形水平的边界内得到这个多边形的倒数,类似于"反向选择" Photoshop (example)

等程序中的选项

1 个答案:

答案 0 :(得分:0)

为矩形和多边形构造一个集合并计算symmetric difference矩形多边形中的顶点,但两者中都没有),例如:< / p>

rectangle = [(0, 0), (13, 0), (13, 10), (0, 10)]
polygon = [(0, 5), (0, 10), (2, 6), (8, 6), (11, 0), (13, 0), (13, 10)]
# "^" is the symmetric difference operator in python
set(rectangle) ^ (set(polygon)) 

返回:

set([(11, 0), (2, 6), (0, 5), (0, 0), (8, 6)])

对应于下图中的绿色区域(顶点A,I,E,H,J):

enter image description here

请注意,它将获得红色多边形的补充,不包括原始图像中与墙壁的交点:

enter image description here

如果您希望结果是下一个图形的黄色多边形:

enter image description here

然后,您必须使用补充多边形为舞台中的每个墙/块执行矩形 - 多边形交集,使用类似于以下问题中描述的方法:

Method to detect intersection between a rectangle and a polygon?