如何用gnuplot绘制数据文件中指定中点、长度与角度的线段?
如何用Gnuplot根据线段参数(长度、中点、角度)绘制线段?
嘿,这个需求用Gnuplot完全可以实现,核心思路是先把给定的中点、长度、角度参数转换成线段的两个端点坐标,再用Gnuplot的绘图命令把线段画出来。我给你一步步拆解:
1. 先搞懂端点坐标的计算逻辑
已知线段的中点(Xmid, Ymid)、长度Size、与X轴夹角Angle(默认假设角度是度,如果是弧度要稍作调整),我们可以用三角函数算出线段的两个端点:
- 第一个端点:
Xmid - (Size/2)*cos(Angle转弧度), Ymid - (Size/2)*sin(Angle转弧度) - 第二个端点:
Xmid + (Size/2)*cos(Angle转弧度), Ymid + (Size/2)*sin(Angle转弧度)
为什么要转弧度?因为Gnuplot里的三角函数默认是基于弧度计算的,所以我们需要用Angle*pi/180把角度转换成弧度。
2. 编写Gnuplot脚本实现绘制
假设你的数据文件叫segments.dat,每行是4列:Size Xmid Ymid Angle。直接用下面的脚本就能搞定:
# 配置输出格式和文件 set terminal pngcairo enhanced font 'Arial,10' size 800,600 set output 'segments_plot.png' # 设置坐标轴(根据你的数据范围调整,或者用set autoscale自动适配) set xrange [-10:10] set yrange [-10:10] set grid # 可选:添加网格方便观察 # 定义计算端点的函数(如果角度是弧度,去掉*pi/180) x1(size, xmid, angle) = xmid - (size/2)*cos(angle*pi/180) y1(size, ymid, angle) = ymid - (size/2)*sin(angle*pi/180) x2(size, xmid, angle) = xmid + (size/2)*cos(angle*pi/180) y2(size, ymid, angle) = ymid + (size/2)*sin(angle*pi/180) # 用vectors绘制线段(最简洁的方式) # 格式:using 起点X:起点Y:终点X-起点X:终点Y-起点Y plot 'segments.dat' using (x1($1,$2,$4)):(y1($1,$3,$4)):(x2($1,$2,$4)-x1($1,$2,$4)):(y2($1,$3,$4)-y1($1,$3,$4)) \ with vectors lc rgb 'darkblue' title 'Segments'
3. 可选调整与注意事项
- 去掉箭头:上面的
with vectors默认会给线段加箭头,如果不需要,改成with vectors nohead即可。 - 弧度角度适配:如果你的
Angle列是弧度值,直接把函数里的*pi/180删掉就行。 - 其他输出格式:把
set terminal改成svg、pdf或者qt(交互式窗口),就能得到对应格式的输出。 - 用lines绘制:如果你更习惯用
with lines,可以把每个线段的两个端点作为连续的点绘制,但vectors方法更高效简洁,优先推荐。
测试示例
比如你的segments.dat有以下测试数据:
2 0 0 0 3 1 2 45 1.5 -2 1 90
运行脚本后,会画出三条线段:
- 长度2、原点为中点、水平向右的线段
- 长度3、中点(1,2)、与X轴成45度的线段
- 长度1.5、中点(-2,1)、垂直向上的线段
内容的提问来源于stack exchange,提问作者Lễ Dũng
相关产品推荐
相关产品推荐

