如何在 tikz 中的圆形区域使用坐标名称?

如何在 tikz 中的圆形区域使用坐标名称?

我是一名机械工程专业的学生,​​我正在绘制以一定角度连接的两个连杆的变形。两个连杆的示意图如下所示

在此处输入图片描述

我想使用该包pgfplots绘制链接的变形。现在我已经计算了两个链接在某些节点处的变形。假设两个链接的变形都是

\begin{filecontents*}{data1.tex}
0.  0.
0.1 0.00944826
0.2 0.0308185
0.3 0.0541806
0.4 0.0711639
0.5 0.0760562
0.6 0.0666065
0.7 0.0442508
0.8 0.0136516
0.9 -0.0183828
1.  -0.0443726
\end{filecontents*}

其中第一列是沿连杆轴向的距离,第二列是横向变形。为了直观地显示变形,我想使用命令mesh的选项\addplot,通过设置根据变形为线条着色point meta=y。此外,我想绘制相对于未变形配置的变形,如下所示。

在此处输入图片描述

我写的代码是

\documentclass{article}
\usepackage{pgfplots,pgfplotstable}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
        0.  0.
        0.1 0.00944826
        0.2 0.0308185
        0.3 0.0541806
        0.4 0.0711639
        0.5 0.0760562
        0.6 0.0666065
        0.7 0.0442508
        0.8 0.0136516
        0.9 -0.0183828
        1.  -0.0443726
    \end{filecontents*}
\pagestyle{empty}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfplotstableread{data.dat}\data
    \begin{tikzpicture}
        \begin{axis}[
            % hide axis,
            colormap/jet,
            point meta rel=per plot,
            ymax=10
        ]
            \addplot[
                mesh,
                point meta=abs(y),
            ] table {\data} coordinate (endpoint);
            % the above command plots the deformation of the first link
            \addplot[
                mesh,
                x filter/.code={\pgfmathparse{#1+1}\pgfmathresult},
                y filter/.code={\pgfmathparse{#1+-0.0443726}\pgfmathresult},
                rotate around={45:(1.,-0.0443726)},% works
                %rotate around={45:(endpoint)},% not works
                ] table {\data};
        \end{axis}
    \end{tikzpicture}

\end{document}

上面代码中我用了x filterrotate around来实现图的旋转和平移,需要手动修改旋转参数,如果变形的话好像比较麻烦,需要绘制很多个类似的图形。

endpoint在第一个 addplot 的末尾定义了一个坐标名称。如果我将坐标名称用作变量rotate around(参见注释行),代码将不起作用。

我怎样才能修改代码以便只能更改文件名?

答案1

好问题!您的方法在原则上是可行的,但问题是pgfplots启动调查阶段时坐标endpoint未知。因此,我建议只从表中读取最后一个坐标(在启动之前axis)并使用它。这与您的方法一样自动化。

\documentclass{article}
\usepackage{pgfplots,pgfplotstable}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
        0.  0.
        0.1 0.00944826
        0.2 0.0308185
        0.3 0.0541806
        0.4 0.0711639
        0.5 0.0760562
        0.6 0.0666065
        0.7 0.0442508
        0.8 0.0136516
        0.9 -0.0183828
        1.  -0.0443726
    \end{filecontents*}
\pagestyle{empty}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfplotstableread{data.dat}\data
\pgfplotstablegetrowsof{\data} 
\pgfmathtruncatemacro{\NumRows}{\pgfplotsretval-1} 
\pgfplotstablegetelem{\NumRows}{[index]0}\of{\data}
\edef\myx{\pgfplotsretval}
\pgfplotstablegetelem{\NumRows}{[index]1}\of{\data}
\edef\myy{\pgfplotsretval}
    \begin{tikzpicture}
        \begin{axis}[
             hide axis,
            colormap/jet,
            point meta rel=per plot,
            ymax=10
        ]
            \addplot[
                mesh,
                point meta=abs(y),
            ] table {\data};
            \addplot[
                mesh,
                x filter/.code={\pgfmathparse{#1+1}\pgfmathresult},
                y filter/.code={\pgfmathparse{#1+-0.0443726}\pgfmathresult},
                rotate around={45:(\myx,\myy)},% works
                ] table {\data};
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容