使用Delaunay三角剖分解决求多边形面积的问题
朋友那边最近有个需求,需要框选一个选区,然后根据选区中的点求出面积。并且让我尝试用Delaunay来解决
似乎音译过来应该是德诺类
大致如下:

我在github上找了一个可以用的Delaunay库
https://gist.github.com/miketucker/3795318
但是需要注意这个只能针对凸多边形创建三角面。
因为创建出来的始终是三角面,把顶点顺序除以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<MeshFilter>() 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 = ; i < meshFilter.mesh.triangles.Length; i += )
{
var a = vertices[triangles[i]];
var b = vertices[triangles[i + ]];
var c = vertices[triangles[i + ]]; 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;
}
}

使用Delaunay三角剖分解决求多边形面积的问题的更多相关文章
- 三角剖分求多边形面积的交 HDU3060
//三角剖分求多边形面积的交 HDU3060 #include <iostream> #include <cstdio> #include <cstring> #i ...
- hdu 2036 求多边形面积 (凸、凹多边形)
<题目链接> Problem Description “ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考 ...
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
Area Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- poj 1654:Area 区域 ---- 叉积(求多边形面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19398 Accepted: 5311 利用叉积求多边形面 ...
- [poj] 3907 Build Your Home || 求多边形面积
原题 多组数据,到0为止. 每次给出按顺序的n个点(可能逆时针,可能顺时针),求多边形面积(保留整数) 多边形面积为依次每条边(向量)叉积/2的和 \(S=\sum _{i=1}^{n-1}p[i]* ...
- HDU - 2036 改革春风吹满地 叉乘法求多边形面积
改革春风吹满地 “ 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟 ...
- Area - POJ 1654(求多边形面积)
题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...
- poj 1654 Area(计算几何--叉积求多边形面积)
一个简单的用叉积求任意多边形面积的题,并不难,但我却错了很多次,double的数据应该是要转化为long long,我转成了int...这里为了节省内存尽量不开数组,直接计算,我MLE了一发...,最 ...
- hdu 2036 改革春风吹满地【求多边形面积模板】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2036 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- Java HmacSHA1算法
Java HmacSHA1算法 public static String hmacSha1(String src, String key) { try { SecretKeySpec signingK ...
- cgroup 分析之CPU和内存部分
https://ggaaooppeenngg.github.io/zh-CN/2017/05/07/cgroups-%E5%88%86%E6%9E%90%E4%B9%8B%E5%86%85%E5%AD ...
- 从JSF看XPages的优点
我们都知道XPages基于JSF,或者可以说XPages是JSF标准的实现(implementation)之一.JSF从2004年的1.0到现在的2.0,已经经历了很大的变化和发展.XPages最初开 ...
- spring cloud 加入配置中心后的 部分 配置文件优先级
经过一个小时的实验,得出部分配置优先级如下: bootstrap.properties:位于jar包外的优先级最高 application.properties:配置中心的文件 > 命令行配置 ...
- SSH黄金参数
ssh -o ConnectTimeout=3 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyCheckin ...
- 基于源码编译openssl
openssh依赖于openssl,由于ssl频繁曝出漏洞,牵扯到openssh.而自身也存在漏洞... 00.下载openssl https://www.openssl.org/source/ ht ...
- ios中屏幕适配
- (void)viewDidLoad { [super viewDidLoad]; // 左上角 // 固定左边和上边,伸缩右边和下边 self.leftTop.autoresizingMask = ...
- cnblogs修改网站图标icon
以下修改网络地址即可 <script type="text/javascript" language="javascript"> //Setting ...
- MySQL高可用性大杀器之MHA
MySQL高可用性大杀器之MHA 提到MySQL高可用性,很多人会想到MySQL Cluster,亦或者Heartbeat+DRBD,不过这些方案的复杂性常常让人望而却步,与之相对,利用MySQL ...
- C语言连接MySQL数据库(转)
c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++ 只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...