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
关键修正点
- 删除错误的极坐标转换函数,直接使用原参数方程计算x、y坐标
- 为渐变图设置与原始图一致的x、y范围,避免自动缩放导致的显示差异
- 内摆线的参数范围调整为
[0:6*pi],与原始图周期匹配,确保曲线完整
内容的提问来源于stack exchange,提问作者Bryan-StackExchange
相关产品推荐
相关产品推荐

