gnuPlot 3d 实体作为表面给出(,作为顶点序列给出)



标题基本上是这么说的。我想绘制以类似于下面的立方体:

// Front
0 0 0
0 0 1
1 0 1
1 0 0
// Back
0 1 0
0 1 1
1 1 1
1 1 0
// Left
0 0 0
0 1 0
0 1 1
0 0 1
// Right
1 0 0
1 1 0
1 1 1
1 0 1
// Bottom
0 0 0
1 0 0
1 1 0
0 1 0
// Top
0 0 1
1 0 1
1 1 1
0 1 1

我不限于任何特定的程序,但我认为 gnuplot 可以用来做到这一点。你会怎么做?(当然我自己也尝试过找出来,但我是一个 gnuplot 菜鸟,gnuplot 太大了,无法直接找到答案)

我不得不稍微重新排列你的数据文件:

#front
0 0 0
0 0 1
1 0 0
1 0 1

#back
0 1 0
0 1 1
1 1 0
1 1 1

#left
0 0 0
0 1 0
0 0 1
0 1 1

#right
1 0 0
1 1 0
1 0 1
1 1 1

#bottom
0 0 0
1 0 0
0 1 0
1 1 0

#top
0 0 1
1 0 1
0 1 1
1 1 1

然后可以用以下方法绘制:

set pm3d depthorder
splot "datafile.dat" u 1:2:3:-2 w pm3d

虽然这有效(主要是 - 按深度顺序排序在 gnuplot 中并不完美),但做更复杂的形状很快就会变得乏味。

基本上,它之所以有效,是因为我在数据文件中分别指定了每个四边形(在本例中为正方形)——四边形由 2 个空行分隔。 每个正方形由 4 个顶点组成,以 2 个"扫描"排序。 因此,第一次扫描从点(0,0,0)到(0,0,1)。 然后下一次扫描从 (1,0,0) 到 (1,0,1)。 然后,Gnuplot 将扫描连接在一起。

使用这种技术,您还可以制作三角形(三角形只是四边形,其中最后两个点是相同的;)。

最后,每个表面的着色都是由pseudo-column"-2"完成的——这实际上只是四边形的数字。 您可以在数据文件中添加第四个字段,并根据需要将其用于颜色。

然而,我有一种感觉,这个使用 gnuplot 的解决方案并不是你要找的,因为这种东西并不是 gnuplot 的真正设计目的——可能有一个工具可以更容易地做到这一点——我只是不知道它是什么。

最新更新