
Olá, quero desenhar algumas geodésicas acelerando uma em direção à outra usando TikZ. Roubei um código de um exemplo on-line para configurar dois planos, um em cima do outro (um de cima invisível - só estou usando-o para iniciar a geodésica ali).
O problema que estou tendo é desenhar linhas (ou geodésicas) entre os dois planos. Funciona bem se eu quiser linhas curvas, mas preciso que elas sejam curvas - especificamente, quero que elas se curvem uma em direção à outra à medida que se aproximam de seus respectivos pontos finais no plano inferior.
Até agora meu código é o seguinte:
\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}
Isso produz o seguinte:
Como você pode ver, as linhas não se curvam uma em direção à outra de uma maneira agradável - quero que elas se aproximem cada vez mais uma da outra à medida que alcançam a superfície preta e não dessa forma parabólica estranha. Obviamente, o problema é que usei o comando parábola. Eu tentei mexer com uma variedade de outras curvas disponíveis e simplesmente não consigo fazer isso funcionar.
Alguém sabe como fazer isto? É mesmo possível?
Também seria bom ter setas no meio das linhas recebidas, se isso fosse possível?
Muito obrigado.
Responder1
Aqui está uma ideia. Basicamente, comecei com o código, pois o exemplo fornecido não era compilável e continha vários erros após adicionar o código necessário.
A visualização do desenho é determinada pelas configurações do vetor unitário x={(<x-dim>,<y-dim>)}
, etc., conforme aplicado ao tikzpicture
ambiente. Observe a adição da coordenada z a todos os pontos. Acho isso mais fácil de usar e visualizar do que ajustar xslant
, yslant
, e rotate
.
A curvatura das linhas verdes pode ser ajustada alterando os pontos de controle das linhas curvas. Estou usando a calc
biblioteca para calcular convenientemente esses pontos de controle com base nas coordenadas inicial e final das curvas.
\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}
Acho que produzi o que você procura, mas caso não, deixe um comentário que tentarei chegar mais perto do resultado desejado.