tikz 中的发光路径

tikz 中的发光路径

我想在 tikz 中绘制一条扩散线和一条虚线路径,该虚线路径基本上是该扩散区域的轮廓。我认为在 photoshop 中可以通过模糊描边来实现扩散效果。

这可能吗?

这是一个手绘效果很差的例子:

例子

编辑

感谢 @percusse 和 @Alenanno 的帮助,我几乎可以制作出我想要的效果。唯一缺少的是阴影区域周围的虚线,而不是我破解的全灰线。

具有所需效果的图像

代码在这里:

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

\begin{document}
\begin{tikzpicture}[>=latex]

    \def\lc{0.6} %Transition: 5-linear %0-infinitely sharp
    \def\psz{1.0} %Potato size
    \def\smss{0.92} %Smoothness: number of colors=1/(1-\smss)

    %Potato
    \newcommand{\potato}[1]{(0*#1,0*#1)(10*#1,-1*#1)(12*#1,10*#1)(4*#1,11*#1)(-1*#1,7*#1)}

    %Crack path
    \def\Ax{0} \def\Ay{0}
    \def\Bx{1.5}    \def\By{2}
    \def\Cx{4.5}    \def\Cy{4}
    \def\Dx{6}  \def\Dy{6}  
    \def\Ex{6}  \def\Ey{4}  
    \def\Fx{8}  \def\Fy{3}  
    \def\linepath{(\Ax,\Ay)(\Bx,\By)(\Cx,\Cy)(\Dx,\Dy)}
    \def\linepathnb{(\Cx,\Cy)(\Ex,\Ey)(\Fx,\Fy)}

    \begin{scope}
        \clip plot [smooth cycle, tension =0.8] coordinates{ \potato{\psz}};
        \draw[line cap=round,line width=105pt, black!20] plot [smooth,tension=1] coordinates{ \linepath};
        \draw[line cap=round,line width=105pt, black!20] plot [smooth,tension=1] coordinates{ \linepathnb};
        \foreach \x[evaluate={\xc=90*(exp(-\x/\lc)-0.9*exp(-1/\lc)*\x;}] in {1,\smss,...,0}{
            \draw[line cap=round,line width=\x*100pt,black,draw=black!\xc] plot [smooth,tension=1] coordinates{ \linepath};
            \draw[line cap=round,line width=\x*100pt,black,draw=black!\xc] plot [smooth,tension=1] coordinates{ \linepathnb};
        }
        \draw[line cap=round,line width=2pt, black] plot [smooth,tension=1] coordinates{ \linepath};
        \draw[line cap=round,line width=2pt, black] plot [smooth,tension=1] coordinates{ \linepathnb};
    \end{scope}
    \draw [line width=5pt] plot [smooth cycle, tension =0.8] coordinates{ \potato{\psz}};

\end{tikzpicture}

\end{document}

答案1

您可以使用该包背后的想法pgf-blur(源自该问题衰落声明中软路径的重用?衰落的转变?) 用于平滑阴影:反复绘制并更改颜色(或根据需要的不透明度)和形状大小(或路径的线宽)。可以更改步长以使其更平滑。

我设计了一个在我看来没问题的公式,但你可以对衰减率等等进行更严格的控制。

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x[evaluate={\xc=0.5*100*ln(10/\x);}] in {10,9.9,...,1}{
\draw[line cap=round,line width=\x*1pt,draw=black!\xc]
(0,0) arc (0:30:1 and 2) to[bend left] (3,2) arc (0:250:1 and 1) -- cycle;
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

据我所知,您无法像问题中那样对路径进行阴影处理。您可以使用路径来剪切其下方的阴影形状,但这无法实现您的结果,因为它是弯曲的,并且阴影会沿着曲线移动。

但是,您可以在其他地方模糊线条并将其作为外部图像包含。如果这是此类图形的唯一实例,那么它就不会那么耗时,但如果整个文档中没有多种类型,那么您可以在外部程序中绘制虚线(选择模糊的形状并应用轮廓很容易)。

如果您使用图形编辑程序沿着模糊笔触的轮廓绘制虚线曲线,那么它会比下面的示例更精确。之后,您只需将其包含在 Tikz 中的简单形状中即可。

此解决方案使用经过调整的版本JLDiaz 的解决方案

输出

图1

代码

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{shapes,calc}   

\newcommand\fillshape[3]{ % #1 = shape, #2 = filename of texture, #3 = includegraphics options
    \begin{scope}
        \clip #1;
        \node[yshift=-2.6em] {\includegraphics[#3]{#2}};
        \draw[densely dashed,line width=.2pt] (.43,-1.5) 
            to[out=77,in=255,looseness=1.6,yshift=1.3] (.1,-.2) 
            to[out=65,in=69,looseness=1.7] (-.45,.05)
            to[out=249,in=95,looseness=.7] (-.55,-.6)
            to[out=275,in=70,looseness=1.1,yshift=1.3] (-.15,-1.6);
    \end{scope}
    \draw[line width=.5pt] #1;

}

\begin{document}
\begin{tikzpicture}
\fillshape{(0,0) circle (1.5cm)}{line}{width=2cm};
\end{tikzpicture}
\end{document}

相关内容