2016-01-20 73 views
-2

假設,我們在球面座標的極座標方程:
F(THETA)= 1 + COS [的2θ]如何在R中創建給定球形極座標方程的3D圖?

如果我們用數學來製作3D繪圖,我們可以這樣做:

SphericalPlot3d[1+cos[2theta],{theta,0,pi},{phi,0,2pi}] 

現在問題仍然存在:「我們如何在R中做同樣的事情?」

的鏈接,數學是:
https://reference.wolfram.com/language/ref/SphericalPlot3D.html

+0

這? http://stackoverflow.com/questions/12085095/how-to-plot-a-three-dimensional-sphere-in-r-based-on-center-and-radius – Badger

+0

@Badger,這是爲x,y, z,我正在尋找r,theta,phi。無論如何感謝鏈接 –

+0

這是你的問題,所以你可以自由地編輯錯誤的術語,如果你不想讓這個問題有用(儘管如此,你不應該抱怨downvotes)。 [極座標](https://en.wikipedia.org/wiki/Polar_coordinate_system)是2D的,你在這裏有[球座標](https://en.wikipedia.org/wiki/Spherical_coordinate_system)。 Mathematica函數的名稱也有點暗示... – Stibu

回答

2

plot3D允許你創建3D繪圖中R.它帶有x,y和z座標爲輸入,所以需要一個額外的步驟來轉換球座標到笛卡兒。要做到這一步,予定義一個函數,如下所示:

spher2cart <- function(r, theta, phi) { 

    x <- r * sin(theta) * cos(phi) 
    y <- r * sin(theta) * sin(phi) 
    z <- r * cos(theta) 

    return(list(x = x, y = y, z = z)) 
} 

下一步驟是定義值的網格的角thetaphiplot3D提供功能mesh()可以輕鬆完成此操作。

library(plot3D) 
theta <- seq(0, pi, length = 50) 
phi <- seq(0, 2*pi, length = 50) 
M <- mesh(theta, phi) 
names(M) <- c("theta", "phi") 

然後,可以計算出r(對應於Mathematica的SphericalPlot3d的第一個參數)的值:

r <- 1 + cos(2 * M$theta) 

正如我已經提到的,我們需要在直角座標系來表達這一點:

cart <- spher2cart(r, M$theta, M$phi) 

最後,創建情節:

par(mar = c(0, 0, 0, 0)) 
surf3D(cart$x, cart$y, cart$z, border = "black", 
     colkey = FALSE, bty = "f", 
     phi = 20, theta = 30) 

enter image description here

有很多選擇,surf3D(),你可以用?surf3D閱讀它們。那些我使用的是:

  • border = "black":這會打開黑色網格線。
  • colkey = FALSE:關閉顏色圖例
  • bty = "f":繪製完整的座標軸。如果你不想要盒子,省略這個。
  • phi = 20theta = 30:更改從中看情節

還有一個vignette for plot3d用許多實例的角度。

編輯: 作爲第二個例子我示出了具有一些修改的同積:

  • 的表面被着色通過使用col = "grey"(其他顏色也是可能的)的灰色。
  • 使用xlab = "", ylab = "", zlab = ""關閉軸標籤。

這導致了下面的代碼和情節:

surf3D(cart$x, cart$y, cart$z, border = "black", 
     colkey = FALSE, bty = "f", 
     phi = 20, theta = 30, 
     col = "grey", 
     xlab = "", ylab = "", zlab = "") 

enter image description here

+0

不客氣!這個問題可能是由於這個問題有點混亂:錯別字,沒有首都,任意換行符等等。問題的質量不僅與你問的問題有關,而且與你的問題有關。 – Stibu

+0

感謝您的建議 –

+0

是的,我們可以。如果你真的看過答案,你就會知道:簡單地省略'bty ​​=「f」'。 – Stibu