![在图上画第二条线,该线反映随机生成的一条线](https://linux22.com/image/472303/%E5%9C%A8%E5%9B%BE%E4%B8%8A%E7%94%BB%E7%AC%AC%E4%BA%8C%E6%9D%A1%E7%BA%BF%EF%BC%8C%E8%AF%A5%E7%BA%BF%E5%8F%8D%E6%98%A0%E9%9A%8F%E6%9C%BA%E7%94%9F%E6%88%90%E7%9A%84%E4%B8%80%E6%9D%A1%E7%BA%BF.png)
我在绘制显示反射特性的标准布朗运动过程的样本路径时遇到了问题。在红色虚线和蓝线相交的点处,我想将蓝线镜像到红线上。由于我是随机生成蓝线的,所以我不知道如何实现这一点。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}
\pgfmathsetseed{952}
\draw[->] (-1,0) -- (6,0) node[right] {$t$};
\draw[->] (0,-1) -- (0,4) node[above] {$B_t$};
\draw[-, red, dashed] (0,0.75) -- (6,0.75);
\draw[blue] (0,0)
\foreach \x in {1,...,500}
{ -- ++(0.01,rand*-0.2)
}
node[right, black] {$(t,B_t)$}
\end{tikzpicture}
\end{figure}
\end{document}
答案1
如果您只想镜像部分路径,我相信使用库spath3
是intersections
最简单的方法:
- 命名/保存蓝色波浪线和红色虚线路径。
- 在与红色虚线相交处分割波浪路径。
- 移除交叉点前的组件。
- 使用反射变换绘制剩余的路径。
我正在使用ext.transformations.mirror
我的图书馆tikz-ext
包裹但请随意使用提供的任何解决方案我们可以在 tikz 中镜像某个部分(“轴对称”、“反射”)吗?
我们也可以设置相同的种子并再次绘制蓝色路径,但这次进行剪切,以便剪切掉交叉点剩下的所有内容,但需要正确选择剪切区域。
我已经设置了line join=round
这样它就不会在斜接和斜角之间翻转。
您会发现反射的路径位于原始路径的顶部。如果不希望这样,我们可以更改绘制顺序。
代码
\documentclass[tikz]{standalone}
%\documentclass{article}
%\usepackage{tikz}
\usetikzlibrary{
arrows.meta, % arrow tips
ext.transformations.mirror, % reflect over axis
intersections, % find intersection between paths
spath3} % split and transform paths
\begin{document}
\begin{tikzpicture}[line join=round]
\pgfmathsetseed{952}
\draw[->] (-1,0) -- (6,0) node[right] {$t$};
\draw[->] (0,-1) -- (0,4) node[above] {$B_t$};
\draw[spath/save=horiz, red, dashed] (0,0.75) -- (6,0.75);
\draw[blue, spath/save=squiggly] (0,0)
foreach \x in {1,...,500}{ -- ++(0.01,rand*-0.2) }
node[right, black] {$(t,B_t)$};
\draw[
draw=blue!50,
spath/.cd,
split at intersections with={squiggly}{horiz},
remove components={squiggly}{1},
use={squiggly, transform={ymirror=0.75}}
] node[anchor=base west] {$(t,B'_t)$};
\end{tikzpicture}
\end{document}