Triangle - Delaunay Triangulator

Similar documents
Previous on Computer Networks Class 18. ICMP: Internet Control Message Protocol IP Protocol Actually a IP packet

ICP Enablon User Manual Factory ICP Enablon 用户手册 工厂 Version th Jul 2012 版本 年 7 月 16 日. Content 内容

AvalonMiner Raspberry Pi Configuration Guide. AvalonMiner 树莓派配置教程 AvalonMiner Raspberry Pi Configuration Guide

OpenCascade 的曲面.

Understanding IO patterns of SSDs

<properties> <jdk.version>1.8</jdk.version> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties>

实验三十三 DEIGRP 的配置 一 实验目的 二 应用环境 三 实验设备 四 实验拓扑 五 实验要求 六 实验步骤 1. 掌握 DEIGRP 的配置方法 2. 理解 DEIGRP 协议的工作过程

Command Dictionary CUSTOM

计算机组成原理第二讲 第二章 : 运算方法和运算器 数据与文字的表示方法 (1) 整数的表示方法. 授课老师 : 王浩宇

Logitech G302 Daedalus Prime Setup Guide 设置指南

Chapter 1 (Part 2) Introduction to Operating System

如何查看 Cache Engine 缓存中有哪些网站 /URL

PCU50 的整盘备份. 本文只针对操作系统为 Windows XP 版本的 PCU50 PCU50 启动硬件自检完后, 出现下面文字时, 按向下光标键 光标条停在 SINUMERIK 下方的空白处, 如下图, 按回车键 PCU50 会进入到服务画面, 如下图

Ganglia 是 UC Berkeley 发起的一个开源集群监视项目, 主要是用来监控系统性能, 如 :cpu mem 硬盘利用率, I/O 负载 网络流量情况等, 通过曲线很容易见到每个节点的工作状态, 对合理调整 分配系统资源, 提高系统整体性能起到重要作用

第二小题 : 逻辑隔离 (10 分 ) OpenFlow Switch1 (PC-A/Netfpga) OpenFlow Switch2 (PC-B/Netfpga) ServerB PC-2. Switching Hub

OTAD Application Note

Chapter 7: Deadlocks. Operating System Concepts 9 th Edition

A Benchmark For Stroke Extraction of Chinese Characters

三 依赖注入 (dependency injection) 的学习

密级 : 博士学位论文. 论文题目基于 ScratchPad Memory 的嵌入式系统优化研究

libde265 HEVC 性能测试报告

Microsoft RemoteFX: USB 和设备重定向 姓名 : 张天民 职务 : 高级讲师 公司 : 东方瑞通 ( 北京 ) 咨询服务有限公司

Build a Key Value Flash Disk Based Storage System. Flash Memory Summit 2017 Santa Clara, CA 1

Safe Memory-Leak Fixing for C Programs

IPC 的 Proxy-Stub 设计模式 ( c)

nbns-list netbios-type network next-server option reset dhcp server conflict 1-34

Chapter 11 SHANDONG UNIVERSITY 1

Apache Kafka 源码编译 Spark 大数据博客 -

NyearBluetoothPrint SDK. Development Document--Android

#MDCC Swift 链式语法应 用 陈乘

Software Engineering. Zheng Li( 李征 ) Jing Wan( 万静 )

组播路由 - MSDP 和 PIM 通过走

Wireless Presentation Pod

Oracle 一体化创新云技术 助力智慧政府信息化战略. Copyright* *2014*Oracle*and/or*its*affiliates.*All*rights*reserved.** *

TBarCode OCX Microsoft ActiveX compliant Barcode Control

CloudStack 4.3 API 开发指南!

学习沉淀成长分享 EIGRP. 红茶三杯 ( 朱 SIR) 微博 : Latest update:

Technology: Anti-social Networking 科技 : 反社交网络

Outline. Motivations (1/3) Distributed File Systems. Motivations (3/3) Motivations (2/3)

计算机科学与技术专业本科培养计划. Undergraduate Program for Specialty in Computer Science & Technology

CHINA VISA APPLICATION CONCIERGE SERVICE*

VAS 5054A FAQ ( 所有 5054A 整合, 中英对照 )

Congestion Control Mechanisms for Ad-hoc Social Networks 自组织社会网络中的拥塞控制机制

测试 SFTP 的 问题在归档配置页的 MediaSense

Windows Batch VS Linux Shell. Jason Zhu

Oriented Scene Text Detection Revisited. Xiang Bai Huazhong University of Science and Technology

Air Speaker. Getting started with Logitech UE Air Speaker. 快速入门罗技 UE Air Speaker. Wireless speaker with AirPlay. 无线音箱 (AirPlay 技术 )

3dvia Composer Solidworks

朱晔和你聊 Spring 系列 S1E2: SpringBoot 并不神秘

Supplementary Materials on Semaphores

The Design of Everyday Things

DEV Office 客户端开发增强

2. Introduction to Digital Media Format

Computer Networks. Wenzhong Li. Nanjing University

Skill-building Courses Business Analysis Lesson 3 Problem Solving

Chapter2 Instruction Sets

漂亮的测试. By Alberto Savoia 代码之美 第七章 史际帆

操作系统原理与设计. 第 13 章 IO Systems(IO 管理 ) 陈香兰 2009 年 09 月 01 日 中国科学技术大学计算机学院

智能终端与物联网应用 课程建设与实践. 邝坚 嵌入式系统与网络通信研究中心北京邮电大学计算机学院

Command Dictionary -- DAMSTAB

FLIGHT INSTRUMENT PANEL

上汽通用汽车供应商门户网站项目 (SGMSP) User Guide 用户手册 上汽通用汽车有限公司 2014 上汽通用汽车有限公司未经授权, 不得以任何形式使用本文档所包括的任何部分

TW5.0 如何使用 SSL 认证. 先使用 openssl 工具 1 生成 CA 私钥和自签名根证书 (1) 生成 CA 私钥 openssl genrsa -out ca-key.pem 1024

XML allows your content to be created in one workflow, at one cost, to reach all your readers XML 的优势 : 只需一次加工和投入, 到达所有读者的手中

[ 电子书 ]Spark for Data Science PDF 下载 Spark 大数据博客 -

NetScreen 概念与范例. ScreenOS 参考指南 第 7 卷 : 虚拟系统. ScreenOS 编号 SC 修订本 E

Decode Zend. Darkness/Airsupply

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--- global properties --> <property>

Bi-monthly report. Tianyi Luo

China Next Generation Internet (CNGI) project and its impact. MA Yan Beijing University of Posts and Telecommunications 2009/08/06.

SNMP Web Manager. User s Manual

mod_callcenter callcenter.conf.xml 范例 odbc-dsn

The relational Algebra & calculus cont. Reference : UC Berkeley

Autodesk Backburner 2011 安装手册

菜鸟调错 原文出处 : 菜鸟调错作者 : 刘水镜 本系列文章经作者授权在看云整理发布, 未经作者允许, 请勿转载! 菜鸟调错 分享开发中遇到的各种各样的错误, 以及解决方法, 让更多的人少走同样的弯路 本文档使用看云构建

Virtual Memory Management for Main-Memory KV Database Using Solid State Disk *

H3C CAS 虚拟机支持的操作系统列表. Copyright 2016 杭州华三通信技术有限公司版权所有, 保留一切权利 非经本公司书面许可, 任何单位和个人不得擅自摘抄 复制本文档内容的部分或全部, 并不得以任何形式传播 本文档中的信息可能变动, 恕不另行通知

public static InetAddress getbyname(string host) public static InetAddress getlocalhost() public static InetAddress[] getallbyname(string host)

Support for Title 21 CFR Part 11 and Annex 11 compliance: Agilent OpenLAB CDS version 2.1

IPC 的 Proxy-Stub 设计模式 (b)

Spark Standalone 模式应用程序开发 Spark 大数据博客 -

Keygen Codes For Photoshop Cs6 ->>> DOWNLOAD

最短路径算法 Dijkstra 一 图的邻接表存储结构及实现 ( 回顾 ) 1. 头文件 graph.h. // Graph.h: interface for the Graph class. #if!defined(afx_graph_h C891E2F0_794B_4ADD_8772_55BA3

display portal server display portal user display portal user count display portal web-server

TDS - 3. Battery Compartment. LCD Screen. Power Button. Hold Button. Body. Sensor. HM Digital, Inc.

PubMed 简介. PubMed 是美国国立医学图书馆 (NLM) 所属的国家生物技术信息中心 (NCBI) 开发的因特网生物医学信息检索系统

Safety Life Cycle Model IEC61508 安全生命周期模型 -IEC61508

Declaration of Conformity STANDARD 100 by OEKO TEX

Logitech ConferenceCam CC3000e Camera 罗技 ConferenceCam CC3000e Camera Setup Guide 设置指南

PTZ PRO 2. Setup Guide 设置指南

Epetra_Matrix. August 14, Department of Science and Engineering Computing School of Mathematics School Peking University

Chapter 2: Java OO II. Yang Wang wyang AT njnet.edu.cn

Presentation Title. By Author The MathWorks, Inc. 1

2 百硕客户通讯, 总第 7 期 2007 年 3 月 1 日

武汉大学 学年度第 1 学期 多核架构及编程技术 试卷(A)

未有现场回答的问题及其解答 如果我不需要所有的平台, 我可否只安装我想使用的平台?

我们应该做什么? 告知性分析 未来会发生什么? 预测性分析 为什么会发生 诊断性分析 过去发生了什么? 描述性分析 高级分析 传统 BI. Source: Gartner

测试基础架构 演进之路. 茹炳晟 (Robin Ru) ebay 中国研发中心

IP unnumbered 实验讲义 一. 实验目的 : 二. 实验设备 : 三. 实验拓扑 : 四. 实验内容 :

Transcription:

Triangle - Delaunay Triangulator eryar@163.com Abstract. Triangle is a 2D quality mesh generator and Delaunay triangulator. Triangle was created as part of the Quake project in the school of Computer Science at Carnegie Mellon University by Jonathan R. Shewchuk. Triangle is a small C program and its Delaunay refinement algorithm for quality mesh generation is a hybrid one. It includes divide-and-conquer and incremental insertion algorithms and sweepline Delaunay triangulation algorithm. This paper is focused on the usage of the Triangle and visualization the triangulation result in OpenSceneGraph. Key words. Triangle, Delaunay Triangulator, Mesh Generator 1. Introduction Triangle 可以生成精确的 Delaunay 三角剖分, 限定 Delaunay 三角剖分 (Constrained Delaunay Triangulation),Conforming Delaunay Triangulation,Voronoi 图 (Voronoi Diagrams) 和高质量的三角网格, 即生成的网格中没有瘦长的三角形, 所以适用于有限元分析 (Finite Element Analysis) 在 OpenCascade6.2.0 版本之前,OpenCascade 中网格的生成就是使用了这个开源库, 由此可见 Delaunay 三角剖分算法和网格生成算法的重要性及广泛应用 Figure 1.1 Triangle - A 2D Quality Mesh Generator and Delaunay Triangulator 下载 Triangle 的源程序及更多与 Triangle 相关信息的网址如下所示 : http://www.cs.cmu.edu/~quake/triangle.html 下载到源程序后, 如果是 Windows 操作系统, 还需要在 triangle.h 之前做些配置, 如定 义以下几个宏 : #define REAL double #define ANSI_DECLARATORS #include "triangle.h" #undef REAL 在 triangle.c 中定义宏 :#define NO_TIMER 有了上面的宏定义, 可以编译出一个 triangle.exe 程序了 如果要将 triangle 用在自己的程序中, 还需要定义 #define TRILIBRARY 更多宏定义可以参考源程序

2. Triangle Usage Triangle 有很多开关, 可以选择三角剖分和生成网格的方式, 如下图所示 : Figure 2.1 Options for the Triangle 如对示例文件 box.poly 进行三角剖分, 使用命令及生成结果统计信息如下所示 : Figure 2.2 Triangle Usage

出现统计信息的同时也生成了一些文件, 如顶点文件 box.1.node 和三角形文件 box.1.ele, 如下图所示 : Figure 2.3 Nodes and Triangles data generated by Triangle Figure 2.4 Triangulation Mesh Generated by Triangle[-pc] Figure 2.5 Triangulation Mesh Generated by Triangle[-pqc]

3. Displaying Meshes 在下载的程序中有用于显示网格的示例程序 showme.c, 不过只能用于 Unix 操作系统, 不能用于 Windows Figure 3.1 Displaying the Meshes by ShowMe 为了在 Windows 操作系统中看到生成的网格, 用 OpenSceneGraph 编写了一个小程序 TriangleViewer 显示网格 其中读取 node 和 element 文件中数据的主要程序片段如下所示 : std::string TriangleMesh::ReadLine(std::ifstream &thefile) std::string thebuffer; bool IsReadNextLine = false; do getline(thefile, thebuffer); // skip comment here. if ('#' == thebuffer[0]) IsReadNextLine = true; else IsReadNextLine = false; while (IsReadNextLine); return thebuffer; void TriangleMesh::BuildMesh(const std::string& apolyfile) std::stringstream ss; std::string thenodefilename(apolyfile + ".node"); std::string theelementfilename(apolyfile + ".ele");

std::ifstream thenodefile(thenodefilename.c_str()); std::ifstream theelementfile(theelementfilename.c_str()); Standard_Integer theindex = 0; Standard_Integer thenodecount = 0; Standard_Integer thetrianglecount = 0; Standard_Integer theindex1 = 0; Standard_Integer theindex2 = 0; Standard_Integer theindex3 = 0; Standard_Real x = 0.0; Standard_Real y = 0.0; // Read mesh size. ss << ReadLine(theNodeFile); ss >> thenodecount; ss.str(""); ss.clear(); ss << ReadLine(theElementFile); ss >> thetrianglecount; mmesh = new Poly_Triangulation(theNodeCount, thetrianglecount, Standard_True); // Read nodes information. TColgp_Array1OfPnt2d& thenodes2d = mmesh->changeuvnodes(); for (Standard_Integer n = 1; n <= thenodecount; ++n) ss.str(""); ss.clear(); ss << ReadLine(theNodeFile); ss >> theindex >> x >> y; thenodes2d.setvalue(theindex, gp_pnt2d(x, y)); // Read triangles information. Poly_Array1OfTriangle& thetriangles = mmesh->changetriangles(); for (Standard_Integer t = 1; t <= thetrianglecount; ++t) ss.str(""); ss.clear(); ss << ReadLine(theElementFile);

ss >> theindex >> theindex1 >> theindex2 >> theindex3; thetriangles.setvalue(theindex, Poly_Triangle(theIndex1, theindex2, theindex3)); 如下图所示为显示一个用不同命令生成的 Smiley Face 的网格 : Figure 3.2 Generate Smiley Face Mesh by Triangle [-pc] Figure 3.3 Generate Smiley Face Mesh by Triangle [-pqc] 从上面两幅图中的网格可知, 下面图中的网格质量较高, 为去掉了瘦长的三角形而增加 了一些顶点

4. Conclusions 在给 Triangle 程序输入数据时, 顶点 Vertex 数据很好理解, 只是一些二维点, 但是如果加上开孔 Hole 后有些问题 后来才知道, 需要在 Poly 文件中的 Segments 部分输入与孔相关线段形成的闭合区域, 在孔 Hole 部分只需要输入位于孔中的任意一个点即可 将 Triangle 生成的结果可视化, 可以看到 Triangle 生成的网格, 方便看到 Triangle 的不同选项生成的网格效果 在 OpenCascade6.2.0 版本中, 就以此二维 Delaunay 三角剖分工具为基础, 实现了任意三维曲面的三角剖分, 进而对其可视化 所以学习 Triangle 的用法, 结合 OpenCascade 的源程序便于理解任意曲面的可视化实现的方法 对 Delaunay 三角剖分算法感兴趣的读者, 可以参考相关书籍 [3],[4],[5],[6] 5. References 1. Jonathan R. Shewchuk. Triangle: http://www.cs.cmu.edu/~quake/triangle.html 2. Jonathan R. Shewchuk, Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangualtor, Springer-Verlag, Berlin, 1996 3. 汪嘉业王文平屠长河杨承磊. 计算几何及应用. 科学出版社. 2011 4. 王成恩. 面向科学计算的网格划分与可视化技术. 科学出版社. 2011 5. 周培德. 计算几何 - 算法设计与分析. 清华大学出版社. 2008 6. Berg M D 著邓俊辉译. 计算几何 - 算法与应用. 清华大学出版社. 2009