💻STUDY/PYTHON STUDY
12주차 수업복습
그래픽스 응용
컴퓨터 그래픽스
- 컴퓨터 소프트웨어와 하드웨어를 이용하여 가상의 이미지를 생성 처리하는 과정
- 픽셀 기반의 래스터 그래픽스(raster graphics)
- 정점(vertex) 기반의 벡터 그래픽스(vector graphics)
- 모델링(modeling): 물체의 형태를 설계하는 과정
- 렌더링(rendering): 모델링된 물체 표면을 색으로 칠하거나, 텍스쳐 매핑(texture mapping), 광원 효과(lighting)을 계산하여 실감나는 물체를 표현하는 작업을 하는 과정
tkinter 그래픽 모듈
tkinter 모듈
- 고차원의 그래픽 응용 개발을 위해 파이썬에 내장된 그래픽 모듈
- tk 클래스의 tk 객체 생성
- tkinter 그래픽 모듈의 함수를 통한 도형-> canvas 공간에 그려짐
Canvas 클래스
- canvas 객체가 생성-> 그래픽 관련 함수 호출 가능
ex1> 선 그리기
from tkinter import*
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
canvas.create_line(100,100,400,400)
ex2> 사각형 그리기
from tkinter import*
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
canvas.create_rectangle(100,100,400,400)
ex3> 무작위 직선 그리기
from tkinter import*
import random
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
for i in range(200):
x1=random.randrange(400)
y1=random.randrange(400)
x2=x1+random.randrange(200)-100
y2=y1+random.randrange(200)-100
canvas.create_line(x1,y1,x2,y2)
ex4>무작위 사각형 그리기
from tkinter import*
import random
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
for i in range(200):
x1=random.randrange(400)
y1=random.randrange(400)
x2=x1+random.randrange(200)-100
y2=y1+random.randrange(200)-100
canvas.rectangle(x1,y1,x2,y2)
ex5>무작위 사각형 칠하기
from tkinter import*
import random
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
colors=['red','pink','blue','purple','violet','orange','yellow','green']
for i in range(200):
x1=random.randrange(400)
y1=random.randrange(400)
x2=x1+random.randrange(200)-100
y2=y1+random.randrange(200)-100
canvas.create_rectangle(x1,y1,x2,y2,fill=random.choice(colors))
ex6>동심원 그리기
canvas.create_arc(x1,y1,x2,y2,extent=359,style=ARC)
(*extent는 호의 중심 각도, 359=원, 360=0으로 간주함)
(*style=PIESLICE,CHORD,ARC)
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
width=500
height=500
step=5
for i in range(10,250,step):
x1=width/2-i
y1=height/2-i
x2=width/2+i
y2=height/2+i
canvas.create_arc(x1,y1,x2,y2,extent=359,style=ARC)
tk.update()
time.sleep(0.05)
ex7>반복 사각형
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
width=500
height=500
step=5
for i in range(10,250,step):
x1=width/2-i
y1=height/2-i
x2=width/2+i
y2=height/2+i
canvas.create_rectangle(x1,y1,x2,y2)
tk.update()
time.sleep(0.05)
tkinter 그래픽 활용
애니메이션: 정지된 그래픽 이미지를 일정 시간에 걸쳐 움직이게 만드는 일련의 작업. 이전의 이미지에 대한 잔상 효과(afterimage effect)를 활용
움직이는 삼각형: 삼각형 도형이 아래에서 위로 서서히 이동하는 애니메이션 프로그램, 70개의 이미지 프레임, sleep(0.05)는 0.05초 동안 멈추라는 의미
ex1> 움직이는 삼각형
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
canvas.create_polygon(250,400,275,450,225,450)
for y in range(0,70):
canvas.move(1,0,-5)
tk.update()
time.sleep(0.05)
ex2>점수 그래프 예제
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=800,height=800)
canvas.pack()
scores=[]
print("0~100사이의 점수를 5개 입력하시오.")
for k in range(5):
score=int(input())
scores.append(score)
i=0
for score in scores:
x1=100
y1=100+i
x2=100+score*3
y2=100+50+i
canvas.create_rectangle(x1,y1,x2,y2,fill='blue')
canvas.create_text(x2+40,y1+20,text=str(score))
i=i+100
tk.update()
time.sleep(0.5)
ex3>이미지 불러오기
PhotoImage 함수
- 이미지 파일을 열어서 화면에 출력하는 기능
- gif 이미지 형식만 지원
- myimage=PhotoImage(file=img)
- canvas.create_image(10,10,anchor=NW,image=myimage) #출력 이미지의 anchor(NW)가 캔버스의 10,10에 나타남.
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=1000,height=1000)
canvas.pack()
image_list=['Koala.gif','Penguins.gif']
while True:
for img in image_list:
myimage=PhotoImage(file=img)
canvas.create_image(10,10,anchor=NW,image=myimage)
tk.update()
time.sleep(3)
프랙탈 그래픽
프랙탈(fractal): 작은 일부분이 전체와 비슷한 기하학적 형태를 말함. 이런 특징을 자기 유사성(self-similarity)라고 한다.
프랙탈 그래픽 도형
- 컴퓨터 소프트웨어를 이용하여 재귀적이거낙 반복적인 작업을 통해 만들어지는 패턴의 도형
- 만델브로 집합(Mandelbrot set), 칸토어 집합(Cantor set), 시어핀스키 삼각형(Sierpinski triangle),코흐 눈송이(koch snowflake) 등
프랙탈 삼각형(fractal triangle)
- '불규칙한 상황을 무한히 반복하면 규칙적인 결과에 도달한다'는 카오스 이론(chaos theory)의 한 예.
- 세 개의 점 A,B,C 와 기준점 0이 주어짐.
- 그 다음 난수를 발생싴 세 점 A,B,C 중 하나의 점을 선택.
- 기준점 0과 선택된 점 A 사이의 중점을 칠한다.
- 이 중점과 또 다른 난수로 선택한 A,B,C 중 한 점을 선택하고 중점을 칠하고 이 과정을 반복.
- dice=random.randint(1,3)
from tkinter import*
import random
import time
tk=Tk()
canvas=Canvas(tk,width=500,height=500)
canvas.pack()
x=250
y=250
for i in range(50000):
dice=random.randint(1,3)
if dice==1:
px=250
py=50
mycolor='red'
elif dice==2:
px=50
py=450
mycolor='green'
else:
px=450
py=450
mycolor='blue'
x=(x+px)/2
y=(y+py)/2
canvas.create_line(x,y,x+1,y+1,fill=mycolor)
tk.update()
time.sleep(0.005)
'💻STUDY > PYTHON STUDY' 카테고리의 다른 글
13주차 수업 복습 (0) | 2021.06.03 |
---|---|
11주차 수업 복습 (0) | 2021.05.22 |
10주차 수업 복습 (0) | 2021.05.13 |
9주차 수업 복습 (0) | 2021.05.09 |
8주차 배운거 복습 (0) | 2021.04.28 |
댓글