반응형
행성들이 가운데 태양을 중심으로 공전하는 모습을 구현해보겠습니다.
<main.py>
import math
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.clock import Clock
import math
Window.size = (900, 900)
center_w = Window.size[0]/2
center_h = Window.size[1]/2
class Sun(Widget):
pass
class Mercury(Widget):
pass
class Vinus(Widget):
pass
class Earth(Widget):
pass
class Mars(Widget):
pass
class Solar(Widget):
sw_seconds = 0
def update(self, nap): # nap: 증분, dt delta time
self.sw_seconds += nap
## Earth
E_dis = 300 # 태양으로부터의 거리
E_r = self.ids.earth.size[0] # 지구 직경
E_rv = 45 # 각도도
self.ids.earth.pos = self.calc_pos(E_dis, E_r, E_rv)
## Mercury
M_dis = 80 # 태양으로부터의 거리
M_r = self.ids.mercury.size[0] # 수성 직경
M_rv = 60 # 시간에 따른 각도
self.ids.mercury.pos = self.calc_pos(M_dis, M_r, M_rv)
## Vinus
V_dis = 120 # 태양으로부터의 거리
V_r = self.ids.vinus.size[0] # 금성 직경
V_rv = 50 # 시간에 따른 각도
self.ids.vinus.pos = self.calc_pos(V_dis, V_r, V_rv)
## Mars
MS_dis = 350 # 태양으로부터의 거리
MS_r = self.ids.mars.size[0] # 화성 직경
MS_rv = 30 # 시간에 따른 각도
self.ids.mars.pos = self.calc_pos(MS_dis, MS_r, MS_rv)
def calc_pos(self, dis, radius, radial_v):
degree = radial_v * self.sw_seconds
pos_x = dis * math.cos(math.pi * degree / 180) + center_w
pos_y = dis * math.sin(math.pi * degree / 180) + center_h
pos = (pos_x, pos_y)
return pos
class SolarApp(App):
def build(self):
SolarSystem = Solar()
Clock.schedule_interval(SolarSystem.update, 1.0 / 60.0)
return SolarSystem
if __name__ == '__main__':
SolarApp().run()
<solar.kv>
<Sun>:
size: 50, 50
canvas:
Color:
rgb: 1,0,0
Ellipse:
size: self.size
pos: self.pos
<Mercury>:
size: 15, 15
canvas:
Color:
rgb: 0,0,1
Ellipse:
size: self.size
pos: self.pos
<Vinus>:
size: 20, 20
canvas:
Color:
rgb: 1,1,0
Ellipse:
size: self.size
pos: self.pos
<Earth>:
size: 20, 20
canvas:
Color:
rgb: 0,1,1
Ellipse:
size: self.size
pos: self.pos
<Mars>:
size: 18, 18
canvas:
Color:
rgb: 1,0.3,0
Ellipse:
size: self.size
pos: self.pos
<Solar>:
Sun:
id:sun
pos: self.parent.center
Mercury:
id:mercury
pos: self.parent.center
Vinus:
id:vinus
pos: self.parent.center
Earth:
id:earth
pos: self.parent.center
Mars:
id:mars
pos: self.parent.center
<결과>
반응형
'Programming > Python_Etc' 카테고리의 다른 글
파이썬 tkinter 로 투명 배경 구현하기 (0) | 2021.09.25 |
---|---|
파이선 kivy 시작하기4 - 파일 관리(file chooser) (0) | 2021.09.25 |
파이썬 kivy 시작하기 2 - kv 파일 분리 (0) | 2021.09.24 |
파이썬 kivy 시작하기 1 - Kivy란? (0) | 2021.09.24 |
파이썬 tkinter 로 만드는 PDF 텍스트 추출 프로그램 (0) | 2021.09.23 |