【问题标题】:Mathematica: Removing graphics primitivesMathematica:删除图形基元
【发布时间】:2011-09-13 02:53:18
【问题描述】:

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

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

现在,对于输入表单:

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

要从这个对象创建一个线框,我们所要做的就是移除多边形。另外,我们还可以移除顶点法线,因为它们对线框没有贡献。

请注意,要制作线框,我们可以简单地将PlotStyle -> None 设置为ListPlot3D 中的一个选项。这摆脱了Polygons,但不会删除VertexNormals

澄清问题。鉴于此

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

如何从g 中删除一些图形基元以及如何删除一些选项,即VertexNormals?注意:选项VertexNormalsGraphicsComplex的选项。

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

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

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

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

    你可以的

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

    或者,更简洁地使用Alternatives

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

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

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

    【讨论】:

    • @Leonid,现在我觉得自己很蠢。感谢您向我展示所有这些不同的方式。
    • Leonid,有什么理由在你的帖子中留下详细的表格吗?对我来说,这只会增加混乱。
    • @Mr.Wizard 我的印象是经验不足的用户会发现第一个更容易理解。我可能错了。
    • Leonid,你让我吃惊,因为在之前的交流中你说过:“......如果从未使用过这个名字,给模式命名似乎有点不雅。对于不完全理解的人这样做的原因,你的意图可能看起来不清楚,好像有什么计划但被遗忘了。”
    • @Mr.Wizard 是的,你是对的,关于模式名称 - 这些不是必需的,我将编辑以删除它们。我的意思是一个规则列表——似乎比将模式与Alternatives 结合起来更容易掌握。正如我所说,我可能错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2013-05-10
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多