๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

6. ํ„ฐํ‹€ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ๊ถค์  ๊ทธ๋ฆฌ๊ธฐ – “์šฐ์ฃผ ๊ฒฝ์Ÿ์—์„œ ์Šน๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์•„ํด๋กœ 8ํ˜ธ์˜ ๊ถค์  ์‹œ๋ฎฌ๋ ˆ์ด์…˜” ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Image Processing

6. ํ„ฐํ‹€ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ๊ถค์  ๊ทธ๋ฆฌ๊ธฐ – “์šฐ์ฃผ ๊ฒฝ์Ÿ์—์„œ ์Šน๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์•„ํด๋กœ 8ํ˜ธ์˜ ๊ถค์  ์‹œ๋ฎฌ๋ ˆ์ด์…˜”

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 25. 16:14
728x90
๋ฐ˜์‘ํ˜•

221025 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š”์‹ค์ „ ํŒŒ์ด์ฌ ํ•ธ์ฆˆ์˜จ ํ”„๋กœ์ ํŠธ์˜ github ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค>

https://www.onlybook.co.kr/m/entry/python-projects

 

์‹ค์ „ ํŒŒ์ด์ฌ ํ•ธ์ฆˆ์˜จ ํ”„๋กœ์ ํŠธ

์‹ค์ „ ํŒŒ์ด์ฌ ํ•ธ์ฆˆ์˜จ ํ”„๋กœ์ ํŠธ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ ์‹ค๋ฌด ์‘์šฉ๋ ฅ์„ ํ‚ค์šฐ๊ธฐ ์œ„ํ•œ ๋‚˜๋งŒ์˜ ํŒŒ์ด์ฌ ํฌํŠธํด๋ฆฌ์˜ค ๋งŒ๋“ค๊ธฐ ๋ฆฌ ๋ณธ ์ง€์Œ | ์˜คํ˜„์„ ์˜ฎ๊น€ 420์ชฝ | 28,000์› | 2022๋…„ 5์›” 31์ผ ์ถœ๊ฐ„ | 185*240*20 | ISBN13 9791.

www.onlybook.co.kr

https://github.com/rlvaugh/Real_World_Python

 

GitHub - rlvaugh/Real_World_Python: Code and supporting files for book Real World Python

Code and supporting files for book Real World Python - GitHub - rlvaugh/Real_World_Python: Code and supporting files for book Real World Python

github.com

 

 

 

 

๐Ÿฅ  turtle ๋ชจ๋“ˆ ํ™œ์šฉ

: ์œ„ํ—˜ํ•œ ๋„๋ฐ•์— ์ฐธ์—ฌํ•ด ๋ฏธ๊ตญ์˜ ์•„ํด๋กœ 8ํ˜ธ๊ฐ€ ๋‹ฌ ์ฐฉ๋ฅ™ ๊ฒฝ์Ÿ์—์„œ ์Šน๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค

: ๋ฏธ ํ•ญ๊ณต์šฐ์ฃผ๊ตญ ๋‚˜์‚ฌ(NASA)๊ฐ€ ์˜ˆ์ƒ๋ณด๋‹ค 1๋…„์ด๋‚˜ ๋” ์ผ์ฐ ๋‹ฌ ๊ถค๋„์— ๋„์ฐฉํ•ด์„œ ์†Œ๋ จ์ด ์‹ค์งˆ์ ์œผ๋กœ ๋‹ฌ ์ฐฉ๋ฅ™ ํ”„๋กœ๊ทธ๋žจ์„ ํฌ๊ธฐํ•˜๊ฒŒ ๋งŒ๋“ , ๋˜‘๋˜‘ํ•œ ์ž์œ  ๊ท€ํ™˜ ๋น„ํ–‰ ๊ถค์ ์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค์„œ ์‹คํ–‰ํ•ด๋ณธ๋‹ค

from turtle import Shape, Screen, Turtle, Vec2D as Vec
import turtle
import math

# User input:
G = 8               # ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— ์‚ฌ์šฉ๋˜๋Š” ์ค‘๋ ฅ ์ƒ์ˆ˜
NUM_LOOPS = 4100    # ์‹œ๋ฎฌ๋ ˆ์ด์…˜์˜ ์‹œ๊ฐ„ ๋‹จ๊ณ„ ์ˆ˜
Ro_X = 0            # ์„ ๋ฐ• ์‹œ์ž‘ ์œ„์น˜ x ์ขŒํ‘œ
Ro_Y = -50          # ์„ ๋ฐ• ์‹œ์ž‘ ์œ„์น˜ y ์ขŒํ‘œ
Vo_X = 0            # ์„ ๋ฐ• ์†๋„ x ๊ตฌ์„ฑ ์š”์†Œ
Vo_Y = 0            # ์„ ๋ฐ• ์†๋„ y ๊ตฌ์„ฑ ์š”์†Œ

MOON_MASS = 1_250_000

class GravSys():
    """n-๋ฐ”๋””์—์„œ ์ค‘๋ ฅ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹คํ–‰"""    

    def __init__(self):
        self.bodies = []
        self.t = 0
        self.dt = 0.001
        
    def sim_loop(self):
        """์‹œ๊ฐ„ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋ชฉ๋ก์—์„œ ๋ณธ๋ฌธ์„ ๋ฐ˜๋ณต"""
        for _ in range(NUM_LOOPS):
            self.t += self.dt
            for body in self.bodies:
                body.step()
                

class Body(Turtle):
    """์ค‘๋ ฅ์žฅ์„ ๊ณต์ „ํ•˜๊ณ  ํˆฌ์˜ํ•˜๋Š” ์ฒœ์ฒด"""
    def __init__(self, mass, start_loc, vel, gravsys, shape):
        super().__init__(shape=shape)
        self.gravsys = gravsys
        self.penup()
        self.mass=mass
        self.setpos(start_loc)
        self.vel = vel
        gravsys.bodies.append(self)
        self.pendown()              # ๊ฐ์ฒด ๋’ค์— ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆฌ๋Š” ์ฃผ์„ ์ œ๊ฑฐ
        
        
    def acc(self):
        """๋ชธ์ฒด์— ์ž‘์šฉํ•˜๋Š” ํž˜์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฒกํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜"""
        a = Vec(0,0)
        for body in self.gravsys.bodies:
            if body != self:
                r = body.pos() - self.pos()
                a += (G * body.mass / abs(r)**3) * r        # ๋‹จ์œ„ dist /time^2
        return a
    

    def step(self):
        """๋ชธ์ฒด์˜ ์œ„์น˜, ๋ฐฉํ–ฅ ๋ฐ ์†๋„๋ฅผ ๊ณ„์‚ฐ"""
        dt = self.gravsys.dt
        a = self.acc()
        self.vel = self.vel + dt * a
        xOld, yOld = self.pos()             # ๋ฐฐ๋ฅผ ๋ฐฐํ–ฅํ•˜๊ธฐ ์œ„ํ•ด
        self.setpos(self.pos() + dt * self.vel)
        xNew, yNew = self.pos()             # ๋ฐฐ๋ฅผ ๋ฐฐํ–ฅํ•˜๊ธฐ ์œ„ํ•ด
        if self.gravsys.bodies.index(self) == 1:        # the CSM
            dir_radians = math.atan2(yNew-yOld,xNew-xOld)       # ๋ฐฐ๋ฅผ ๋ฐฐํ–ฅํ•˜๊ธฐ ์œ„ํ•ด
            dir_degrees = dir_radians * 180 / math.pi           # ๋ฐฐ๋ฅผ ๋ฐฐํ–ฅํ•˜๊ธฐ ์œ„ํ•ด
            self.setheading(dir_degrees+90)                     # ๋ฐฐ๋ฅผ ๋ฐฐํ–ฅํ•˜๊ธฐ ์œ„ํ•ด


def main():
    # ์„ค์ • ํ™”๋ฉด
    screen = Screen()
    screen.setup(width = 1.0, height = 1.0)         # ์ „์ฒดํ™”๋ฉด์šฉ
    screen.bgcolor('black')
    screen.title("Gravity Assist Example")

    # ์ค‘๋ ฅ ์‹œ์Šคํ…œ ์ธ์Šคํ„ด์Šคํ™”
    gravsys = GravSys()
    
    # ํ–‰์„ฑ ์ธ์Šคํ„ด์Šคํ™”
    image_moon = 'moon_27x27.gif'
    screen.register_shape(image_moon)
    moon = Body(MOON_MASS, (500, 0), Vec(-500, 0), gravsys, image_moon)
    moon.pencolor('gray')

    # ์ปค๋งจ๋“œ-์„œ๋น„์Šค-๋ชจ๋“ˆ(csm) ํ˜•ํƒœ๋ฅผ ๊ตฌ์ถ•
    csm = Shape('compound')
    cm = ((0, 30), (0, -30), (30, 0))
    csm.addcomponent(cm, 'red', 'red')
    sm = ((-60,30), (0, 30), (0, -30), (-60, -30))
    csm.addcomponent(sm, 'red', 'black')
    nozzle = ((-55, 0), (-90, 20), (-90, -20))
    csm.addcomponent(nozzle, 'red', 'red')
    screen.register_shape('csm', csm)

    # Apollo 8 CSM ๊ฑฐ๋ถ์ด ์ธ์Šคํ„ด์Šคํ™”
    ship = Body(1, (Ro_X, Ro_Y), Vec(Vo_X, Vo_Y), gravsys, "csm")
    ship.shapesize(0.2)
    ship.color('red') # path color
    ship.getscreen().tracer(1, 0)
    ship.setheading(90)

    gravsys.sim_loop()

if __name__=='__main__':
    main()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments