TikZ:路径闭合点处的圆角

TikZ:路径闭合点处的圆角

rounded corners这是 TikZ 中的一个已知问题,当使用该选项的值大于两个角之间距离的一半时,就会引入伪影(例如圆角的动态半径)。现在考虑以下 MWE。

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[scale=5]
\draw[rounded corners=20pt] (0,-1) to[out=110,in=-110] (0,1) to[out=-70,in=70] cycle;
\end{tikzpicture}

\end{document}

此代码绘制的路径包含两个角,除了其中一个角恰好也是路径的起点和终点外,其他方面都相同。如果不使用圆角,它看起来如下所示:

enter image description here

但不幸的是,当我们引入该rounded corners选项时,生成的图片却出现了熟悉的瑕疵:

enter image description here

我猜想使用cycle来闭合路径的行为并不像我想象的那样。也就是说,我期望cycle基本上合并路径的起点和终点,从而在这个合并点处只创建一个角。相反,它似乎表现得好像那里有两个角,彼此之间的距离为零,使得任何非零圆角半径都太大。

我想出了两个解决方法(请参阅下面的代码):

  1. 使用不同的起点/终点。(例如,两个角中间的切线垂直的点之一。)这是可能的,但只有当您完全正确地获得该点时,它才会看起来正确,并且您需要为rounded corners每个角单独指定选项。(使其成为全局draw选项会像以前一样在起点/终点引入伪影。)
  2. 分割角。查看我对此解决方法的具体实施结果,似乎问题与功能关系不大,cycle而与操作的inout选项关系很大to。因为此解决方法中的起点/终点仍然是一个角,这次确实可以正确圆角,并且与原始代码的唯一真正区别是与原始代码的-- cycle相对。to[out=110,in=-90] cycle

这两种解决方法的代码和生成的图片如下所示。

那么我的问题是:我可以将/选项cycle与操作结合使用,而不必将起点更改为我可能不知道的某个点吗?(显然,使用起点的副本而不是关键字并不能改善这里的情况,在这种情况下,第二个角不会被识别为一个角,甚至不会尝试舍入。)或者还有其他简单的方法来获取我想要的 TikZ 图片?inouttorounded cornerscycle

% Start at one of the two points halfway between the corners
\begin{tikzpicture}[scale=5]
\draw (-0.22,0) to[out=90,in=-110,rounded corners=20pt] (0,1) to[out=-70,in=70,rounded corners=20pt] (0,-1) to[out=110,in=-90] cycle;
\end{tikzpicture}

enter image description here

% Introduce extra corners (split the original two)
\begin{tikzpicture}[scale=5]
\draw[rounded corners=2pt] (-0.02,-1) to[out=110,in=-110] (-0.02,1) -- (0.02,1) to[out=-70,in=70] (0.02,-1) -- cycle;
\end{tikzpicture}

enter image description here


Tarass 的回答(https://tex.stackexchange.com/a/302811/25596) 给了我一个可能的第三种解决方法的想法,即使用“热身”线和“冷却”线以及选项shorten。但是,似乎shortenrounded corners不能一起玩。

\begin{tikzpicture}[scale=5]
% Start point
\fill[green!80!black] (0.2,-1) circle (0.02cm);
% End point
\fill[blue!80!black] (-0.2,-1) circle (0.02cm);
% Shorten the start by 1cm, shorten the end by 0.2cm
\draw[rounded corners=20pt,shorten <=1cm,shorten >=0.2cm]
    % "Warm-up"
    (0.2,-1) -- (0,-1)
    % Enter the path
    to[out=110,in=-110] (0,1)
    to[out=-70,in=70] (0,-1)
    % Go around a second time, then exit the path
    to[out=110,in=-110] (0,1)
    to[out=-70,in=70] (0,-1)
    % "Cool-down"
    -- (-0.2,-1);
\end{tikzpicture}

enter image description here

答案1

假设您想要的只是通过某些点的平滑形状。如果您想要不那么椭圆的形状,请添加更多点。

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[smooth cycle]
 \draw plot[tension=1] coordinates{ (0,-1) (0,1) (0.2,1) (0.2,-1)};
\end{tikzpicture}
\end{document}

demo

答案2

如何不画出这条路径的一部分:

enter image description here

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[scale=5]
\draw[rounded corners=20pt] (0,-1)
    to[out=110,in=-110] (0,1)
    to[out=-70,in=70] (0,-1)
    % How no to draw this
    to[out=110,in=-110] (0,1);

\end{tikzpicture}

\end{document}

相关内容