Gnuplot:尊重 Gnuplot 3d 多边形的深度顺序 [英] Gnuplot: Respect depthorder for Gnuplot 3d polygons

查看:36
本文介绍了Gnuplot:尊重 Gnuplot 3d 多边形的深度顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个完整城市的 3D 模型,想展示一个这些建筑物的等距视图.我为此使用 gnuplot 多边形,因为我认为我不能将 pm3d 用于具有坐标的多边形不在一个明确定义的网格上.多边形以颜色显示对应于他们获得的平均太阳辐照度.一世还将地面多边形显示为线框,主要用于设置 xrange,yrange 和 zrange 自动.

远看还可以,但是放大后会发现某些多边形的深度顺序错误.

这是导入 SketchUp 的 CityGML 模型:

这就是 Gnuplot 的结果:

你知道我如何以正确的顺序显示这些多边形吗?

到这个(去掉front后):

到这个(排序后):

我认为第三张图片正是你想要的.

我使用了一个 python 脚本来对多边形进行排序,这基本上是:

  • 从文件poly_raw.dat"中读取所有多边形.该文件必须以 set object x polygon from 行开头.
  • 与带有 set view theta, phi 的 gnuplot 一样,它围绕 x 轴和 z 轴旋转多边形(暂时仅用于排序).
  • 它根据新的 y 轴对多边形进行排序.这应该是与屏幕正交的轴.
  • 它更新 gnuplot 对象 ID,即 set object x polygon 中的 x.
  • 打印已排序的多边形数据,包括set object 行.

请注意,此方法仅适用于静态图片.如果您想交互式旋转图片,它不起作用.

另请注意,如果该方法不适用于您的完整数据文件,则我可能弄乱了旋转矩阵或轴分配:)

我附上了 python 脚本、绘图文件和数据文件plot_raw.dat"和plot_sorted.dat"以供参考.

# poly.pyfrom math import cos, sin, pi从重新导入子,匹配,findall类多边形:def __init__(self):self.firstLine = ""self.points = []self.lastLine = ""def __str__(self):pointStrings = [",".join(map(str,point)) for point in self.points]s = ""s += self.firstLines += " 到 \
".join(pointStrings)s += "
"s += self.lastLine返回def readObjectFromFile(self, f, firstObjectLine):self.firstLine = firstObjectLine行 = f.readline()虽然不匹配(设置",行):坐标 = findall("[d.]+", line)坐标 = 元组(float(x)用于坐标中的x)self.points.append(坐标)行 = f.readline()self.lastLine = 行回归自我def meanAfterRotation(self, theta, phi):CX = 0.0cy = 0.0cz = 0.0theta = theta*pi/180.0phi = phi*pi/180.0对于 self.points 中的点:x,y,z = 点x,y,z = (x, y*cos(theta) - z*sin(theta), y*sin(theta) + z*cos(theta))x,y,z = (x*cos(phi) - y*sin(phi), x*sin(phi) + y*cos(phi), z)cx, cy, cz = (cx + x, cy + y, cz + z)n = len(self.points)返回(cx/n、cy/n、cz/n)def setPosition(self, posIndex):self.firstLine = sub("(d+)", str(posIndex), self.firstLine, 1)self.lastLine = sub("(d+)", str(posIndex), self.lastLine, 1)多边形 = []使用 open("poly_raw.dat") 作为 f:行 = f.readline()而线:如果 line.strip() != "":多边形.append(Polygon().readObjectFromFile(f,line))行 = f.readline()多边形排序(键 = lambda x: x.meanAfterRotation(60,30)[1], reverse = True)位置 = 1对于多边形中的 p:p.setPosition(pos)位置 += 1对于多边形中的 p:打印(页)

gnuplot 脚本:

# poly.plt, gnuplot 4.6# 交互式旋转图片时不起作用.设置样式 line 1 linecolor rgbcolor "#777777" linewidth 1设置样式增量用户设置调色板文件-"0.00000 0.23137 0.22353 0.643140.17990 0.47843 0.34510 0.717650.32010 0.34902 0.17647 0.556860.43990 0.40784 0.10980 0.364710.59010 0.46275 0.09020 0.168630.78000 0.86667 0.41569 0.243140.92990 0.92549 0.66667 0.337251.00000 0.97647 0.91765 0.82745电子设置 cbrange [50:150]设置 cbtics 25设置格式 cb "%.0f W/m²"未设置 xtics未设置 ytics未设置 ztics未设置边框设置颜色框kzoom=1.0φ=30.0θ=60.0set xyplane 0 # 去除xy平面的偏移量set view equal xyz # 强制所有三个轴的单位相等设置视图 theta、phi、kzoom#加载poly_raw.dat"加载poly_sorted.dat"设置终端 png#设置输出raw.png"设置输出sorted.png"带有线 notitle ls 1, NaN notitle 调色板的 splot "-"2.0 0.0 0.02.0 2.0 0.04.0 2.0 0.04.0 0.0 0.02.0 0.0 0.00.0 0.0 0.00.0 2.0 0.02.0 2.0 0.02.0 0.0 0.00.0 0.0 0.0电子

去除front说明符后未排序的多边形数据:

从设置对象1多边形2.0,0.0,3.0 到 3.0,0.0,3.5 到 3.0,2.0,3.5 到 2.0,2.0,3.0 到 2.0,0.0,3.0设置对象 1 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.1315从  设置对象 2 多边形4.0,0.0,3.0 到 4.0,2.0,3.0 到 3.0,2.0,3.5 到 3.0,0.0,3.5 到 4.0,0.0,3.0设置对象 2 填充实心 0.9 边框 lw 2 fc 调色板 cb 128.62192从  设置对象 3 多边形2.0,0.0,0.0 到 4.0,0.0,0.0 到 4.0,0.0,3.0 到 3.0,0.0,3.5 到 2.0,0.0,3.0 到 2.0,0.0,0.0设置对象 3 填充实心 0.9 边框 lw 2 fc 调色板 cb 100.545204从  设置对象 4 多边形4.0,0.0,0.0 到 4.0,2.0,0.0 到 4.0,2.0,3.0 到 4.0,0.0,3.0 到 4.0,0.0,0.0设置对象 4 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.58082从  设置对象 5 多边形4.0,2.0,0.0 到 2.0,2.0,0.0 到 2.0,2.0,3.0 到 3.0,2.0,3.5 到 4.0,2.0,3.0 到 4.0,2.0,0.0设置对象 5 填充实体 0.9 边框 lw 2 fc 调色板 cb 55.88219从  设置对象 6 多边形2.0,2.0,0.0 到 2.0,0.0,0.0 到 2.0,0.0,3.0 到 2.0,2.0,0.0设置对象 6 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 7 多边形2.0,2.0,0.0 到 2.0,0.0,3.0 到 2.0,2.0,3.0 到 2.0,2.0,0.0设置对象 7 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 8 多边形0.0,0.0,3.0 到 1.0,0.0,3.5 到 1.0,2.0,3.5 到 .0,2.0,3.0 到 .0,0.0,3.0设置对象 8 填充实心 0.9 边框 lw 2 fc 调色板 cb 128.1315从  设置对象 9 多边形2.0,0.0,3.0 到 2.0,2.0,3.0 到 1.0,2.0,3.5 到 1.0,0.0,3.5 到 2.0,0.0,3.0设置对象 9 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.62192从  设置对象 10 多边形0.0,0.0,0.0 到 2.0,0.0,0.0 到 2.0,0.0,3.0 到 1.0,0.0,3.5 到 .0,0.0,3.0 到 .0,0.0,0.0设置对象 10 填充实体 0.9 边框 lw 2 fc 调色板 cb 100.545204从  设置对象 11 多边形2.0,0.0,0.0 到 2.0,2.0,0.0 到 2.0,2.0,3.0 到 2.0,0.0,3.0 到 2.0,0.0,0.0设置对象 11 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.58082从  设置对象 12 多边形2.0,2.0,0.0 到 .0,2.0,0.0 到 .0,2.0,3.0 到 1.0,2.0,3.5 到 2.0,2.0,3.0 到 2.0,2.0,0.0设置对象 12 填充实体 0.9 边框 lw 2 fc 调色板 cb 55.88219从  设置对象 13 多边形0.0,2.0,0.0 到 .0,0.0,0.0 到 .0,0.0,3.0 到 .0,2.0,0.0设置对象 13 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 14 多边形0.0,2.0,0.0 到 .0,0.0,3.0 到 .0,2.0,3.0 到 .0,2.0,0.0设置对象 14 填充实心 0.9 边框 lw 2 fc 调色板 cb 85.25754

运行后的排序数据 python poly.py >poly_sorted.dat

从设置对象1多边形4.0,0.0,0.0 到 4.0,2.0,0.0 到 4.0,2.0,3.0 到 4.0,0.0,3.0 到 4.0,0.0,0.0设置对象 1 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.58082从  设置对象 2 多边形4.0,2.0,0.0 到 2.0,2.0,0.0 到 2.0,2.0,3.0 到 3.0,2.0,3.5 到 4.0,2.0,3.0 到 4.0,2.0,0.0设置对象 2 填充实体 0.9 边框 lw 2 fc 调色板 cb 55.88219从  设置对象 3 多边形2.0,2.0,0.0 到 2.0,0.0,0.0 到 2.0,0.0,3.0 到 2.0,2.0,0.0设置对象 3 填充实心 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 4 多边形2.0,2.0,0.0 到 2.0,0.0,3.0 到 2.0,2.0,3.0 到 2.0,2.0,0.0设置对象 4 填充实体 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 5 多边形2.0,0.0,0.0 到 2.0,2.0,0.0 到 2.0,2.0,3.0 到 2.0,0.0,3.0 到 2.0,0.0,0.0设置对象 5 填充实心 0.9 边框 lw 2 fc 调色板 cb 85.58082从  设置对象 6 多边形2.0,2.0,0.0 到 .0,2.0,0.0 到 .0,2.0,3.0 到 1.0,2.0,3.5 到 2.0,2.0,3.0 到 2.0,2.0,0.0设置对象 6 填充实体 0.9 边框 lw 2 fc 调色板 cb 55.88219从  设置对象 7 多边形2.0,0.0,0.0 到 4.0,0.0,0.0 到 4.0,0.0,3.0 到 3.0,0.0,3.5 到 2.0,0.0,3.0 到 2.0,0.0,0.0设置对象 7 填充实体 0.9 边框 lw 2 fc 调色板 cb 100.545204从  设置对象 8 多边形0.0,2.0,0.0 到 .0,0.0,0.0 到 .0,0.0,3.0 到 .0,2.0,0.0设置对象 8 填充实心 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 9 多边形4.0,0.0,3.0 到 4.0,2.0,3.0 到 3.0,2.0,3.5 到 3.0,0.0,3.5 到 4.0,0.0,3.0设置对象 9 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.62192从  设置对象 10 多边形0.0,2.0,0.0 到 .0,0.0,3.0 到 .0,2.0,3.0 到 .0,2.0,0.0设置对象 10 填充实心 0.9 边框 lw 2 fc 调色板 cb 85.25754从  设置对象 11 多边形0.0,0.0,0.0 到 2.0,0.0,0.0 到 2.0,0.0,3.0 到 1.0,0.0,3.5 到 .0,0.0,3.0 到 .0,0.0,0.0设置对象 11 填充实体 0.9 边框 lw 2 fc 调色板 cb 100.545204从  设置对象 12 多边形2.0,0.0,3.0 到 3.0,0.0,3.5 到 3.0,2.0,3.5 到 2.0,2.0,3.0 到 2.0,0.0,3.0设置对象 12 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.1315从  设置对象 13 多边形2.0,0.0,3.0 到 2.0,2.0,3.0 到 1.0,2.0,3.5 到 1.0,0.0,3.5 到 2.0,0.0,3.0设置对象 13 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.62192从  设置对象 14 多边形0.0,0.0,3.0 到 1.0,0.0,3.5 到 1.0,2.0,3.5 到 .0,2.0,3.0 到 .0,0.0,3.0设置对象 14 填充实体 0.9 边框 lw 2 fc 调色板 cb 128.1315

I have a 3D model of a complete city, and would like to show an isometric view of those buildings. I use gnuplot polygons for this, since I don't think I can use pm3d for polygons with coordinates that aren't on a well defined grid. The polygons are displayed with a color corresponding to the average amount of solar irradiance they get. I also display the ground polygons as wireframe, mostly to set xrange, yrange and zrange automatically.

It looks okay from far away, but when you zoom in, you see that the depthorder of some polygons are wrong.

This is the CityGML model imported into SketchUp :

This is what comes out of Gnuplot :

Do you have any idea how I could display those polygons in the right order?

Something like this would be great, but it only seems to work with splot.

Here is a Gnuplot file to see the problem (2 Buildings and 4 roofs) :

set style line 1 linecolor rgbcolor "#777777" linewidth 1
set style increment user
set palette file "-"
0.00000 0.23137 0.22353 0.64314
0.17990 0.47843 0.34510 0.71765
0.32010 0.34902 0.17647 0.55686
0.43990 0.40784 0.10980 0.36471
0.59010 0.46275 0.09020 0.16863
0.78000 0.86667 0.41569 0.24314
0.92990 0.92549 0.66667 0.33725
1.00000 0.97647 0.91765 0.82745
e
set cbrange [50:150]
set cbtics 25
set format cb "%.0f W/m²"
unset xtics
unset ytics
unset ztics
unset border
set colorbox

kzoom=1.0
phi=30.0
theta=60.0
set xyplane 0       # removes the offset of the xy plane
set view equal xyz  # force equal units to all three axes
set view theta,phi,kzoom

set object 1 polygon from 
2.0,0.0,3.0 to 
3.0,0.0,3.5 to 
3.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0
set object 1 fill solid 0.9 border lw 2 fc palette cb 128.1315 front

set object 2 polygon from 
4.0,0.0,3.0 to 
4.0,2.0,3.0 to 
3.0,2.0,3.5 to 
3.0,0.0,3.5 to 
4.0,0.0,3.0
set object 2 fill solid 0.9 border lw 2 fc palette cb 128.62192 front

set object 3 polygon from 
2.0,0.0,0.0 to 
4.0,0.0,0.0 to 
4.0,0.0,3.0 to 
3.0,0.0,3.5 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 3 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 4 polygon from 
4.0,0.0,0.0 to 
4.0,2.0,0.0 to 
4.0,2.0,3.0 to 
4.0,0.0,3.0 to 
4.0,0.0,0.0
set object 4 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 5 polygon from 
4.0,2.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
3.0,2.0,3.5 to 
4.0,2.0,3.0 to 
4.0,2.0,0.0
set object 5 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 6 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,0.0
set object 6 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 7 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 7 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 8 polygon from 
0.0,0.0,3.0 to 
1.0,0.0,3.5 to 
1.0,2.0,3.5 to 
0.0,2.0,3.0 to 
0.0,0.0,3.0
set object 8 fill solid 0.9 border lw 2 fc palette cb 128.1315 front

set object 9 polygon from 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
1.0,2.0,3.5 to 
1.0,0.0,3.5 to 
2.0,0.0,3.0
set object 9 fill solid 0.9 border lw 2 fc palette cb 128.62192 front

set object 10 polygon from 
0.0,0.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
1.0,0.0,3.5 to 
0.0,0.0,3.0 to 
0.0,0.0,0.0
set object 10 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 11 polygon from 
2.0,0.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 11 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 12 polygon from 
2.0,2.0,0.0 to 
0.0,2.0,0.0 to 
0.0,2.0,3.0 to 
1.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 12 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 13 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,0.0
set object 13 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 14 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,3.0 to 
0.0,2.0,0.0
set object 14 fill solid 0.9 border lw 2 fc palette cb 85.25754

splot "-" with lines notitle ls 1, NaN notitle palette
2.0 0.0 0.0
2.0 2.0 0.0
4.0 2.0 0.0
4.0 0.0 0.0
2.0 0.0 0.0

0.0 0.0 0.0
0.0 2.0 0.0
2.0 2.0 0.0
2.0 0.0 0.0
0.0 0.0 0.0
e

pause mouse

Thanks for the interest!

解决方案

I could not find an option to convince gnuplot that it should set the depthorder of the polygon objects automatically. The only way I found was to already define the objects in the correct order. Then gnuplot draws each of them on top of the previous one which leads to the expected result.

Taking your example polygons after removing the front specifiers, this approach changes the original picture from this one:

to this one (after removing front):

to this one (after sorting):

I think the third picture is what you want.

I used a python script to sort the polygons, which basically does:

  • Read all polygons from a file "poly_raw.dat". The file must start with a set object x polygon from line.
  • Like gnuplot with set view theta, phi, it rotates the polygons around x and z axis (temporarily, just for sorting).
  • It sorts the polygons with respect to the new y-axis. This should be the axis which is orthogonal to the screen.
  • It updates the gnuplot object IDs, i.e. the x in set object x polygon.
  • It prints the sorted polygon data including the set object lines.

Notice that this approach only works for static pictures. It does not work if you want to interactively rotate the picture.

Also notice, if the approach does not work for your full data file, I have probably messed up the rotation matrix or the axis assignment :)

I attach the python script, the plot file, and the data files "plot_raw.dat" and "plot_sorted.dat" for reference.

# poly.py
from math import cos, sin, pi
from re import sub, match, findall

class Polygon:

   def __init__(self):

      self.firstLine = ""
      self.points = []
      self.lastLine = ""


   def __str__(self):

      pointStrings = [",".join(map(str,point)) for point in self.points]

      s = ""
      s += self.firstLine
      s += " to \
".join(pointStrings)
      s += "
"
      s += self.lastLine

      return s


   def readObjectFromFile(self, f, firstObjectLine):
      self.firstLine = firstObjectLine
      line = f.readline()
      while not match("set",line):
         coordinates = findall("[d.]+", line)
         coordinates = tuple(float(x) for x in coordinates)
         self.points.append(coordinates)
         line = f.readline()
      self.lastLine = line

      return self


   def meanAfterRotation(self, theta, phi):
      cx = 0.0
      cy = 0.0
      cz = 0.0

      theta = theta*pi/180.0
      phi = phi*pi/180.0

      for point in self.points:
         x,y,z = point
         x,y,z = (x, y*cos(theta) - z*sin(theta), y*sin(theta) + z*cos(theta))
         x,y,z = (x*cos(phi) - y*sin(phi), x*sin(phi) + y*cos(phi), z)
         cx, cy, cz = (cx + x, cy + y, cz + z)

      n = len(self.points)

      return (cx/n, cy/n, cz/n)


   def setPosition(self, posIndex):

      self.firstLine = sub("(d+)", str(posIndex), self.firstLine, 1)
      self.lastLine = sub("(d+)", str(posIndex), self.lastLine, 1)




polygons = []
with open("poly_raw.dat") as f:

    line = f.readline()
    while line:

       if line.strip() != "":
          polygons.append(Polygon().readObjectFromFile(f,line))

       line = f.readline()

polygons.sort(key = lambda x: x.meanAfterRotation(60,30)[1], reverse = True)
pos = 1
for p in polygons:
   p.setPosition(pos)
   pos += 1

for p in polygons:
   print(p)

The gnuplot script:

# poly.plt, gnuplot 4.6
# Does not work when interactively rotating the picture.

set style line 1 linecolor rgbcolor "#777777" linewidth 1
set style increment user
set palette file "-"
0.00000 0.23137 0.22353 0.64314
0.17990 0.47843 0.34510 0.71765
0.32010 0.34902 0.17647 0.55686
0.43990 0.40784 0.10980 0.36471
0.59010 0.46275 0.09020 0.16863
0.78000 0.86667 0.41569 0.24314
0.92990 0.92549 0.66667 0.33725
1.00000 0.97647 0.91765 0.82745
e
set cbrange [50:150]
set cbtics 25
set format cb "%.0f W/m²"
unset xtics
unset ytics
unset ztics
unset border
set colorbox

kzoom=1.0
phi=30.0
theta=60.0
set xyplane 0       # removes the offset of the xy plane
set view equal xyz  # force equal units to all three axes
set view theta,phi,kzoom

#load "poly_raw.dat"
load "poly_sorted.dat"

set terminal png
#set output "raw.png"
set output "sorted.png"
splot "-" with lines notitle ls 1, NaN notitle palette
2.0 0.0 0.0
2.0 2.0 0.0
4.0 2.0 0.0
4.0 0.0 0.0
2.0 0.0 0.0

0.0 0.0 0.0
0.0 2.0 0.0
2.0 2.0 0.0
2.0 0.0 0.0
0.0 0.0 0.0
e

The unsorted polygon data after removing the front specifiers:

set object 1 polygon from 
2.0,0.0,3.0 to 
3.0,0.0,3.5 to 
3.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0
set object 1 fill solid 0.9 border lw 2 fc palette cb 128.1315

set object 2 polygon from 
4.0,0.0,3.0 to 
4.0,2.0,3.0 to 
3.0,2.0,3.5 to 
3.0,0.0,3.5 to 
4.0,0.0,3.0
set object 2 fill solid 0.9 border lw 2 fc palette cb 128.62192

set object 3 polygon from 
2.0,0.0,0.0 to 
4.0,0.0,0.0 to 
4.0,0.0,3.0 to 
3.0,0.0,3.5 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 3 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 4 polygon from 
4.0,0.0,0.0 to 
4.0,2.0,0.0 to 
4.0,2.0,3.0 to 
4.0,0.0,3.0 to 
4.0,0.0,0.0
set object 4 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 5 polygon from 
4.0,2.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
3.0,2.0,3.5 to 
4.0,2.0,3.0 to 
4.0,2.0,0.0
set object 5 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 6 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,0.0
set object 6 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 7 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 7 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 8 polygon from 
0.0,0.0,3.0 to 
1.0,0.0,3.5 to 
1.0,2.0,3.5 to 
0.0,2.0,3.0 to 
0.0,0.0,3.0
set object 8 fill solid 0.9 border lw 2 fc palette cb 128.1315

set object 9 polygon from 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
1.0,2.0,3.5 to 
1.0,0.0,3.5 to 
2.0,0.0,3.0
set object 9 fill solid 0.9 border lw 2 fc palette cb 128.62192

set object 10 polygon from 
0.0,0.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
1.0,0.0,3.5 to 
0.0,0.0,3.0 to 
0.0,0.0,0.0
set object 10 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 11 polygon from 
2.0,0.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 11 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 12 polygon from 
2.0,2.0,0.0 to 
0.0,2.0,0.0 to 
0.0,2.0,3.0 to 
1.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 12 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 13 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,0.0
set object 13 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 14 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,3.0 to 
0.0,2.0,0.0
set object 14 fill solid 0.9 border lw 2 fc palette cb 85.25754

The sorted data after running python poly.py > poly_sorted.dat

set object 1 polygon from 
4.0,0.0,0.0 to 
4.0,2.0,0.0 to 
4.0,2.0,3.0 to 
4.0,0.0,3.0 to 
4.0,0.0,0.0
set object 1 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 2 polygon from 
4.0,2.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
3.0,2.0,3.5 to 
4.0,2.0,3.0 to 
4.0,2.0,0.0
set object 2 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 3 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,0.0
set object 3 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 4 polygon from 
2.0,2.0,0.0 to 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 4 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 5 polygon from 
2.0,0.0,0.0 to 
2.0,2.0,0.0 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 5 fill solid 0.9 border lw 2 fc palette cb 85.58082

set object 6 polygon from 
2.0,2.0,0.0 to 
0.0,2.0,0.0 to 
0.0,2.0,3.0 to 
1.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,2.0,0.0
set object 6 fill solid 0.9 border lw 2 fc palette cb 55.88219

set object 7 polygon from 
2.0,0.0,0.0 to 
4.0,0.0,0.0 to 
4.0,0.0,3.0 to 
3.0,0.0,3.5 to 
2.0,0.0,3.0 to 
2.0,0.0,0.0
set object 7 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 8 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,0.0
set object 8 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 9 polygon from 
4.0,0.0,3.0 to 
4.0,2.0,3.0 to 
3.0,2.0,3.5 to 
3.0,0.0,3.5 to 
4.0,0.0,3.0
set object 9 fill solid 0.9 border lw 2 fc palette cb 128.62192

set object 10 polygon from 
0.0,2.0,0.0 to 
0.0,0.0,3.0 to 
0.0,2.0,3.0 to 
0.0,2.0,0.0
set object 10 fill solid 0.9 border lw 2 fc palette cb 85.25754

set object 11 polygon from 
0.0,0.0,0.0 to 
2.0,0.0,0.0 to 
2.0,0.0,3.0 to 
1.0,0.0,3.5 to 
0.0,0.0,3.0 to 
0.0,0.0,0.0
set object 11 fill solid 0.9 border lw 2 fc palette cb 100.545204

set object 12 polygon from 
2.0,0.0,3.0 to 
3.0,0.0,3.5 to 
3.0,2.0,3.5 to 
2.0,2.0,3.0 to 
2.0,0.0,3.0
set object 12 fill solid 0.9 border lw 2 fc palette cb 128.1315

set object 13 polygon from 
2.0,0.0,3.0 to 
2.0,2.0,3.0 to 
1.0,2.0,3.5 to 
1.0,0.0,3.5 to 
2.0,0.0,3.0
set object 13 fill solid 0.9 border lw 2 fc palette cb 128.62192

set object 14 polygon from 
0.0,0.0,3.0 to 
1.0,0.0,3.5 to 
1.0,2.0,3.5 to 
0.0,2.0,3.0 to 
0.0,0.0,3.0
set object 14 fill solid 0.9 border lw 2 fc palette cb 128.1315

这篇关于Gnuplot:尊重 Gnuplot 3d 多边形的深度顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆