如何遮蔽(而不是填充)抛物线所围成的区域?

如何遮蔽(而不是填充)抛物线所围成的区域?

我需要指出抛物线函数 y=f(x) 为正的区域。我想通过填充函数 f(x) 上方的区域来实现这一点。由于绘图是有限的,只能显示部分区域,因此我想通过使用向左、向右和向上的阴影将填充颜色转换为白色来指示剩余区域。

下面是一个 MWE,它说明了我所遇到的问题:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \filldraw[lightgray] (-0.8,0.64) parabola bend (0.0,0.0) (0.8,0.64) 
    -- (0.8,0.8) -- (-0.8,0.8); 
  \shade[left color=red] (0.8,0.64) -- (1.0,1.0) -- (0.8,0.8); % works
%  \shade[left color=red] (0.8,0.64) parabola bend (0.0,0.0) (1.0,1.0) 
%    -- (0.8,0.8); % does not work
  \shade[right color=blue,left color=white] (-0.8,0.64) -- (-1.0,1.0) 
    -- (-0.8,0.8); 
  \shade[bottom color=green,top color=white] (-1.0,1.0) -- (-0.8,0.8) 
    -- (0.8,0.8) -- (1.0,1.0); 
\end{tikzpicture}
\end{document}  

我首先用灰色填充抛物线上方的区域,然后添加三部分(此处显示为红色、蓝色和绿色,以便更容易看到)。这样得到:

在此处输入图片描述

如果我将红色和蓝色改为浅灰色,这将接近我需要的。问题是红色和蓝色部分的底部边界是由直线而不是抛物线给出的。如果我取消注释 MWE 中注释掉的行,以便底部边界由抛物线给出,则红色区域的颜色会发生变化 - 它会变得更浅:

在此处输入图片描述

我的第一个问题是如何避免使用较浅的颜色?我的第二个问题是如何避免灰色和红色/蓝色区域相交处的函数值不连续?

答案1

这是在抛物线内修剪阴影的解决方案

\documentclass{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\begin{scope}   
  \path[clip] (-1,1) parabola bend (0.0,0.0) (1,1)--cycle ;
  \fill[color=lightgray] (-0.8,0.64) parabola bend (0.0,0.0) (0.8,0.64) 
    -- (0.8,0.8) -- (-0.8,0.8)--cycle ;
  \shade[bottom color=green,top color=white](-0.8,0.8)--(0.8,0.8)--(1,1)--(-1,1)--cycle;
  \shade[left color=red,right color=white] (1,1) -- (0.8,0.8)--++(0,-0.5)-|cycle ;
  \shade[right color=blue,left color=white] (-1,1) -- (-0.8,0.8)--++(0,-0.5)-|cycle ;
\end{scope}     
\end{tikzpicture}
\end{document}  

在此处输入图片描述

相关内容