Ich möchte eine 3D-Animation in Asymptote erstellen: die kleine blaue Kugel, die sich entlang der 3D-zyklischen Kurve bewegt (die ich „orbit8“ genannt habe). Ich habe gehört, dass Kurven in Asymptote parametrisiert sind. Ich weiß jedoch nicht, wie ich die Positionen der Punkte entlang der Umlaufbahn ermitteln kann.
Könnten Sie mir bitte helfen!
Mein MWE ist wie folgt.
\documentclass{standalone}
\usepackage{asymptote}
\begin{document}
\begin{asy}
import three;
currentprojection=obliqueX;
unitsize(1cm);
draw(O--4 * X,Arrow3);
draw(O--4 * Y,Arrow3);
draw(-1*Z--4 * Z,Arrow3);
label("$x$", 4 * X, NW);
label("$y$", 4 * Y, SE);
label("$z$", 4 * Z, E);
real a=.4;
triple U=(-a,-a,1),L=(a,a,1);
path3 orbit8=
(0,1,2)..(0,2,1)..(0,1,0)..U..(1,0,2)..(2,0,1)..(1,0,0)..L..cycle;
draw(orbit8,1bp+black);
dot(L,8bp+.8blue);
dot(U,5bp+.8red);
draw((0,0,2)--(0,0,4),6bp+green,Arrow3());
\end{asy}
\end{document}
Antwort1
Sie können verwenden, point(orbit8,t)
wo t
eine Zeit ist. Ich empfehledieses tolle Tutorialsowie das asypictureB
Paket vom Autor des Tutorials. Auf diese Weise erhalten Sie die Ausgabe mit pdflatex -shell-escape <file>
, wobei Folgendes file
enthalten sein könnte:
\documentclass[border=3.14mm]{standalone}
\usepackage{asypictureB}
\begin{document}
\begin{asypicture}{name=asyani}
import three;
currentprojection=obliqueX;
unitsize(1cm);
draw(O--4 * X,Arrow3);
draw(O--4 * Y,Arrow3);
draw(-1*Z--4 * Z,Arrow3);
label("$x$", 4 * X, NW);
label("$y$", 4 * Y, SE);
label("$z$", 4 * Z, E);
real a=.4;
triple U=(-a,-a,1),L=(a,a,1);
path3 orbit8=
(0,1,2)..(0,2,1)..(0,1,0)..U..(1,0,2)..(2,0,1)..(1,0,0)..L..cycle;
draw(orbit8,1bp+black);
dot(L,8bp+.8blue);
draw((0,0,2)--(0,0,4),6bp+green,Arrow3());
dot(point(orbit8,0.5),5bp+.8red);
\end{asypicture}
\end{document}
Das ist nur zum Spaß: eine echte Animation erstellen. Dieser Codeausschnitt erstellt eine Reihe von PDF-Dateien, die in ein animiertes GIF umgewandelt werden können, wie indiese Antwort.Asymtote verfügt über eigene Einrichtungen zur Erstellung von Animationen, aber ich persönlich benutze oftdiese Methoden(aber das kann auch nur bei mir der Fall sein). Die wichtigste Zutat hier istrelpoint, auf den OG in den Kommentaren hingewiesen hat, also gebührt ihnen alle Anerkennung.
\documentclass[border=3.14mm]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{orbiter.asf}
\begin{asypicture}{name=asyani}
import three;
currentprojection=obliqueX;
unitsize(1cm);
real mytime = @mytime;
draw(O--4 * X,Arrow3);
draw(O--4 * Y,Arrow3);
draw(-1*Z--4 * Z,Arrow3);
label("$x$", 4 * X, NW);
label("$y$", 4 * Y, SE);
label("$z$", 4 * Z, E);
real a=.4;
triple U=(-a,-a,1),L=(a,a,1);
path3 orbit8=
(0,1,2)..(0,2,1)..(0,1,0)..U..(1,0,2)..(2,0,1)..(1,0,0)..L..cycle;
draw(orbit8,1bp+black);
dot(L,8bp+.8blue);
draw((0,0,2)--(0,0,4),6bp+green,Arrow3());
dot(relpoint(orbit8,mytime),5bp+.8red);
\end{asypicture}
\end{filecontents*}
\usepackage{asypictureB}
\standaloneenv{asypicture}
\usepackage{pgffor}
\begin{document}
\def\myangle{45}
\foreach \mytime in {0,0.025,...,0.975}
{
\RequireAsyRecompile
\input{orbiter.asf}
}
\end{document}