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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...