CGAL的2D符合規定的三角剖分和網格

1、符合規定的三角剖分

1.1、定義

????????如果三角形的任何面的外接圓在其內部不包含頂點,則該三角形是 Delaunay 三角形。 約束 Delaunay 三角形是一種盡可能接近 Delaunay 的約束三角形。 約束 Delaunay 三角形的任何面的外接圓在其內部不包含從該面可見的數據點。

????????如果一條邊內接于一個空圓(其內部不包含數據點),則該邊被稱為德勞內邊。如果這條邊的直徑圓是空的,則該邊被稱為加布里埃爾邊。

????????如果每個約束邊都是一個Delaunay邊,則稱約束Delaunay三角剖分是保形的Delaunay三角剖分。由于約束Delaunay三角剖分中的任何邊要么是Delaunay邊,要么是約束邊,因此保形的Delaunay三角剖分實際上是一個Delaunay三角剖分。唯一的區別是其中一些邊被標記為約束邊。

????????如果每個約束邊都是加布里埃爾邊,則受約束的德勞內三角網被稱為一致的加布里埃爾三角網。 加布里埃爾屬性比德勞內屬性更強,每個加布里埃爾邊都是德勞內邊。 因此,一致的加布里埃爾三角網也是一致的德勞內三角網。

????????任何受約束的Delaunay三角剖分都可以通過在受約束的邊上添加稱為Steiner頂點的頂點,將其細化為一致的Delaunay三角剖分或一致的Gabriel三角剖分,直到它們被分解為足夠小的子約束,成為Delaunay或Gabriel邊。

1.2、構建符合規定的三角剖分

????????約束Delaunay三角剖分可以通過以下兩個全局函數細化為符合規定的三角剖分:

template<class CDT>
void make_conforming_Delaunay_2 (CDT& t)
template<class CDT>
void make_conforming_Gabriel_2 (CDT& t)

????????在這兩種情況下,模板參數CDT必須由受約束的Delaunay三角剖分類實例化(參見第2章“三角剖分”)。

????????用于實例化參數CDT的約束Delaunay三角剖分的幾何特征必須是概念ConformingDelaunayTriangulationTraits_2的模型。

????????受約束的Delaunay三角剖分t通過引用傳遞,并通過添加頂點細化為符合規定的Delaunay三角剖分或符合規定的Gabriel三角剖分。建議用戶在原始三角剖分必須保留用于其他計算的情況下,對輸入三角剖分進行復制。

????????make_conforming_Delaunay_2() 和 make_conforming_Gabriel_2() 使用的算法構建了內部數據結構,如果連續調用這兩個函數,則需要對這些數據結構進行兩次計算。為了避免這些數據被構造兩次,高級用戶可以使用 Triangulation_conformer_2<CDT>?類將約束 Delaunay 三角網細分為符合 Delaunay 三角網,然后再細分為符合 Gabriel 三角網。為了對細化算法進行額外控制,該類還提供了單獨的函數,一次插入一個 Steiner 點。?

1.3、范例

?????????從左到右:初始Delaunay三角剖分、相應的一致Delaunay和相應的Gabriel三角剖分。

2、網格

2.1、定義

????????網格是將給定區域劃分為形狀和大小滿足若干標準的單形。

????????域是用戶想要網格化的區域。它必須是平面的有界區域。域由平面直線圖定義,簡稱為Pslg,它是一組線段,其中兩條線段要么不相交,要么共享一個端點。Pslg的線段是約束,將由網格中的邊集表示。Pslg還可以包含孤立點,這些孤立點將作為網格的頂點出現。

????????Pslg的段可以是邊界段或內部約束段。Pslg的段必須覆蓋域的邊界。

????????Pslg將平面劃分為幾個連通分量。默認情況下,域是有界連通分量的并集。

????????下圖顯示了不使用種子點定義的域的示例及其可能的網格。

????????定義的域沒有種子點和生成的網格。

????????用戶可以通過提供一組種子點來覆蓋此默認值。種子點標記要網格化的組件,或者標記不要網格化(孔)的組件。?

????????關于用相同的Pslg和用于定義孔的兩個種子點定義的另一個域,請參見下圖。在相應的網格中,這兩個孔是三角形的,但不是網格。

????????具有兩個種子點的域,定義孔和生成的網格。?

2.2、形狀和尺寸標準

????????三角形形狀標準是圓半徑與最短邊長之比的下界B。這樣的界意味著三角形最小角度的下界為arcsin(1/2)B,最大角度的上界為π-2*arcsin(1/2)B。不幸的是,只有當B≥2√時,算法的終止才有保證,這對應于角度的下界為20.7度。

????????大小標準可以是任何傾向于偏好小三角形的標準。例如,大小標準可以是三角形最長邊的長度的上限,或者外接圓半徑的上限。大小限制可以在域中變化。例如,對于與給定線相交的三角形,大小標準可以規定一個較小的尺寸。

????????這兩種類型標準都定義在對象criteria中,并作為參數傳遞給網格化函數。

2.3、網格剖分算法

????????網格問題的輸入是一個Pslg和一組描述要網格化的域的種子,以及一組尺寸和形狀標準。此包中實現的算法從輸入Pslg的約束Delaunay三角劃分開始,并使用Delaunay細化方法生成網格。此方法將新頂點插入三角劃分中,盡可能遠離其他頂點,并在滿足標準時停止。

????????如果輸入Pslg的入射段之間的所有角度都大于60度,并且如果圓周率/邊比的界限大于2√,則該算法保證終止于滿足尺寸和形狀標準的網格。

????????如果某些輸入角度小于 60 度,算法最終將得到一個網格,其中一些三角形在小輸入角度附近違反了標準。這是不可避免的,因為輸入段形成的小角度無法被抑制。此外,已經證明,某些具有小輸入角度的域不能以甚至小于小輸入角度的角度進行網格劃分。請注意,如果域是多邊形區域,則生成的網格將滿足除小輸入角度之外的大小和形狀標準。此外,該算法可能成功地產生角度下限大于 20.7 度的網格,但沒有任何保證。

2.4、構建網格

template<class CDT, class NamedParameters>
void refine_Delaunay_mesh_2 (CDT &t, NamedParameters np)

????????模板參數CDT必須由受約束的Delaunay三角剖分類實例化。

????????CDT 的幾何特征類必須是概念 DelaunayMeshTraits_2 的模型。這個概念通過添加幾何謂詞和構造函數來細化概念 ConformingDelaunayTriangulationTraits_2。

????????第二個模板參數 NamedParameters 允許傳遞一系列種子點來定義域。它還允許傳遞三角形必須滿足的網格化標準。該標準必須是 MeshingCriteria_2 的模型。?

????????CGAL為這個概念提供了兩個模型:

????????Delaunay_mesh_criteria_2<CDT>,定義了一個形狀標準,限制三角形的最小角度,
Delaunay_mesh_size_criteria_2<CDT>,它為前面的標準添加了一個最大邊長度的限制。

????????如果使用不同的標準對同一個三角網格調用函數 refine_Delaunay_mesh_2() 多次,則算法會在每次調用時重建用于網格化的內部數據結構。為了避免每次調用時重建數據結構,高級用戶可以使用類 Delaunay_mesher_2<CDT>。這個類還提供了逐步函數。這些函數一次插入一個頂點。

????????Delaunay_mesher_2<CDT>?類型的任何對象都是從對 CDT 的引用構造的,并且具有幾個成員函數來定義要網格化的域并對 CDT 進行網格化。有關詳細信息,請參見下面給出的示例和參考手冊。請注意,在 Delaunay_mesher_2<CDT>?對象的生存期內,不應從外部修改 CDT。

????????一旦構建了網格,就可以使用面類型的 is_in_domain() 成員函數來確定三角剖分中的哪些面位于網格域中。?

2.5、Lloyd法優化網格

????????該包還提供了一個全局函數,用于在Delaunay精化生成的網格上運行Lloyd優化迭代。這種網格優化的目標是改善網格內部的角度,并使其盡可能接近60度。

template< class CDT >
Mesh_optimization_return_code lloyd_optimize_mesh_2(CDT& cdt);

?????????請注意,此全局函數有幾個命名參數來調整優化過程。

????????該優化過程交替地將頂點重新定位到其Voronoi單元的質心,并更新三角剖分的Delaunay連通性。質心是根據一個尺寸函數計算的,該函數旨在保持Delaunay細化生成的網格中點的局部密度。

????????下圖,這是由refine_Delaunay_mesh_2()生成并使用lloyd_optimize_mesh_2()優化的網格。下圖顯示了這些網格內角度的直方圖。

????????(左)由refine_Delanay_mesh2()生成的網格,用于統一大小調整標準。(右)顯示了Lloyd優化100次迭代后的相同網格。?

?????????Delaunay細化后以及Lloyd優化的10次和100次迭代后網格內部角度的直方圖。Delaunay精化后,角度在[28.5;121.9]度的區間內。經過10次Lloyd優化迭代后,它們處于[29.1;110.8]。100次迭代使它們達到[29.3;109.9]。

3、輸入\輸出

????????可以使用函數 ATTRIBUTE::IO::write_VTU()導出VTU中的網格結果。有關此格式的更多信息,請參閱VTK(VTU / VTP)文件格式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210998.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

陀螺儀LSM6DSV16X與AI集成(3)----讀取融合算法輸出的四元數

陀螺儀LSM6DSV16X與AI集成.2--姿態解算 概述視頻教學樣品申請完整代碼下載使用demo板生成STM32CUBEMX串口配置IIC配置CS和SA0設置串口重定向參考程序初始化SFLP步驟初始化SFLP讀取四元數數據演示 概述 LSM6DSV16X 特性涉及到的是一種低功耗的傳感器融合算法&#xff08;Sensor…

MySQL之創建時間類型的字段表

mysql之創建時間類型的字段表 CREATE TABLE tab(birthday DATE, -- 生日job_time DATETIME, -- 記錄年月日時分秒login_time TIMESTAMP -- 時間戳NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )解釋&#xff1a; NOT NULL DEFAULT &#xff1a;默認不為空…

css未來:使用light-dark()切換主題色

css未來&#xff1a;使用light-dark()切換主題色 要根據使用的是淺色模式還是深色模式來更改顏色&#xff0c;我們通常會使用 prefers-color-scheme 媒體查詢。為了讓代碼實現變得更容易&#xff0c;CSS 現在附帶了一個名為 light-dark() 的實用函數。該函數接受兩個顏色值作為…

編譯原理lab3-cminus_compiler-LLVM簡要熟悉

lab3實驗報告&#xff0c;我的實驗報告圖例很少&#xff0c;這次只有兩張圖&#xff0c;其余的都以復制輸出的形式展現出來了&#xff0c;最終提交的代碼在最后 [[#你的提交|你的提交]][[#實驗設計|實驗設計]][[#提交一&#xff1a;手動編寫.ll|提交一&#xff1a;手動編寫.ll…

TREK610C高壓放大器

181/2461/8938技術規格 輸出電壓&#xff1a;0到10 kV直流電壓 輸出電流&#xff1a;0到2 mA 轉換率&#xff1a;大于500 V/μs 信號帶寬&#xff1a;直流到1.0 kHz &#xff08;-3dB&#xff09; 放大倍數&#xff1a;1000 V/V 閉環系統以保持低噪音、高精確度電壓輸出 短…

最簡單的基于 FFmpeg 的音頻解碼器

最簡單的基于 FFmpeg 的音頻解碼器 最簡單的基于 FFmpeg 的音頻解碼器正文參考工程文件下載 參考雷霄驊博士的文章&#xff0c;鏈接&#xff1a;最簡單的基于FFMPEGSDL的音頻播放器&#xff1a;拆分-解碼器和播放器 最簡單的基于 FFmpeg 的音頻解碼器 正文 FFmpeg 音頻解碼器…

【ArcGIS微課1000例】0080:ArcGIS將shp轉json(geojson)案例教程

本文以案例的形式,講述在ArcGIS軟件中,將矢量數據轉為GeoJSON的方法。 擴展閱讀:【GIS風暴】GeoJSON數據格式案例全解 文章目錄 一、GeoJson簡介二、ArcGIS將矢量數據轉為GeoJSON一、GeoJson簡介 GeoJSON是一種基于JSON的地理空間數據交換格式,它定義了幾種類型JSON對象以…

Spring Cloud Gateway 網關的基礎使用

1. 什么是網關&#xff1f;網關有什么用&#xff1f; 在微服務架構中&#xff0c;網關就是一個提供統一訪問地址的組件&#xff0c;它解決了內部微服務與外部的交互問題。網關主要負責流量的路由和轉發&#xff0c;將外部請求引到對應的微服務實例上。同時提供身份認證、授權、…

Spring-Boot---配置文件

文章目錄 配置文件的作用配置文件的格式PropertiesProperties基本語法讀取Properties配置文件 ymlyml基本語法讀取yml配置文件 Properties VS Yml 配置文件的作用 整個項目中所有重要的數據都是在配置文件中配置的&#xff0c;具有非常重要的作用。比如&#xff1a; 數據庫的…

230. 二叉搜索樹中第K小的元素 --力扣 --JAVA

題目 給定一個二叉搜索樹的根節點 root &#xff0c;和一個整數 k &#xff0c;請你設計一個算法查找其中第 k 個最小元素&#xff08;從 1 開始計數&#xff09;。 解題思路 利用List存儲數據&#xff1b;遍歷整個樹&#xff0c;讀取數各個節點的value&#xff1b;對value進行…

Python繪制多分類ROC曲線

目錄 1 數據集介紹 1.1 數據集簡介 1.2 數據預處理 2隨機森林分類 2.1 數據加載 2.2 參數尋優 2.3 模型訓練與評估 3 繪制十分類ROC曲線 第一步&#xff0c;計算每個分類的預測結果概率 第二步&#xff0c;畫圖數據準備 第三步&#xff0c;繪制十分類ROC曲線 1 數據集…

【數據結構】——排序篇(上)

前言&#xff1a;前面我們已經學過了許許多多的排序方法&#xff0c;如冒泡排序&#xff0c;選擇排序&#xff0c;堆排序等等&#xff0c;那么我們就來將排序的方法總結一下。 我們的排序方法包括以下幾種&#xff0c;而快速排序和歸并排序我們后面進行詳細的講解。 直接插入…

Qt實現二維碼生成和識別

一、簡介 QZxing開源庫: 生成和識別條碼和二維碼 下載地址&#xff1a;https://gitcode.com/mirrors/ftylitak/qzxing/tree/master 二、編譯與使用 1.下載并解壓&#xff0c;解壓之后如圖所示 2.編譯 打開src目錄下的QZXing.pro&#xff0c;選擇合適的編譯器進行編譯 最后生…

util.js

一、util.js是什么&#xff1f; 1、util.js是Node.js提供的一個工具庫&#xff0c;主要用于輔助實現JavaScript代碼的通用功能。 2、除了Node.js中內置的模塊外&#xff0c;util.js是Node.js中最核心的模塊之一。 3、通過util.js&#xff0c;開發者可以輕松實現JavaScript常…

Unity 資源管理之StreamingAssets

StreamingAssets也是Unity中特殊的文件夾&#xff0c;用于存放運行時可以直接訪問的資源。StreamingAssets一般存放數據或配置文件、圖片、視頻資源等。 StreamingAssets的文件路徑可以通過Application.streamingAssetsPath來獲取。 加載或訪問使用WWW類或UnityWebRequest類。…

MIT6S081-Lab2總結

大家好&#xff0c;我叫徐錦桐&#xff0c;個人博客地址為www.xujintong.com&#xff0c;github地址為https://github.com/xjintong。平時記錄一下學習計算機過程中獲取的知識&#xff0c;還有日常折騰的經驗&#xff0c;歡迎大家訪問。 Lab2就是了解一下xv6的系統調用流程&…

Java - Synchronized的鎖升級之路

Synchronized鎖 Synchronized在Java JVM里的實現是基于進入和退出Monitor對象來實現方法同步和代碼塊同步的 monitor enter指令是在編譯后插入到同步代碼塊的開始位置 而monitor exit是插入到方法結束處和異常處 JVM要保證每個monitor enter必須有對應的monitor exit與之配對。…

解決服務端渲染程序SSR運行時報錯: ReferenceError: document is not defined

現象&#xff1a; 原因&#xff1a; 該錯誤表明在服務端渲染 (SSR) 過程中&#xff0c;有一些代碼嘗試在沒有瀏覽器環境的情況下執行與瀏覽器相關的操作。這在服務端渲染期間是一個常見的問題&#xff0c;因為在服務端渲染期間是沒有瀏覽器 API。 解決辦法&#xff1a; 1. 修…

bat腳本之while

在批處理&#xff08;BAT&#xff09;腳本中&#xff0c;while循環是一種常用的控制流結構&#xff0c;用于在滿足特定條件的情況下重復執行一段代碼。 while循環的基本語法如下&#xff1a; while [ condition ] do command1 command2 ... commandN done這里的 cond…

【2023傳智杯-新增場次】第六屆傳智杯程序設計挑戰賽AB組-DEF題復盤解題分析詳解【JavaPythonC++解題筆記】

本文僅為【2023傳智杯-第二場】第六屆傳智杯程序設計挑戰賽-題目解題分析詳解的解題個人筆記,個人解題分析記錄。 本文包含:第六屆傳智杯程序設計挑戰賽題目、解題思路分析、解題代碼、解題代碼詳解 文章目錄 一.前言二.賽題題目D題題目-E題題目-F題題目-二.賽題題解D題題解-…