Mathematica:删除图形基元

jml*_*pez 2 wolfram-mathematica

鉴于这g是一个具有Lines和Polygons 等基元的图形对象,你如何删除其中的一些呢?要向现有图形对象添加更多基元,我们可以使用Show,例如:Show[g, g2]where g2是另一个具有其他基元的图形对象.但是如何删除不需要的原始对象?看一下以下内容

ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}]
Run Code Online (Sandbox Code Playgroud)

产量

现在,对于输入表单:

InputForm[
   ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}]
 ]
Run Code Online (Sandbox Code Playgroud)

产量

要从此对象创建线框,我们所要做的就是删除多边形.另外,我们还可以删除顶点法线,因为它们不会对线框有贡献.

请注意,要制作线框,我们只需将其设置PlotStyle -> None为选项即可ListPlot3D.这摆脱了Polygons,但没有删除VertexNormals.

澄清这个问题.鉴于

 g = ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}}, Mesh -> {1, 1}]
Run Code Online (Sandbox Code Playgroud)

你如何删除一些图形基元,g以及如何删除一些选项,即VertexNormals?注意:选项VertexNormals是一个选项GraphicsComplex.

如果这是不可能的,那么下一个问题可能是,如何获得用于生成的数据,g以生成具有从中获得的一些数据的新图形对象g.

Leo*_*rin 6

一种方法是使用转换规则.鉴于你的

im = ListPlot3D[{{0, 0, 1}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}},  Mesh -> {1, 1}]
Run Code Online (Sandbox Code Playgroud)

你可以做

newim = im /. {_Polygon :> Sequence[], (VertexNormals -> _) :> Sequence[]}
Run Code Online (Sandbox Code Playgroud)

或者,更紧凑地使用Alternatives:

newim = im /. _Polygon | (VertexNormals -> _) :> Sequence[]
Run Code Online (Sandbox Code Playgroud)

您还可以使用DeleteCases以获得类似的效果:

newim = DeleteCases[im, (_Polygon | (VertexNormals -> _)), Infinity]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述