Tikz 图片使用随机数

Tikz 图片使用随机数

我目前正在使用 tikz 来描述理论中使用的定律。此方法通过在不同线条上断点来描述子区域的构造。

我想重现这张图片: PBGRT 中的区域法

其中,P1、P2、P2分别是在L1、L2、L3线上随机产生的断点。

这对我来说是难点。我目前已经完成了这部分:

\begin{figure}[h]
\begin{center}
\begin{tikzpicture}
\draw (0,0) --++ (3,-3) --++ (3.5,3.5) --++ (-3,3) --cycle;
\draw (0.5,1.5) to[dashed] (1,1) -- (4,-2) to[dashed] (4.5,-2.5)node[below right]{$L_1$} ;
\draw (1.5,2.5) to[dashed] (2,2) -- (5,-1) to[dashed] (5.5,-1.5)node[below right]{$L_2$} ;
\draw (2.5,3.5) to[dashed] (3,3) -- (6,0) to[dashed] (6.5,-0.5)node[below right]{$L_3$} ;
\end{tikzpicture}
\end{center}
\end{figure}

但我不知道如何用随机变量创建 Pn 点。当然,我考虑了 Ln 线的插值表达式,并将断点 Pn 放在这条线上,但我不知道怎么做。

第二个小问题是关于虚线的,我目前不知道如何绘制一条线,先是虚线,然后是实线,然后是虚线。

所有线 + 面积等的陈述都依赖于 Pn 的随机放置。你能帮我创建这张图片吗?

谢谢

答案1

我设法绘制了整个图片,然后将其旋转 -45 度。这样你就可以使用 arandom()作为x坐标:

\documentclass[tikz,margin=5mm]{standalone}

\begin{document}
    \begin{tikzpicture}[line width = .8pt]
        \begin{scope}[rotate=-45]
            \draw (0,0) rectangle (-4,5.5);
            \coordinate (L1) at (0,1.5);
            \coordinate (L2) at (0,3);
            \coordinate (L3) at (0,4.5);
            \coordinate (L4) at (0,6);

            \coordinate (p0) at (-4,0);
            \pgfmathparse{4 * random()}
            \coordinate (p1) at (L1-|-\pgfmathresult,0);
            \pgfmathparse{\pgfmathresult * (1-random())}
            \coordinate (p2) at (L2-|-\pgfmathresult,0);
            \pgfmathparse{\pgfmathresult * (1-random())}
            \coordinate (p3) at (L3-|-\pgfmathresult,0);
            \pgfmathparse{\pgfmathresult * (1-random())}
            \coordinate (p4) at (L4-|-\pgfmathresult,0);

            \foreach \i [remember=\i as \j (initially 0)] in {1,2,3,4}{
                \draw (p\j) -- (p\j|-p\i) edge[dashed] ++ (180:0.75) -- (p\i);
                \draw (p\i) -- (L\i);
                \draw[dashed] (L\i) -- ++(0:0.75) node[pos=1.5]{\( L\i \)};
                \path (p\j) -- (L\i) node[midway]{\( A_\i \)};
                \draw (p\i) circle (0.5mm) node[above=1mm]{\( P_\i \)};
            }

            \draw (p4) -| (0,5.5);

            \draw[<->] (p1) -- node[auto]{\( x \)} (p1|-0,0);
            \draw[<->] ([yshift=-2.5mm]p1) -- node[auto,swap]{\( y \)} ([yshift=-2.5mm]p1-|0,0);
        \end{scope}
    \end{tikzpicture}
\end{document}

其结果是(您可能需要进行一些编译才能获得良好的结果random()):
在此处输入图片描述

小更新:
这样,就可以使用前一行的某个部分,而不必等待random()创建一个好的值。我还删除了行 L4,因为示例图像中没有绘制该行。

\documentclass[tikz,margin=5mm]{standalone}

\begin{document}
    \begin{tikzpicture}[line width = .8pt]
        \begin{scope}[rotate=-45]
            \draw (0,0) rectangle (-4,5.5);
            \coordinate (L1) at (0,1.5);
            \coordinate (L2) at (0,3);
            \coordinate (L3) at (0,4.5);
            \coordinate (L4) at (0,6);

            \coordinate (p0) at (-4,0);
%            \pgfmathparse{4 * random()}
            \pgfmathparse{4 * 0.6}
            \coordinate (p1) at (L1-|-\pgfmathresult,0);
%            \pgfmathparse{\pgfmathresult * (1-random())}
            \pgfmathparse{\pgfmathresult * 0.5}
            \coordinate (p2) at (L2-|-\pgfmathresult,0);
%            \pgfmathparse{\pgfmathresult * (1-random())}
            \pgfmathparse{\pgfmathresult * 0.4}
            \coordinate (p3) at (L3-|-\pgfmathresult,0);
%            \pgfmathparse{\pgfmathresult * (1-random())}
            \pgfmathparse{\pgfmathresult * 0.75}
            \coordinate (p4) at (L4-|-\pgfmathresult,0);

            \foreach \i [remember=\i as \j (initially 0)] in {1,2,3,4}{
                \draw (p\j) -- (p\j|-p\i) edge[dashed] ++ (180:0.75) -- (p\i);
                \path (p\j) -- (L\i) node[midway]{\( A_\i \)};
                \draw (p\i) circle (0.5mm) node[above=1mm]{\( P_\i \)};
            }
            \foreach \i in {1,2,3}{
                \draw (p\i) -- (L\i);
                \draw[dashed] (L\i) -- ++(0:0.75) node[pos=1.5]{\( L\i \)};
            }

            \draw[dashed] (p4) -| (0,5.5);

            \draw[<->] (p1) -- node[auto]{\( x \)} (p1|-0,0);
            \draw[<->] ([yshift=-2.5mm]p1) -- node[auto,swap]{\( y \)} ([yshift=-2.5mm]p1-|0,0);
        \end{scope}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容