파이썬의 프랙탈 트리

| | | | | |

소개 프랙탈 트리는 재귀 대칭 분기에 의해 생성될 수 있는 트리로 알려져 있습니다.

길이가 1인 줄기가 각각 길이가 r인 두 개의 가지로 분할됩니다. 배럴의 방향과 각도 q를 형성합니다. 이 두 가지 모두 길이가 r * r인 두 가지로 나뉘며, 각각은 부모 가지의 방향과 각도 q를 만듭니다. 이런 식으로 계속해서 무한한 수의 분기가 있는 트리는 분기 팁이라고 하는 제한 지점과 함께 분기의 모음입니다.

이론은 충분합니다. 이제 Python에서 구현을 시도해 보겠습니다. 이를 위해서는 GUI 또는 GUI를 위한 두 개의 Python 라이브러리 Pygame 과 Python에 내장된 라이브러리이며 수학 조정에 사용될 수학 이 필요합니다.

Pygame을 설치하려면

pip install pygame 

그래서 진행하는 방법은 피그미와 프랙탈에 대해 조금 알고 있는 것이 좋습니다.

먼저 줄기를 생성한 후, 가지 크기를 0.9 *(줄기 길이)로 가정하여 줄기마다 가지 생성을 시작하고 다시 줄기로 취급하여 이 과정을 반복합니다.

# 파이썬 라이브러리 가져오기

가져오기 pygame, math


# 가져온 모든 Pygame 모듈 큐 초기화
pygame. init ()


# 새 표면과 창을 만듭니다.

<코드 클래스 = "일반"> 표면 높이, 표면 너비 <코드 클래스 = " 키워드 "> = <코드 클래스 ="값 "> 800 , 600 # 표면 변수

main_surface = pygame.display.set_mode ((표면 높이, 표면 너비))


# 창 제목

pygame.display.set_caption ( "Fractal_Tree_pythonengineering" )


def draw_tree (순서, theta, sz, pos n, 제목, 색상 = < /코드> <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 0 <코드 클래스 = "일반">, <코드 클래스 = "값"> 0 <코 클래스 = "일반">, <코드 클래스 = "값"> 0 <코드 클래스 = "일반">), 깊이 <코드 클래스 = "키워드"> = 0 ):


상대 전체 트리에 대한 트렁크 비율

trunk_ratio = 0.29


# 배럴 길이

<코드 클래스 = "일반"> 트렁크 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> sz <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> 트렁크 비율

<코드 클래스 = "일반"> delta_x <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 트렁크 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> math.cos (제목)

<코드 클래스 = "일반"> delta_y <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 트렁크 <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> math.sin (제목)

< 코드 클래스 = "정의되지 않은 공백" > <코드 클래스 = "일반"> (u, v) <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 위치

<코드 클래스 = "일반"> newpos <코드 클래스 = "키워드"> = <코드 클래스="일반"> (u <코드 클래스 ="키워드 "> + <코드 클래스 ="일반 "> delta_x, v <코드 클래스 ="키워드 "> + <코드 클래스 = "일반" > delta_y)

pygame.draw.line (main_surface, color, posn, newpos)


if 주문 > 0 : # 하위 트리의 다른 레이어 그리기


# 다음 여섯 줄 - 간단한 해킹

# 재귀의 두 가지 주요 부분

# 색상이 다릅니다. 색상을 다른

# 깊이로 변경하거나 깊이가 짝수 또는 홀수인 경우 등

if 깊이 = = 0 :

< 코드 클래스 ="일반 "> color1 <코드 클래스 ="키워드 "> = <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 255 <코드 클래스 = "일반">, <코드 클래스 = "값" > 0 <코드 클래스 = "일반">, <코드 클래스 = "값"> 0 <코드 클래스 = "일반">)

<코드 클래스 = "일반"> color2 <코드 클래스 = "키워드"> = < 코드 클래스 = "일반"> ( <코드 클래스 = "값"> 0 <코드 클래스 = "일반">, <코드 클래스 = "값"> 0 <코드 클래스 = "일반" >, <코드 클래스 = "값"> 255 <코드 클래스 = "일반 ">)

else :

color1 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 색상

<코드 클래스 = "일반" > color2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 색상


<코드 클래스 = "주석"> # 두 개의 하위 트리를 그리기 위해 재귀 호출을 수행합니다.

newsz = sz <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> ( <코드 클래스 = "값"> 1 <코드 클래스 = "keyword"> - trunk_ratio)

draw_tree (주문 <코드 클래스 = "keyword"> - 1 , theta, newsz, newpos, 표제 - 세타, color1, 깊이 + 1 )

draw_tree (주문 - 1 , theta, newsz, newpos, 표제 + <코드 클래스 = "일반"> 세타, 색상2, 깊이 <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 1 )



def 메인():

theta = 0

동안 :


# 코너 업데이트

theta + = <코드 클래스 = "값"> 0.01

<코드 클래스 = " 정의되지 않은 공백 ">

# 이 작은 부분으로 우리가 무언가를 그릴 수 있습니다.

# 화면의 모든 것

main_surface.fill (( 255 , <코드 클래스 = "값"> 255 <코드 클래스 = "일반">, <코드 클래스 = "값"> 0 <코드 클래스 = "일반">))

draw_tree ( 9 <코드 클래스 = "일반">, 세타, 표면 높이 <코드 클래스 = "키워드"> * <코드 클래스 = "값"> 0.9 < 코드 클래스 = "일반">, (표면 너비 <코드 클래스 = " 키워드 "> / <코드 클래스 ="키워드 "> / <코드 클래스 ="값 "> 2 < /코드> <코드 클래스 ="일반 ">, 표면 너비 <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 50 <코드 클래스 = "일반">), <코드 클래스 = "키워드"> - < /코드> <코드 클래스 = "일반"> math.pi <코드 클래스 = "키워드"> / <코드 클래스 = "값"> 2 <코드 클래스 = "일반 "> )

<코드 클래스 = "일반"> pygame.display.flip ()


<코드 클래스 = "코멘트" > # 메인 함수 호출
main()
pygame.quit()

종료:

% MINIF YHTMLc707a572199fb7b4b8a82374bf37b87213%   <소스 유형 = "비디오 / mp4 "src =" https://media.python.engineering/wp-content/uploads/2017-12-18-at-18-40-42.mp4?_=1 ">   

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method