Нарисуйте полупрозрачную сферу, используя rgl в R

У меня есть набор данных, выглядит так:

    x   y   z
1   1   2   1
2   3   5   7
3   -3  2   4
4   -2  1   1

поэтому каждая строка записывает координату точки в трехмерном пространстве. Я хочу изобразить все точки в виде точек, кроме одной, скажем, № 15 в виде полупрозрачной сферы с радиусом, который я могу установить. Затем я вижу на графике, какие из этих точек в данных включены в сферу. Я использую пакет RGL прямо сейчас и сделал следующее:

> open3d()
> plot3d(readin,col=3,type="p")
> plot3d(readin[15,],col=2,add=T,type="s",radius=0.1)

Таким образом, первая команда построения графика построила весь набор в виде точечных диаграмм, а вторая команда построения графика выбрала 15-ю строку данных, построила ее в виде сферы и добавила к предыдущему холсту. Мне просто интересно, могу ли я сделать сферу полупрозрачной, чтобы я мог видеть, какие точки включены в сферу, что означает, что эти точки очень близки к той, которую я выбрал.

Есть ли способ сделать это с помощью RGL или вы можете предоставить мне другие способы выполнить эту задачу?

Спасибо!


person lolibility    schedule 22.04.2013    source источник


Ответы (3)


Я думаю, что вы ищете аргумент alpha.

Пример

df <- data.frame(x=c(1,3,-3,-2), y=c(2,5,2,1),z=c(1,7,4,1))

library(rgl)
open3d()
plot3d(df,col=3,type="p", radius=0.5)
plot3d(df,col=rgb(1,0,0.3),alpha=0.5, add=T,type="s",radius=1)

введите здесь описание изображения

person Marc in the box    schedule 22.04.2013

Вы можете отображать прозрачные сферы, используя альфа-аргумент дляspheres3d. Вы можете повернуть график, чтобы переместить линию прямоугольника за сферу, чтобы убедиться, что она прозрачна.

 spheres3d(dat[4,],col=rgb(1,0,0), alpha=0.9)  # transparent red.

(Я пытался сделать это с альфа-аргументом для rgb, но это не удалось.)

person IRTFM    schedule 22.04.2013

Если вы просто хотите узнать, какие точки находятся в пределах определенного радиуса от точки 15, вы можете рассчитать евклидово расстояние от каждой точки до точки 15 и посмотреть, какие из этих расстояний меньше радиуса. Не нужно рисовать (хотя вы можете нанести эти точки другим цветом, чтобы выделить их. Функция dist — это один из способов вычисления расстояний, или ее легко запрограммировать самостоятельно.

person Greg Snow    schedule 22.04.2013