Создание 3D-цилиндр из многоугольника

голоса
0

У меня есть многоугольник, который я хотел бы преобразовать в цилиндрическую 3D объект для иллюстрации:

x <- structure(list(x = c(7.99, 6.25, -1.77, -1.8, -0.48, 3.93, 7.99
), y = c(2.84, 2.31, 2.43, 2.98, 3.19, 3.26, 2.84)), row.names = c(NA, 
7L), class = data.frame)

plot(x$x, x$y, type = n)
polygon(x$x, x$y, col = blue)
points(x$x, x$y)

введите

Я не могу получить мою голову вокруг, как добавить Z-оси со значениями 2 и 5, например:

library(rgl)
lines3d(x = rep(x$x, 2), y = rep(x$y, 2), z = rep(c(2, 5), each = nrow(x)))

введите

Я хотел бы, чтобы лица цветные и связаны между собой . Что - то , как цилиндры на Wikipedia иллюстрациях , но , естественно , не закругленные концы, но эти полигоны вместо. tringles3dили polygon3dфункции, вероятно , что я должен использовать , если я использовал RGL пакет, но я не понимаю , как реструктурировать мой data.frame. Мне не нужно , чтобы сделать это в RGL. Это было только R пакет , который , казалось , наиболее целесообразным для решения этой задачи. Как я должен реорганизовать свои данные для построения 3D - цилиндр?

Задан 03/12/2019 в 00:00
источник пользователем
На других языках...                            


1 ответов

голоса
1

Вам нужно использовать extrude3dдля создания «выдавливания» вашего полигона. Так , например, с xтакими , как определено в этом вопросе,

x[-1,] %>% 
  extrude3d(thickness = 3, material = list(col = rainbow(14)),
            meshColor = "faces") %>%
  translate3d(x = 0, y = 0, z = 2) %>%
  shade3d()

производит это изображение (после некоторого ручного вращения):

Скриншот

Он использует x[-1,], потому что вы повторили первую вершину в конце: она хочет уникальные вершины.

Окраска смешно: рисовать шестиугольников на каждом конце, rglрисует 4 треугольника, и каждый из них рассматривается как отдельное лицо с целью окрашивания. Если вы хотите , сплошные цвета там, помните , что концы рисуются первый: так что использовать что - то вроде

material = list(col = rainbow(8)[c(1,1,1,1,2,2,2,2:8)])

вместо.

Другой забавный аргумент extrude3dявляется thickness: многогранник рисуется между z=0и z=thickness. Так как вы хотели zот 2 до 5, thickness3, и результат должен быть переведен на 2 единицы в г.

Там же cylinder3d, который используется для формирования трубчатых структур, но extrude3dпроще в использовании , если вы только хотите , чтобы ваш полигон , чтобы показать в двух местах , расположенных под прямым углом к бокам.

Ответил 03/12/2019 в 01:18
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more