本文思路:在凸多边形的基础上将凹多边形用向量延长线法分割成多个凸多边形,然后按照凸多边形的算法计算。凸多边形比较简单,就不介绍记录了。
几个凹多边形算法的思路:
http://blog.csdn.net/sun_shine_/article/details/18799739 //任意多边形面积计算
http://www.cnblogs.com/wantnon/p/6384771.html //直线切割凹多边形(不带洞?)
http://blog.csdn.net/heyuchang666/article/details/51382757 //向量法和旋转法切割凹多边形
限制:
1.顶点数组必须是有序(顺时针或者逆时针)。
2.不支持带洞的。
3.需要将Z轴值置0.
思路流程:
1.顶点有序化。(此文暂时不记录)
2.顶点数组转换成对应的方向向量数组。
3.依次利用叉乘查找到第一个凹多边形的凹点。
4
.从这个点开始往后找到这个凹点的向量延长先在之后的向量上的第一个交点。(注意顺序,而不是从数组0开始)
5.以这个交点为界限把凹多边形分为两个多边形。
6.递归这个切分算法,直至不再有凹多边形出现为止。
7.得到的多个多边形都是属于凸多边形,利用凸多边形算法计算。
static TArray<TArray<FVector>> t_polygonDividedArr;
/*从多边形的有序的点数组获取顶点和三角面数据信息(凹凸多边形)
参数1: 顶点数组
参数2: 是否是逆时针
*/
static void GetPolygonDataFromOrderVertexs(TArray<FVector> _points,bool _antiClockwise=true);
void ULcq_BlueprintFunctionLibrary::GetPolygonDataFromOrderV