原贴: Generate Polygons and Colliders Runtime in 2D Game
这是有一个2017年的帖子, 题主siddharth3322有了一个游戏的创意, 而后在论坛征询一些实现方面的建议, 因而和Fido789一问一答持续了几个月. git
最后游戏上线了Google Play: Scale
游戏的玩法以下:github
很明显须要在游戏过程当中不断地建立多边形, 题主使用了一个叫作PolyMesh的代码来生成多边形.
而这个组件须要按顺序提供各个顶点.
因而有了一个问题, 如何按照顺序(如顺时针)排序各个顶点呢?
题主参考了StackOverflow上的一个回答: Sort points in clockwise order?
方法是首先找到多边形的中心点, 而后在排序中把比较方法设为:算法
det = (a.x - center.x) * (b.y - center.y) - (b.x - center.x) * (a.y - center.y)
注释中说这是计算向量Vca与向量Vcb的叉乘, 根据正负来判断顺序.
也能够整理一下式子, 认为这是在比较斜率k.
这个方法看起来很美好, 可是实际出现了问题:app
原始多边形以下图ide
裁剪后但愿变成下面绿色部分性能
但实际上变成下面红色部分google
Fido789回答道: 你找的这个算法只能针对凸多边形, 但你应用在了凹多边形上.
建议使用Clipper, 直接作一个多边形的A and not B操做就行.
也许对这个应用来讲能够有更轻量级的解法方法, 可是在性能不重要的状况下, 用Clipper不是很优雅么.
看到国内有人翻译了Clipper的中文文档, 其中对Clipper的介绍以下:.net
Clipper库是目前计算机图形届广为使用的图形处理库,能够用于解决平面二维图形的多边形简化、布尔运算和偏置处理,
在CAD、加工路径与3D打印方面都有着比较重要的应用。翻译