在 TikZ 中结合循环和向左弯曲选项时产生的奇怪效果

在 TikZ 中结合循环和向左弯曲选项时产生的奇怪效果

我正在尝试在 TikZ 中绘制水滴。这是我目前的代码:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw[
    left color=blue!50,
    right color=cyan!30,
    shading angle=130,
    draw=none,
    rounded corners,
    line join=round]
(0,0) ++ (30:1) arc (30:-210:1)
to[rounded corners=0,bend right=5] (90:1.5)
to[bend right=0] cycle;
\end{tikzpicture}
\end{document}

输出如下:

在此处输入图片描述

正如您所注意到的,有一个奇怪的效果:我用红色圈出了一个小“支线”。奇怪的是,水滴是完全对称的。并不是角度太紧,左侧看起来不错。更奇怪的是,经过一些尝试后,可以选择to(而不是--)使用 连接到路径的开头cycle 总是导致这种支线,即使bend leftbend right不存在。如果我将路径代码更改为:

(0,0) ++ (30:1) arc (30:-210:1) -- (90:1.5) -- cycle;

那么问题就消失了,但是我失去了bend right我想要的效果。

知道发生了什么事吗?这真是令人困惑。

答案1

我认为问题是由于尝试打开rounded corners和关闭而导致的。具体来说,rounded corners只对下拉顶部的一侧有效。

以下是一些替代方案:

\documentclass[tikz,multi,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw[
    left color=blue!50,
    right color=cyan!30,
    shading angle=130,
    draw=none,
    line join=round
  ]
  (30:1) arc (30:-210:1)
  [out=60, in=-100] to (90:1.5)
  [out=-80, in=120] to cycle;
  \begin{scope}[xshift=2.25cm]
    \draw[
      left color=blue!50,
      right color=cyan!30,
      shading angle=130,
      draw=none,
      line join=round
    ]
    (30:1) arc (30:-210:1)
    .. controls +(.25,.5) and +(-.35,-.65) .. (90:1.5)
   .. controls +(.35,-.65) and +(-.25,.5) .. cycle;
\end{scope}
\end{tikzpicture}
\end{document}

滴

答案2

问题出在最后一行to[bend right=0] cycle,删除这一行就去掉了支线。这意味着最后一行是“多余的”,至少从快速分析来看是这样的。

不过说实话,你建造的落差真的很奇怪。我的意思是你基本上是从山脊开始,画一个弧线,然后顶部部分再次在山脊上闭合。从顶部开始不是更简单吗?

此外,由于重力的原因,水滴具有一种细长的形状,所以弧线可能不是最现实的选择。

我创建了另一个 drop,以便与原始的修复版本进行比较。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

% original
\draw[
    left color=blue!50,
    right color=cyan!30,
    shading angle=130,
    draw=none,
    rounded corners,
    line join=round]
 (30:1) arc (30:-210:1)
to[rounded corners=0,bend right=5] (90:1.5)
%to[bend right=0] cycle
;

% Alenanno's version :D
\begin{scope}[xshift=3cm]
\fill[
    left color=blue!50,
    right color=cyan!30,
    shading angle=130,
    rounded corners=2mm] 
    (0,1.5) 
    to[bend right=1] ++ (.6,-.7)
    to[out=-60,in=-120, looseness=6] (-.6,.8)
    to[bend right=1] cycle;
\end{scope}
\end{tikzpicture}
\end{document}

相关内容