【问题标题】:Drawing triangular mesh using gnuplot使用 gnuplot 绘制三角形网格
【发布时间】:2017-03-14 11:09:31
【问题描述】:

经常需要使用gnuplot绘制三角网格。

我目前看到的唯一方法是使用 with lines 选项制作“线框”,并在每个方面的闭合线链之间添加双换行符(第一点和最后一点相同):

$wireframe <<EOD
 0  1 1 p1
 1 -1 1 p2
-1 -1 1 p3
 0  1 1 


 2  1 0 p4
 0  1 1 
 1 -1 1 
 2  1 0 


 0 -2 0 p5
 1 -1 1 
-1 -1 1 
 0 -2 0 


-2  1 0 p6
-1 -1 1 
 0  1 1 
-2  1 0 
EOD
splot '$wireframe' with lines notitle, '' with labels offset character 0, character 1 notitle

这是 4 个三角形:1 个位于中心(p1、p2、p3),3 个与腿相邻。

定义网格的某些方法有很多重复之处。有时将网格定义为三角带或三角扇更合适。

另一个问题是用某种颜色填充 3D 三角形的内部。目前我只能为不同的链线使用不同的颜色(来自调色板)绘制线框。但它们重叠。

说,我想画二十面体。它是封闭的实体,由三角形面约束。

【问题讨论】:

    标签: 3d gnuplot mesh


    【解决方案1】:
    set terminal wxt size 800,600
    
    #set title "Graph Title"
    #set xlabel "X"
    #set ylabel "Y"
    #set zlabel "Z"
    
    # sets background color
    set object 1 rectangle from screen -0.1,-0.1 to screen 1.1,1.1 fillcolor rgb "#ffffff" behind
    
    # allows rendering of polygons with hidden line removal
    set hidden3d back offset 0 trianglepattern 3 undefined 1 altdiagonal bentover
    
    # displays borders 0x7F = 0b1111111
    set border 0x7F linecolor rgb "#555555"
    
    # displays the x, y and z axis
    set xzeroaxis linewidth 0.5 linetype 1
    set yzeroaxis linewidth 0.5 linetype 2
    set zzeroaxis linewidth 0.5 linetype 3
    
    # displays the x, y and z grid
    set grid xtics linecolor rgb "#888888" linewidth 0.2 linetype 9
    set grid ytics linecolor rgb "#888888" linewidth 0.2 linetype 9
    set grid ztics linecolor rgb "#888888" linewidth 0.2 linetype 9
    
    # moves the x, y grid to 0
    set xyplane at 0
    
    # makes the x, y, and z axis proportional
    set view equal xyz
    
    # sets the axis range
    set xrange [-10:10]
    set yrange [-10:10]
    set zrange [-10:10]
    
    # moves the key out of the graph
    set key outside vertical bottom right
    
    # hides the key
    set key off
    
    splot\
    "ico.dat" title "ico" with lines linewidth 2.1 linecolor rgb "#88FF88"
    

    ico.dat:

    -1.381925 -4.253200 -2.236075
    0.000000 0.000000 -5.000000
    
    3.618000 -2.628600 -2.236075
    3.618000 -2.628600 -2.236075
    
    
    3.618000 -2.628600 -2.236075
    0.000000 0.000000 -5.000000
    
    3.618000 2.628600 -2.236075
    3.618000 2.628600 -2.236075
    
    
    -4.472125 0.000000 -2.236075
    0.000000 0.000000 -5.000000
    
    -1.381925 -4.253200 -2.236075
    -1.381925 -4.253200 -2.236075
    
    
    -1.381925 4.253200 -2.236075
    0.000000 0.000000 -5.000000
    
    -4.472125 0.000000 -2.236075
    -4.472125 0.000000 -2.236075
    
    
    3.618000 2.628600 -2.236075
    0.000000 0.000000 -5.000000
    
    -1.381925 4.253200 -2.236075
    -1.381925 4.253200 -2.236075
    
    
    3.618000 -2.628600 -2.236075
    3.618000 2.628600 -2.236075
    
    4.472125 0.000000 2.236075
    4.472125 0.000000 2.236075
    
    
    -1.381925 -4.253200 -2.236075
    3.618000 -2.628600 -2.236075
    
    1.381925 -4.253200 2.236075
    1.381925 -4.253200 2.236075
    
    
    -4.472125 0.000000 -2.236075
    -1.381925 -4.253200 -2.236075
    
    -3.618000 -2.628600 2.236075
    -3.618000 -2.628600 2.236075
    
    
    -1.381925 4.253200 -2.236075
    -4.472125 0.000000 -2.236075
    
    -3.618000 2.628600 2.236075
    -3.618000 2.628600 2.236075
    
    
    3.618000 2.628600 -2.236075
    -1.381925 4.253200 -2.236075
    
    1.381925 4.253200 2.236075
    1.381925 4.253200 2.236075
    
    
    4.472125 0.000000 2.236075
    1.381925 -4.253200 2.236075
    
    3.618000 -2.628600 -2.236075
    3.618000 -2.628600 -2.236075
    
    
    1.381925 -4.253200 2.236075
    -3.618000 -2.628600 2.236075
    
    -1.381925 -4.253200 -2.236075
    -1.381925 -4.253200 -2.236075
    
    
    -3.618000 -2.628600 2.236075
    -3.618000 2.628600 2.236075
    
    -4.472125 0.000000 -2.236075
    -4.472125 0.000000 -2.236075
    
    
    -3.618000 2.628600 2.236075
    1.381925 4.253200 2.236075
    
    -1.381925 4.253200 -2.236075
    -1.381925 4.253200 -2.236075
    
    
    1.381925 4.253200 2.236075
    4.472125 0.000000 2.236075
    
    3.618000 2.628600 -2.236075
    3.618000 2.628600 -2.236075
    
    
    1.381925 -4.253200 2.236075
    4.472125 0.000000 2.236075
    
    0.000000 0.000000 5.000000
    0.000000 0.000000 5.000000
    
    
    -3.618000 -2.628600 2.236075
    1.381925 -4.253200 2.236075
    
    0.000000 0.000000 5.000000
    0.000000 0.000000 5.000000
    
    
    -3.618000 2.628600 2.236075
    -3.618000 -2.628600 2.236075
    
    0.000000 0.000000 5.000000
    0.000000 0.000000 5.000000
    
    
    1.381925 4.253200 2.236075
    -3.618000 2.628600 2.236075
    
    0.000000 0.000000 5.000000
    0.000000 0.000000 5.000000
    
    
    4.472125 0.000000 2.236075
    1.381925 4.253200 2.236075
    
    0.000000 0.000000 5.000000
    0.000000 0.000000 5.000000
    

    由 blender 和 python 脚本生成:
    https://github.com/lowlevel86/blender-to-gnuplot

    【讨论】:

    【解决方案2】:

    一种解决方法是编写一个 gawk/Python 脚本,该脚本将解析构面的定义并生成一个 Gnuplot 脚本,其中将手动将构面绘制为多边形:

    set xr [0:1]
    set yr [0:1]
    set zr [0:1]
    
    #generate the polygons
    set object polygon from 0,0,0 to 1,0,0 to 1,1,0 to 0,1,0 to 0,0,0 fc rgb "cyan" fillstyle solid 1.0 border lt -1
    set object polygon from 1,0,0 to 1,1,0 to 1,1,1 to 1,0,1 to 1,0,0 fc rgb "cyan" fillstyle solid 1.0 border lt -1
    
    #do not plot anything
    splot 1/0
    

    【讨论】:

    • 对于高多边形网格来说太贵了。但这肯定是解决方法。
    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 2020-12-15
    • 2017-12-15
    • 1970-01-01
    • 2016-07-17
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多