Asymptote에서 (3D 애니메이션을 만들기 위해) 3D 곡선의 점을 얻는 방법은 무엇입니까?

Asymptote에서 (3D 애니메이션을 만들기 위해) 3D 곡선의 점을 얻는 방법은 무엇입니까?

Asymptote에서 3D 애니메이션을 만들고 싶습니다. 파란색의 작은 구가 3D 순환 곡선("orbit8"이라고 명명함)을 따라 이동합니다. 점근선의 곡선은 매개변수화되어 있다고 들었습니다. 그러나 궤도를 따라 점의 위치를 ​​얻는 방법을 모르겠습니다.

저 좀 도와 주 시겠어요!

내 MWE는 다음과 같습니다.

\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}

답변1

시간이 point(orbit8,t)어디에 있는지 사용할 수 있습니다 . t나는 추천한다이 훌륭한 튜토리얼asypictureB튜토리얼 작성자의 패키지 도 마찬가지입니다 . 그렇게 하면 pdflatex -shell-escape <file>다음을 file포함할 수 있는 출력을 생성할 수 있습니다 .

\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}

여기에 이미지 설명을 입력하세요

이것은 단지 재미를 위한 것입니다. 실제 애니메이션을 만드는 것입니다. 이 조각은 다음에 설명된 대로 애니메이션 gif로 변환할 수 있는 일련의 PDF 파일을 생성합니다.이 답변.Asymtote에는 애니메이션을 제작할 수 있는 자체 시설이 있습니다., 하지만 저는 개인적으로 자주 사용합니다.이러한 방법(그러나 이것은 단지 나일 수도 있습니다). 여기서 가장 중요한 성분은OG가 의견에서 지적한 relpoint, 그래서 전체 크레딧이 그들에게 돌아갑니다.

\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}

여기에 이미지 설명을 입력하세요

관련 정보