рдПрдХ рд╕реМрд░ рдкреНрд░рдгрд╛рд▓реА рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдмрдирд╛рдПрдВ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдкрд╛рдпрдерди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдХреЗ рд▓рд┐рдП рд╢рд╛рд╢реНрд╡рдд рд▓рд╛рд▓рд╕рд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреА рдХрдореА, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ред

рднрд╛рдЧреНрдп рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ, рдкрд╛рдпрдерди рдкрд░ рдПрдХ рдордВрдЪ рдЦреЗрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдЕрджреНрднреБрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрд░реА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЖрдИ
рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ ред
рдореИрдВрдиреЗ рдПрдХ рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдмрд▓реЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рдЖрдпрд╛ред

рднрд╛рдЧ рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ

рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдорд╛рди рд▓реАрдЬрд┐рдП, рд╣реБрдХ рдпрд╛ рдмрджрдорд╛рд╢ рджреНрд╡рд╛рд░рд╛, рд╣рдо рдЗрд╕рдореЗрдВ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рдпреБрд╣реАрди рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рджреЛ рдЖрдпрд╛рдореА рдЦрдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд╕рднреА рдирд┐рдХрд╛рдп рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдмрд▓реЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред рдХреЛрдИ рдмрд╛рд╣рд░реА рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред
рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдирдХреЗ рдЖрдВрджреЛрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреА рд░рдВрдЧреАрдирддрд╛ рдПрдХ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдФрд░ рдЗрдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧреАред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдорд╛рдереЗрд░рд┐рдВрдЧ рдкрд╛рдпрдерди рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рд╡реЗрд╢ рд╣реЛрдЧрд╛ред

рд╣рдо рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рджреЛ рдирд┐рдХрд╛рдп рд╣реИрдВ:
1. рдорд╛рд╕ рдПрдо рдФрд░ рдХреЗрдВрджреНрд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рддрд╛рд░рд╛ (x0, y0)
2. рджреНрд░рд╡реНрдпрдорд╛рди m рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рдЧреНрд░рд╣, рдмрд┐рдВрджреБ (x, y), рд╡реЗрдЧ v = (vx, vy) рдФрд░ рддреНрд╡рд░рдг a = (ax, ay) рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред

рдЬрдм рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рд╕рд┐рддрд╛рд░реЛрдВ рдФрд░ рдЧреНрд░рд╣реЛрдВ рдХреЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдиреНрдпреВрдЯрди рдХреЗ рджреВрд╕рд░реЗ рдирд┐рдпрдо, рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдирд┐рдпрдо рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рддреНрд░рд┐рднреБрдЬреЛрдВ рдХреЗ рд╕рд░рд▓ рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐:

ax = G * M * (x0-x) / r ^ 3
ay = G * M * (y0-y) / r ^ 3

рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдЯрд╛рд░ рдХреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧреНрд░рд╣ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

1. рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЧреНрд░рд╣ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ (x, y) рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрддрд┐ (vx, vy) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
2. рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирдП рддреНрд╡рд░рдг рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЧрддрд┐ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ:

vx: = vx + T * рдХреБрд▓реНрд╣рд╛рдбрд╝реА
vy: = vy + T * рдХреБрд▓реНрд╣рд╛рдбрд╝реА

x: = x + T * vx
y: = y + T * yx

рдпрд╣ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреА рдФрд░ рдЯреАред рдкреБрдЯ рдЬреА = 1 рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдЯреА рдЧрдгрдирд╛ рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рднреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1 рдбрд╛рд▓ рджрд┐рдпрд╛ред

рднрд╛рдЧ рджреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ

рддреЛ, рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд░рдоред рдЙрд╕реА рд╕рдордп, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╡реЗрд▓реЗрдЬрд╝ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

import pygame, math from pygame import * from math import * WIN_WIDTH = 800 WIN_HEIGHT = 640 PLANET_WIDTH = 20 PLANET_HEIGHT = 20 DISPLAY = (WIN_WIDTH, WIN_HEIGHT) SPACE_COLOR = "#000022" SUN_COLOR = "yellow" PLANET_COLOR = "blue" #Sun position X0 = WIN_WIDTH // 2 Y0 = WIN_HEIGHT // 2 #Sun mass M0 = 5000 #Stop conditions CRASH_DIST = 10 OUT_DIST = 1000 def main(): #PyGame init pygame.init() screen = pygame.display.set_mode(DISPLAY) pygame.display.set_caption("Solar Mechanics v0.1") #Space init bg = Surface((WIN_WIDTH,WIN_HEIGHT)) bg.fill(Color(SPACE_COLOR)) draw.circle (bg, Color(SUN_COLOR), (X0, Y0), 10) #Timer init timer = pygame.time.Clock() #Planet init planet = Surface((PLANET_WIDTH, PLANET_HEIGHT)) planet.fill(Color(SPACE_COLOR)) draw.circle (planet, Color(PLANET_COLOR), (PLANET_WIDTH // 2, PLANET_HEIGHT // 2), 5) #Planet to Sun distance r = 0.0 #Initial planet pos, speed and accel x = 100.0 y = 290.0 vx = 0.1 vy = 1.5 ax = 0.0 ay = 0.0 done = False while not done: timer.tick(50) for e in pygame.event.get(): if e.type == QUIT: done = True break r = sqrt((x - X0)**2 + (y - Y0)**2) ax = M0 * (X0 - x) / r**3 ay = M0 * (Y0 - y) / r**3 #New spped based on accel vx += ax vy += ay #New pos based on speed x += vx y += vy screen.blit(bg, (0, 0)) screen.blit(planet, (int(x), int(y))) pygame.display.update() if r < CRASH_DIST: done = True print("Crashed") break if r > OUT_DIST: done = True print("Out of system") break #Farewell print (":-)") if __name__ == "__main__": main() 


рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╣рдорд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ



рдЬрдм рдпрд╣ рдиреЛрдЯ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ: рд╕реНрдЯрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдЙрдирдХреЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЧрдгрдирд╛ рднрд╛рдЧ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИред

рдЕрдм рдореИрдВ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рдгрд╛рд▓реА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдФрд░ рдЫреЛрдЯреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣рд╛рдБ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИ:


рдпрджрд┐ рдпрд╣ рдиреЛрдЯ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдореАрдХреНрд╖рд╛ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдкрдбреЗрдЯ:

1. рдореИрдВ рдЖрд▓реЛрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХрд╛ рдЖрднрд╛рд░реА рд╣реВрдВред рд╡реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рднреЛрдЬрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

2. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдирд┐рдХрд╛рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЗ рдХрд╛рдиреВрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред N ^ 2 рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдм рдмрд╛рд╣рд░реА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдЯрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ рдкрд░ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
рдпрд╣рд╛рдБ рдХреЛрдб
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдПрдВ: python3.3 main.py -f <рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдо> .ini
рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВред

3. рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЦреНрдп рджреЛрд╖ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ - рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ред
рдЕрдм Runge-Kutta рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ "рдиреЙрди-рдЯрдл рдЯрд╛рд╕реНрдХ" рдкрдврд╝рд╛, рдореИрдВ рдирдП рддрд░реАрдХреЗ рд╕реАрдЦреВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In197754/


All Articles