更新:

更新:

在绘制零件后蒂克兹, 是否有可能镜子该部分相对于某个轴或线吗?

平均能量损失

 \documentclass{standalone}

 \usepackage{tikz}

 \begin{document}

 \begin{tikzpicture}
 \draw[step=1.0,gray,thin] (0,0) grid (4,3);
 \draw [thick](1,1) -- (0,0) -- (1,2); % Original Image
 \draw [ultra thick,red] (2,0) -- (2,3); %axis
 % code for Mirror Image
 \draw [thick,blue](3,1) -- (4,0) -- (3,2); % Mirror Image
 \end{tikzpicture}

 \end{document}

在此处输入图片描述

答案1

您可以使用 ascope和 反转xscaleyscale作为一个整体。这只是 ipsen 所做的另一种方法。 将scope有助于仅反映图像的一部分。

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw (-1,1) -- (0,0) -- (1,1); % Original Image
\begin{scope}[yscale=-1,xscale=1]
  \draw[red] (-1,1) -- (0,0) -- (1,1); % Mirror Image
\end{scope}

\end{tikzpicture}

\end{document}

在此处输入图片描述

更新:

您可以xscale/yscale结合使用以xshift/yshift获得所需效果。

\documentclass{standalone}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[step=1.0,gray,thin] (0,0) grid (4,3);
\draw [thick](1,1) -- (0,0) -- (1,2); % Original Image
\draw [ultra thick,red] (2,0) -- (2,3); %axis
% code for Mirror Image
\begin{scope}[xscale=-1,xshift=-4cm]
\draw [thick,blue](1,1) -- (0,0) -- (1,2);  % Mirror Image
\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

这个答案被转换为自己的 PGF 和自己的 TikZ 库,ext.transformations.mirror作为我的一部分tikz-ext扩展包


概括来说:我们希望在每个可能的轴上进行镜像。

但首先,要讨论一些特殊情况。

沿平行于X或者(画布)轴。

正如在其他答案中所看到的,这相对容易做到,因为我们只需要加倍移动和交换正交轴的方向:

\def\pgftransformxmirror#1{%
  \pgfmathparse{2*(#1)}%
  \pgftransformcm{-1}{0}{0}{1}{\pgfqpoint{+\pgfmathresult pt}{+0pt}}}
\def\pgftransformymirror#1{%
   \pgfmathparse{2*(#1)}%
   \pgftransformcm{1}{0}{0}{-1}{\pgfqpoint{+0pt}{+\pgfmathresult pt}}}

TikZ 键xmirrorymirror是这些 PGF 宏的包装器。它们接受

  • 一个维度(带单位),直接用作X或者价值。
  • 一个被抛入的值(无单位)\pgfpointxy。请注意,转换仍然应用于画布系统!
  • 包裹在( … )其中的坐标被评估,并且其X或者值被转发到 PGF 宏。请注意,这也仅适用于画布的变换。镜像坐标(0, 2)并不(0, 1)一定会导致(非镜像)坐标(0, 0)

沿通过原点的轴进行镜像。

此转换的公式取自维基百科页面变换矩阵(反射部分)并且是

在此处输入图片描述

或者用 TeX 来表示:

\def\pgftransformmirror#1{%
  \pgfpointnormalised{#1}%
  \pgf@xa=\pgf@sys@tonumber\pgf@y\pgf@x
  \pgf@xb=\pgf@sys@tonumber\pgf@x\pgf@x
  \pgf@yb=\pgf@sys@tonumber\pgf@y\pgf@y
  \multiply\pgf@xa2\relax
  \pgf@xc=-\pgf@yb\advance\pgf@xc\pgf@xb
  \pgf@yc=-\pgf@xb\advance\pgf@yc\pgf@yb
  \edef\pgf@temp{{\the\pgf@xc}{+\the\pgf@xa}{+\the\pgf@xa}{+\the\pgf@yc}}%
  \expandafter\pgf@transformcm\pgf@temp{\pgfpointorigin}}

在定义开始时,该点#1被标准化(反映分数),并在计算结束时

  • \pgf@xa保持标准化值 2长度
  • \pgf@xc保存标准化的值22
  • \pgf@yc保存标准化的值22

最后:沿任意轴镜像。

该公式大致基于另一篇维基百科文章,即镜像矩阵(是的,这是德语)并且转换简化为

  • 移动到轴上的某个点,
  • 沿轴镜像到原点
  • 将原点移回。

TikZ 键mirror可以处理“轴通过原点”和“任意轴”两种情况。

如果在其参数中遇到--,则执行任意轴的代码,否则假定为坐标,并执行通过原点的轴的代码。

可能的改进

虽然xmirrorymirror情况都是一般反射的基本简化,但沿任意轴和通过原点的轴的反射之间的差异毕竟不是很大,也许这两种情况可以合并在一个宏下。

使用内置转换。

回应Turion 的评论,我还实现了一个仅使用现有变换(移位、旋转、-1 缩放、旋转回来、移位回来)的版本。

此宏和键以大写字母Mirror而非开头mirror

所有宏和键均在手动的

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{
  backgrounds,
  ext.transformations.mirror % https://ctan.org/pkg/tikz-ext
}
\tikzset{every picture/.append style={gridded, line join=round, line cap=round}}
\begin{document}
\begin{tikzpicture}
\draw[thick]       (1,1) -- (0,0) -- (1,2);
\draw[ultra thick, red] (2,0) coordinate (@1) -- node[above,sloped] {Mirror} (2,3) coordinate (@2);
\begin{scope}[mirror=(@1)--(@2)]
  \draw[thick, blue] (1,1) -- (0,0) -- (1,2);
  \path[transform shape] (@1) -- node[above,sloped] {Mirror} (@2);
\end{scope}
\end{tikzpicture}

\begin{tikzpicture}
\draw[thick]       (1,1) -- (0,0) -- (1,2);
\draw[ultra thick, red] (2,0) coordinate (@1) -- node[above,sloped] {Mirror} (2,3) coordinate (@2);
\begin{scope}[xmirror=2]
  \draw[thick, blue] (1,1) -- (0,0) -- (1,2);
  \path[transform shape] (@1) -- node[above,sloped] {Mirror} (@2);
\end{scope}
\end{tikzpicture}

\begin{tikzpicture}\pgfmathsetseed{7}
\draw[thick]       (1,1) -- (0,0) -- (1,2);
\draw[ultra thick, red] (5*rand,5*rand) coordinate (@1) -- node[above,sloped] {Mirror} (5*rand,5*rand) coordinate (@2);
\begin{scope}[mirror=(@1)--(@2)]
  \draw[thick, blue] (1,1) -- (0,0) -- (1,2);
  \path[transform shape] (@1) -- node[above,sloped] {Mirror} (@2);
\end{scope}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述在此处输入图片描述 在此处输入图片描述

答案3

这是通过spyTikZ 库解决的解决方案。

要镜像图片,请使用mirror scope及其两个子键创建范围:

  • center定义镜子的位置,

  • angle定义镜子的方向。

将您的图片绘制到此范围内然后调用\mirror

(注意:边界框tikzpicture不考虑镜像。)

例子:

在此处输入图片描述

\documentclass[tikz]{standalone}
\usetikzlibrary{spy}
\tikzset{
  mirror scope/.is family,
  mirror scope/angle/.store in=\mirrorangle,
  mirror scope/center/.store in=\mirrorcenter,
  mirror setup/.code={\tikzset{mirror scope/.cd,#1}},
  mirror scope/.style={mirror setup={#1},spy scope={
      rectangle,lens={rotate=\mirrorangle,yscale=-1,rotate=-1*\mirrorangle},size=80cm}},
}
\newcommand\mirror[1][]{\spy[overlay,#1] on (\mirrorcenter) in node at (\mirrorcenter)}

\begin{document}
\begin{tikzpicture}
  \draw [help lines] (-2,0) grid (2,2);
  \begin{scope}[mirror scope={center={0,0},angle=90}]
    \draw[green] (0,0) -- (2,2);
    \draw[red] (1,0) -- (2,2);
    \node[blue,rotate=30] at (1,.5){Mirror};
    \mirror;
  \end{scope}
\end{tikzpicture}
\end{document}

动画示例:

在此处输入图片描述

\documentclass[tikz]{standalone}
\usetikzlibrary{spy}
\tikzset{
  mirror scope/.is family,
  mirror scope/angle/.store in=\mirrorangle,
  mirror scope/center/.store in=\mirrorcenter,
  mirror setup/.code={\tikzset{mirror scope/.cd,#1}},
  mirror scope/.style={mirror setup={#1},spy scope={
      rectangle,lens={rotate=\mirrorangle,yscale=-1,rotate=-1*\mirrorangle},size=80cm}},
}
\newcommand\mirror[1][]{\spy[overlay,#1] on (\mirrorcenter) in node at (\mirrorcenter)}

\begin{document}
\foreach \myangle in {0,5,...,175}{
  \begin{tikzpicture}
    \fill[white] (-2.1,-2.1) rectangle (2.1,2.1);
    \draw [help lines] (-2,-2) grid (2,2);
    \draw[orange] (0,0) -- ++(\myangle:2cm) -- ++(\myangle:-4cm);
    \begin{scope}[mirror scope={angle=\myangle,center={0,0}}]
      \draw[green] (0,0) -- (2,2);
      \draw[red] (2,1) -- (1,0);
      \node[blue,rotate=30] at (1,.5){Mirror};
      \mirror;
    \end{scope}
  \end{tikzpicture}
}
\end{document}

答案4

例如,你可以改变坐标以获得镜像效果。通过坐标变换,可以实现垂直反射通过原点的线,例如

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw (-1,1) -- (0,0) -- (1,1); % Original Image
\draw[red, x={(1,0)},y={(0,-1)}] (-1,1) -- (0,0) -- (1,1); % Mirror Image
\end{tikzpicture}

\end{document}

顺便说一句,如果你更具体地说明你想要什么,那么你甚至可能会得到更具体的答案;-)

更新:

Kumar 比我快一点 ;-),但确实可以通过结合上述程序和翻译来反映任何一点。在您的示例中,您将有

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[step=1.0,gray,thin] (0,0) grid (4,3);
\draw [thick](1,1) -- (0,0) -- (1,2); % Original Image
\draw [ultra thick,red] (2,0) -- (2,3); %axis
% code for Mirror Image
\draw [thick,blue,x={(-1,0)},y={(0,1)},xshift=4cm](1,1) -- (0,0) -- (1,2); % Mirror Image
\end{tikzpicture}

\end{document}

相关内容