Mathematica: удаление графических примитивов

При условии g графический объект с такими примитивами, как Lineс и 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, Это избавляет от Polygonс, но не удаляет VertexNormals,

Чтобы уточнить вопрос. При условии

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

Как удалить некоторые из графических примитивов из g и как вы удалите некоторые из вариантов, т.е. VertexNormals? Примечание: опция VertexNormals это вариант GraphicsComplex,

Если это невозможно, возможно, следующий вопрос будет, как вы получаете данные, используемые для создания g генерировать новый графический объект с некоторыми данными, полученными из g,

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]

Другие вопросы по тегам