gnuplot:交互式 3D 动画?
gnuplot: interactive 3D animations?
使用 gnuplot,您可以使用 splot
创建类似 3D 的绘图并交互式地更改视图。
您还可以使用 set terminal gif animate
的 gnuplot 创建动画。
### interactive animation?
reset session
set view equal
set border 0
unset tics
$Data <<EOD
1 1.000 0.000 0.000
2 0.500 0.866 0.000
3 -0.500 0.866 0.000
4 -1.000 0.000 0.000
5 -0.500 -0.866 0.000
6 0.500 -0.866 0.000
1 1.000 0.000 0.000
EOD
$Off <<EOD
1 0.00 0.00 0.1
2 0.00 0.00 -0.1
3 0.00 0.00 0.1
4 0.00 0.00 -0.1
5 0.00 0.00 0.1
6 0.00 0.00 -0.1
1 0.00 0.00 0.1
EOD
set xrange[-2:2]
set yrange[-2:2]
set zrange[-2:2]
set view 45,45
max=10.
Offset(n,axis,i) = real(word($Off[n+1],axis+1))*sin(2*pi*i/max)
set term gif animate delay 5 size 400,300
set output "Molecule.gif"
do for [i=0:max] {
splot $Data u (+Offset([=10=],1,i)):(+Offset([=10=],2,i)):(+Offset([=10=],3,i)) \
w lp pt 7 ps 2 lw 2 lc rgb "red" not
unset autoscale
}
set term wxt size 400,300
set margin 0
splot $Data u 2:3:4 w lp pt 7 ps 2 lw 2 lc rgb "red" not
set output
### end of code
现在,我的问题是:是否还有机会创建交互式动画?我想在动画时旋转视图。这在某种程度上可以用 gnuplot 实现吗?有什么想法吗?
编辑:
@Ethan 的回答解决了这个问题。但是,有没有办法避免鼠标光标闪烁?
将绘图命令循环放置不会禁用鼠标交互。简单的答案应该有效:
set xrange[-2:2]
set yrange[-2:2]
set zrange[-2:2]
set view 45,45
Offset(n,axis,i) = real(word($Off[n+1],axis+1))*sin(2*pi*i/max)
# Loop forever
# but allow an explicit end condition triggered by a hot key
done = 0
bind "d" "done = 1"
while (!done) {
do for [i=0:10] {
splot $Data u (+Offset([=10=],1,i)):(+Offset([=10=],2,i)):(+Offset([=10=],3,i)) \
w lp pt 7 ps 2 lw 2 lc rgb "red" not
pause 0.1
}
}
使用 gnuplot,您可以使用 splot
创建类似 3D 的绘图并交互式地更改视图。
您还可以使用 set terminal gif animate
的 gnuplot 创建动画。
### interactive animation?
reset session
set view equal
set border 0
unset tics
$Data <<EOD
1 1.000 0.000 0.000
2 0.500 0.866 0.000
3 -0.500 0.866 0.000
4 -1.000 0.000 0.000
5 -0.500 -0.866 0.000
6 0.500 -0.866 0.000
1 1.000 0.000 0.000
EOD
$Off <<EOD
1 0.00 0.00 0.1
2 0.00 0.00 -0.1
3 0.00 0.00 0.1
4 0.00 0.00 -0.1
5 0.00 0.00 0.1
6 0.00 0.00 -0.1
1 0.00 0.00 0.1
EOD
set xrange[-2:2]
set yrange[-2:2]
set zrange[-2:2]
set view 45,45
max=10.
Offset(n,axis,i) = real(word($Off[n+1],axis+1))*sin(2*pi*i/max)
set term gif animate delay 5 size 400,300
set output "Molecule.gif"
do for [i=0:max] {
splot $Data u (+Offset([=10=],1,i)):(+Offset([=10=],2,i)):(+Offset([=10=],3,i)) \
w lp pt 7 ps 2 lw 2 lc rgb "red" not
unset autoscale
}
set term wxt size 400,300
set margin 0
splot $Data u 2:3:4 w lp pt 7 ps 2 lw 2 lc rgb "red" not
set output
### end of code
现在,我的问题是:是否还有机会创建交互式动画?我想在动画时旋转视图。这在某种程度上可以用 gnuplot 实现吗?有什么想法吗?
编辑:
@Ethan 的回答解决了这个问题。但是,有没有办法避免鼠标光标闪烁?
将绘图命令循环放置不会禁用鼠标交互。简单的答案应该有效:
set xrange[-2:2]
set yrange[-2:2]
set zrange[-2:2]
set view 45,45
Offset(n,axis,i) = real(word($Off[n+1],axis+1))*sin(2*pi*i/max)
# Loop forever
# but allow an explicit end condition triggered by a hot key
done = 0
bind "d" "done = 1"
while (!done) {
do for [i=0:10] {
splot $Data u (+Offset([=10=],1,i)):(+Offset([=10=],2,i)):(+Offset([=10=],3,i)) \
w lp pt 7 ps 2 lw 2 lc rgb "red" not
pause 0.1
}
}