我试图编辑这个答案有点,我想在红线和蓝线上放 5 或 6 个箭头,但我做不到。我唯一能做的就是:(有很多箭头出来,这不是我想要的)有什么想法可以解决这个问题吗?
我也尝试过让红线和蓝线尊重球体,也就是说,当图形从球体后面经过时,它会更加透明,而当它在前面时则是正常的,但我没有实现任何目标。
\documentclass{standalone}
\usepackage{pst-ode,pst-3dplot}
\begin{document}
\begin{pspicture}(-1.1,-1.1)(1.1,1.1)%
% Sphere
\pstThreeDSphere[linewidth=0.0001pt,strokeopacity=0.3,linecolor=gray,SegmentColor={[cmyk]{0.0,0.0,0.0,0.2}}](0,0,0){1}
% lower half-space
\pstODEsolve[algebraic]{XYZa}{0 1 2}{0}{35}{500}{1e-9 0.0 -1.0}{
-x[1]+x[0]*x[2]^2 |
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\psset{arrowscale=0.4}
\listplotThreeD[linecolor=blue,linewidth=0.3pt,ArrowInside=->,ArrowInsidePos=1]{XYZa}
% upper half-space
\pstODEsolve[algebraic]{XYZb}{0 1 2}{0}{35}{500}{1e-9 0.0 1.0}{
-x[1]+x[0]*x[2]^2 |
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\listplotThreeD[linecolor=red,linewidth=0.4pt,ArrowInside=->,ArrowInsidePos=1]{XYZb}
\end{pspicture}
\end{document}
答案1
这解决了问题的第一个难题,得到了有限数量的箭头。
可以使用空的初始条件参数调用该命令\pstODEsolve
。然后,它使用上一次调用中最后计算的状态向量作为当前调用的初始条件。请参阅pst-ode
手动的,第 3 页倒数第二段。
此方法用于将积分区间划分为几个子区间。请注意,初始区间选择得相当大,0 ≤吨≤ 20,因为解在极点处不会发展得那么快;后续间隔为 Δ吨=1。
lualatex
用或latex
+ dvips
+排版ps2pdf
。
\documentclass{standalone}
\usepackage{pst-ode,pst-3dplot}
\begin{document}
\begin{pspicture}(-1.1,-1.1)(1.1,1.1)%
% Sphere
\pstThreeDSphere[linewidth=0.0001pt,strokeopacity=0.3,linecolor=gray,SegmentColor={[cmyk]{0.0,0.0,0.0,0.2}}](0,0,0){1}
% lower half-space
% initial interval 0 ≤ t ≤ 20
\pstODEsolve[algebraic]{XYZ}{0 1 2}{0}{20}{150}{1e-9 0.0 -1.0}{
-x[1]+x[0]*x[2]^2 |
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\listplotThreeD[linecolor=blue,linewidth=0.4pt,arrows=->]{XYZ}
% subsequent intervals Δt=1
\multido{\iStart=20+1,\iEnd=21+1}{11}{
\pstODEsolve[algebraic]{XYZ}{0 1 2}{\iStart}{\iEnd}{50}{ }{
-x[1]+x[0]*x[2]^2 | % empty init. cond. ---^
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\listplotThreeD[linecolor=blue,linewidth=0.4pt,arrows=->]{XYZ}
}
% upper half-space
\pstODEsolve[algebraic]{XYZ}{0 1 2}{0}{20}{150}{1e-9 0.0 1.0}{
-x[1]+x[0]*x[2]^2 |
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\listplotThreeD[linecolor=red,linewidth=0.4pt,arrows=->]{XYZ}
\multido{\iStart=20+1,\iEnd=21+1}{11}{
\pstODEsolve[algebraic]{XYZ}{0 1 2}{\iStart}{\iEnd}{50}{}{
-x[1]+x[0]*x[2]^2 |
x[0]+x[1]*x[2]^2 |
-x[2]*(x[0]^2+x[1]^2)
}
\listplotThreeD[linecolor=red,linewidth=0.4pt,arrows=->]{XYZ}
}
\end{pspicture}
\end{document}