
    .hh	                         S r SSKJrJrJrJr  Sr " S S\5      r	 " S S\5      r
S r\S	:X  a  \" 5         \" 5         g
g
)a  turtle-example-suite:

        tdemo_planets_and_moon.py

Gravitational system simulation using the
approximation method from Feynman-lectures,
p.9-8, using turtlegraphics.

Example: heavy central body, light planet,
very light moon!
Planet has a circular orbit, moon a stable
orbit around the planet.

You can hold the movement temporarily by
pressing the left mouse button with the
mouse over the scrollbar of the canvas.

    )ShapeTurtlemainloopVec2D   c                   &    \ rS rSrS rS rS rSrg)GravSys   c                 .    / U l         SU l        SU l        g )Nr   g{Gz?)planetstdt)selfs    C/opt/python-3.13.8/usr/lib/python3.13/turtledemo/planet_and_moon.py__init__GravSys.__init__   s        c                 J    U R                    H  nUR                  5         M     g )N)r   init)r   ps     r   r   GravSys.init   s    AFFH r   c                     [        S5       HE  nU =R                  U R                  -  sl        U R                   H  nUR	                  5         M     MG     g )Ni'  )ranger   r   r   step)r   ir   s      r   startGravSys.start    s9    uAFFdggF\\ " r   )r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__ r   r   r	   r	      s    r   r	   c                   ,    \ rS rSrS rS rS rS rSrg)Star&   c                 
   [         R                  " XS9  U R                  5         Xl        U R	                  U5        X0l        UR                  R                  U 5        X@l        U R                  S5        U R                  5         g )N)shapeuser)r   r   penupmsetposvr   appendgravSys
resizemodependown)r   r+   xr-   r/   r(   s         r   r   Star.__init__'   sX    *

At$r   c                     U R                   R                  nU R                  5       U l        U R                  SU-  U R                  -  -   U l        g )N      ?)r/   r   accar-   r   r   s     r   r   	Star.init1   s8    \\__#b&-'r   c                     [        SS5      nU R                  R                   HS  nX :w  d  M
  UR                  5       U R                  5       -
  nU[        UR
                  -  [        U5      S-  -  U-  -  nMU     U$ )Nr      )Vecr/   r   posGr+   abs)r   r7   planetr-   s       r   r6   Star.acc5   sg    !Hll**F~JJL+ajQ*A-- + r   c                    U R                   R                  nU R                  U R                  5       XR                  -  -   5        U R                   R
                  R                  U 5      S:w  a7  U R                  U R                  U R                   R
                  S   5      5        U R                  5       U l
        U R                  XR                  -  -   U l        g )Nr   )r/   r   r,   r=   r-   r   index
setheadingtowardsr6   r7   r8   s     r   r   	Star.step<   s    \\__DHHJFF*+<<%%d+q0OODLL)=)=a)@AB"VV)#r   )r7   r/   r+   r-   N)	r   r   r    r!   r   r   r6   r   r"   r#   r   r   r%   r%   &   s    	($r   r%   c                     [        5       n U R                  5         U R                  5       R                  SS5        U R	                  5         U R                  5         U R                  S5        U R                  S5        U R                  5         U R                  SS5        U R                  5         U R                  5       nU R                  5         U R                  SS5        U R                  5         U R                  5       n[        S5      nUR                  US5        UR                  US5        U R                  5       R                  SU5        U R                  5       R                  S	S5        [        5       n[!        S
[#        SS5      [#        SS5      US5      nUR%                  S5        UR'                  S5        UR                  5         [!        S[#        SS5      [#        SS5      US5      nUR)                  S5        UR'                  S5        [!        S	[#        SS5      [#        SS5      US5      nUR)                  S5        UR'                  S5        UR+                  5         UR-                  5         g)Nr      Z      compoundorangebluer@      i@B g      circleyellowg?i0        greeng?   i'  r5   zDone!)r   reset	getscreentracerhtpufdlt
begin_polyrO   end_polyget_polyr   addcomponentregister_shaper	   r%   r<   color	shapesizepencolorr   r   )sm1m2planetshapegssunearthmoons           r   mainrl   F   s   AGGIKKM1DDFDDFDDGDDHLLNHHQJJL	
BLLNHHQsOJJL	
B
#KR)R'KKM  ;7KKM1 
B
wAa#a+r8
<CIIhMM#FFHC
C#JH=E	NN7	OOC3s1:s1Sz2x8DMM&NN3GGIHHJr   __main__N)__doc__turtler   r   r   r   r<   r>   objectr	   r%   rl   r   r#   r   r   <module>rq      sO   $ 9 8f $6 $@%N zFJ r   