💻STUDY/PYTHON STUDY

12주차 수업복습

coldNoodlePigeon 2021. 5. 29.

그래픽스 응용

 

컴퓨터 그래픽스

  • 컴퓨터 소프트웨어와 하드웨어를 이용하여 가상의 이미지를 생성 처리하는 과정
  • 픽셀 기반의 래스터 그래픽스(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

댓글