Python中的高級turtle(海龜)作圖(續)

来源:http://www.cnblogs.com/OctoptusLian/archive/2017/02/03/6363568.html
-Advertisement-
Play Games

四、填色 color 函數有三個參數。第一個參數指定有多少紅色,第二個指定有多少綠色,第三個指定有多少藍色。比如,要得到車子的亮紅色,我們用 color(1,0,0),也就是讓海龜用百分之百的紅色畫筆。 這種紅色、綠色、藍色的混搭叫做RGB(Red,Green,Blue)。因為紅綠藍是色光上的三原色 ...


四、填色

color 函數有三個參數。第一個參數指定有多少紅色,第二個指定有多少綠色,第三個指定有多少藍色。比如,要得到車子的亮紅色,我們用 color(1,0,0),也就是讓海龜用百分之百的紅色畫筆。

這種紅色、綠色、藍色的混搭叫做RGB(Red,Green,Blue)。因為紅綠藍是色光上的三原色,任何顏色都可以通過改變三原色的比重來調配出來。

雖然我們不是在電腦屏幕上混合顏料(我們用的是光!),但我們可以把RGB方案想象成三個顏料桶,一個紅的,一個綠的和一個藍的。每個桶里都是滿的,我們可以看成滿桶的值是1(100%)。然後把所有的紅顏料和綠顏料混在一起放在一個大缸里,這樣就產生了黃色。

現在我們嘗試用海龜畫一個黃色的圓,我們要用100%的紅色和綠色顏料,不能使用藍色:

效果如下:

>>> t.color(1,1,0)  ##100%的紅色,100%的綠色,0%的藍色
>>> t.begin_fill()  ##給後面的形狀填色
>>> t.circle(50)
>>> t.end_fill()    ##用RGB顏色來給圓填色
黃色的圓

 

 

1,用來畫填色圓形的函數

為了更容易地用不同的顏色來試驗,我們來把畫圓填色的代碼寫成一個函數:

>>> def mycircle(red,green,blue):
    t.color(red,green,blue)
    t.begin_fill()
    t.circle(50)
    t.end_fill()

 

我們可以只用綠色來畫一個很亮的綠色的圓,如圖A:

>>> mycircle(0,1,0)

 

也可以用一半的綠色(0.5)來畫一個深綠色的圓,如圖B:

>>> mycircle(0,0.5,0)

 

A:                           B:

 

2,使用純白和純黑

當天空沒有了太陽,世界就變得一切黑暗(假設我們那時候還沒有發明燈)。類比,如果讓三種顏色都設置為0,就相當於沒有光,這時候畫出來的圖形都是黑色的;反之為1全為白。

>>> mycircle(0,0,0)

 

五、畫正方形的函數

>>> def mysquare(size):
    for x in range(1,5):
        t.forward(size)
        t.left(90)

 

>>> mysquare(25)
>>> mysquare(50)
>>> mysquare(75)
>>> mysquare(100)
>>> mysquare(125)

 

效果如下:

 

六、畫填色正方形

要對正方形填色,首先要重置畫布,開始填色,然後在調用正方形函數,過程如下:

>>> t.reset()
>>> t.begin_fill()
>>> mysquare(50)
>>> t.end_fill()   ##加入這行代碼前,你應當看到一個空的正方形,直到你結束填充

 

效果如下:

 

我們現在可以改變下這個函數,讓它既可以畫填好的正方形也可以畫不填色的正方形。

>>> def mysquare(size,filled):
    if filled == True:
        t.begin_fill()
        for x in range(1,5):
            t.forward(size)
            t.left(90)
        if filled == True:
            t.end_fill()

 

下麵我們可以畫一個填了色的正方形:

>>> mysquare(50,True)

 

接著畫一個沒有填色的正方形:

>>> mysquare(150,False)

 

 

七、畫填好色的星星

現在我們要寫一個mystar函數

>>> def mystar(size,filled):
    if filled == True:    ##檢查filled是否為真
        t.begin_fill()  ##如果是的話開始填充
    for x in range(1,19):
        t.forward(size)
        if x % 2 == 0:
            t.left(175)
        else:
            t.left(225)
        if filled == True:
            t.end_fill()
mystar函數

 

現在我們可以畫一個金色(90%紅色,75%綠色,0%的藍色)的星星

>>> t.color(0.9,0.75,0)
>>> mystar(120,True)

 

效果如下:

 

要給星星畫上輪廓,把顏色改成黑色並且不用填色再畫一遍星星:

>>> t.color(0,0,0)
>>> mystar(120,False)

 

效果如下:

 

總結

今天下午收穫頗豐,忘記了吃飯,忘記了打游戲,一直在學習Python作圖。學會瞭如何用turtle模塊畫幾個基本的幾何圖形,還有用for迴圈和if語句來控制海龜在屏幕上的動作。同時可以改變海龜的筆的顏色並給它所畫的形狀填色。還用了一些函數(比如 def 函數)來重用繪圖的代碼,提高了效率。

路還很長,堅持走下去!共勉

 

 

 

       

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • interface IState { string Name { get; set; } //後件處理 IList Nexts { get; set; } Func Selector { get; set; } } class State : IState { pu... ...
  • Repeater控制項是一個數據綁定容器控制項,它能夠生成各個項的列表,並可以使用模板定義網頁上各個項的佈局。當該頁運行時,該控制項為數據源中的每個項重覆此佈局。 配合模板使用repeater控制項 若要使用repeater控制項,需創建定義控制項內容佈局的模板。模板可以包含標記和控制項的任意組合。如果未定義模板 ...
  • "ABP入門系列目錄——學習Abp框架之實操演練" "源碼路徑:Github LearningMpaAbp" 完成了簡單的增刪改查和分頁功能,是不是覺得少了點什麼? 是的,少了許可權管理。既然涉及到了許可權,那我們就細化下任務清單的功能點: 登錄的用戶才能查看任務清單 用戶可以無限創建任務並分配給自己, ...
  • 泛型不同參數類型生成的對象是相互獨立的。 //如 Tuple ts; Tuple to; //ts to 是兩個類型的對象。 很多時候,我們希望實現 to = ts 這種操作,為什麼?因為看上去它應該如此。 為了達到這個目的,就要解決“泛型參數轉換的問題”,這個問題的知識點是in out 泛型變體。... ...
  • lambda 傳遞ref參數有個語法bug,必須要顯式書寫參數類型。 //如 delegate bool FuncType(ref int num); FuncType func1; func1 = num => true; //錯 func1 = (ref num) => true;//錯 fun... ...
  • 上一篇在C++中反射調用.NET(一)中,我們簡單的介紹瞭如何使用C++/CLI並且初步使用了反射調用.NET程式集的簡單方法,今天我們看看如何在C++與.NET程式集之間傳遞複雜對象。 ...
  • python爆破定長密碼的腳本 ...
  • 指針與地址的加減 摘自 "http://http://www.cnblogs.com/haore147/p/3647231.html" 如上,a是一個一維數組,數組中有5個元素,所以 a的類型是數組指針;ptr是一個int 型的指針,ptr的類型是整型指針 。 1. &a + 1:取數組a 的首地址 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...