# 建立坐標軸,圖片的大小,x軸y軸之範圍 (python 程式碼)

# 建立坐標軸,圖片的大小,x軸y軸之範圍
import numpy as np import matplotlib.pyplot as plt plt.figure(figsize=(4,4),dpi=80) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0)) plt.xlim(-10, 10) plt.ylim(-10, 10) plt.show()

H-樹

import numpy as np

import matplotlib.pyplot as plt
plt.figure(figsize=(5,5),dpi=80)

def F(x0,y0,r,a):  #定義遞迴程式
    if r <1 :return
    x1=x0+r*np.cos(a) ; y1=y0+r*np.sin(a)

    X=[x0,x1]
    Y=[y0,y1]
    plt.plot(X,Y,color="blue",linewidth=1)  #畫線

    F(x1,y1,0.7*r,a-pi/2)
    F(x1,y1,0.7*r,a+pi/2)
#以下內容為主程式
pi=3.14159              #圓周率
(x0,y0,r,a)=(0,0,15,pi/2)  #(基準點之x,y坐標,長度,方向角)
F(x0,y0,r,a)
F(x0,y0,r,a+pi)
plt.show()

遞迴~(樹)

 import numpy as np

import matplotlib.pyplot as plt
plt.figure(figsize=(5,5),dpi=80)

def F(x0,y0,r,a):  #定義遞迴程式
    if r <1 :return
    x1=x0+r*np.cos(a) ; y1=y0+r*np.sin(a)

    X=[x0,x1]
    Y=[y0,y1]
    plt.plot(X,Y,color="blue",linewidth=2)  #畫線

    F(x1,y1,0.5*r,a-pi/3)
    F(x1,y1,0.6*r,a+pi/3)
#以下內容為主程式
pi=3.14159              #圓周率
(x0,y0,r,a)=(0,0,200,pi/2)  #(基準點之x,y坐標,長度,方向角)
F(x0,y0,r,a)
plt.show()

迷宮

import matplotlib.pyplot as plt

import random
plt.figure(figsize=(20,15),dpi=80)
def F(x0,y0,n):  #定義遞迴程式
    if n<1:return
    x1=x0+2**(n-1)  ;y1=y0
    x2=x0+2**n      ;y2=y0
    x3=x0           ;y3=y0+2**(n-1)
    x4=x1           ;y4=y3
    x5=x2           ;y5=y3
    x6=x0           ;y6=y0+2**n
    x7=x1           ;y7=y6
    x8=x2           ;y8=y6
    A=random.sample(bag,4)
    if A[0]==0:
        plt.plot([x3,x4],[y3,y4],color="green",linewidth=2)
    if A[1]==0:
        plt.plot([x4,x5],[y4,y5],color="green",linewidth=2)
    if A[2]==0:
        plt.plot([x1,x4],[y1,y4],color="green",linewidth=2)
    if A[3]==0:
        plt.plot([x4,x7],[y4,y7],color="green",linewidth=2)

    if A[0]==1:
        a=random.randint(x3,x4-1)
        plt.plot([x3,a],[y3,y3],color="green",linewidth=2)
        plt.plot([a+1,x4],[y3,y4],color="green",linewidth=2)
    if A[1]==1:
        a=random.randint(x4,x5-1)
        plt.plot([x4,a],[y4,y4],color="green",linewidth=2)
        plt.plot([a+1,x5],[y4,y5],color="green",linewidth=2)
    if A[2]==1:
        a=random.randint(y1,y4-1)
        plt.plot([x1,x1],[y1,a],color="green",linewidth=2)
        plt.plot([x1,x4],[a+1,y4],color="green",linewidth=2)
    if A[3]==1:
        a=random.randint(y4,y7-1)
        plt.plot([x4,x4],[y4,a],color="green",linewidth=2)
        plt.plot([x4,x7],[a+1,y7],color="green",linewidth=2)
    
    F(x0,y0,n-1)
    F(x1,y1,n-1)
    F(x3,y3,n-1)
    F(x4,y4,n-1)

#以下內容為主程式
(x0,y0,n)=(0,0,5)  # n:2~5 
bag=[1,1,1,0]    #
F(x0,y0,n)

plt.plot([x0+1,x0+2**n,x0+2**n],[y0,y0,y0+2**n],color="blue",linewidth=5)
plt.plot([x0,x0,x0+2**n-1],[y0,y0+2**n,y0+2**n],color="blue",linewidth=5)
plt.plot(0.5,0,marker="D",color="red")
plt.plot(2**n-0.5,2**n,marker="D",color="red")
plt.text(0,-3,"START", fontsize=20)
plt.text(2**n-1,2**n+1,"END", fontsize=20)
plt.ylim(-5,2**n+5)              #設定 y 軸的範圍
plt.show()