有没有办法在 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 绘制对数螺旋工具的一部分:
答案1
如果--cycle
这对您不起作用,一个选项是调整out
和in
角度,使线条与它们所连接的角度相同。这会稍微改变形状,因此如果不需要那么精确,您可以获得(左侧缩放到 6400%):
笔记:
- 在左侧,我将
270
其改为250
,但在右侧,所需的更改是从 到270
。288
不确定为什么右侧需要稍微不同的角度增量。为了获得更高的精度,您可以计算实际角度,但反复试验效果很好。
代码:
\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}