首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格努图-计算线间距离

格努图-计算线间距离
EN

Stack Overflow用户
提问于 2013-07-18 07:31:26
回答 2查看 1.6K关注 0票数 4

格鲁图能计算出两条线之间的距离或者两个点吗?

我有一个绘制两条(主要)线的图。现在,让我们假设第一条线总是在第二条线之上。是否有方法在给定的x值下计算从第2行到第1行的距离?

下面是我的情节和我想要计算的距离的图片:

垂直线仅用于样式,与实际绘图无关,它们的数据存储在test.dattest2.dat中。

我的数据文件是这样的:

line1

代码语言:javascript
复制
0       118.1
2.754   117.77
4.054   117.64
6.131   116.17
7.7     116.04
8.391   115.36
10.535  115.25
11.433  116.03
12.591  116.22
19.519  118.59

line2

代码语言:javascript
复制
19.4    118.51
15.2    116.56
10.9    115.94
10.35   114.93
9.05    114.92
8.3     115.9
5.9     116.19
4.2     116.62
2.2     117.66
-0.3    118.06

我的密谋代码是这样的:

代码语言:javascript
复制
set term wxt enhanced
cd 'working directory'
unset key

set size 0.9,0.9
set origin 0.1,0.1
set title 'TITLE'

unset border
set label 21 "  rotate by 45" at -3.0,0.0 rotate by 45 point ps 2

set xrange [0:19.519]
set yrange [110:119] 
set xtics nomirror(0, 2.745, 4.054, 6.131, 7.7, 8.391, 10.535, 11.433, 12.591, 19.519) rotate by 90 offset 0,-0.1 right

set ytics "      ", 30000

plot "line1.dat" using ($1):($2):2 with labels offset 1, 1.8 rotate by 90, "line1.dat" using 1:2 with lines lt 1 lw 1 lc rgb '#000000', +112 lt 1 lw 1 lc rgb '#000000' , 'test.dat' with lines lt 1 lw 1 lc rgb '#000000', +110 lt 1 lw 1 lc rgb '#000000', 'line2.dat' with lines lt 0.5 lw 1 lc rgb '#000000', 'test2.dat' with lines lt 0.5 lw 1 lc rgb '#000000' 
EN

回答 2

Stack Overflow用户

发布于 2013-07-19 14:42:05

你可以手动测量距离。将鼠标移到第一个点,键入'r‘。然后,当你移动鼠标,x和y偏移量,距离和角度都会显示出来。键入“5”以绘制线段,并在度和切线显示之间切换。提前放大会提高准确性。

顺便说一下,在“绘图”窗口中输入“h”将向控制台显示一个键绑定列表。

票数 2
EN

Stack Overflow用户

发布于 2022-06-14 14:16:06

对这个“相当老的”问题的回答,如果不是,也可能对其他人感兴趣。是的,你可以计算和绘制两条线的差。它需要一些线性插值。只需将所需的x值赋值给变量myX

数据:

SO17717287_1.dat

代码语言:javascript
复制
0       118.1
2.754   117.77
4.054   117.64
6.131   116.17
7.7     116.04
8.391   115.36
10.535  115.25
11.433  116.03
12.591  116.22
19.519  118.59

SO17717287_2.dat

代码语言:javascript
复制
19.4    118.51
15.2    116.56
10.9    115.94
10.35   114.93
9.05    114.92
8.3     115.9
5.9     116.19
4.2     116.62
2.2     117.66
-0.3    118.06

脚本:(为gnuplot>=4.6.0工作)

代码语言:javascript
复制
### calculating and plotting a difference between two curves
reset

FILE1 = "SO17717287_1.dat"
FILE2 = "SO17717287_2.dat"

set border 1
unset key
set origin 0.05,0.05
set size   0.9,0.8
set xrange [0:19.519]
set xtics nomirror rotate by 90 offset 0,-0.1 right
set yrange [110:119] 
unset ytics

myX = 15.2
getYa(xi) = (x0=x1, x1=$1, y0=y1, y1=$2, x1==xi ? ya=y1 : (sgn(x0-xi)!=sgn(x1-xi)) ? ya=(y1-y0)/(x1-x0)*(xi-x0)+y0 : NaN)
getYb(xi) = (x0=x1, x1=$1, y0=y1, y1=$2, x1==xi ? yb=y1 : (sgn(x0-xi)!=sgn(x1-xi)) ? yb=(y1-y0)/(x1-x0)*(xi-x0)+y0 : NaN)

set samples 2  # set to minimal possible value for plotting '+'

plot x1=y1=NaN FILE1 u 1:2:2:xtic(1) w labels offset 0,0.5 left rotate by 90, \
         '' u 1:(getYa(myX),$2) w l lc rgb 'black', \
         '' u 1:2:(0):(110-$2) w vec lt 0 nohead, \
         +112 w l lc rgb 'black', \
     x1=y1=NaN FILE2 u 1:(getYb(myX),$2) w l lt 0 lc rgb 'black', \
         '+' u (myX):(ya):(0):(yb-ya) w vec heads lc rgb "red", \
         '+' u (myX):(ya):(sprintf("%.3f",yb-ya)):xtic(sprintf("%g",myX)) w labels tc rgb "red" offset 0,1, \
         '+' u (myX):(ya):(0):(110-ya) w vec nohead lt 0 lc rgb "red"
### end of script

结果:(用gnuket4.6.0创建)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17717287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档