CGAL的3D皮膚表面網格

1、介紹

????????Edelsbrunner 引入的皮膚表面和具有豐富而簡單的組合和幾何結構,使其適合在生物計算中模擬大分子。 對這些表面進行網格劃分通常是進一步處理其幾何形狀所必需的,例如在數值模擬和可視化中。

????????皮膚表面由一組加權點(輸入球)和一個稱為收縮因子的標量定義。如果收縮因子等于一,則表面只是輸入球并集的邊界。對于小于一的收縮因子,由于出現連接球的球面和雙曲面的斑塊,皮膚表面變得切線連續。

????????此程序包使用中描述的算法構建由一組球和收縮因子定義的皮膚表面網格同位素。

????????實現了一種優化算法,用于對一組球的并集進行網格劃分。

2、定義一個skin曲面

????????左圖:兩個加權點(兩個虛線圓)的凸組合。右圖:加權點的表面曲線。較小的圓形成加權點的子集,其邊界是表面曲線。

????????本節首先簡要回顧了皮膚表面。

????????皮膚表面由一組有限個加權點 P 和一個收縮因子 s 定義,其中 0≤s≤1。加權點 p=(p,wp)∈R3×R 對應于一個中心為 p、半徑為 wp??√ 的球。權重為零的加權點稱為無權點。

????????加權點p=(p,wP)和無權點x之間的偽距離被定義為: π(p,x)=∥p?x∥2?wp,

????????其中p?x是p和x之間的歐幾里得距離。加權點p對應的球是π(p,?)的零集。請注意,如果wp<0,則球的半徑為虛數,并且零集為空集。

????????我們可以通過取加權點距離函數的凸組合來獲得加權點的凸組合。上圖左顯示了通過取虛線圓圈的凸組合獲得的加權點。

????????從加權點p=(p,wP)開始,通過與以p為中心的無權點進行凸組合獲得收縮加權點ps。形式上,ps=sp+(1-s)p',其中p'=(p,0)。經過簡單計算后,我們得到ps=(p,s?wp)。通過將P中的每個加權點按比例s收縮獲得的集合Ps定義為Ps={ps∣p∈P}。上圖(左)中收縮的加權點顯示在上圖(右)中。

????????現在我們定義與一組加權點P相關聯的皮膚表面skns(P)。考慮輸入加權點的凸包的加權點集合。經過計算,可以發現每個加權點都在輸入球的并集中。接下來,我們通過收縮凸包中的每個加權點來收縮它們。因此,我們將相應(實數)輸入圓的半徑乘以因子s√。皮膚表面是該集合的邊界:

????????這里conv(P)?R3×R是加權點集P的凸包,而?表示相應球集的并集在R3中的邊界。

????????回想一下,輸入加權點的凸包中的每個加權點都包含在輸入加權點的并集中。因此,對于等于 1 的收縮因子,皮膚表面是輸入加權點并集的邊界。

????????根據皮膚表面的定義,輸入球的權重(它們的半徑平方)以s為因子縮小,皮膚表面包裹在縮小的輸入球周圍。為了使皮膚表面包裹在(未縮小的)輸入球周圍,我們可以首先將輸入球的權重乘以因子1/s,然后計算皮膚表面。

3、接口

????????皮膚表面包的接口由一個主要功能組成,即獲取一組加權點和收縮因子,并輸出網格表面。此外,它定義了類和函數,并對用于執行算法的主要步驟進行了分類。存在兩個全局類Skin_surface_3和Union_of_balls_3,它們都是概念SkinSurface_3的模型,并且存在從上述類的對象提取皮膚表面的網格(球的并集)的兩個函數。最后一個函數獲取一個網格和從中構建的Skin_surface_3(Union_of_balls_3)對象,并細化該網格。本節將更詳細地描述這些類和函數。

template <class WP_iterator, class Polyhedron_3>
void make_skin_surface_mesh_3(Polyhedron_3 &p,WP_iterator begin, WP_iterator end,FT shrink_factor=.5,int nSubdiv=0,bool grow_balls = true);

????????下面是make_skin_surface_mesh_3函數的參數解釋:InputIterator points_begin:輸入迭代器,指向加權點的起始位置。加權點用于定義皮膚表面的幾何形狀。InputIterator points_end:輸入迭代器,指向加權點的結束位置。WeightedPoint:表示加權點的類型,其中包含點的坐標和權重。double shrink_factor:收縮因子,用于控制生成的皮膚表面的平滑程度。較小的收縮因子將導致更平滑的表面,而較大的收縮因子將使表面更加突出。unsigned int number_of_subdivision_steps:細分步驟數,用于控制生成的網格的精細程度。較大的細分步驟數將生成更精細的網格,而較小的細分步驟數將生成較粗糙的網格。OutputIterator mesh_begin:輸出迭代器,指向生成的網格的起始位置。網格將以Polyhedron_3的形式存儲。

????????皮膚表面包的主要功能是獲取加權點的迭代器范圍、收縮因子和細分步驟數,并在 Polyhedron_3 中輸出網格?

????????其中,FT是Weighted_points使用的數字類型。

????????為了更好地控制算法,還可以單獨執行不同的步驟。首先,從加權點的迭代器范圍和收縮因子中創建一個 Skin_surface_3 對象。可選參數是一個布爾值,它指示輸入加權點是否應以這樣的方式增長,即皮膚表面圍繞輸入球而不是收縮的輸入球。

template <class SkinSurfaceTraits_3>
Skin_surface_3(WP_iterator begin, WP_iterator end,FT shrink_factor,bool grow_balls = true);

?????????模板參數應實現SkinSurfaceTraits_3概念。類型WP_iterator是SkinSurfaceTraits_3定義的加權點的迭代器,FT是加權點使用的數值類型。

????????對于等于一的收縮因子,皮膚表面是輸入球的并集的邊界。在這種情況下,用于網格化皮膚表面的算法大大簡化。這些優化在Union_of_balls_3類中實現。球并集類的構造函數類似,除了缺少收縮因子:

template <class SkinSurfaceTraits_3>
Union_of_balls_3(WP_iterator begin, WP_iterator end,bool grow_balls = true);

????????使用概念SkinSurface_3的模型,可以生成與皮膚表面同質的粗網格。使用帶有簽名的函數mesh_skin_surface_3()?

template <class SkinSurface_3, class Polyhedron>
void mesh_skin_surface_3(const SkinSurface_3 &skin_surface, Polyhedron &p);

?????????最后一個函數采用(粗略的)網格,通過應用給定數量的1-4分割操作(每個三角形被分割成四個子三角形)并在皮膚表面移動新的頂點,在原地對網格進行細分。如果未指定迭代次數,則執行一次細分步驟。需要使用SkinSurface_3概念的對象來構造粗網格,以在皮膚表面上移動新的點。

template <class SkinSurface_3, class Polyhedron >
void subdivide_skin_surface_mesh_3 (const SkinSurface_3 &skinsurface,Polyhedron &p,int iterations = 1);

4、時間

????????粗網格的構建和第一次細分的時間以秒為單位,在具有1Gb內存的Pentium 4、3.5 GHz上完成。

Data setNumber of weighted pointsCoarse meshfirst subdivision step
Caffeine230.2 sec.0.05 sec.
Gramicidin A3185 sec.2 sec.

CGAL 5.6 - 3D Skin Surface Meshing: User Manual?

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

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

相關文章

力扣labuladong——一刷day70

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、力扣814. 二叉樹剪枝二、力扣1325. 刪除給定值的葉子節點 前言 這道題的難點在于要一直剪枝&#xff0c;直到沒有值為 0 的葉子節點為止&#xff0c;只有從…

RecursionError: maximum recursion depth exceeded in comparison

諸神緘默不語-個人CSDN博文目錄 這個bug的產生原因是運行rouge包時句子太長&#xff0c;所以遞歸次數過多了。完整的報錯信息懶得粘了&#xff0c;總之很長&#xff0c;解決方案就是手動在程序開始處就增大遞歸次數&#xff1a; import sys sys.setrecursionlimit(100000)具體…

html通過CDN引入Vue使用Vuex以及Computed、Watch監聽

html通過CDN引入Vue使用Vuex以及Computed、Watch監聽 近期遇到個需求&#xff0c;就是需要在.net MVC的項目中&#xff0c;對已有的項目的首頁進行優化&#xff0c;也就是寫原生html和js。但是咱是一個寫前端的&#xff0c;寫html還可以&#xff0c;.net的話&#xff0c;開發也…

K8S學習指南-minikube的安裝

簡介 Minikube 是一個用于在本地開發環境中運行 Kubernetes 集群的工具。它允許開發人員在單個節點上體驗 Kubernetes&#xff0c;無需配置復雜的生產環境。本指南將詳細介紹在 Windows、CentOS 和 Ubuntu 系統上安裝 Minikube 的步驟。 1. Windows 系統安裝 1.1 &#xff1…

期末速成數據庫極簡版【查詢】(3)

目錄 多表查詢 【8】多表連接——內連接 &#x1f642;等值連接 &#x1f642;自然連接 &#x1f642;非等值連接 【9】多表連接——外連接 【10】交叉連接不考 【11】聯合查詢 【12】擴展多表連接 【13】嵌套查詢 &#x1f642; 多表查詢 【8】多表連接——內連…

HIVE學習(hive基礎)

HIVE基礎介紹 一、HIVE簡介二、hive的數據類型1、基本數據類型2、復合數據類型 三、HIVE的DDL操作四、創建一個表1. 建表語句 五、修改表結構1.修改表名2. 列修改或增加3. 修改分區 五、常見函數六、一對一關聯left join左關聯right join 右關聯內連接全連接查詢只有A表的數據 …

計算機視覺-機器學習-人工智能頂會 會議地址

計算機視覺-機器學習-人工智能頂會 會議地址 最近應該要整理中文資料的參考文獻&#xff0c;很多會議文獻都需要補全會議地點&#xff08;新國標要求&#xff09;。四處百度感覺也挺麻煩的&#xff0c;而且沒有比較齊全的網站可以搜索。因此自己整理了一下計算機視覺-機器學習…

OSPF路由協議

隨著Internet技術在全球范圍的飛速發展&#xff0c;OSPF已成為目前應用最廣泛的路由協議之一。OSPF&#xff08;Open Shortest Path First&#xff09;路由協議是由IETF&#xff08;Internet Engineering Task Force&#xff09;IGP工作組提出的&#xff0c;是一種基于SPF算法的…

JS 云服務 Deno Depoly 宣布,推出定時運行功能 Deno Cron

如果需要定時執行 JS 腳本&#xff0c;以后多一個選項。 Web 構建日益復雜。編寫現代軟件包括利用云基礎設施、剖析模板代碼和管理復雜的配置&#xff0c;而開發人員只想專注于編寫業務邏輯。 Deno 旨在通過刪除配置和不必要的模板&#xff0c;從根本上簡化 Web 開發。我們將無…

網絡攻擊(三)--攻擊階段

5. 威脅建模階段 目標 了解威脅建模階段的工作內容 工作內容 威脅建模主要使用在情報搜集階段所獲取到的信息&#xff0c;來標識出目標系統上可能存在的安全漏洞與弱點。 在進行威脅建模時&#xff0c;確定最為高效的攻擊方法、所需要進一步獲取到的信息&#xff0c;以及從…

【前端】CSS浮動(學習筆記)

一、浮動 1、傳統網頁布局 網頁布局的本質&#xff1a;用 CSS 來擺放盒子&#xff0c;把盒子擺放到相應位置。 CSS 提供了三種傳統布局方式&#xff08;盒子如何進行排列順序&#xff09; 普通流&#xff08;標準流&#xff09;浮動定位 實際開發中&#xff0c;一個頁面基…

Go 反射技術判斷結構體字段數據為空

Api介紹 在Go語言中&#xff0c;反射API用于在運行時檢查類型信息、獲取和修改變量的值以及調用對象的方法。反射API包含了一組函數和類型&#xff0c;可以在程序運行時動態地操作對象。 以下是一些常用的反射API&#xff1a; reflect.TypeOf&#xff1a;返回一個值的類型信息。…

并查集基礎模板

題目我上面有人兒 代碼 #include <bits/stdtr1c.h> using namespace std; const int N 1005; int f[N]; int n; int siz[N]; // 初始化并查集 // void init() // { // for (int i 1; i < n; i) // { // f[i] i; // 初始化所有的節點都是自己的父節點 //…

Tomcat頭上有個叉叉

問題原因&#xff1a; 這是因為它就是個空的tomcat,并沒有導入項目運行 解決方案&#xff1a; war模式&#xff1a;發布模式&#xff0c;正式發布時用&#xff0c;將WEB工程以war包的形式上傳到服務器 war exploded模式&#xff1a;開發時用&#xff0c;將WEB工程的文件夾直接…

【網絡協議】LACP(Link Aggregation Control Protocol,鏈路聚合控制協議)

文章目錄 LACP名詞解釋LACP工作原理互發LACPDU報文確定主動端確定活動鏈路鏈路切換 LACP和PAgP有什么區別&#xff1f;LACP與LAG的關系LACP模式更優于手動模式LACP模式對數據傳輸更加穩定和可靠LACP模式對聚合鏈路組的故障檢測更加準確和有效 推薦閱讀 LACP名詞解釋 LACP&…

day11 前k個高頻元素

// 小頂堆 class mycomparison { public: bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) { return lhs.second > rhs.second; } }; vector<int> topKFrequent(vector<int>& nums, int k) { // 要統計元素出現…

智能外呼有什么好處?

智能外呼是一種自動化的電話營銷方式&#xff0c;利用AI智能外呼技術和大量數據分析&#xff0c;幫助企業實現與客戶之間的高效、精準、個性化的客戶溝通&#xff0c;還可以在客戶服務、市場營銷和銷售等方面帶來助力。那么&#xff0c;智能外呼有什么好處呢&#xff1f; 1. 提…

spring IOC bean為什么默認是單例的

首先解釋一下什么是單例 bean&#xff1f; 單例的意思就是說在 Spring IoC 容器中只會存在一個 bean 的實例&#xff0c;無論一次調用還是多次調用&#xff0c;始終指向的都是同一個 bean 對象 用代碼來解釋單例 bean public class UserService {public void sayHello() {Syst…

交叉編譯工具鏈makefile

linux系統默認搜索頭文件地址&#xff1a;/usr/include/文件夾&#xff1b; Windows系統默認搜索頭文件地址&#xff1a;不同軟件好像可以設置不同的地址&#xff1b;例如visual studio好像可以設置附加包含目錄&#xff0c;包含目錄等 Linux系統庫文件路徑&#xff1a;/lib文…

通過生成模擬釋放無限數據以實現機器人自動化學習

該工作推出RoboGen&#xff0c;這是一種生成機器人代理&#xff0c;可以通過生成模擬自動大規模學習各種機器人技能。 RoboGen 利用基礎模型和生成模型的最新進展。該工作不直接使用或調整這些模型來產生策略或低級動作&#xff0c;而是提倡一種生成方案&#xff0c;該方案使用…