Mathematica: удаление графических примитивов
При условии g
графический объект с такими примитивами, как Line
с и Polygon
s, как вы удаляете некоторые из них? Чтобы добавить больше примитивов к существующему графическому объекту, мы можем использовать 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]