[Obsolete] bash + Povray > conv-pov-exec (2008) > x,y,z座標ファイルに基づき、球粒子により構成されたaggregateの画像を生成する


▲この記事は10年以上前(2007年?)の記事執筆者によるソースだけを掲載しています。 参考にはしない方が良いでしょう。
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6
POV-Ray 3.7.0.unofficial

処理概要

  • x,y,z座標のファイルがある
  • bashによりpovrayのファイルを作る
  • povrayを実行して画像作成

ファイル

bashスクリプト

conv-pov-exec
#!/usr/bin/env bash


#INPUT
#   LN-SHAPE : x,y,z, information 
#
#
#

#config only for MacOSX, following lines are required
#function seq(){ 
#  jot $2 $1 $2 
#}


XXX=0.0
YYY=0.0
ZZZ=0.0
RRR=0.5   #config radius of monomer in [LN-SHAPE]



#copy header information
cat CONFIG/in.base > res.pov



#obtaine number of lines 
rnum=`wc -l LN-SHAPE | awk '{print $1}'`
for ir in `seq 1 $rnum`;do
#T  echo $ir
  base=`head -n $ir LN-SHAPE | tail -n 1`
  XXX=`echo $base | awk '{print $1}'`
  ZZZ=`echo $base | awk '{print $2}'`   #for povray coordinate (X,Z,Y)
  YYY=`echo $base | awk '{print $3}'`

 cat CONFIG/in.sph1 | sed 's/XXX/'$XXX'/g'  | sed 's/YYY/'$YYY'/g'  | sed 's/ZZZ/'$ZZZ'/g'  | sed 's/RRR/'$RRR'/g' >> res.pov
done 



echo "type"
echo "  povray res.pov" 
echo
echo "to create [res.png] file"

exit

Povray用ベースファイル

CONFIGディレクトリ以下に置いて使用していた。

CONFIG/in.baseファイル

camera {
  location <20, 20, -20>
  look_at <0, 0, 0>
}
light_source { <100, 200, -100>
  color rgb <1.0, 1.0, 1.0>
}

background{color rgb <1.0,1.0,1.0>}
CONFIG/in.sph1ファイル

sphere { <XXX, YYY, ZZZ>, RRR
  texture {
    pigment { color rgb <0.7,0.7,0.7> }
    finish {      ambient 0.4    }
  }
}

座標ファイル

Symbolic linkされたファイル。

LN-SHAPE
-0.206024 -0.0500037 -0.362243
0.240619 -0.0408003 -1.25691
-0.222088 -0.173478 -2.13343
-0.428536 0.741937 -0.930855
-0.456008 0.512586 -2.82234
-1.09577 1.1038 -2.33126
-0.723359 1.83366 -1.75801
-0.220487 -0.721207 0.378889
0.00143984 2.49459 -1.56351
0.276163 1.17341 -2.9874
0.285958 -1.50224 0.74427
-0.613472 -1.91975 0.61499
-1.38449 -2.30775 0.110027
-0.998799 -1.45723 1.41349
0.346688 1.3107 -0.656026
-0.907595 -2.08359 -0.739869
-1.17658 -1.41438 2.39663
-1.73311 -1.51981 -0.766118
0.951388 2.7415 -1.37211
0.487672 -0.0193166 0.455449
0.0525986 -1.80593 -0.709314
0.23501 2.16789 -2.89089
0.448589 3.52376 -1.00434
-0.135017 -0.98297 -2.71407
-1.66636 -1.46246 3.26715
-0.616715 2.64807 -2.68117
-0.0390232 3.42868 -2.91975
-1.79448 1.73051 -1.98622
-0.110748 1.91672 -3.79498
0.553308 -2.12589 1.47883
1.23408 -0.151325 -1.28544
0.0288372 -2.02543 2.32432
1.52134 -2.33078 1.62353
-0.696783 1.14755 -4.04982
0.488679 4.50816 -0.833022
0.564678 3.83997 -0.0627753
-1.49875 3.06824 -2.89442
0.133993 4.20514 -3.5257
1.36141 4.07263 -1.05359
0.816969 3.32333 -3.42589
1.10045 -2.83199 2.3796
-2.43676 -0.917459 2.93631
-2.51608 -1.95059 3.06787
0.0816325 -3.0228 2.27474
-0.718472 -0.726951 2.96017
-0.650296 -1.1209 3.87677
-0.977801 -0.509779 -0.801523
-2.04562 -2.50054 3.75796
-1.31449 1.06261 -0.595819
2.41856 -1.88956 1.64138
1.03493 -2.7097 3.36993
-0.710678 -3.39893 1.79435
1.99649 4.36966 -0.34053
-2.72008 0.0344286 2.81952
0.659126 1.98077 -4.42995
-3.51294 -1.98111 3.14085
1.55759 -1.78964 2.46368
0.838695 0.467073 -0.344681
-1.96557 2.04592 -2.91962
-1.02314 -4.07531 2.46135
-1.42092 -2.76968 2.10995
-2.47699 -0.929391 -1.07924
0.961407 -1.00494 2.29394
1.47686 -3.18078 4.13333
1.59369 2.32311 -4.52681
1.1534 -1.17304 3.26083
-2.29207 -2.72571 1.6209
3.21816 -1.80445 1.04691
-2.16371 3.75552 -2.60209
-0.830271 2.64796 -3.6581
-2.3148 0.948342 2.79693
1.17717 1.74263 -0.304258
-2.54456 1.85436 -3.71214
1.36126 -2.92476 0.835136
4.14273 -1.42362 1.03472
-2.8345 0.669632 1.98932
1.69806 4.69919 -1.7565
0.897478 -3.96417 4.35834
0.484193 -3.0591 4.45863
1.86665 5.43792 -1.10392
-2.19183 -2.63941 4.73742
-1.8487 -1.21509 4.21875
-1.039 -0.956109 -3.14079
0.142327 -0.957862 -3.67452
-2.01737 -3.99703 2.388
-2.99825 1.21119 3.47797
0.660338 0.740036 -2.17217
1.67136 -3.71465 3.31043
3.48255 -1.17357 1.77636
1.59383 4.26601 -2.65176
-1.61848 4.51689 -2.95285
0.494414 -3.19393 0.41546
2.17663 -3.07998 1.52713
-0.829575 -2.30122 -1.71278
-2.53564 -1.95282 5.37803
-1.62508 -0.415624 -3.74444
1.84575 -1.67914 3.77514
-3.26513 2.08066 -3.05672
4.3415 -1.45952 2.20114
-1.93534 2.24691 -1.14154
2.58325 -1.74434 4.44733
2.57185 5.40147 -1.81198
1.94154 3.51569 -3.214
1.04867 -1.83227 0.18807
0.203212 1.64831 0.274263
1.59359 -4.66848 4.49751
1.48627 -4.53763 2.77336
0.680725 -1.50128 -2.97082
3.18338 -1.2651 0.205548
-1.4624 -3.13687 -0.44358
-1.52817 2.38648 -4.32485
3.5634 -1.68452 -0.618876
-0.294682 -3.13494 -0.195971
-1.71946 -2.18964 -2.15511
2.86306 -1.9513 2.53503
2.94393 4.64103 -0.509956
0.984935 4.55772 0.492394
-0.0705575 5.03808 -0.19549
-1.35522 0.949252 3.07837
1.42784 4.23828 1.33012
2.43869 -3.35801 3.84335
2.85093 4.46617 -2.02953
-1.75051 -4.08102 -0.603495
-0.749211 -3.37211 -1.10391
-2.81923 2.00166 -1.53977
2.04954 1.79209 -5.24111
1.43893 2.58218 -2.23055
-4.16261 1.86064 -3.43898

実行

$ bash conv-pov-exec
type
  povray res.pov

to create [res.png] file

上記のメッセージに従い以下を実行すると[res.png]ファイルが生成される。

$ povray res.pov

eogでres.pngを開いた結果。
(フラクタル次元2程度の粒子の例)

生成されるファイル

conv-pov-execにより生成されるres.povファイル

res.pov
camera {
  location <20, 20, -20>
  look_at <0, 0, 0>
}
light_source { <100, 200, -100>
  color rgb <1.0, 1.0, 1.0>
}

background{color rgb <1.0,1.0,1.0>}




sphere { <-0.206024, -0.362243, -0.0500037>, 0.5
  texture {
    pigment { color rgb <0.7,0.7,0.7> }
    finish {      ambient 0.4    }
  }
}


sphere { <0.240619, -1.25691, -0.0408003>, 0.5
  texture {
    pigment { color rgb <0.7,0.7,0.7> }
    finish {      ambient 0.4    }
  }
}

...(以下sphereの定義が続く)

備考

206,800個の座標ファイルを処理した。

以下の実行時間になった。Matplotlibでの描画時間と同じ程度遅い。

  • bash conv-pov-exec: 43分
  • povray res.pov: 3秒

Povray利用の利点

Matplotlibと比べて、Povray利用の利点はあるだろう。
上記のres.povファイルが作成されれば、エディタでcamera設定を変更して異なるViewでの描画が秒オーダーの処理時間でできる。
一方で、Matplotlibではviewの変更後の描画に数十分オーダーの処理時間がかかる。