所以我需要绘制由三个点定义的 plane (因为它们必须是FLAT),这三个点都来自我的等式。我可以重新定义代码,使得三点之间有一个空格。我选择不这样做。我刚刚添加了评论,以便明确划分点的位置。他们不是真的在那里。
# surface 1
1.000 0.000 0.000
-46.777 -0.702 -1.692
0.000 3.000 5.500
# surface 2
0.998 0.030 0.055
-46.451 -2.099 -5.068
-0.468 2.993 5.483
# surface 3
0.991 0.060 0.110
-45.804 -3.471 -8.400
-0.932 2.972 5.432
# surface 4
0.979 0.089 0.164
-44.842 -4.803 -11.659
-1.390 2.937 5.348
# surface 5
0.963 0.119 0.217
-43.574 -6.079 -14.816
-1.839 2.889 5.232
#... and so on
现在我可以使用此代码只绘制一个表面
set dgrid3d 10,10
set style data lines
set pm3d
i=0
splot '5surf' every ::i::(i+2) pal
但是当我把它插入do循环
时n = 1000
unset key
set terminal gif size 800,600 crop
outtmpl = 'pic/output%07d.gif'
set dgrid3d 10,10
set style data lines
set pm3d
do for [i=0:n:3] {
set output sprintf(outtmpl, i)
splot '5surf' every ::i::(i+2) pal
print i
}
set output
我得到了弯曲的表面,这是完全错误的。 (双关语)
根据我的分析,表面看起来有点像旋转。
1 1 4.8
-1 1 5.6
-1 -1 2.4
1 -1 1.6
1 1 4.8
使用polygon,但我无法从文件中读取。
最后编辑:如果有人磕磕绊绊地想知道我是如何使用原来的三个点找到四个点的,那就是找到包含三个点的平面方程并插入(\ pm 1,\ pm 1,z)在那里。求解z并考虑所有四种情况。一个基本的计算问题,真的
答案 0 :(得分:1)
使用方块的点数,您还必须插入一个空行以使pm3d
正常工作:
surface.dat
:
-1 -1 2.4
-1 1 5.6
1 -1 1.6
1 1 4.8
不是,对于两个块,y值总是以相同的顺序-1, 1
。用
set pm3d
splot 'surface.dat'
如果要从一个文件中放置多个曲面,现在可以使用两个空行分隔两个曲面,然后可以使用index
访问这些曲面:
surfaces.dat
:
-1 -1 2.4
-1 1 5.6
1 -1 1.6
1 1 4.8
-1 -1 1.4
-1 1 4.6
1 -1 0.6
1 1 3.8
您可以使用stats
来计算块数:
stats 'surfaces.dat' nooutput
set pm3d
do for [i=0:STATS_blocks - 1] {
splot 'surfaces.dat' index i
}