(O+P)ut

OutPut Log by SE in SIer



(O+P)ut

Output Log by SE

【R言語】点群による立方体の描画

スポンサーリンク

はじめに

注意本記事はかなり無理やり立方体を描画しています。

もっとスマートな方法が見つかればそちらに切り替えようと思いますが、備忘録としてメモしておきます。

方針

scatterplot3dで立方体の表面を点群として表現します。

実装

一辺を50個の点群で作るとすれば一面は2500個の点群で構成するイメージです。

例えば

for(i in 1:50) {
 for(j in 1:50) {
  rbind(cubetest,c(basex+1,basey+i,basez+j,"#ff0000"))
 }
}

上記で一面分のデータがcubetestに格納されます。
ここでbasex等は定数でオフセットの役割を持ちます。

同じように反対側の一面は以下でできます。

for(i in 1:50) {
 for(j in 1:50) {
  rbind(cubetest,c(basex+50,basey+i,basez+j,"#ff0000"))
 }
}

これを残りの4面でやれば立方体が描画される算段です。

rbind(cubetest,c(basex+i,basey+1,basez+j,"#ff0000"))
rbind(cubetest,c(basex+i,basey+50,basez+j,"#ff0000"))
rbind(cubetest,c(basex+i,basey+j,basez+1,"#ff0000"))
rbind(cubetest,c(basex+i,basey+j,basez+50,"#ff0000"))

試しに描画範囲を

xlim=c(0,500),ylim=c(0,500),zlim=c(0,500)

オフセットを

basex=225
basey=225
basez=225

で2500個×6面の点群で構成される立方体は以下となります。
f:id:mtiit:20190917183708p:plain

描画コマンドは以下です。

scatterplot3d(xlim=c(0,500),ylim=c(0,500),zlim=c(0,500),cubetest[,1:3],color=cubetest[,4],grid=FALSE,xlab="",ylab="",zlab="",pch =15)

立方体と分かりづらいので少し回転させてみました。

f:id:mtiit:20190927115719g:plain
立方体の描画角度を変更したGIF

この立方体を組み合わせると、以下のような図形も生成できるのでアイデア次第ではユニークな使い方ができそうです。

f:id:mtiit:20190917184420p:plain
立方体を組み合わせたアルファベット「I」

終わりに

今回は立方体の表面を点群で埋め尽くすことで立方体を作成しました。

誤っても以下のように中身を埋め尽くさないようご注意ください。

for(i in 1:50) {
 for(j in 1:50) {
   for(k in 1:50) {

立方体の描画に別の関数が見つかれば、本記事をアップデートしたいと思います。


他の記事を読む