(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【R言語】scatterplot3dのcloorを利用してアポロチョコを描画する

スポンサーリンク

ネタ

アポロとは明治が製造販売しているチョコレート、 上がピンクで下が茶色の美味しいお菓子です。
三角形の特徴的な形は、1969年に月面着陸した宇宙船アポロ11号がモチーフになっています。

本記事ではアポロをR言語で立体描画した際の流れを記載しました。応用が利く内容ではないですが、話のネタにやっただけで、技術的は話は過去記事の寄せ集めです。


アポロチョコの立体データを取得する

アポロチョコレートは帰還船の形をモチーフにしています。
f:id:mtiit:20190912092011j:plain

これらの3次元データは公表されていないので、似た形である富士山のデータを利用します。

美しい円錐状の富士山ですが、国土地理院が山岳の3Dデータを公開してくれています。

データの読み込みは上の記事にもある通りmatrix関数が利用できます。

データ自体を一次元配列として取得します。

> mt_fj <- matrix(scan("C:/XXX/dem.csv",sep=","))
[1] Read 66049 items

アプロデータの描画

富士山の立体データを取得したので後はこれを上部はピンク、下部は茶色で描画するのみです。
以下の記事と本質的には同じですが、scatterplot3d関数を利用し、高さに応じて色分けをします。

for(i in 1:257){
for(j in 1:257){
 if(i==1 && j==1){
  if(mt_fj[(i-1)*257+j]>35){
   apollo <- c(i,j,mt_fj[(i-1)*257+j],"#ff7fbf")
  }
  else {
   apollo <- c(i,j,mt_fj[(i-1)*257+j],"#6c3524")
  }
 }
 else{
  if(mt_fj[(i-1)*257+j]>35){
   apollo <- rbind(apollo,c(i,j,mt_fj[(i-1)*257+j],"#ff7fbf"))
  }
  else{
   apollo <- rbind(apollo,c(i,j,mt_fj[(i-1)*257+j],"#6c3524"))
  }
 }
}
}

scatterplot3d(apollo[,1:3],color=apollo[,4],grid=FALSE,xlab="",ylab="",zlab="")

f:id:mtiit:20190912093200p:plain

1,2列目にはX座標Y座標、3列目に高さ、4列目に色情報を入れています。

おまけ

逆アポロ
f:id:mtiit:20190912093211p:plain

以上です。