簡體   English   中英

繪制不是函數圖的 3D 曲面

[英]Plot 3D surface that is not the graph of a function

我有一個不是函數圖的表面的 3D 數據集。 數據只是3D中的一堆點,我唯一能想到的就是在Matlab中嘗試scatter3 由於表面不是函數圖,因此Surf將不起作用。

使用scatter3給出了一個不太理想的結果,因為沒有任何類型的透視/陰影。

有什么想法嗎? 它不一定是 Matlab,但這是我繪圖的首選來源。

要了解我擁有的表面類型,請考慮以下四個圖像:在此處輸入圖片說明

第一個是 3D 等高線圖,第二個是等高線平面 {z = 1.8} 中的切片。 我的目標是撿起所有的紅色區域。 我有一種方法可以為每個切片 {z = k} 執行此操作。 這是第三個情節,我很喜歡我在這里看到的東西。

在 z give 上迭代這個會給出一個表面,它是第 4 個圖,它有點嘈雜(盡管我有減少噪音的想法......)。 如果我只使用 scatter3 繪制沒有輪廓的黑色表面,我得到的只是一個無法區分的黑色斑點,但是對於每個切片,我都會得到一條平滑的曲線,並且我注意到當我調整 z 時曲線變化非常平滑。

一些微調將提供更好的第 4 個圖,但是,即使我讓第 4 個圖根本沒有噪音,使用scatter3的結果將是單獨繪制而不是在 3D 輪廓頂部時出現難以理解的黑色斑點. 我想獲得未繪制在 3D 等高線圖頂部的完整表面的精美圖片

事實上,只是為了比較和顯示scatter3對表面的影響有多糟糕,即使你在球體上有精確的點並使用scatter3結果將是一個黑色的斑點,甚至看起來不像一個球體

POV-Ray 可以處理這個嗎? 我從來沒用過...

如果您對點進行三角測量,則可以考慮使用trisurf函數。 我之前使用過它來生成沒有邊界的封閉曲面(例如多面體和球體)。 缺點是您必須生成點的三角剖分。 這可能不適合您的需求,但絕對是一個選擇。

編輯:正如@High Performance Mark 所建議的,您可以嘗試使用delaunay在 Matlab 中生成三角剖分

只是想跟進這個問題。 在 Matlab 中執行此操作的快速好方法如下:

考慮定義為從 (x, y, z) 到您的數據集的最小距離的函數 d(x, y, z)。 確保 d(x, y, z) 在包含您要繪制的數據集的某個網格上定義。

然后使用isosurface繪制 d(x, y, z) 的(一些)計數。 對我來說,繪制 d(x, y ,z) 的等高線 0.1 就足夠了:Matlab 將繪制距離數據集 0.1 距離內的所有點的漂亮表面,並具有良好的照明和所有功能。

在 povray 中,一個 blob 對象可用於顯示非常密集的點集合,如果您將它們設為球心。
http://www.povray.org/documentation/view/3.6.1/71/如果您希望能夠制作“空間”切片並根據您的數據對它們進行着色,那么可能是對象模式(基於#declared blob 對象)可能會起作用。

Povray 也有一種處理 df3 文件的方法,我從來沒有用過,但是這個用戶似乎做了一些類似於你的可視化的事情。 http://paulbourke.net/miscellaneous/df3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM