Как построить взаимосвязанные торы?

Как я могу построить взаимосвязанные торы в R, как показано на этой странице для gnuplot :

блокирующие торы

Я пробовал следующие коды в R, но они не работают:

try_tori_1 = function(){
    library(rgl)
    xvec= yvec = seq(-pi,pi,by=0.1); 
    z <- outer(xvec,yvec,function(x,y) {sin(x)+.5*sin(x)*cos(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue")
    z <- outer(xvec,yvec,function(x,y) {cos(x)+.5*cos(x)*cos(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", add=T)
    z <- outer(xvec,yvec,function(x,y) {.5*sin(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", add=T)
    z <- outer(xvec,yvec,function(x,y) {1+cos(x)+.5*cos(x)*cos(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", add=T)
    z <- outer(xvec,yvec,function(x,y) {.5*sin(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", add=T)
    z <- outer(xvec,yvec,function(x,y) {sin(x)+.5*sin(x)*cos(y)} )
    persp3d(z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", add=T)
}

try_tori_2 = function(){
    library(rgl)
    u= v = seq(-pi,pi,by=0.1); 
    plot3d(cos(u)+.5*cos(u)*cos(v),sin(u)+.5*sin(u)*cos(v),.5*sin(v))
    plot3d(1+cos(u)+.5*cos(u)*cos(v),.5*sin(v),sin(u)+.5*sin(u)*cos(v))
}

r,plot,gnuplot,

3

Ответов: 2


6 ов принято

Мой ответ основан на примерах из этих двух веб-сайтов:

И вот как вы это делаете:

surf3D

Что генерирует этот сюжет:

блокирующие торы

Важно отметить следующие:

  • используйте surf3Dфункцию
  • настройте свои углы, используя mesh
  • чтобы увидеть все это, указать диапазоны ( xlimи т. д.) с первым графиком
  • сюжет с цветами и альфами, чтобы получить окраску, которую вы после

2

Вы также можете сделать это с помощью misc3d(который отображает интерактивный rglсюжет).

library(misc3d)
R <- 3; r <- 1
fx <- function(u,v) (R+r*cos(u))*cos(v)
fy <- function(u,v) (R+r*cos(u))*sin(v)
fz <- function(u,v) r*sin(u)
parametric3d(fx, fy, fz, umin=0, umax=2*pi, vmin=0, vmax=2*pi, color="red")
gx <- function(u,v) fx(u,v) - R
gy <- fz
gz <- fy
parametric3d(gx, gy, gz, umin=0, umax=2*pi, vmin=0, vmax=2*pi, color="blue", 
             add = TRUE)

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

г, участок, Gnuplot,
Похожие вопросы