Tikz 缩放似乎弄乱了弧线(交叉点)

Tikz 缩放似乎弄乱了弧线(交叉点)

这可能是这些问题的后续: 旋转 tikzpicture 弄乱了交叉点一个为什么这些 TikZ 交叉点缩放不正确?

让我们使用这个 MWE:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[scale=1]

\draw[name path=line 1] (1,1) --  +(-20:5);
\draw[name path=line 2] (1,-1) --  +(20:5);
\path[name intersections={of=line 1 and line 2}] (intersection-1) node (i){};
\fill (i) circle[radius=0.05cm];

\draw[blue] ([shift={(i.center)}]20:1) arc[radius=1, start angle=20, end angle= -20];
\end{tikzpicture}
\end{document}

这定义了一个交点 (i),并在两条线之间绘制了一个圆(用于检查位置)和一条圆弧。效果非常好:

在职的

但是当我将比例增加到例如 2 时,它就不再正确了:

不工作

请注意,黑点位于正确的位置,因此它不是上述两个线程中已知的错误。

由于在两种情况下手动设置移位坐标都会(3.7, 0)产生近乎完美的输出,因此arc命令本身一定是没问题的。

我已经尝试过其他帖子中的修复方法,例如

\path[name intersections={of=line 1 and line 2,by={i}}];

\path[coordinate, name intersections={of=line 1 and line 2}] (intersection-1) node (i){};

但都没有用。

有任何想法吗?

答案1

罪魁祸首似乎是[shift=...]。 像 这样的坐标(i.center)以绝对单位给出,但shift似乎无论如何都应用了比例因子。 请参阅[shift only]关键(第 359 页)。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[scale=2]

\draw[name path=line 1] (1,1) --  +(-20:5);
\draw[name path=line 2] (1,-1) --  +(20:5);
\path[name intersections={of=line 1 and line 2}] (intersection-1) node (i){};
\fill (i) circle[radius=0.05cm];
\draw[blue] (i) ++(20:1) arc[radius=1, start angle=20, end angle= -20];

\draw[red] (i.center) -- ([shift=(i.center)] 0,0);& demonstrate difference
\draw[green, shift only] (i.center) -- ([shift=(i.center)] 0,0);% fix
\end{tikzpicture}
\end{document}

答案2

这是一个使用 calc 库的解决方案,只需对代码和思维进行最少的更改

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}
\begin{document}
\begin{tikzpicture}[scale=2.5]

\draw[name path=line 1] (1,1) --  +(-20:5);
\draw[name path=line 2] (1,-1) --  +(20:5);
\path[name intersections={of=line 1 and line 2}] (intersection-1) node (i){};
\fill (i) circle[radius=0.05cm];

\draw[red] ($(i.center)+(20:1)$) arc[radius=1, start angle=20, end angle= -20];

\end{tikzpicture}
\end{document}

编辑(问题解释)

下一个代码是使用来回移位命令,可以使用 x,y 移位,也可以使用极轴移位:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgf}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[scale=2.5]

\def\CenterX{0.}
\def\CenterY{0.}
\def\DistanceFTarget{1}
\def\AngleFTarget{30}
\def\DistanceSTarget{2}
\def\AngleSTarget{-30}
\node  at (\CenterX,\CenterY) (Center) {};
\fill[black] (Center) circle (0.2);
\pgfmathsetmacro\Xft{\CenterX+\DistanceFTarget*cos(\AngleFTarget)}
\pgfmathsetmacro\Yft{\CenterY+\DistanceFTarget*sin(\AngleFTarget)}
\pgfmathsetmacro\FTargetDistX{\Xft-\CenterX}
\pgfmathsetmacro\FTargetDistY{\Yft-\CenterY}
\pgfmathsetmacro\Xst{\CenterX+\DistanceSTarget*cos(\AngleSTarget)}
\pgfmathsetmacro\Yst{\CenterY+\DistanceSTarget*sin(\AngleSTarget)}
\pgfmathsetmacro\STargetDistX{\Xst-\CenterX}
\pgfmathsetmacro\STargetDistY{\Yst-\CenterY}


\draw[fill=blue] (\Xft,\Yft) node[right] {target1} circle (0.1);

\draw[->,ultra thick,red] (Center)--([shift=(Center)]\FTargetDistX,\FTargetDistY);
\draw[->,green,thin] (Center)--([shift=(Center)]\AngleFTarget:\DistanceFTarget);


\draw[fill=green] (\Xst,\Yst) node[right] {target2} circle (0.1);

\draw[->,ultra thick,orange] ([shift=(Center)]\STargetDistX,\STargetDistY) --(Center);
\draw[->,green,blue] ([shift=(Center)]\AngleSTarget:\DistanceSTarget) --(Center);


\end{tikzpicture}
\end{document}

我们得到下一个输出:

在此处输入图片描述

即使图片已经发生移动,输出也正是我们从代码中期望的。

但是如果我们改变中心(用于转移到除当前(0,0)之外的其他点 - 比如说(1,3)-)并重新缩放(scale=1 就可以了),我们会得到以下结果:

在此处输入图片描述

所以问题在于缩放(不是 x 缩放或 y 缩放)不尊重我们的移位中心,必须避免。

相关内容