5

私はRでかなり複雑なチャートに取り組んできました.X、Y、Z空間全体(例えば、表面の下とその上)に分布する表面と点を持つワイヤーフレームがあります。

問題は、プロットされたポイントがサーフェスの下にあるように「見えない」ことです。

このチャートを視覚化して、ポイントが表面の下に見えるようにする最善の方法を見つけようとしています。ワイヤーフレームとクラウドのサンプル コードは次の場所から取得します: R-List Posting

例のコード:

library(lattice)
surf <-
expand.grid(x = seq(-pi, pi, length = 50),
            y = seq(-pi, pi, length = 50))

surf$z <-
with(surf, {
    d <- 3 * sqrt(x^2 + y^2)
    exp(-0.02 * d^2) * sin(d)
})

g <- surf

pts <-   data.frame(x =rbind(2,2,2), y=rbind(-2,-2,-2), z=rbind(.5,0,-.5))

wireframe(z ~ x * y, g, aspect = c(1, .5),
      drape=TRUE,
      scales = list(arrows = FALSE),
      pts = pts,
      panel.3d.wireframe =
      function(x, y, z,
               xlim, ylim, zlim,
               xlim.scaled, ylim.scaled, zlim.scaled,
               pts,
               ...) {
          panel.3dwire(x = x, y = y, z = z,
                       xlim = xlim,
                       ylim = ylim,
                       zlim = zlim,
                       xlim.scaled = xlim.scaled,
                       ylim.scaled = ylim.scaled,
                       zlim.scaled = zlim.scaled,
                       ...)
          xx <-
              xlim.scaled[1] + diff(xlim.scaled) *
                  (pts$x - xlim[1]) / diff(xlim)
          yy <-
              ylim.scaled[1] + diff(ylim.scaled) *
                  (pts$y - ylim[1]) / diff(ylim)
          zz <-
              zlim.scaled[1] + diff(zlim.scaled) *
                  (pts$z - zlim[1]) / diff(zlim)
          panel.3dscatter(x = xx,
                          y = yy,
                          z = zz,
                          xlim = xlim,
                          ylim = ylim,
                          zlim = zlim,
                          xlim.scaled = xlim.scaled,
                          ylim.scaled = ylim.scaled,
                          zlim.scaled = zlim.scaled,
                          ...)
      })

画面キャプチャ

私の例を見ると、pts の点は実際には X,Y =(2,-2) で、z が .5 から -.5 になる垂直線にあります。

しかし、私の目には、3 番目の点は表面の下にあるようには見えず、座標 (2,-3,0) にあるように見えます。

これは私の目がこれを誤解しているだけですか?

私のポイントをより「3D」に見せる方法について誰か提案がありますか? おそらく、表面にある種の透明度を使用して、ポイントの色をミュートして「表面の下」に見えるようにしますか?

ポイントの色を変えてみました (表面上は赤、表面下は青) が、グラフはあまり役に立ちません。

4

1 に答える 1

6

これはあなたを始めるかもしれません:

library(emdbook)
sfun <- function(x,y) {
  d <- 3 * sqrt(x^2 + y^2)
  exp(-0.02 * d^2) * sin(d)
}

cc <- curve3d(sfun(x,y),xlim=c(-pi,pi),ylim=c(-pi,pi),n=c(50,50),
        sys3d="rgl")

colvec <- colorRampPalette(c("pink","white","lightblue"))(100)
with(cc,persp3d(x,y,z,col=colvec[cut(z,100)],alpha=0.5))
pts <-   data.frame(x=c(2,2,2), y=c(-2,-2,-2), z=c(.5,0,-.5))
with(pts,spheres3d(x,y,z,col="blue",radius=0.1))
rgl.snapshot("rgltmp1.png")

ここに画像の説明を入力

于 2011-12-22T20:49:25.103 に答える