乳胶中的地形图

乳胶中的地形图

我想编写一个递归代码来给出具有不同颜色的多个椭圆,就像山的地形图一样,就像在 Mathematica 中输入以下内容时会出现以下图像:ContourPlot[(x/5)² + (y/3)², {x, −6, 6}, {y, −6, 6}, Contours → 15]

在此处输入图片描述

但我不知道如何巧妙地做到这一点。我知道如何给椭圆涂上颜色,但我不想把每一个都画出来,我想把方程式放进去,让它给我这样的图形。

我尝试在 Tikz 中使用“foreach”,但老实说,我不认为我理解循环是如何工作的,因为它无法编译。尝试使用“径向阴影”,但不知道如何使其成为椭圆(而不是圆形),而且它还需要我输入值,而我不希望输入每一个值。

我想知道是否有办法写出类似 (x/5)² + (y/3)²=k 这样的公式,其中 k 越靠近 (0,0) 则为蓝色,越远离 (0,0) 则为橙色。x 中椭圆之间的距离为 0.34,所以我想也许递归可以解决这个问题,因为我只需要写出第一个,下一个 x 和 y 中的椭圆将比前者大 0.34,并且成比例。

但我接受任何解决此问题的建议。

我正在尝试这个(但它不起作用),如果它有帮助:

\begin{tikzpicture} 
        \begin{axis}[
            xmin=-6, xmax=6,
            ymin=-6, ymax=6,
            xtick={-6,-4,...,6},
            ytick={-6,-4,...,6},
            %grid=major,
        ]
            
            \foreach \x in {1.5,1.84,...,6.6}
            \foreach \k in {1,2,...,15}
                \draw[] (0,0) ellipse [
                x radius =\x,
                y radius = \sqrt{3*\k - 0.6*\x^2 },
                ]; 
                
        \end{axis}
    \end{tikzpicture}

答案1

以下是多种方法中的部分解决方案,旨在提供一些指导。

\documentclass{article}
\usepackage{tikz} 

\begin{document}
    \begin{tikzpicture} 
        % shading the biggest ellipse
        \fill [outer color=orange!50, inner color=blue!80] (0,0)   
                circle [x radius=5 * 0.2 cm, y radius=5 * 0.333 cm];
        
        % drawing some ellipses without fills
        \foreach \r in {5, 4, 3, 2, 1}{
            \draw (0,0)   circle [x radius=\r * 0.2 cm, y radius=\r * 0.333 cm];        
        }
    \end{tikzpicture}
\end{document}

方法和备注

  1. 首先绘制最大的椭圆,并采用不同的阴影。orange!50表示某种突出显示。选择更好的颜色 ;-)

  2. 在阴影区域上绘制开口椭圆。您只需更改半径。根据需要调整 foreach 循环。给定参数后,x 轴会变窄...

  3. {}在循环内使用了打开和关闭。对于这个单行括号不是必需的,但如果您在循环内执行更多操作,它将很有用。

  4. 我的方法是自下而上,或者说是测试驱动设计 (TDD),即先绘制 1 个开口椭圆,然后绘制多个,引入阴影……这会留下一些残差。即 x 半径和 y 半径的参数应该被推广等。

待完成:

  • 引入剪辑
  • 引入网格或轴

结果

结果

附言:如果您想自己计算椭圆的每个点并显示它,请查看\datavisualizaton大 pgf 手册的“刻度和网格”一章。

答案2

作为如何绘制多个椭圆而不必绘制任何函数的起点,这里有一种方法可以解决它(在我看来,它既不完美也不够接近你的要求):

foreach 省略号

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
    \begin{tikzpicture}

        \definecolor{innercol}{RGB}{51, 102, 153}
        \definecolor{outercol}{RGB}{255, 204, 102}
        \def\R{5} \def\r{3}
        
        \begin{scope}           
            \clip (-5,-5) rectangle (5,5);
            \foreach \i in {1,...,20}
                {
                \pgfmathsetmacro\x{\R/(0.45*1.05^(\i))}
                \pgfmathsetmacro\y{\r/(0.45*1.05^(\i))}
                \pgfmathsetmacro\col{\i*5}
                \draw[very thin,fill=innercol!\col!outercol] (0,0) ellipse (\x cm and \y cm);
                }
            \draw[help lines] (-5,-5) grid (5,5);           
        \end{scope}
        
        \foreach \x in {-5,-4,...,5} \draw (\x,-5) --++ (0,-3pt) node[below] {\small \x};
        \foreach \y in {-5,-4,...,5} \draw (-5,\y) --++ (-3pt,0) node[left] {\small \y};
    \end{tikzpicture}
\end{document}

您也许能够通过计算半径来改变椭圆的形状,甚至可以创建更复杂的颜色阴影。

相关内容