gpt4 book ai didi

plot - 如何在 Gnuplot 中创建像箭头一样的流线型?

转载 作者:行者123 更新时间:2023-12-02 03:09:33 25 4
gpt4 key购买 nike

我想在Gnuplot中创建像箭头线一样的流线,我已经有了我需要的数据点,所以我认为我的问题与this post不一样说与 this post 不同因为我已经获得了stramlines所需的数据。

我所做的是这样的:

have done

因此,红线是表示流场的矢量,绿线是流线,以引导读者了解通量的方向。所有蓝色大箭头都是我要在 GNUPLOT 中绘制的目标。我知道如何将中间箭头绘制为 this post已显示,但如果我想沿线绘制更多箭头,我需要执行哪些代码?

更详细地说,我怎样才能像这样绘制:

aim

我在这里提供我的数据文件:

velocity.txt用于矢量流场数据为“索引,X,Y,vx,vy,粒子数”

line.txt用于将数据简化为“X,Y”

并且我的 gnu 文件已损坏:

set terminal postscript eps size 108,16 enhanced font "Arial-Bold,100"
set output 'vector.eps'

unset key
set tics
set colorbox
set border 0
set xtics 2
#set xlabel 'x'
#set ylabel 'y'


set xrange [0:108]
set yrange [0:16]
#set cbrange [0:40]

set nolabel
set style line 4 lt 2 lc rgb "green" lw 2

plot 'velcoity.txt' u 2:3:(250*$4):(250*$5) with vectors lc 1,'line.txt' u 1:2 ls 4

谢谢!

最佳答案

要沿线绘制箭头,您可以再次使用向量绘制样式,就像您对流场所做的那样。

但是要获得正确的情节,您必须考虑以下几点:

  1. 通常 gnuplot 将箭头的大小限制为箭头长度的一小部分。因此,如果您想绘制带有箭头的连续线,则箭头本身的长度应该非常短。为了避免箭头缩小,请使用 size ...fixed 选项,该选项仅从 5.0 版本开始可用

  2. 您只有直线的轨迹、xy 值。要提取箭头方向,最简单的方法是使用两个相邻点(或相距两三个点)之间的差异。

  3. 您可以在 using 语句中提取这些差异。作为伪代码,可以执行以下操作:

    if rownumber modulo 10 == 0:
    save x and y values
    else if rownumber modulo 10 == 1:
    draw arrow from previous point to current point, only with a head
    else
    ignore the point.

    将此伪代码放入 using 语句中会得到以下结果:

    ev = 10
    avg = 1
    sc = 0.1
    plot 'line.txt' u (prev_x = (int($0)%ev == 0 ? $1 : prev_x), prev_y = (int($0)%ev == 0 ? $2 : prev_y), int($0)%ev == avg ? $1 : 1/0):2:(sc*(prev_x-$1)):(sc*(prev_y-$2)) w vectors backhead size 2,20,90 fixed ls 4

    为了使事情更加灵活,我引入了一些变量:ev告诉你两个箭头之间的差值,avg用于计算箭头的两点之间的距离方向,sc 箭头轴的长度。

作为进一步的改进,您可以使用流场箭头的长度来为流场向量着色。这给出了以下脚本

reset
unset key
set tics
set colorbox
set border 0
set xtics 2

set autoscale xfix
set autoscale yfix
set autoscale cbfix
set style line 4 lt 2 lc rgb "green" lw 2
ev=30
avg=3
sc=0.1
field_scale=500
plot 'velcoity.txt' u 2:3:(field_scale*$4):(field_scale*$5):(sqrt($4**2+$5**2)) with vectors size 1,15,45 noborder lc palette,\
'line.txt' u 1:2 ls 4 w l,\
'' u (prev_x = (int($0)%ev == 0 ? $1 : prev_x), prev_y = (int($0)%ev == 0 ? $2 : prev_y), int($0)%ev == avg ? $1 : 1/0):2:(sc*(prev_x-$1)):(sc*(prev_y-$2)) w vectors backhead size 2,20,90 fixed ls 4

结果(qt 终端):

enter image description here

关于plot - 如何在 Gnuplot 中创建像箭头一样的流线型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33240722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com