相对于线条粗细的尺寸/缩放后不变

相对于线条粗细的尺寸/缩放后不变

如何实现一个点(这里只是画成一个圆圈),无论我如何缩放图像,它都保持相同的大小。

这是示例。

\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}

\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}

也许我应该使用节点而不是画另一个圆圈。

我曾经使用带有 ${\bullet}$ 的节点,但是它不是精确居中的,而且我无法控制大小。

编辑 以下操作可部分完成,但不适用于非中心点:

\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill[shift only] (1,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill[shift only] (1,0) circle (1pt);
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\fill(1,0) {[shift only] circle (1pt)};
\end{tikzpicture}

或者,如何在特定点绘制一个相对于线条粗细具有固定大小的点,例如thick线条粗细的 1.5 倍。

答案1

您可以通过按键重置非平移缩放shift only。这将保留变换的平移部分,但会将矩阵设置为恒等矩阵。如果您还想取消当前变换,可以使用reset cm按键。

\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\fill[shift only] (0,0) circle (1pt);
\end{tikzpicture}

对于编辑

\begin{tikzpicture}[xscale=-1,yscale=-0.3]
\draw[thick] (0.5,0.5)--(-0.2,-1);
\fill (0.5,0.5) circle[shift only,radius=1pt];
\fill (-0.2,-1) circle[shift only,radius=1pt];
\end{tikzpicture}

在此处输入图片描述

答案2

解决方法很简单,将比例代码移到路径内。不要将其应用于整个 tikz 代码:

前:

在此处输入图片描述

后:

在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,shapes.geometric}
\begin{document}
    \begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}

\begin{tikzpicture}
\draw[thick, scale=3] (0,0)--(1,0);
\fill (0,0) circle (1pt);
\end{tikzpicture}
\end{document}

答案3

另一种方法是在设置点的大小时做一些数学计算:

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

\newcommand{\myscale}{1}

\begin{document}
 \begin{tikzpicture}[scale=\myscale]
  \draw[thick] (0,0)--(1,0);
  \fill (0,0) circle (1pt/\myscale);
 \end{tikzpicture}

\renewcommand{\myscale}{3}

 \begin{tikzpicture}[scale=\myscale]
  \draw[thick] (0,0)--(1,0);
  \fill (0,0) circle (1pt/\myscale);
 \end{tikzpicture}
\end{document}

这样,您就可以控制哪些元素应该(相对)缩放,哪些元素不应该。

为了更容易地重用已经编写的代码,您可以这样使用它:

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

\newcommand{\myimage}[2][1]{
 \begin{scope}[shift={#2}, scale=#1]
  \draw [thick] (0,0) -- (1,0);
  \fill (0,0) circle (1pt/#1);
 \end{scope}
}

\begin{document}
 \begin{tikzpicture}
  \myimage{(0,1)};
  \myimage[3]{(0,0)};
 \end{tikzpicture}
\end{document}

答案4

我想出了一个有点混乱的解决方案。仍然不认为它优雅。它是迄今为止其他解决方案的组合......

\documentclass[border=10]{standalone}
\usepackage{tikz}
\newcommand{\mydot}[1]{
 \begin{scope}[shift={#1}]
  \fill[shift only] (0,0) circle (1.3pt);
 \end{scope}}
\begin{document}
\begin{tikzpicture}[scale=1]
\draw[thick] (0,0)--(1,0);
\mydot{(0,0)};
\mydot{(1,0)};
\end{tikzpicture}
\begin{tikzpicture}[scale=3]
\draw[thick] (0,0)--(1,0);
\mydot{(0,0)};
\mydot{(1,0)};
\end{tikzpicture}
\end{document}

相关内容