在 3D 图上定位各种类型的节点

在 3D 图上定位各种类型的节点

现在我的 3D 曲线已经按照我想要的方式表现了,我想添加文本节点和矢量箭头等等。下面是我的基本图表的 MWE 和我添加的第一个带标签的箭头。对于这么小的添加,这需要做大量的工作。有没有关于如何更好地处理这个问题的建议,或者我只能反复试验?

杰克的建议很好,我的图表正在制作中。应用这个时,我不得不使用一个技巧 - 白色图 - 来腾出空间,这样我的箭头和标签就不会被剪掉。有什么意见吗?

另外,如果我想将紫色向量三元组的全部或部分沿红色曲线移动大约 1 个坐标单位,同时保持其原始方向或改变它们,该怎么办?改变它们的一个原因可能是让其中两个保持切线,另一个保持与这些曲线所在表面的法线。当然,我必须做一些自己的计算,但什么是最佳坐标来表达这些计算的结果并适当地定位向量?我想要的不多,不是吗?

平均能量损失

MWE 输出

\documentclass{standalone}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}
\usepackage{mathtools}

\pgfplotsset{compat=1.9}

\begin{document}
\par\begin{tikzpicture}
\begin{axis}[
    scale=2,
    x={(-0.6cm,-0.3cm)}, y={(.6cm,0.0cm)}, z={(0cm,.6cm)},
    xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
    axis lines=middle, axis on top,
    xtick={1}, ytick={2},ztick={1},
    enlargelimits=true,
    clip=true
    ]
\addplot3[
    color=white,
    domain=0:4
    ]({x/2},{1.3*x},{x/2});
\addplot3[
    samples y=0,
    smooth, thick, color=blue,
    domain=0:sqrt(2)
    ] ({0},{4-2*x^2},{x});
\draw [-latex,color=violet,thick] (current plot begin) -- +(axis direction cs:0,0,1)
    node [anchor=west] {$ds$};
\draw [-latex,color=violet,thick] (current plot begin) -- +(axis direction cs:1,0,0)
    node [anchor=north west] {$dt$};
\draw [-latex,color=violet,thick] (current plot begin) -- +(axis direction cs:0,1,0)
    node [anchor=north] {$n$};
\addplot3[
    samples y=0,
    smooth, thick, color=green,
    domain=0:2
    ] ({x},{0},{sqrt(2-x^2/2)});
\addplot3[
    samples y=0,
    smooth, thick, color=red,
    domain=0:2
    ] ({x},{4-x^2},{0});
\end{axis}
\end{tikzpicture}
\end{document}

答案1

试错绝对不是你所能做的一切,这应该是最后的手段。人们之所以会以编程方式生成这样的图形而不是使用 GUI,是因为你可以定义图形元素之间的逻辑关系。

一般建议:如果你想用 TikZ 元素增强 PGFPlots 图,请将这些 TikZ 命令里面环境axis。这样,轴坐标系就可用于绘制元素,而您不必捏造坐标。

对于这个具体的图片,思考一下你想要描绘什么会有所帮助:你想要一条从蓝色图的起点开始的线,在 z 方向上的长度为一个 z 单位。要绘制这条线,你可以添加以下线

\draw (current plot begin) -- +(axis direction cs:0,0,1);

紧接着\addplot蓝色图的命令。节点current plot begin指的是前一个命令的起点\addplot+路径命令中的表示相对于前一个坐标的坐标,axis direction cs:0,0,1是 z 轴方向上一个 z 单位的点。

要获取箭头和标签,您可以使用

\draw [-latex] (current plot begin) -- +(axis direction cs:0,0,1) node [anchor=west] {$n$};

使用常规 TikZ 命令绘制的对象不会影响绘图范围,这就是您使用不可见\addplot命令的原因。更好的方法是使用 明确设置上限ymax=5,或通过设置 来防止切断对象clip=false

要沿着图移动三面体,请在coordinate [pos=0.3] (trihedron origin)命令末尾添加定义一个新坐标\addplot,然后使用该坐标绘制三面体(而不是current plot origin)。


第一个例子的代码:

\documentclass[12pt,a4paper,fleqn]{article}
\usepackage[a5paper,margin=14mm]{geometry}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}

\pgfplotsset{compat=1.9}

\begin{document}
\par\begin{tikzpicture}
\begin{axis}[
    scale=2,
    x={(-0.6cm,-0.3cm)}, y={(.6cm,0.0cm)}, z={(0cm,.6cm)},
    xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
    axis lines=middle, axis on top,
    xtick={1}, ytick={2},ztick={1},
    enlargelimits=true
    ]

\addplot3[
    samples y=0,
    smooth, thick, color=blue,
    domain=0:sqrt(2)
    ] ({0},{4-2*x^2},{x});
\draw [-latex] (current plot begin) -- +(axis direction cs:0,0,1) node [anchor=west] {$n$};

\addplot3[
    samples y=0,
    smooth, thick, color=green,
    domain=0:2
    ] ({x},{0},{sqrt(2-x^2/2)});
\addplot3[
    samples y=0,
    smooth, thick, color=red,
    domain=0:2
    ] ({x},{4-x^2},{0});

\end{axis}
\end{tikzpicture}
\end{document}

第二个示例的代码:

\documentclass[border=5mm]{standalone}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots}

\pgfplotsset{compat=1.9}

\begin{document}
\par\begin{tikzpicture}
\begin{axis}[
    scale=2,
    x={(-0.6cm,-0.3cm)}, y={(.6cm,0.0cm)}, z={(0cm,.6cm)},
    xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
    axis lines=middle, axis on top,
    xtick={1}, ytick={2},ztick={1},
    enlargelimits,
    clip=false
    ]
\addplot3[
    samples y=0,
    smooth, thick, color=blue,
    domain=0:sqrt(2)
    ] ({0},{4-2*x^2},{x}) coordinate [pos=0.3] (trihedron origin) ;
\draw [-latex,color=violet,thick] (trihedron origin) -- +(axis direction cs:0,0,1)
    node [anchor=west] {$ds$};
\draw [-latex,color=violet,thick] (trihedron origin) -- +(axis direction cs:1,0,0)
    node [inner sep=1pt, anchor=south east] {$dt$};
\draw [-latex,color=violet,thick] (trihedron origin) -- +(axis direction cs:0,1,0)
    node [anchor=north] {$n$};
\addplot3[
    samples y=0,
    smooth, thick, color=green,
    domain=0:2
    ] ({x},{0},{sqrt(2-x^2/2)});
\addplot3[
    samples y=0,
    smooth, thick, color=red,
    domain=0:2
    ] ({x},{4-x^2},{0});
\end{axis}
\end{tikzpicture}
\end{document}

相关内容