博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Delaunay三角剖分解决求多边形面积的问题
阅读量:6857 次
发布时间:2019-06-26

本文共 1364 字,大约阅读时间需要 4 分钟。

朋友那边最近有个需求,需要框选一个选区,然后根据选区中的点求出面积。并且让我尝试用Delaunay来解决

似乎音译过来应该是德诺类

 

大致如下:

 

我在github上找了一个可以用的Delaunay库

 

但是需要注意这个只能针对凸多边形创建三角面。

 

因为创建出来的始终是三角面,把顶点顺序除以3进行遍历

然后根据差乘求平行四边形面积的方法,得到总面积

using UnityEngine;using System.Linq;using System.Collections;[RequireComponent(typeof(MeshFilter))][RequireComponent(typeof(MeshRenderer))]public class DelaunayTest : MonoBehaviour{    public Transform[] points;    MeshFilter meshFilter;    Triangulator tr;    void Start()    {        meshFilter = GetComponentInChildren
() as MeshFilter; } void Update() { tr = new Triangulator(); meshFilter.mesh = tr.CreateInfluencePolygon(points.Select(m => new Vector2(m.localPosition.x, m.localPosition.z)).ToArray()); var vertices = meshFilter.mesh.vertices; var triangles = meshFilter.mesh.triangles; var vertexCount = meshFilter.mesh.triangles.Length; var finalArea = 0f; for (int i = 0; i < meshFilter.mesh.triangles.Length; i += 3) { var a = vertices[triangles[i]]; var b = vertices[triangles[i + 1]]; var c = vertices[triangles[i + 2]]; finalArea += Area(a, b, c); } Debug.Log("Final Area: " + finalArea); } float Area(Vector3 p1, Vector3 p2, Vector3 p3) { float area = Vector3.Cross(p2 - p1, p3 - p2).magnitude * 0.5f; return area; }}

 

 

转载地址:http://doyyl.baihongyu.com/

你可能感兴趣的文章
开发资源汇聚 - jQuery (持续更新中)
查看>>
界面演示
查看>>
使用SQL Database Migration Wizard把SQL Server 2008迁移到Windows Azure SQL Database
查看>>
给线程发送消息让它执行不同的处理
查看>>
Bitcoin Cash到底是一种协议、还是一种产品?
查看>>
从数学到实现,全面回顾高斯过程中的函数最优化
查看>>
数据可视化实践
查看>>
页面统计(PV) 遇上 Fragment ,真的准吗?
查看>>
如何克服解决Git冲突的恐惧症?(Git杂项)
查看>>
1.4 Android相关环境变量设置
查看>>
ES6引入的新的数据类型
查看>>
dbUtils太多参数错误?
查看>>
ArrayList源码分析(一)
查看>>
Dagger2
查看>>
图论广度优先搜索
查看>>
干货 | 携程图片服务架构
查看>>
Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
查看>>
这样玩算法才够酷
查看>>
【初识】-JUC·ThreadPoolExecutor 线程池
查看>>
深入剖析某国外组织针对中国企业的APT攻击(CVE-2015-8651)
查看>>