1

私は3D座標のセットを持っています(以下-3D空間の単一の点のみ):

x <- c(-521.531433, -521.511658, -521.515259, -521.518127, -521.563416, -521.558044, -521.571228, -521.607178, -521.631165, -521.659973)
y <- c(154.499557, 154.479568, 154.438705, 154.398682, 154.580688, 154.365189, 154.3564, 154.559189, 154.341309, 154.344223)
z <- c(864.379272, 864.354675, 864.365479, 864.363831, 864.495667, 864.35498, 864.358582, 864.50415, 864.35553, 864.359863)
xyz <- data.frame(x,y,z)

このポイントの時系列プロットを3Dレンダリングで作成する必要があります(プロットを回転させるなど)。プロットは、上記の時点の軌跡を(たとえば実線の形で)視覚化します。'rgl'パッケージplot3dメソッドで使用しましたが、時系列をプロットすることはできません(以下では、時系列の最初のフレームから1つのポイントをプロットするだけです)。

require(rgl)    
plot3d(xyz[1,1],xyz[1,2],xyz[1,3],axes=F,xlab="",ylab="",zlab="") 

この投稿を見つけましたが、リアルタイムでレンダリングされた3Dプロットを実際には扱っていません。何か提案をいただければ幸いです。ありがとうございました。

4

3 に答える 3

3

あなたが読むならば、help(plot3d)あなたは線を引く方法を見ることができます:

require(rgl)    
plot3d(xyz$x,xyz$y,xyz$z,type="l")

それはあなたが望むものですか?

于 2011-11-16T14:16:10.310 に答える
3

これはどう?これはrgl.pop()、ポイントとラインを削除し、それらをトレイルとして描画するために使用します-速度を制御するためにsleep引数を変更します:

ts <- function(xyz,sleep=0.3){
  plot3d(xyz,type="n")
  n = nrow(xyz)
  p = points3d(xyz[1,])
  l = lines3d(xyz[1,])
  for(i in 2:n){
    Sys.sleep(sleep)
    rgl.pop("shapes",p)
    rgl.pop("shapes",l)
    p=points3d(xyz[i,])
    l=lines3d(xyz[1:i,])
  }
}
于 2011-11-16T14:42:04.947 に答える
2

解決策は思ったよりも簡単で、問題はas.matrixデータを使用しなかったことです。(list) object cannot be coerced to type 'double'を使用してデータセット全体をプロットしようとしたときにエラーが発生していplot3dました(これに対する解決策はここにあります)。したがって、座標のセットの時系列(私の場合は2人のアクターのモーションキャプチャデータ)をプロットする必要がある場合は、これが私の完全なソリューションです(以下のデータセットでのみ機能します!):

  • サンプルデータセットをダウンロードする
  • 上記のデータをテーブルに読み込みます。

    data <- read.table("Bob12.txt",sep="\t")
    
  • XYZ座標を個別の行列に抽出します。

    x <- as.matrix(subset(data,select=seq(1,88,3)))
    y <- as.matrix(subset(data,select=seq(2,89,3)))
    z <- as.matrix(subset(data,select=seq(3,90,3)))
    
  • 'rgl'パッケージを使用して、3Dレンダリングされた素敵なプロットに座標をプロットします。

    require(rgl)
    plot3d(x[1:nrow(x),],y[1:nrow(y),],z[1:nrow(z),],axes=F,xlab="",ylab="",zlab="")
    

下の画像のようなものが表示されるはずです(ただし、回転させることもできます)。そこに人々のための共同センターがあることを認識できることを願っています。視覚的に良くするために、まだ調整する必要があります。最初のフレームをポイントとして(俳優の関節をはっきりと見るために)、次に目に見えるブレークを設定し、残りのフレームを線として設定します。

上記のデータからの上記のコードの出力

于 2011-11-17T18:41:56.783 に答える