作用:
(1)用于UnityMesh绘制
(2)可以用于判断一个点是否在多边形内部
多边形转三角形注意事项:
(1)凹凸边问题(Vector3.Cross 判断凹凸方向)
(2)共线问题(Vector3.Cross == 0代表一条直线)
(3)三角形内部问题(检测点在三条边同一个方向即在三角形内部)
(4)传入的顶点数据有效性(顶点数据需顺时针、简单多边形结构顶点)
-- 多边形三角化 支持凹凸多边形 只能传入简单多边形顶点 每个顶点不被大于两条边共享即简单多边形
-- vertices顶点列表需要按照顺时针传入 return三角形顶点列表、三角形绘制顺序列表(用于mesh绘制)
function PolygonToTriangle(vertices)
assert(#vertices >= 3, "多边形三角化顶点数量小于3个")
local newVertices = {}
local triangleOrders = {}
local curVertices = {}
local curVerticesCount = #vertices
local index = 1
--重包装 保存原有的顶点顺序
for k, v in ipairs(vertices) do
table.insert(curVertices,
{
index = k,
value = v
})
end