Нарисуйте геодезическое ускорение

Нарисуйте геодезическое ускорение

Привет, я хочу нарисовать несколько геодезических, ускоряющихся друг к другу, используя TikZ. Я украл код из онлайн-примера, чтобы настроить две плоскости одну над другой (верхняя невидима — я просто использую ее, чтобы начать там геодезические).

Проблема, с которой я столкнулся, заключается в рисовании линий (или геодезических) между двумя плоскостями. Это работает нормально, если мне нужны кривые линии, но мне нужно, чтобы они были кривыми — в частности, я хочу, чтобы они изгибались друг к другу по мере приближения к своим соответствующим конечным точкам на нижней плоскости.

На данный момент мой код выглядит следующим образом:

\begin{tikzpicture}[scale=.9,every node/.style={minimum size=1cm},on grid]       
\begin{pgfonlayer}{bottom}
    \begin{scope}[ 

    % Lower layer
    yshift=0,every node/.append style={
        yslant=0.5,xslant=-1,rotate=-10},
        yslant=0.5,xslant=-1,rotate=-10] 
    \fill[black,fill opacity=0.9] (0,0) rectangle (5,5);

    \draw[black] (0,0) rectangle (5,5);
    \node[name=B,draw,scale=0.4,black,very thick,text width=0.95,text height=0.95,inner sep=0pt,] at (2.525,2.525) {};
\end{scope}![enter image description here][1]\end{pgfonlayer}

\begin{scope}[  % Upper layer
    yshift=105,every node/.append style={
    yslant=0.5,xslant=-1,rotate=-10},yslant=0.5,xslant=-1,rotate=-10
                 ]
    \fill[fill=none,fill opacity=0.5, opacity=0.5] (0,0) rectangle (5,5);

    \node[scale=.9,draw,fill=none,draw=none, fill opacity=0.9,opacity=0,very thick,name=A,text width=3cm,text height=3cm,inner sep=0pt] at (2.5,2.5) {};

    \begin{pgfonlayer}{bottom}
  \foreach \i in {north east, north west, south east, south west}
      \draw[green,very thick] (A.\i) parabola (B.\i);
         \end{pgfonlayer}

\end{scope}

\end{tikzpicture}

Это дает следующее:

Как вы видите, линии не изгибаются друг к другу приятным образом - я хочу, чтобы они становились все ближе и ближе друг к другу по мере достижения черной поверхности, а не делали это таким странным параболическим образом. Очевидно, проблема в том, что я использовал команду параболы. Я пробовал возиться с различными другими доступными кривыми, но у меня просто не получается заставить это работать.

Кто-нибудь знает, как это сделать? Это вообще возможно?

Было бы неплохо также иметь стрелки в середине входящих линий, если это возможно?

Большое спасибо.

решение1

Вот одна идея. Я по сути начал заново с кода, так как предоставленный пример не компилировался и содержал несколько ошибок после добавления необходимого кода.

Вид чертежа определяется настройками единичного вектора x={(<x-dim>,<y-dim>)}и т. д., применяемыми к tikzpictureсреде. Обратите внимание на добавление z-координаты ко всем точкам. Я считаю, что это проще использовать и визуализировать, чем настраивать xslant, yslant, и rotate.

Кривизну зеленых линий можно регулировать, изменяя контрольные точки для кривых линий. Я использую библиотеку calcдля удобного расчета этих контрольных точек на основе начальных и конечных координат кривых.

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[x={(0.935cm,0.126cm)},y={(-0.354cm,0.312cm)},z={(0cm,1cm)}]
  \draw[fill,fill opacity=0.9] (0,0,0) -- ++(5,0,0) -- ++(0,5,0) -- ++(-5,0,0) -- cycle;
  \draw[very thick] ( 2.3,2.3,0) coordinate (B1)
               -- ++( 0.4,0.0,0) coordinate (B2)
               -- ++( 0.0,0.4,0) coordinate (B3)
               -- ++(-0.4,0.0,0) coordinate (B4) -- cycle;
  \fill[opacity=0.1] (0,0,2) -- ++(5,0,0) -- ++(0,5,0) -- ++(-5,0,0) -- cycle;
  \path ( 1.15,1.15,2) coordinate (A1)
   -- ++( 2.70,0.00,0) coordinate (A2)
   -- ++( 0.00,2.70,0) coordinate (A3)
   -- ++(-2.70,0.00,0) coordinate (A4) -- cycle;
  \foreach \i in {1,...,4}
    \draw[green,very thick] (A\i) .. 
      controls ($(A\i)!0.5!(2.5,2.5,1)$) and ($(B\i)+(0,0,0.4)$) .. (B\i);
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Думаю, у меня получилось то, что вам нужно, но если нет, оставьте комментарий, и я постараюсь приблизиться к желаемому результату.

Связанный контент