TikZ — 连接图和线段

TikZ — 连接图和线段

有没有办法在 TikZ 中连接绘图和线段?

这是我想要绘制的形状:

复杂的形状

我对结果几乎很满意,但绘制的部分和其余的图形之间存在差距:

差距

\documentclass[12pt, border=0.5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[sc]{mathpazo}    
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}    
\begin{tikzpicture}[x=1mm, y=1mm]
    \def\r{10.5}
    \def\w{18}  

    \coordinate (a) at ({\r*cos(180-\w)}, {\r*sin(180-\w)});
    \coordinate (b) at ({\r*cos(\w)}, {\r*sin(\w)});

    \draw[domain=\w:{180-\w}, variable=\x, samples=250] 
        (a) to[out=270, in=180] 
        (-8, 1.25) --
        (-8, 0.75) -- 
        (-1, 0.75) -- 
        (-1, 8) to[out=20, in=250] 
        (0, 9) to[out=290, in=160] 
        (1, 8) -- 
        (1, 0.75) -- 
        (8, 0.75) -- 
        (8, 1.25) to[out=0, in=270] 
        (b) plot ({\r*cos(\x)}, {\r*sin(\x)}) -- (a);
\end{tikzpicture}
\end{document}

percusse 的解决方案很有效:

\documentclass[12pt, border=0.5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[sc]{mathpazo}    
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}    
\begin{tikzpicture}[x=1mm, y=1mm]
    \def\r{10.5}
    \def\w{18}  

    \coordinate (b) at ({\r*cos(180-\w)}, {\r*sin(180-\w)});
    \coordinate (a) at ({\r*cos(\w)}, {\r*sin(\w)});
    \coordinate (c) at ({\r*cos(-\w)}, {\r*sin(-\w)});
    \coordinate (d) at ({\r*cos(-180+\w)}, {\r*sin(-180+\w)});

    \pgfmathsetmacro\t{90-\w}
    \pgfmathsetmacro\z{90+\w}

    \draw[line width=0.2mm, domain={180-\w}:\w, variable=\x, samples=250]  plot ({\r*cos(\x)}, {\r*sin(\x)}) -- 
        (a) to[out=-\t, in=0] 
        (8, 1.25) --
        (8, 0.75) -- 
        (1, 0.75) -- 
        (1, 8) to[out=160, in=290] 
        (0, 9) to[out=250, in=20]
        (-1, 8) --
        (-1, 0.75) -- 
        (-8, 0.75) -- 
        (-8, 1.25) to[out=180, in=-\z] 
        (b) -- cycle;
\end{tikzpicture}
\end{document}

我先调整了角度,然后绘制了圆形部分。即使在 6400% 时也没有间隙:

无间隙解决方案

如果你想知道,为什么我需要这样的形状,它是 Artobolevskii 绘制对数螺旋工具的一部分:

Artobolevskii 的绘图工具

答案1

如果--cycle这对您不起作用,一个选项是调整outin角度,使线条与它们所连接的角度相同。这会稍微改变形状,因此如果不需要那么精确,您可以获得(左侧缩放到 6400%):

在此处输入图片描述

笔记:

  • 在左侧,我将270其改为250,但在右侧,所需的更改是从 到270288不确定为什么右侧需要稍微不同的角度增量。为了获得更高的精度,您可以计算实际角度,但反复试验效果很好。

代码:

\documentclass[12pt, border=0.5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[sc]{mathpazo}    
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}    
\begin{tikzpicture}[x=1mm, y=1mm, join=cap]
    \def\r{10.5}
    \def\w{18}  

    \coordinate (a) at ({\r*cos(180-\w)}, {\r*sin(180-\w)});
    \coordinate (b) at ({\r*cos(\w)}, {\r*sin(\w)});

    \draw[domain=\w:{180-\w}, variable=\x, samples=250] 
        (a) to[out=250, in=180] %% <--- Adjusted out angle here
        (-8, 1.25) --
        (-8, 0.75) -- 
        (-1, 0.75) -- 
        (-1, 8) to[out=20, in=250] 
        (0, 9) to[out=290, in=160] 
        (1, 8) -- 
        (1, 0.75) -- 
        (8, 0.75) -- 
        (8, 1.25) to[out=0, in=288] <--- Adjusted in angle here
        (b) plot ({\r*cos(\x)}, {\r*sin(\x)}) -- (a)
        ;
\end{tikzpicture}
\end{document}

相关内容