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

Gnuplot:为参数/极坐标函数应用palette线色的方法及规则

Gnuplot参数函数应用Palette渐变色的正确规则与修复方案

问题核心

你尝试给外摆线、内摆线添加palette渐变时,错误引入了冗余的极坐标转换(r_x(t)=x01(t,beta)*cos(t)、r_y(t)=y01(t,beta)*sin(t)),叠加额外坐标变换导致原图形形态完全失真。

参数函数使用Palette线色的核心规则

  • 禁止冗余坐标转换:参数方程本身直接输出笛卡尔坐标(x,y),无需额外做极坐标转笛卡尔操作,否则会破坏原曲线形态。
  • 参数范围匹配:绘图时参数t的取值范围必须和原函数的周期一致,确保曲线完整绘制。
  • Palette映射逻辑:通过plot ... using x:y:z指定z值作为palette映射变量,z是基于参数t的独立函数,不影响x、y的计算。
  • 参数模式配置:保持set parametric开启,使用虚拟数据文件'+'时,直接用$1传递参数t到x、y的计算中即可。

修正后的代码

reset session

# 基础摆线参数方程
x00(t) = (R + r)*cos(t) - d*cos((R + r)/r*t)
y00(t) = (R + r)*sin(t) - d*sin((R + r)/r*t)

beta=1.0
# 用于色彩映射的z值函数(基于参数t)
zValueForGradient(t,beta)= cos(t*beta)

set palette model RGB defined (-1 "blue", 0 "black", 1 "red")
set parametric
set size ratio -1
set grid x,y

set multiplot layout 2,2

    # 带渐变的外摆线
    set title "epicycloid with gradient"
    R=3.0; r=1.0  ; d=0.5
    set xrange[-6:6]
    set yrange[-6:6]
    plot [0:2*pi] '+' u (x00($1)):(y00($1)):(zValueForGradient($1,beta)) t '' w l lw 2 lc palette

    # 带渐变的内摆线
    set title "hypotrochoid with gradient"
    R=5.0;  r=-3.0;  d=5.0
    set xrange[-8:8]
    set yrange[-8:8]
    plot [0:6*pi] '+' u (x00($1)):(y00($1)):(zValueForGradient($1,beta)) t '' w l lw 2 lc palette

    # 原始外摆线
    set title "true epicycloid"
    R=3.0; r=1.0  ; d=0.5
    set xrange[-6:6]
    set yrange[-6:6]
    set trange[0:2*pi]
    plot x00(t),y00(t) w l t '' lw 2 lc "red"

    # 原始内摆线
    set title "true hypotrochoid"
    R=5.0;  r=-3.0;  d=5.0
    set xrange[-8:8]
    set yrange[-8:8]
    set trange[0:6*pi]
    plot x00(t),y00(t) w l t '' lw 2 lc "blue"

unset multiplot

关键修正点

  1. 删除错误的极坐标转换函数,直接使用原参数方程计算x、y坐标
  2. 为渐变图设置与原始图一致的x、y范围,避免自动缩放导致的显示差异
  3. 内摆线的参数范围调整为[0:6*pi],与原始图周期匹配,确保曲线完整

内容的提问来源于stack exchange,提问作者Bryan-StackExchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:36