
您好,我想使用 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}
我想我已經實現了您想要的結果,但如果沒有,請發表評論,我會盡力接近所需的結果。