私はHagen Wierstorf's scripts for drawing cubesを任意のサイズのブロックにプロットしています。ここでGnuplot:splotを使って正しい奥行き順の3Dブロックを描く
は私のコードです:block.fctの
reset
set terminal qt size 700,524 enhanced font 'Verdana,10'
# color definitions
set cbrange [1:10]
set style fill transparent solid 1.0
set palette defined (\
1 '#ff4c4d',\
2 '#ce4c7d',\
3 '#ae559e',\
4 '#df866d',\
5 '#ffb66d',\
6 '#ffe7cf',\
7 '#cecece',\
8 '#6d6d6d',\
9 '#4c4c8e',\
10 '#4c4cef')
set style line 1 lc rgb '#ff2727' lt 1 lw 0.5
set style line 2 lc rgb '#b90046' lt 1 lw 0.5
set style line 3 lc rgb '#8b0b74' lt 1 lw 0.5
set style line 4 lc rgb '#d1512e' lt 1 lw 0.5
set style line 5 lc rgb '#ff972f' lt 1 lw 0.5
set style line 6 lc rgb '#ffddba' lt 1 lw 0.5
set style line 7 lc rgb '#b9b9b9' lt 1 lw 0.5
set style line 8 lc rgb '#2e2e2e' lt 1 lw 0.5
set style line 9 lc rgb '#00005d' lt 1 lw 0.5
set style line 10 lc rgb '#0000e8' lt 1 lw 0.5
unset key
unset border
unset tics
unset colorbox
set view equal xyz
# load block function
load 'block.fct'
set pm3d hidden3d
set pm3d implicit
unset hidden3d
set lmargin 2
set rmargin 0
set bmargin 0
set tmargin 0
# get block positions from file
add_block(x,y,z,h,l,w,c) = sprintf('block(%f,%f,%f,%f,%f,%f,%i) w l ls %i,',x,y,z,h,l,w,c,c)
CMD = ''
stats 'proofblocks3.txt' u 1:(CMD = CMD.add_block($1,$2,$3,$4,$5,$6,$7)) nooutput
set xrange [0:4]
set yrange [0:4]
set zrange [0:3]
CMD = 'splot '.CMD.'1/0 w l ls 2'
# plot block
eval(CMD)
内容:
# gnuplot function to create a cube
#
# Usage: block(x, y, z, w, l, h, c)
block(x,y,z,w,l,h,c) = sprintf('<echo "\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\
%f %f %f %i\n\n"',\
0.1+x,0.1+y,0.1+z,c,\
0.1+x,0.1+y,(h-0.1)+z,c,\
0.1+x,(l-0.1)+y,(h-0.1)+z,c,\
0.1+x,(l-0.1)+y,0.1+z,c,\
0.1+x,0.1+y,0.1+z,c,\
(w-0.1)+x,0.1+y,0.1+z,c,\
(w-0.1)+x,0.1+y,h-0.1+z,c,\
(w-0.1)+x,(l-0.1)+y,h-0.1+z,c,\
(w-0.1)+x,(l-0.1)+y,0.1+z,c,\
(w-0.1)+x,0.1+y,0.1+z,c,\
0.1+x,0.1+y,0.1+z,c,\
(w-0.1+x),0.1+y,0.1+z,c,\
(w-0.1+x),(l-0.1)+y,0.1+z,c,\
0.1+x,(l-0.1+y),0.1+z,c,\
0.1+x,0.1+y,0.1+z,c,\
0.1+x,0.1+y,(h-0.1+z),c,\
(w-0.1)+x,0.1+y,(h-0.1+z),c,\
(w-0.1)+x,(l-0.1)+y,(h-0.1+z),c,\
0.1+x,(l-0.1)+y,(h-0.1+z),c,\
0.1+x,0.1+y,(h-0.1)+z,c\
)
問題が平面(ブロックの側)の前に長い別のよりときに、ということですgnuplotはレイトレーサのようには機能しないので、ビューアに近いポイントがあるので、ビューアに近い方の平面の前面に大きな平面をプロットします:
上記の画像に使用点の
座標 - proofblocks3.txt内容:
# x y z w l h color
0 0 0 1 1 1 1
1 0 0 1 3 1 2
2 0 0 1 1 1 3
0 1 0 1 1 1 4
2 1 0 1 1 1 5
0 2 0 1 1 1 6
2 2 0 1 1 1 7
この問題を回避する方法はあります - 表面が正しい深さ順にプロットしているのように?
テストのために 'proofblocks3.txt'の内容を与えることができますか?一方、 'set pm3d depthorder'を試してください。http://gnuplot.sourceforge.net/demo/hidden2.htmlの2番目の例を参照してください。 – Christoph
こんにちは@Christoph、私は 'proofblocks3.txt'の内容を投稿しました。残念なことに、 'depthorder'はプロットの中で何も変わらなかった。私は "unhidden3d"を "unset hidden3d"に修正するようにメインスクリプトを修正しました。ありがとう! – Cescante
gnuplotを使ってどのように動作させることができるかわかりません。 'set hidden3d'と' pm3d'設定だけでは動作しますが、色は出ません;) 'set pm3d hidden3d'は非常に特別な場合にのみ動作します。それはgnuplotが限界に達する場所です。 – Christoph