手把手教你用Python畫一個絕美土星環

2021-02-20 大數據DT

1"""
2SATURN
3"""
4
5import numpy as np
6import matplotlib.pyplot as plt
7from math import sin, cos, radians, sqrt
8
9plt.axis([0,150,100,0])
10plt.axis('off')
11plt.grid(False)
12
13print('running')
14#—————————————————parameters
15g=[0]*3
16
17xc=80 #———sphere center
18yc=50
19zc=0
20
21rs=25 #———sphere radius
22
23lx=-1 #———light ray unit vector components
24ly=0
25lz=0
26
27IA=0
28IB=.8
29+n=2
30
31Rx=radians(-20)
32Ry=radians(0)
33Rz=radians(30)
34
35#————————same as SHADESPHERE—————–
36
37#———————————————————rings
38alpha1=radians(-10)
39alpha2=radians(370)
40dalpha=radians(.5)
41
42r1=rs*1.5
43r2=rs*2.2
44dr=rs*.02
45deltar=(r2-r1)/7 #———ring band width
46
47#—————————————rotate ring point p which is at r, alpha
48for r in np.arange(r1,r2,dr):
49    for alpha in np.arange(alpha1,alpha2,dalpha):
50        xp=r*cos(alpha)
51        yp=0
52        zp=-r*sin(alpha)
53        rotx(xc,yc,zc,xp,yp,zp,Rx)
54        xp=g[0]-xc
55        yp=g[1]-yc
56        zp=g[2]-zc
57        roty(xc,yc,zc,xp,yp,zp,Ry)
58        xp=g[0]-xc
59        yp=g[1]-yc
60        zp=g[2]-zc
61        rotz(xc,yc,zc,xp,yp,zp,Rz)
62        xpg=g[0]
63        ypg=g[1]
64
65#—————————————————select ring band color
66    if r1 <= r < r1+1*deltar:
67        clr=(.63,.54,.18)
68    if r1+1*deltar <= r <= r1+2*deltar:
69        clr=(.78,.7,.1)
70    if r1+2*deltar <= r <= r1+3*deltar:
71        clr=(.95,.85,.1)
72    if r1+3*deltar <= r <= r1+4*deltar:
73        clr=(.87,.8,.1)
74    if r1+5*deltar <= r <= r1+7*deltar:
75        clr=(.7,.6,.2)
76
77#———————————————————————shadow
78    magu=sqrt(lx*lx+ly*ly+lz*lz)
79    ux=-lx/magu
80    uy=-ly/magu
81    uz=-lz/magu
82    vx=xc-xpg
83    vy=yc-ypg
84    vz=zc-zpg
85    Bx=uy*vz-uz*vy
86    By=uz*vx-ux*vz
87    Bz=ux*vy-uy*vx
88    magB=sqrt(Bx*Bx+By*By+Bz*Bz)
89    if magB < rs: #—————————if in the shadow region
90        if vx*lx+vy*ly+vz*lz <= 0: #———if v points toward light source
91            clr=(.5,.5,.2) #———shadow color
92
93    if r1+4*deltar <= r <= r1+5*deltar: #———overplot empty band
94        clr='midnightblue' #———with background color
95
96#——————————————————–plot line segment
97    if alpha == alpha1:
98        xstart=xpg
99        ystart=ypg
100    if zpg <= zc: #–front (z axis points into the screen)
101        plt.plot([xstart,xpg],[ystart,ypg],linewidth=2,color=clr)
102
103    if zpg >= zc: #–back
104        a=xpg-xc
105        b=ypg-yc
106        c=sqrt(a*a+b*b)
107        if c > rs*1.075: #——plot only the visible portion of rings
108            plt.plot([xstart,xpg],[ystart,ypg],linewidth=2,color=clr)
109        xstart=xpg
110        ystart=ypg
111
112plt.show()

相關焦點

  • Python詞雲:Windows安裝Wordcloud報錯解決辦法
    看到別人畫的很漂亮的詞雲想自己動手來一個
  • Python第24課:海龜繪圖_畫圓和點、海龜書寫文本
    課堂筆記中是20~24課中我們學過的turtle指令,我是參考「turtle庫官方文檔」整理的,同學們也要善於去用turtle官方文檔,將各種指令的單詞記錄到筆記本上,不用電腦的時候也可以隨時學習記憶。「老師只是一個搭梯子、扶梯子的人,美妙的風景還要等著同學們去發現。」
  • 德國小草&手把手教你做德國杏子果醬!
    點擊藍色風中小草字體,一鍵免費閱訂德國小草&手把手教你做德國杏子果醬!
  • Python學習:mac電腦安裝python教程
    如果你選擇安裝和我一樣的版本,我這裡提供了百度網盤下載地址 https://pan.baidu.com/s/1cj7s7zTOQ7ZipPwfU6AE2g下載後的文件是pkg文件現在,你的mac電腦裡有兩份python,一份是python2.7,一份是python3.6,在終端裡,當你使用python命令時,用的是python2.6,使用python3時用的是python3.6
  • 全球抗「疫」:用Python帶你了解世界疫情
    但有時候,持續滾動的數字往往會讓人從最初的恐懼變成麻木,因此筆者今天會用Python把一個一個冰冷的數字變成一幅一幅生動的圖片,帶你更加具體的了解世界疫情。通過本文,你會學到如何用Python做數據分析,數據可視化,畫世界疫情地圖,了解世界疫情。本次用到的數據我在前面文章分享過,具體見全球抗「疫」:各國疫情數據早知道。
  • python基礎學習教程:Python基礎語法
    >>> '''在學習過程中有什麼不懂得可以加我的python學習交流扣扣qun,934109170群裡有不錯的學習教程、開發工具與電子書籍。與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容。'''Window 上在安裝 Python 時已經安裝了交互式編程客戶端,提示窗口如下:
  • 開學季,教你用Python畫大學教室座位神分區圖!網友直呼「中槍」
    其實,它們可是隱藏著許多小秘密的哦~雖然這些座位,沒有什麼差別,但是他們可以反映出你在學校裡面屬於學霸還是學渣,一目了然。網上曾有這樣一張神奇的教室座位分區圖,網友直呼「中槍」!戀習Python這就用Python給大家畫這幅有趣的神分區圖,看看是不是跟你的情況一樣呢?基本思路:我們將畫布分成若干子畫布,這些子畫布構成繪圖區域,在這些繪圖區域上分別繪製圖形,這就讓我們想到函數subplot2grid()的使用方法。
  • 手把手教你寫好心意卡、玩轉全家福
    今晚,小編手把手教你寫好心意卡、玩轉全家福! 【心意卡】心意卡,就是部門每個人都在同事的卡上寫一句給他或他父母的話。雖然只寫一兩句話,但是不少同事還是擠不出一個字。原因不外乎是:不想說錯話沒面子,但是又想特別點。哪有這麼多事兒,按著模板套,同事不嫌鬧。
  • Python的數據可視化:對比7種工具包
    Matplotlib在Python中繪圖庫,是一個相對低水平的,所以為了畫出一個看起來很漂亮的圖,它通常要使用比其他的庫需要更多的命令。另一方面,你幾乎可以使用matplotlib繪製任何你想畫的圖。它非常靈活,但是靈活性帶來的問題就是冗餘問題。  我們首先繪製一個直方圖來展示每個航空公司的航線長度的分布。直方圖將所有的路線長度劃分成範圍(或著箱子),然後每個範圍內的數據點進行計數。
  • python黑知識:python本體
    講述python的實現本體,版本,構建時間,構建工具和構建參數python的實現有很多種,如果想研究一下它語言本身一些機制的實現,可能需要看原始碼,那麼,就需要找到相應的實現,分支和版本。那麼如何得到python的實現呢?這個時候,就要用到python的platform包。
  • 教程 | 甜甜的奶油香,教你畫奶油小蛋糕
    雖然吃不到,但看看也很過癮啊◢◢◢教你畫奶油小蛋糕:▼第一步:先把淡黃色加水稀釋,然後平塗蛋糕,趁畫面溼潤的時候,用中黃在蛋糕兩端浸染,再用棕色畫出蛋糕夾層中的可可粉部分(p1↓)▼第二步:等顏色幹後,用黃色畫蛋糕,趁蛋糕溼的時候點染深棕色,刻畫出美味的可可粉(p2↓)
  • 手把手教你免費領取加拿大國家公園年票
    【手把手領取攻略】1. 點擊連結(也可以戳左下角的「閱讀全文」),將national park pass進入購物車http://bit.ly/2h12K11【相關推送】如果經常關注「小錢大玩」平臺的話,你會發現莎莎姐特別喜歡推送三個東西:1) amex offer/禮品卡; 2) 亞馬遜購物;以及3)建議美國的朋友都順手申請一張加拿大籤證。目前加拿大籤證已經是10年啦,而且申請超級方便,真的強烈建議大家有空順手都申請一下!
  • 技能手把手教你使用Apple Pay,拿走不謝!
    如果你有iPhone,有Apple Watch卻還不會用Apple Pay怎麼辦?
  • 手把手教你做485籤證——AFP申請流程篇
    編手把手教大家做了485籤證,但是其中第11條,澳洲AFP信息中,有的童鞋可能會摸不著頭腦。現在,Mr. 編就繼續教大家怎麼申請AFP。第二部分填寫收信地址,如果和住址一樣,直接勾選Same as Current Residential Address:最後一部分是以前的住址,可以填寫國內住址,不止一個的話可以點擊
  • 手把手教你在澳洲申請稅號!
    澳洲稅號是一組專屬個人的特別號碼,用來幫助澳洲政府徵稅所用。一個人一生中只會有一組稅號,即使你申請了其他籤證也不受影響。因此,您需仔細保存此號碼,並在更換居住地址或名字時,及時告知國稅局。如果因為沒有固定地址無法收到稅號,或是遺失了稅號,可帶上自己的護照,到澳洲任何一間稅務局重新取得稅號。為什麼要申請稅號?
  • 【年味】手把手教你做「常州人氣年菜」——糯米稻草鴨
    同樣,小布不僅會手把手教大家來自飯店名廚的製作流程,還會跟小夥伴們分享年菜背後的故事喲!「師傅領進門,修行看個人」,能不能做出飯店的滋味,體會每道特色年菜的真諦,就要看你自己的咯!今天,小布要帶大家來製作的,就是來自華美達國際大酒店的——
  • 【年味】手把手教你做「常州特色年菜」——水晶餚肉
    在近階段,小布每天都會推出1-2道「常州特色年菜」的專輯,不僅手把手教大家來自飯店名廚的製作流程,還會跟小夥伴們分享年菜背後的故事喲!「師傅領進門,修行看個人」,能不能做出飯店的滋味,體會每道特色年菜的真諦,就要看你自己的咯!
  • 玩完《腦裂》後我精神分裂了,一手畫圓一手畫方竟然這麼難!
    首頁 > 傳媒 > 關鍵詞 > 玩完最新資訊 > 正文 玩完《腦裂》後我精神分裂了,一手畫圓一手畫方竟然這麼難!
  • 韓國偶吧來拜年,手把手教你年糕湯,偶吧撒狼黑喲!
    其中一位偶吧就是曾經教我們做冷麵的李相勳老師。另一位呢是李老師的韓國弟弟,他可是一位跆拳道黑帶高手,悄悄告訴各位未婚的女圈友,他現在還單身哦,別說我小甜甜有帥哥福利不想著你們唷~ 言歸正傳,今天就是他們兩位偶吧,來手把手教我們正宗韓式餃子年糕湯了,話說年糕湯是韓國新年餐桌上必吃的一道美食,未婚的女圈友們還不趕緊學起來,學會就能……嘿嘿,是不是想想就有點小激動呢?
  • 【年味】手把手教你做「常州特色年菜」——蟹粉魚肚
    在整個2月份,小布每天都會推出1-2道「常州特色年菜」的專輯,不僅手把手教大家來自飯店名廚的製作流程,還會跟小夥伴們分享年菜背後的故事喲!「師傅領進門,修行看個人」,能不能做出飯店的滋味,體會每道特色年菜的真諦,就要看你自己的咯。今天,小布要帶大家來製作的,就是來自府前樓的——