首页 > 编程语言 > 详细

Unity论坛问答-如何裁剪一个多边形

时间:2020-07-10 14:47:35      阅读:68      评论:0      收藏:0      [点我收藏+]

原贴: Generate Polygons and Colliders Runtime in 2D Game

这是有一个2017年的帖子, 题主siddharth3322有了一个游戏的创意, 然后在论坛征询一些实现方面的建议, 于是和Fido789一问一答持续了几个月.

最后游戏上线了Google Play: Scale

游戏的玩法如下:

技术分享图片

很明显需要在游戏过程中不断地创建多边形, 题主使用了一个叫做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.

这个方法看起来很美好, 但是实际出现了问题:

原始多边形如下图

技术分享图片

裁剪后希望变成下面绿色部分

技术分享图片

但实际上变成下面红色部分

技术分享图片

Fido789回答道: 你找的这个算法只能针对凸多边形, 但你应用在了凹多边形上.
建议使用Clipper, 直接做一个多边形的A and not B操作就行.
技术分享图片


也许对这个应用来说可以有更轻量级的解法方法, 但是在性能不重要的情况下, 用Clipper不是很优雅么.

看到国内有人翻译了Clipper的中文文档, 其中对Clipper的介绍如下:

 

 Clipper库是目前计算机图形届广为使用的图形处理库,可以用于解决平面二维图形的多边形简化、布尔运算和偏置处理,
在CAD、加工路径与3D打印方面都有着比较重要的应用。

Unity论坛问答-如何裁剪一个多边形

原文:https://www.cnblogs.com/yusjoel/p/13278840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!