嗨,我想使用 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}
我想我已经制作出了您想要的东西,但如果没有,请留下评论,我会尝试更接近预期的结果。