朋友那边最近有个需求,需要框选一个选区,然后根据选区中的点求出面积。并且让我尝试用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三角剖分解决求多边形面积的问题的更多相关文章

  1. 三角剖分求多边形面积的交 HDU3060

    //三角剖分求多边形面积的交 HDU3060 #include <iostream> #include <cstdio> #include <cstring> #i ...

  2. hdu 2036 求多边形面积 (凸、凹多边形)

    <题目链接> Problem Description “ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考 ...

  3. hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)

    Area Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. poj 1654:Area 区域 ---- 叉积(求多边形面积)

    Area   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19398   Accepted: 5311 利用叉积求多边形面 ...

  5. [poj] 3907 Build Your Home || 求多边形面积

    原题 多组数据,到0为止. 每次给出按顺序的n个点(可能逆时针,可能顺时针),求多边形面积(保留整数) 多边形面积为依次每条边(向量)叉积/2的和 \(S=\sum _{i=1}^{n-1}p[i]* ...

  6. HDU - 2036 改革春风吹满地 叉乘法求多边形面积

    改革春风吹满地 “ 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟 ...

  7. Area - POJ 1654(求多边形面积)

    题目大意:从原点开始,1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走.求出最后的多边形面积. 分析:这个多边形面积很明显是不规则的, ...

  8. poj 1654 Area(计算几何--叉积求多边形面积)

    一个简单的用叉积求任意多边形面积的题,并不难,但我却错了很多次,double的数据应该是要转化为long long,我转成了int...这里为了节省内存尽量不开数组,直接计算,我MLE了一发...,最 ...

  9. hdu 2036 改革春风吹满地【求多边形面积模板】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2036 http://acm.hust.edu.cn/vjudge/contest/view.action ...

随机推荐

  1. django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

    1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14  ...

  2. php Socket表单提交学习一下

    <?php //发送请求指定的页面 $file = "1.php"; $filename = "gitignore.txt"; //文件名 $path = ...

  3. redis配置笔记

    #cd /opt#tar -zxvf redis-4.0.6.tar.gz#cd redis-4.0.6#make #cd src#make install PREFIX=/usr/local/red ...

  4. VS2017写的exe调用Delphi 7写的DLL

    公司有个很古老的系统,代码量很大,并且稳定线上运行10几年,这系统是公司的核心,公司收入基本靠它,系统几乎都是Delphi 7写的,要重写是不可能的.因为Delphi 7编译出来的DLL默认的导出符号 ...

  5. yum安装nodejs 8

    Install Node.js 8 on Enterprise Linux Distributions To install Node.js 8 on Enterprise Linux distros ...

  6. ios 中UIViewController的分类

    #import <UIKit/UIKit.h> #define TOPVIEWTAG 0x10000 // 导航栏的图片 @interface UIViewController (Chnb ...

  7. 时间选择器(js,css,html)

    忘了从哪下载的了, 整理电脑, 做个记录, 效果图: 下载链接: 链接: https://pan.baidu.com/s/1qfYkcfn8dtLFg0oniB2GHA 提取码: 2amm

  8. 【DM】Combating Web Spam with TrustRank - 用TrustRank对抗网络垃圾邮件

    [论文标题]Combating Web Spam with TrustRank (Proceedings 2004 VLDB Conference) [论文作者]Zolt´an Gy¨ongyi,He ...

  9. 【HTML】前端性能优化之CDN和WPO的比较

    CDN通过将资源存储在更接近用户的位置,缩短到服务器的往返行程,加快页面加载时间来解决性能问题.WPO解决方案,如Radware的FastView,则在前端进行性能提升处理,使页面更有效地呈现在浏览器 ...

  10. Linux下面安装RabbitMQ Cluster

    安装rabbitmq cluster: 设置 Erlang Cookie安装完RabbitMQ之后,在第一台机器上面启动RabbitMQ,然后在停止.复制node1上的/var/lib/rabbitm ...