2011-06-11 43 views
2

鑑於g是一個圖形對象,其基元如Line s和Polygon s,您如何移除其中的一些?爲了向現有的圖形對象添加更多的圖元,我們可以使用Show,例如:Show[g, g2]其中g2是具有其他圖元的另一圖形對象。但是,如何刪除不需要的原始對象?在下面一起來看看現在Mathematica:刪除圖形基元

ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}] 

Output

,對於輸入形式:

InputForm[ 
    ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}] 
] 

Output

要從此對象創建一個線框所有我們需要做的是刪除多邊形。作爲額外的,我們也可以移除頂點法線,因爲它們不會影響線框。

請注意,要製作線框,我們可以簡單地將PlotStyle -> None設置爲ListPlot3D中的一個選項。這擺脫了Polygon s但不刪除VertexNormals

澄清問題。鑑於

g = ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}] 

如何從g去掉一些基本圖形的,你如何去除一些選項,即VertexNormals?注意:選項VertexNormalsGraphicsComplex的選項。

如果這是不可能的,那麼下一個問題可能是,如何獲取用於生成g的數據以生成一個新的圖形對象,其中一些數據是從g獲得的。

回答

6

一種方法是使用轉換規則。鑑於你

im = ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}] 

可以,或者更緊湊使用Alternatives

newim = im /. {_Polygon :> Sequence[], (VertexNormals -> _) :> Sequence[]} 

newim = im /. _Polygon | (VertexNormals -> _) :> Sequence[] 

你也可以使用DeleteCases來獲得類似的效果:

newim = DeleteCases[im, (_Polygon | (VertexNormals -> _)), Infinity] 

enter image description here

+0

@Leonid,現在我覺得很蠢。感謝您向我展示所有這些不同的方式。 – jmlopez 2011-06-11 21:07:17

+0

列昂尼德,是否有任何理由在您的文章中留下冗長的表單?對我而言,這隻會增加混亂。 – 2011-06-11 22:29:41

+0

@Wizard先生我有一個印象,經驗不足的用戶會發現第一個更容易理解。我可能是錯的。 – 2011-06-12 10:23:09