【乌龟编程精讲版-70】你想要美丽的彩虹吗

python玩与学 | 有你好看

公益教程 | 代码俱乐部 | 玩物励志

不知道学过画画的朋友是否教过有关不同“色彩空间”的事儿?所谓“色彩空间”就是用什么方法来表示我们这个世界上的色彩斑斓的、各种各样的颜色的!总的来说有很多种,但我今天想说的是两种表示色彩空间的方法是:RGBHSV

RGB

RGB大家应该并不陌生,分别表示红(Red)、绿(Green)、蓝(Blue)三种色光原色。RGB色彩模型的混色属于加法混色。每种原色的数值越高,色彩越明亮。 R、G、B都为0时是黑色,都为255时是白色。RGB是电脑设计中最直接的色彩表示方法。

RGB颜色空间

一直跟着我学习“乌龟画画”的朋友都知道:我们设置画笔的颜色除了直接用表示颜色的单词指定外,如red,violet,blue,yellow,black,darkgray等,另外一个方法就是用用一组RGB的三组值(R,G,B)来表示了(每个值最大为255,这个注意),比如:

上面的代码我们就用(100,20,189)这组RGB值指定了一种颜色(恩,这种颜色什么模样呢?你可以搜索网络看出来,或者让turtle向前forward一段看看)

HSV

RGB模型是面向硬件的,而HSV颜色模型是面向用户的,HSV通过色相/饱和度/亮度三要素来表达颜色的。

H(Hue):表示颜色的类型(例如红色,绿色或者黄色).取值范围为0—360°.其中每一个值代表一种颜色.(红、橙、黄、绿、青、蓝、紫)

S(Saturation):颜色的饱和度.从0到1.有时候也称为纯度.(0表示灰度图,1表示纯的颜色)(相当于说有没有杂质)

V(Brightness or Value):颜色的明亮程度.从0到1(0表示黑色,1表示特定饱和度的颜色)。(黑、白)

HSV颜色空间

当我们想用那些“渐变的颜色”的时候,也就是在我们眼中看起来相接近的颜色逐渐过渡的时候,用HSV颜色值来表示最合适不过了,因为“相接近”的两个颜色值对应的RGB数值相距遥远。在程序里不同意表示。

七彩彩虹

我们要画的七彩彩虹七种颜色渐变过渡,非常漂亮,所以我们应该用HSV颜色来表示(上面说了那么多就是说明这个意思的,所以你知道一下就可以了,哈哈)。但是!注意但是很重要:就像上面展示的那样,turtle画图的时候都用的是RGB的值才行,所以我们要先编制出一个函数,让这个函数能够将HSV格式的颜色值转换成RGB颜色值。下面的函数就是完成这个功能的:

上面的函数到底是什么意思呢?写这个函数是依据一个“将HSV颜色值转换为RGB颜色值的公式”来的,这个公式我们就不讲了。对我们没有太大帮助,只要按照上面的代码敲入计算机就行了。这也是Python编程的好处之一:别人实现的一个功能(或函数)虽然我不明白其中的原理,但是我能拿来就用就OK了。就像上面的HSVToRGB函数,我只要按照参数的要求给出(hue,s,v)三个参数,那调用之后就会得出对应的RGB的值的列表[R,G,B]了。简直是拿来就用啊!

好了,接下来我们写有关“乌龟画画”的代码,其实非常简单哦!我们又造了一个函数叫Rainbow专门用来画彩虹,这个Rainbow函数就调用了上面讲的HSVToRGB函数来将HSV值变为RGB值供乌龟使用。相信你能理解下面的代码(如果要完整运行,还要将上面的HSVToRGB函数代码也考到下面的第12行处才行哦!)

看第21行代码我们调用了HSVToRGB函数,(hue,s,v)三个参数的S和V都设置成1,也就是最饱和、最亮的状态,而hue值是在循环中不断增大的(循环中hue的值大致为从0到360度),所以hue值遍历了所有的颜色,从而“赤橙黄绿青蓝紫”的彩虹就出来了。

好了,迷人的彩虹出来了,颜色非常靓丽。本教程最重要的一点就是:一定要留好这个HSVToRGB函数,因为以后你要画渐变的或好看的颜色时肯定能用到它!!比如,我就用上面的函数随便画出了一个下面这样的“七彩球球”,呵呵。

学编程、学创造、释放你的想象力

和我学准没错儿

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181127G071H300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券