You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gnuplot彩色立方体绘制及数据块加载失败问题求助

问题分析与解决方案

一、数据块加载失败的原因与修复

在gnuplot脚本文件中,内联数据块($d1这类)的定义格式和交互式输入不同:

  • 交互式输入时,直接输入$d1后逐行写数据,空行结束即可;
  • 但通过load加载脚本文件时,必须用分界符明确标记数据块的开始和结束,否则gnuplot会把后续代码误判为数据块内容,导致执行失败。

正确的脚本内数据块写法:

$d1 << EOD
0 0 0
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0
EOD

$d2 << EOD
# 这里写入$d2的立方体顶点数据
EOD

用$数据块名 << EOD开头,EOD结尾(EOD可替换为任意未在数据中出现的字符串),中间插入顶点数据即可。

二、魔方绘制的高效实现方案

不需要为27个小立方体单独定义数据块,可通过基础立方体数据块+循环偏移+条件上色的方式实现,代码更简洁且易维护:

完整示例代码

# 定义基础小立方体的8个顶点(边长0.9,避免相邻立方体重叠)
$base_cube << EOD
-0.45 -0.45 -0.45
-0.45 -0.45  0.45
-0.45  0.45  0.45
-0.45  0.45 -0.45
 0.45  0.45 -0.45
 0.45  0.45  0.45
 0.45 -0.45  0.45
 0.45 -0.45 -0.45
EOD

# 绘图样式设置
set style fill solid 1.0
set style polygon fc rgb variable
set view equal xyz
set ticslevel 0
set hidden3d
set title "Rubik's Cube"

# 定义魔方各面颜色
color_x_plus = "0xff0000"   # 右侧红
color_x_minus = "0xff8800"  # 左侧橙
color_y_plus = "0xffff00"   # 上侧黄
color_y_minus = "0xffffff"  # 下侧白
color_z_plus = "0x00ff00"   # 前侧绿
color_z_minus = "0x0000ff"  # 后侧蓝

# 循环生成27个小立方体
do for [x=-1:1] {
    do for [y=-1:1] {
        do for [z=-1:1] {
            # 计算当前小立方体的位置偏移
            dx = x * 1.0
            dy = y * 1.0
            dz = z * 1.0
            
            # 绘制灰色立方体本体
            splot $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb "0xcccccc" notitle, \
            # 根据位置绘制对应颜色的贴纸面
            (x == 1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_x_plus notitle : 0/0), \
            (x == -1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_x_minus notitle : 0/0), \
            (y == 1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_y_plus notitle : 0/0), \
            (y == -1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_y_minus notitle : 0/0), \
            (z == 1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_z_plus notitle : 0/0), \
            (z == -1 ? $base_cube using ($1+dx):($2+dy):($3+dz) with polygons fc rgb color_z_minus notitle : 0/0)
        }
    }
}

代码说明

  1. 基础立方体:只定义一次小立方体的顶点数据,后续通过偏移量生成所有位置的立方体;
  2. 循环遍历:通过三重循环覆盖x/y/z轴的-1/0/1三个位置,对应魔方的27个小立方体;
  3. 条件上色:利用(条件 ? 绘制代码 : 0/0)的语法,仅为处于魔方外围的小立方体绘制对应颜色的贴纸面,0/0表示不绘制该部分;
  4. 避免重叠:基础立方体边长设为0.9,相邻立方体间距0.1,解决面重叠导致的颜色覆盖问题。

内容的提问来源于stack exchange,提问作者Gyuszi Suto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:45:05