Gnuplot:使用绘图以正确的深度顺序绘制3d块

切斯坎特

我正在扩展Hagen Wierstorf的脚本,用于绘制多维数据集以绘制任意大小的块。

这是我的代码:

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)

block.fct的内容:

# 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

有没有办法解决这个问题-如以正确的深度顺序绘制表面?

切斯坎特

不。

Gnuplot是具有一些模拟3D功能的2D绘图程序。

实际上,其他2D绘图程序(例如适用于python的matplotlib)也存在相同的问题。

要创建真正的3D图,应该考虑使用MATLAB(原始)或Mayavi for Python(请参阅:matplotlib中是否有诸如深度缓冲区之类的东西?)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Gnuplot:使用绘图以正确的深度顺序绘制3d块

来自分类Dev

使用plot3d在单个绘图窗口中绘制多个3D图像

来自分类Dev

使用plot3d在单个绘图窗口中绘制多个3D图像

来自分类Dev

使用绘图在一张图中绘制多条3d线

来自分类Dev

使用Matlab进行3D绘图

来自分类Dev

使用Matlab进行3D绘图

来自分类Dev

如何使用gnuplot从数据集中绘制3d标量字段

来自分类Dev

Matplotlib 3D 绘图,如何正确使用 set_zlim()

来自分类Dev

使用gnuplot 4.6绘制绘图盒图

来自分类Dev

使用gnuplot 4.6绘制绘图盒图

来自分类Dev

在3D gnuplot中使用Xtics

来自分类Dev

gnuplot-正确剪切3D图(图)

来自分类Dev

如何使用文本文件中包含的 x、y、z 数据在 gnuplot 中绘制 3D 线图?

来自分类Dev

Perl Gnuplot-重新定义3d绘图调色板

来自分类Dev

GnuPlot ::以非常规格式记录的3D绘图

来自分类Dev

如何在gnuplot中添加3D绘图上的垂直线?

来自分类Dev

gnuplot 中的矢量场 3D 绘图,带有矢量轮廓(底部)

来自分类Dev

使用matplotlib进行连续3d绘图

来自分类Dev

使用matplotlib从导入的数据进行3D绘图

来自分类Dev

怪异的逐像素3d绘图程序[通过拖动窗口进行快速绘制]

来自分类Dev

如何用绘图表示法绘制多条3d线?

来自分类Dev

gnuplot | 3D图层

来自分类Dev

gnuplot直方图3d

来自分类Dev

gnuplot直方图3d

来自分类Dev

如何使用绘图在gnuplot中绘制不同的线段

来自分类Dev

在Matlab,matplotlib或gnuplot中以3D形式绘制密度矩阵

来自分类Dev

gnuplot:在3D图中绘制一个填充的矩形(图)

来自分类Dev

gnuplot:如何在不同直径的3D中绘制均匀球体?

来自分类Dev

在Matlab,matplotlib或gnuplot中以3D形式绘制密度矩阵

Related 相关文章

热门标签

归档