From 91a751084d72fa60cdc227ec231488a0c5525aec Mon Sep 17 00:00:00 2001
From: Benjamin-Sitbon <Benjaminsitbon@hotmail.com>
Date: Thu, 13 Jun 2019 18:21:59 +0200
Subject: [PATCH] Vector

made same fonction without pointers to make easier star fonctions
---
 .idea/workspace.xml | 133 +++++++++++++++++++---------------------
 Box.c               |   2 +
 Star.c              | 144 +++++++++++++++++++++++++++++++++++---------
 Star.o              | Bin 1472 -> 7576 bytes
 Vector.c            |  45 ++++++++++++++
 Vector.h            |   7 ++-
 Vector.o            | Bin 7880 -> 9024 bytes
 galaxy_simulation   | Bin 18192 -> 22736 bytes
 8 files changed, 230 insertions(+), 101 deletions(-)

diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 758fca2..78c0695 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,15 +10,14 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="43aff179-c306-46b9-b69f-eca5306fbf96" name="Default Changelist" comment="">
-      <change beforePath="$PROJECT_DIR$/Box" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Box.c" beforeDir="false" afterPath="$PROJECT_DIR$/Box.c" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Box.h" beforeDir="false" afterPath="$PROJECT_DIR$/Box.h" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Box.o" beforeDir="false" afterPath="$PROJECT_DIR$/Box.o" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/Vector" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/Star.c" beforeDir="false" afterPath="$PROJECT_DIR$/Star.c" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/Star.o" beforeDir="false" afterPath="$PROJECT_DIR$/Star.o" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Vector.c" beforeDir="false" afterPath="$PROJECT_DIR$/Vector.c" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Vector.h" beforeDir="false" afterPath="$PROJECT_DIR$/Vector.h" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/Vector.o" beforeDir="false" afterPath="$PROJECT_DIR$/Vector.o" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/makefile" beforeDir="false" afterPath="$PROJECT_DIR$/makefile" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/galaxy_simulation" beforeDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -27,12 +26,12 @@
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
   <component name="FileEditorManager">
-    <leaf>
-      <file pinned="false" current-in-tab="false">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/Vector.c">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="2159">
-              <caret line="208" column="1" selection-start-line="208" selection-start-column="1" selection-end-line="208" selection-end-column="1" />
+            <state relative-caret-position="427">
+              <caret line="39" column="18" selection-start-line="39" selection-start-column="18" selection-end-line="39" selection-end-column="18" />
             </state>
           </provider>
         </entry>
@@ -40,8 +39,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Vector.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="442">
-              <caret line="26" lean-forward="true" selection-start-line="26" selection-end-line="26" />
+            <state relative-caret-position="153">
+              <caret line="9" column="53" selection-start-line="9" selection-start-column="53" selection-end-line="9" selection-end-column="53" />
             </state>
           </provider>
         </entry>
@@ -49,8 +48,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Box.c">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="68">
-              <caret line="4" selection-start-line="4" selection-end-line="4" />
+            <state relative-caret-position="597">
+              <caret line="82" selection-start-line="82" selection-end-line="82" />
             </state>
           </provider>
         </entry>
@@ -64,11 +63,11 @@
           </provider>
         </entry>
       </file>
-      <file pinned="false" current-in-tab="true">
+      <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Star.c">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="255">
-              <caret line="15" column="14" selection-start-line="15" selection-start-column="14" selection-end-line="15" selection-end-column="14" />
+            <state relative-caret-position="291">
+              <caret line="75" column="79" selection-start-line="75" selection-start-column="79" selection-end-line="75" selection-end-column="79" />
             </state>
           </provider>
         </entry>
@@ -76,8 +75,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Star.h">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="442">
-              <caret line="26" selection-start-line="26" selection-end-line="26" selection-end-column="36" />
+            <state relative-caret-position="323">
+              <caret line="19" selection-start-line="19" selection-end-line="22" selection-end-column="44" />
             </state>
           </provider>
         </entry>
@@ -94,8 +93,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/makefile">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="34">
-              <caret line="2" column="20" selection-start-line="2" selection-start-column="20" selection-end-line="2" selection-end-column="41" />
+            <state relative-caret-position="153">
+              <caret line="9" column="31" selection-start-line="9" selection-start-column="31" selection-end-line="9" selection-end-column="31" />
             </state>
           </provider>
         </entry>
@@ -115,20 +114,20 @@
       <list>
         <option value="$PROJECT_DIR$/Vector_Test.h" />
         <option value="$PROJECT_DIR$/Vector_Test.c" />
-        <option value="$PROJECT_DIR$/Vector.h" />
-        <option value="$PROJECT_DIR$/Vector.c" />
-        <option value="$PROJECT_DIR$/makefile" />
-        <option value="$PROJECT_DIR$/Box.c" />
         <option value="$PROJECT_DIR$/Box.h" />
         <option value="$PROJECT_DIR$/galaxy_simulation.c" />
         <option value="$PROJECT_DIR$/Star.h" />
+        <option value="$PROJECT_DIR$/Box.c" />
+        <option value="$PROJECT_DIR$/makefile" />
+        <option value="$PROJECT_DIR$/Vector.h" />
         <option value="$PROJECT_DIR$/Star.c" />
+        <option value="$PROJECT_DIR$/Vector.c" />
       </list>
     </option>
   </component>
   <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="761" />
-    <option name="y" value="53" />
+    <option name="x" value="760" />
+    <option name="y" value="52" />
     <option name="width" value="1050" />
     <option name="height" value="730" />
   </component>
@@ -155,6 +154,7 @@
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
     <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+    <property name="nodejs_package_manager_path" value="npm" />
   </component>
   <component name="RunDashboard">
     <option name="ruleStates">
@@ -178,24 +178,21 @@
       <option name="number" value="Default" />
       <option name="presentableId" value="Default" />
       <updated>1559227081243</updated>
-      <workItem from="1559227084365" duration="44894000" />
+      <workItem from="1559227084365" duration="53793000" />
+      <workItem from="1560336527698" duration="9022000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="44894000" />
+    <option name="totallyTimeSpent" value="62815000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
     <editor active="true" />
     <layout>
-      <window_info id="Favorites" side_tool="true" />
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24966443" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25302014" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
-      <window_info anchor="bottom" id="Database Changes" />
-      <window_info anchor="bottom" id="Version Control" />
-      <window_info anchor="bottom" id="Terminal" />
-      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info id="Favorites" order="2" side_tool="true" />
       <window_info anchor="bottom" id="Message" order="0" />
       <window_info anchor="bottom" id="Find" order="1" />
       <window_info anchor="bottom" id="Run" order="2" />
@@ -203,10 +200,14 @@
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
       <window_info anchor="bottom" id="TODO" order="6" />
-      <window_info anchor="right" id="Database" />
+      <window_info anchor="bottom" id="Database Changes" order="7" />
+      <window_info anchor="bottom" id="Version Control" order="8" />
+      <window_info anchor="bottom" id="Terminal" order="9" />
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
       <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="Database" order="3" />
     </layout>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -225,51 +226,46 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Vector_Test.h">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="17">
-          <caret line="1" column="17" selection-start-line="1" selection-start-column="17" selection-end-line="1" selection-end-column="17" />
-        </state>
-      </provider>
+    <entry file="file://$PROJECT_DIR$/Vector_Test.h" />
+    <entry file="file://$PROJECT_DIR$/Vector_Test.c" />
+    <entry file="file://$PROJECT_DIR$/Vector.o">
+      <provider selected="true" editor-type-id="text-editor" />
     </entry>
-    <entry file="file://$PROJECT_DIR$/Vector_Test.c">
+    <entry file="file://$PROJECT_DIR$/makefile">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="243">
-          <caret line="21" column="1" lean-forward="true" selection-start-line="5" selection-end-line="21" selection-end-column="1" />
+        <state relative-caret-position="153">
+          <caret line="9" column="31" selection-start-line="9" selection-start-column="31" selection-end-line="9" selection-end-column="31" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Vector.o">
-      <provider selected="true" editor-type-id="text-editor" />
-    </entry>
     <entry file="file://$PROJECT_DIR$/../C/Projet/makefile">
       <provider selected="true" editor-type-id="text-editor" />
     </entry>
-    <entry file="file://$PROJECT_DIR$/Vector.h">
+    <entry file="file://$PROJECT_DIR$/Box.c">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="442">
-          <caret line="26" lean-forward="true" selection-start-line="26" selection-end-line="26" />
+        <state relative-caret-position="597">
+          <caret line="82" selection-start-line="82" selection-end-line="82" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Box.c">
+    <entry file="file://$PROJECT_DIR$/Box.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="68">
-          <caret line="4" selection-start-line="4" selection-end-line="4" />
+        <state>
+          <caret column="19" selection-start-column="19" selection-end-column="19" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/makefile">
+    <entry file="file://$PROJECT_DIR$/Star.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="34">
-          <caret line="2" column="20" selection-start-line="2" selection-start-column="20" selection-end-line="2" selection-end-column="41" />
+        <state relative-caret-position="323">
+          <caret line="19" selection-start-line="19" selection-end-line="22" selection-end-column="44" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Star.h">
+    <entry file="file://$PROJECT_DIR$/Vector.h">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="442">
-          <caret line="26" selection-start-line="26" selection-end-line="26" selection-end-column="36" />
+        <state relative-caret-position="153">
+          <caret line="9" column="53" selection-start-line="9" selection-start-column="53" selection-end-line="9" selection-end-column="53" />
         </state>
       </provider>
     </entry>
@@ -280,24 +276,17 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Vector.c">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="2159">
-          <caret line="208" column="1" selection-start-line="208" selection-start-column="1" selection-end-line="208" selection-end-column="1" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/Box.h">
+    <entry file="file://$PROJECT_DIR$/Star.c">
       <provider selected="true" editor-type-id="text-editor">
-        <state>
-          <caret column="19" selection-start-column="19" selection-end-column="19" />
+        <state relative-caret-position="291">
+          <caret line="75" column="79" selection-start-line="75" selection-start-column="79" selection-end-line="75" selection-end-column="79" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Star.c">
+    <entry file="file://$PROJECT_DIR$/Vector.c">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="255">
-          <caret line="15" column="14" selection-start-line="15" selection-start-column="14" selection-end-line="15" selection-end-column="14" />
+        <state relative-caret-position="427">
+          <caret line="39" column="18" selection-start-line="39" selection-start-column="18" selection-end-line="39" selection-end-column="18" />
         </state>
       </provider>
     </entry>
diff --git a/Box.c b/Box.c
index 950e968..7e3ea03 100644
--- a/Box.c
+++ b/Box.c
@@ -79,6 +79,8 @@ void print_box(box b){
 
 }
 
+
+
 //TEST FONCTIONS//
 
 int Test_new_box(){
diff --git a/Star.c b/Star.c
index a108113..8c892bc 100644
--- a/Star.c
+++ b/Star.c
@@ -4,55 +4,143 @@
 #include <math.h>
 #include "Star.h"
 
+double norme(const vec const v1){
+
+    //La norme correspond a la racine carré de (x^2 + y^2), ici on fait puissance 1/2 qui est équivalent à racine carrée
+    double norm = pow((pow(v1.x,2.0) + pow(v1.y,2.0)),0.5);
+
+    return norm;
+
+}
+
 void print_star(const star *const s){
-    printf("POSITION:");
-    printf("   ");
-    printf("VITESSE:");
-    printf("   ");
-    printf("ACCELERATION:");
-    printf("   ");
-    printf("MASSE");
+
+    vec *p = new_vec(s->pos_t.x,s->pos_t.y);
+    vec *v = new_vec(s->pos_t_dt.x,s->pos_t_dt.y);
+    vec *a = new_vec(s->acc.x,s->acc.y);
+    printf("POSITION:\n");
+    print_vec(p);
+    printf("\n");
+    printf("VITESSE:\n");
+    print_vec(v);
+    printf("\n");
+    printf("ACCELERATION:\n");
+    print_vec(a);
+    printf("\n");
+    printf("MASSE:\n");
+    printf("%f",s->mass);
     printf("\n");
-    print_vec(s->pos_t);
-    printf("   ");
-    print_vec(s->pos_t_dt);
-    printf("   ");
-    print_vec(s->acc);
-    printf("   ");
-    printf("%f",s->mass)
 
+    free(p);
+    free(v);
+    free(a);
 }
 
 star *new_star_vel(vec pos, vec vel, vec acc, double mass,double dt){
 
-    star new_star;
-    new_star.mass = mass;
-    new_star.pos_t = pos;
-    new_star.pos_t_dt = sub_vec(pos,mul_vec(dt,vel));
-    new_star.acc = acc;
+    star *new_star = malloc(sizeof(star));
+    new_star->mass = mass;
+    new_star->pos_t = pos;
+    vec *pos_t_dt = sub_vec(&pos,mul_vec(dt,&vel));
+    new_star->pos_t_dt.x = pos_t_dt->x;
+    new_star->pos_t_dt.y = pos_t_dt->y;
+    new_star->acc = acc;
+
+    return new_star;
+
+}
+
+void reset_acceleration(star *s){
+
+    s->acc.y = 0.0;
+    s->acc.x = 0.0;
+
+}
+
+void update_acceleration(star *s, const star *const s2) {
+
+    double G = 6.67e-11;
+    vec sub = sub_vect(s2->pos_t,s->pos_t);
+    vec F = mul_vect(G * s->mass * s2->mass, sub);
+    double n = pow(norme(sub),3);
+
+    F = mul_vect(1/n,F);
+    print_vect(F);
+
+    s->acc = mul_vect(1/s->mass,F);
+}
 
-    print_star(new_star);
 
+void update_position(star *s, double dt){
 
+    s->pos_t = add_vect(sub_vect(mul_vect(2,s->pos_t),s->pos_t),mul_vect(dt*dt,s->acc));
 }
 
+//pos_t = 2*pos_t - pos_t_dt + acc * dt * dt
+
+
+
 //TEST FONCTIONS//
 
 int Test_new_star(){
 
-    vec *p = new_vec(1.0,4.0);
-    vec *v = new_vec(2.0,0.5);
-    vec *a = new_vec(1.0,1.0);
+    vec p = (vec){1.0,4.0};
+    vec v = (vec){2.0,0.5};
+    vec a = (vec){1.0,1.0};
 
-    star star_test = new_star_vel(p,v,a,1000.0,3.0);
+    star *star_test = new_star_vel(p,v,a,1000.0,3.0);
 
-    free(p);
-    free(v);
-    free(a);
+    if(star_test->pos_t_dt.x == -5.0 && star_test->pos_t_dt.y ==2.5){
+
+        printf("Test_new_star IS OK\n");
+    }
+    else{
+        printf("Test_new_star has an ERROR\n");
+    }
+
+    free(star_test);
+
+}
+
+int Test_reset_acc(){
+
+    vec p = (vec){1.0,4.0};
+    vec v = (vec){2.0,0.5};
+    vec a = (vec){1.0,1.0};
+
+    star *star_test = new_star_vel(p,v,a,1000.0,0.0);
+
+    reset_acceleration(star_test);
+
+    if(star_test->acc.x == 0.0 && star_test->acc.y == 0.0){
+        printf("Test_reset_acc IS OK\n");
+
+    }
+    else{
+        printf("Test_reset_acc has an ERROR\n");
+    }
+    free(star_test);
+}
+
+int Test_update_acc(){
+
+    vec terre = (vec){0.0,0.0};
+    vec v = (vec){2.0,0.5};
+    vec a = (vec){1.0,1.0};
+
+    vec lune = (vec){0.0,384400000.0};
+
+    star *star1 = new_star_vel(terre,v,a,5.9722e24,0.0);
+    star *star2 = new_star_vel(lune,v,a,7.342e22,0.0);
+
+    update_acceleration(star2,star1);
+    free(star1);
+    free(star2);
 
 }
 
 int star_tests(){
     Test_new_star();
-
+    Test_reset_acc();
+    Test_update_acc();
 }
\ No newline at end of file
diff --git a/Star.o b/Star.o
index faeb85e750266003160f8fc25d893d4a037c52bf..2a406ff12991be4950d2e3a751e3ce589c8a9387 100644
GIT binary patch
literal 7576
zcmb<-^>JfjWMqH=Mg}_u1P><4zz`vYU^{@B4h*~uJPe^8oliZQ-x#EM@Yfwo<JUO2
z10=Z%M0j+b0Er&*=yZMH(HZ)}qucetCw>7|kX#zS#tDy3*BhVs1zc~u0Ev9!7j(Vh
z(e3&IP00n2k_%8J5nvs>AoXAokogBZI$eK&6#Y1P80H#}&RURJAmbf4Ji0*!GeE6G
zG7qE?B>9P7z(E4U@aT3Bz^d#6NEW0_1H|y?c2K~o?1e|KE!=G$-L5}8I*)_hxu1)H
zfdR}yQ}KbIiWdY`-0<jjF!1Pfh4>6=!46O)f^9^y8_7i;-L7!EL7@(_Wdb}96F`AW
zAWGBtHBP1RYaB*II!F^d+Anx?hTcfy*Eo~LuW=NIngbr4p(j4^3zqKq#4lL8VZQ}D
zq&i)HfWi<IwIDeM1CMTBkjMj%?$8$=os1rxfgB#ap%*;5T{n1iUiav9T>(<N0_<y#
z&O;u(pmcW)<};5@S5P#5_{1;305Mn4K>!pCpm+r(k{_S=1wrWmY{>zS?$8q+osJ3~
zoq?c8hb6AgT96Zdr18H$08$Q?f^ifk#DY^`ut)Qo2#?O%9Uh&f8(_&9l)gb(V8<tZ
z0Rfnm8$7x}Y!8k!evKO*ouNn`00ra$P=<oUEF^P)G&>l4;*WF%83i)i1H?P{iC@4M
z6#b!)yo9V5<V@ES9^K&N;d=u$l+yS$K-%D0GL2v35IFe2CV(<7!ufIF-0OSb6Td*{
z34|i36XDi?<b6ST8_6#o-L4>)gWL+q{-5~c4tjLQf&_6G=&bOGU(i`&f=Ba_h-gT#
zI)*xifPz*7l)FK}3358fTam7yGyux%9txlM1p+isUFWz5lqVhcf=JKKBWa%ebw@$j
z_!GYX2Q(sJ0dT>i(-q_a*8^}PaOHq*Uyy~IpZEnFIY7EV$vBNaKNJ*ak32d<LB`~Q
zI2S>2o5rtkB#mF=EMa3~Z}@bk9`NbRJ(0$r?|Q(e^O;ZQdr&-ibk>5*j0Kf<;7kLS
zhuY+ea4^WugC3pCpzz}Wg`Y;WV~k@gBn&;8-vl6{R1h4cV9$fX6JGR!IH16V%YeKJ
z=YU)R=bZS&FJKA^*-!iex==b5q#_n16ACf~RQiG~@_muUukkO9U*l^Uzs74&uy}NW
z6Nc*!aJWFrV^CoZDu?yJmQ<Oh@k3ap+K_B3;2;4Ls)Dmh`Je?K*reAy$UKlXSSf%g
z->4rB#Q6XHf5QHUxfSGYPy$s*<9~lLjbHB|C@df>L|ACRB_&`i(!(MFT7<bifHBBQ
z3oy-~f(aaXpo9d<<Ya{masdLV;_(>+veS1*8b3w=qZ;$UqdOE-f`9PnMAQs8>P2W;
z0ask$WQC12A@(pR*$4Osdxm)W`&luBd4{+K2fJD^I66DK`nU!;LWF%C!Gfx33?Zq-
zCGmNw<?+QOiA4&Y!3zG~Xkr<O#R`de3a&vx{y`9_qSWHllK8~rWMuUSK@<%j=fE(e
zsmAcY{^QNu#2KNNz|9i|1`eqB2YZM@0SMorA3`&T9Ds<kfcOnnFSj`=Dkc>!J0$FC
z9yTM!Ok%wYgS)e{m4b##YEoumo`RX4v7Ujhp@nuzYLaECp(aE?!N|bS+`!b(jDdkc
z1Y#fqV^t6XV}$^tG!Hw+1V#o183qUjN%w&WM?QfzCTCtYrcNGq4v3r$NSuLz!4=e|
zfypyFFoG0-^v6KuB~avr;qo<5c~uY%)1Ls+&A_0*z`!sEB+kIV5RR<hwV9dO7i<KB
z3IhWJG(Z?!kkxqhGWW1Fvof1O)PdXrPA3cu3>?Vnn3=%}K=NR51_lNm6nS>Iyaq^|
zfq_8*M8n+5EDe?ixzz(C&cMKc%`Z@IV5LCXSQtM3$0o^)wZ+fCz|6pmO*sQI0}Bpu
zaHhwQV`gB-5CaJ?GjM<?49v{Hh9L%0DTL%sa9UwtVBlk5U=YAi%>a%wY~mUW3=AN1
zVEVynih+T_7>7C5IK)921Dp9?IMfH>5Rb$m9tU;jWl+R1Fff4AHUk4gHV*YgIK-=P
zh&Msaf6W95JaBqqU|^UE6&HX;JvdJ=FfgpdVa_HT;=6H(AA_2o4oyPf{KUY(a1Dq0
z`%v|(p-Bstf8IjHH$#&OI6pBkF#Lgv?}sKia6W?OH&DFa2PGs}{sDPCxFoSiFPR}P
zzbH4AA>Q4`-^tM@-rvnF*fk_R#L>yeHJ+g$znr0<C^N4FTw*hTite)1WQKy$l47Vh
zl$)H9SOgJCV@NAXO$93jmGbdrsW}X}i8(p>$qc!rIq@L%#idDL8eWR0=A;%SmSpDV
zF_adhB$lLtihG0@RCx(Ze+k4QkP#&?4F&ndnP3AFQ&J!jD0K~5RRZB6>|y}Bv?R5-
zq!^MPK*0k_9-yG_0dYWOFq8&GA2%qx|3g3+R2*G>22>nfeJNBNrhW>P4@$2fCc1iX
z)yu#DE_p!x|346G|AW#8Og*wV8#Ld5%t00xgo?xLg_$D;6$hyYl_@ZBB_wfvB>(Cl
ziG#`kn0jNVILv%#@?@}pildtkOaCBoWb^%y)FYc83KfT$57Gnje-u<4WDc_X(~!hL
zYGLjyKoUnbzZ@zKGhY^DI0FMi4OAT6{3%dzn0ioM3DPnTDh^UFh!k!ski?Pg-GU@8
zgrxoe4)HTM#KS-ifu<8sn*-+GDM;d?Naim?5*I@fSA~{;AZbwghqVzxq2eHaNg}DA
zh$IdgDuda(3n~sWhZ9NtF(h%2`Aa~7#=yXE87dAkA31+Lfr^970jXaDRsRDj4pNV7
zuOdhQ8V=G(_8LLO(arIMii0R*bEbg=pynWpABT#=%z>2;H=*Jn3R%4Y$k9-9ki)GD
zNgR~cVBxkMDh@Lr=HDY|;#;8Ma1l)$=AL_K;;?e&HJUig{2w^PS)myj<{nsl@uG=?
z#~K(I7(9@~g^|KP7D*gr)e)%s({YGbp^2Y?s&By|-is!#4pl!1Dh`Sl<nm!QR2=3n
zP<scYWdT$iUHuv)apZiuA1V$r2Ns@Z(8OW!brVe-7GKZM#9{IE8BH8!KCEepZZ9vi
z{)dUf;{{0^IbI@=#Kn=~YbKI7D869z+&ri_diX4dio@&$wbwx5xdtkZu6_rSIC6O2
zg^I(>frZa2G;vt?d`A<9g%1m~y#q4`CN700eg))61_lOoH1Ru7@gyX1<Z#PF5(kCP
z6R7%?NaD!q4<Lz4AcgZ8s5mHmki+2y4)K>zage{{kj(jvBrcC6{ufCc)Q^IdGaxp|
z$slt;7{mr)Q2QQ4gTz1>)?Y{f2{JG+fW$x;);@1Q6Nj~{7ods5+SRap4>ALUVeR2J
zXzF3@URe7Uq!xr>?Os?r1SAH+uy(Hxw0;DMfiSGy%b-_WnOl;W#GqGPQUswhV639l
zoJ75n)QS=Yy_Cd~L<YU2;$jB9qI?J^IX^cyHLrw0FE76&RnOfoRJXV!F*%z-53DUU
zBR;JtF*g<Je2OVhynws_&GvBfVDZ8Ns!ZXc3`jjgh#;uW1EnRHdWa|kg9ND20h(ff
zrU%f(49FfRmjRR}L2A_)AZ9|VSC9}GyP(+%7KEyWu|c#BXbgY>)Q1M~5SUo~hEOv>
zafi^&z~BM3{{ylh)GlNpOQ?PWWI+Z71`Cjf85kJ!(8NJu01|@HPEh?IF=U(u)sHL&
zV#D--*dQDZ)sOD}45<DLG!3xu2k8Z2P=6U){4szU4-5<pF#m&$1L*}}kUm)afs9AD
z8zg@L)Tm-$U@(A2EQkvVQgr<wF{l!dHUtJWq8S(%#6cDyL^0AIsLhK_{|Bi16Or_S
Jm}tf^0027aIL`n8

literal 1472
zcmb<-^>JfjWMqH=Mg}_u1P><4z`($aU^{@B4h-B3TnwQeoliZQ-*BXP@Yfwo<JUO2
z10=Z%M0j+b0Er&*=ycuS(HXiUjbGzb8o$P2gbI)}T+ITH&d?QU{2FJ{_%)8=P&2`!
zGjzr$e!<d?PyB+l4WIZ0TtO_?4<6mF8$7y0cX)KV9`NW4Ju%_rVUWuv#2#jFcXqZ?
z&~Qmj%1q2tFw-;EGtf1(&`wEBvMe>!ga{}Y85o)ym>QZfFo=L$&cMLHSQW&;SRueD
z&BM+yfsuhhh5>>>(z8H>BcDJUlQS<H(^MXI4v3r$NSuLzfgMD{<ek9MAQ7w>6xJ*Z
zAOB;MWX2v749pBn*pxFcBS#XF3T6gYBp!mv%)o}=AhDPkSde%SCI<rpgAkH?z+u3^
zz#s}0hw;IF2Wbf|Ni5P!X2?q|k1sAsEQ&8n&0zpDN>YnUiWw9@Y8V*6K0)>kByAzY
zVdgUE6<6k#BqlNF6_*r2=nNREB(<W1K`$k-B#}WcskoRyFF8LqH#M(>K`$@ABvsGd
zFI2a<Br!RgL9Zw^Cs8joBR;JtF*g<J0?H_9P+DPNzz9j0KNg}H4~lPOAw{Tur0fNj
zeh4Np33UDH3=9mQxFJ`+4%B`FG^=3t>!FFm?1#~&Q2l7i82Did&?L}>y`cJ$(*Q_|
z090WFh=YVdensLkxH2$+Q!6aIVR98v17ZFG=>w&95Diiz0U~hN4U)=$+W!H>VPIh3
vgoZP^evmkN*n_l0K<$U6bC4JaLyZM7!B`NrXa$Rbh!s%%As`MCM%NDjra*>F

diff --git a/Vector.c b/Vector.c
index 984aded..14cbd38 100644
--- a/Vector.c
+++ b/Vector.c
@@ -34,6 +34,18 @@ vec *add_vec(const vec *const v1, const vec *const v2){
 
 }
 
+vec add_vect(const vec const v1, const vec const v2){
+
+    //Création d'un vecteur nul
+    vec add_vec = (vec){0.0,0.0};
+    //Addition des x et des y faite dans le nouveau vecteur
+    add_vec.x = v1.x + v2.x;
+    add_vec.y = v1.y + v2.y;
+
+    return add_vec;
+
+}
+
 vec *sub_vec(const vec *const v1, const vec *const v2){
 
     //Création d'un vecteur nul
@@ -46,6 +58,18 @@ vec *sub_vec(const vec *const v1, const vec *const v2){
 
 }
 
+vec sub_vect(const vec const v1, const vec const v2){
+
+    //Création d'un vecteur nul
+    vec sub_vec = (vec){0.0,0.0};
+    //Soustraction des x et des y dans le nouveau vecteur
+    sub_vec.x = v1.x - v2.x;
+    sub_vec.y = v1.y - v2.y;
+
+    return sub_vec;
+
+}
+
 vec *mul_vec(double alpha, const vec *const v2) {
     //Création d'un vecteur nul
     vec *mul_vec = new_vec(0.0,0.0);
@@ -57,6 +81,17 @@ vec *mul_vec(double alpha, const vec *const v2) {
 
 }
 
+vec mul_vect(double alpha, const vec const v2) {
+    //Création d'un vecteur nul
+    vec mul_vec =(vec){0.0,0.0};
+    //Multiplication du x et du y par le scalaire dans le nouveau vecteur
+    mul_vec.x = alpha * v2.x;
+    mul_vec.y = alpha * v2.y;
+
+    return mul_vec;
+
+}
+
 double norm(const vec *const v1){
 
     //La norme correspond a la racine carré de (x^2 + y^2), ici on fait puissance 1/2 qui est équivalent à racine carrée
@@ -66,6 +101,7 @@ double norm(const vec *const v1){
 
 }
 
+
 double distance(const vec *const v1, const vec *const v2){
 
     //La distance correspond à la racine carré de (x2 - x1)^2 + (y2 -y1)^2
@@ -81,7 +117,16 @@ void print_vec(const vec *const v){
     printf("}\n");
     printf("{");
     printf("%f",v->y);
+    printf("}");
+}
+
+void print_vect(const vec const v){
+    printf("{");
+    printf("%f",v.x);
     printf("}\n");
+    printf("{");
+    printf("%f",v.y);
+    printf("}");
 }
 
 
diff --git a/Vector.h b/Vector.h
index fa618bd..2079c67 100644
--- a/Vector.h
+++ b/Vector.h
@@ -2,25 +2,30 @@ typedef struct vec {
 double x, y;
 } vec;
 
-//Créé et initialiser un vecteur:
+//Créer et initialiser un vecteur:
 vec *new_vec(double x, double y);
 
 //Additionne deux vecteurs
 vec *add_vec(const vec *const v1, const vec *const v2);
+vec add_vect(const vec const v1, const vec const v2);
 
 //Soustrait deux vecteurs
 vec *sub_vec(const vec *const v1, const vec *const v2);
+vec sub_vect(const vec const v1, const vec const v2);
 
 //Multiplie un vecteur par un scalaire
 vec *mul_vec(double alpha, const vec *const v2);
+vec mul_vect(double alpha, const vec const v2);
 
 //Calcule la norme d’un vecteur
 double norm(const vec *const v1);
+double norme(const vec const v1);
 
 //Calcule la distance entre deux vecteurs
 double distance(const vec *const v1, const vec *const v2);
 
 //Affiche un vecteur
 void print_vec(const vec *const v);
+void print_vect(const vec const v);
 
 int vector_tests();
diff --git a/Vector.o b/Vector.o
index 5809106742ed6108b09675bd4eef663470eaea3b..1d169814ec132196c3f1ebd784a80ce7658c9ace 100644
GIT binary patch
literal 9024
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
HVRZcfS?gFT

literal 7880
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
G$U*>Oy8Dg*

diff --git a/galaxy_simulation b/galaxy_simulation
index 25d1690ed1c11ac31335eb8c705957bea20b9113..65dc84f9d90ffd9e0acf082706742b9f5719ec82 100644
GIT binary patch
literal 22736
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

delta 6677
zcmcbxk#RyF;{*++0Q-qr%Z&agGk^h%W?)bN^BEZ!7}yvX7*6PdxeO<CA>t==Co?gs
z3qnO7Kt&(uPPSr<Qw)%UC`PAcK&CM;Fvv{a$ru3Bi)5k{Q<g~Ik^VV{=E$|oz0c1Z
ze#&`jeb()Nn`bcXWU7bS!2vOwVF8qJ0ZlvsDxP2faVeC`0OMcKhlqoG#SAqIMBP9V
zX9o#D@dK!MJxBv5R1ieHfJ%VGxj_O@`~gXv7b*s#ejthSfdrsf0_sqZrO*HZ%P1g;
zGchpKg9Sl^29g8|NC1irki=P`Vj#)_NgU)@kQfL%Ac@052_)`;B+dmA0ONWFh5#f9
z9<U&U@MwO+;nB_dRzrcoqxC=u)Bg(|%||#6GyFGY(o|shugapSz`!r>!0=xc#Loa}
zdimi0|NsA0e`zQ%WPm*V@&cIu3B+e&U|@K80L*^{;)7!8<%W8&z$1_V$kQ(ufcdvT
ze2`~fP5|>Sf%qU#zH9*VPl5QLkbPMI<|k<=Fr-ZYxd4O>-+FdljPvMx<k9@(LqLd6
zFRPX?1A|8|?`9zoW!omm!0=y`PeXy>3%`oI3s`I-$d|pWAS%>D^M^<0Q;+5!d}X2@
z-K_W2Cx2j9;Q%Wz_0pIu!=b>aKG~K-O-n<8fuU60quI7yU4eli)T8rh36Dp&?IU#s
zh8Mj5|NnpC@&Et-*ki0W)F=0Hh)b#}FnBcEGn8__jQjupe;Pm7>TXs|^~rlVPES_j
z6lK!?KiP@Pd$Iwy7}J@5lRda?5<HsU7<hEnzVPUFec{o~@QGi5b+aG?LmI!v36D<K
z2cP%_Tpzr6`RD)tPyB+e4<M=>I6%sJ5Xx?Vl-+o72&^mutc$l)kb&XFhCh>Id92uV
zK<xZKljrd$O0t01?ogE=jl91E7#Lodf>cV@3wU(a{@7p5z`*e0{_p?)J-S_gcyu#(
zbh>^3S@FT6*LDFv1H%qb+`qU7QqXHViJyVt#i8H-|3kE`0EvRNIdCBB%Yf@!22#;$
z8wJwW_51(-2`3MOg4Uz?jY2)hWAOqE3?ALA9s=-ScmcBf#fyJ`{{Q#r1i8rd$0vRP
zhBSUXRwV%jhALAKOG1Ewp;Q~>;!pen4jdpMQIMnrh{X+(<n!pYea^?g@Iv(W|NpOf
zJbG>4fOza6_kdj7dA$C`?O(_aG61>f20z$6H~Hc20R@}ujTiY)_ka`~hA29Mp~wrO
z=z~Xh=m(JFJUXv=bRK`v3K0g!JIpWr{Pi%;wDLne1M)h=GgbTy3{_yy6o4c_p78`Z
z-|H9DGkzeR%`a%Ibsm2q0AYUs*~bE5zW}j+{KW9%S3a;G1HSR0d$I=<I-TGEXMF%s
z^$<f*Iz$n=Ct3bXKF=RhU&+hB@WS^e)R}c4p8ZdRGld~+urt{qY_Kzb|3G%80w|O<
zAP)G+3wI?bd|Y3==m&WZoHRmzcyzPw;ALR&=)CUH>H6Xmf4zX~ix;gB7ybZ60W7?4
z^TLArA}=(!LFoz-+{ZwY;Nac^k^}|!eI5pe7i~YF{&)i7Rs2Bs!w1v7ogjDAce8e3
zIQRj`qhJTS{s6^^)$jlR(>(a=4#4vaDA_uJ93cxz{U1PFW0*^tL3aQB4s}T@i1+?G
z!X<~lBZpi)C>8Sx@G^i)7Y<PHC&O)LoxlSY=l#F~3Nlw{(sqI<K#x#vBv*n$o^=-w
zC?@n=UsQoy$+{ZGEd_-aE680D-_@Yb<OXrQken$8VS^)H==)}0AvH#aF0ct9CqD5D
zgi3&-yb>aC=o5d$!B6};2RdE<eBu}I1t*7Ch#Xk421v0F&*aU*7EDS!o8JnjGcsj<
znH(m1qJBLGtjJ3J3=Sj-P$>cm)gK<cwlm?f?hsi8WZ7o8tR_TO16ei~F3bHHImi_}
zdLgB72`2*sxKPXC1O=4F%`|?E3!nG}cvCpR!Oj}P2@3Y(FE0EB74ZTPUG8ATdIziW
zK}s#5ywXIFlR?4Gs|FRS@&hT5fbvQmKnlPq<u3;VLzN*Y&3xuC1yy1onI9nj6Oarz
zUEkthU;xL{Ms@~<7dD@u(X<W3)B7|zP+T-)IS0g*pb$*sN4S1ERD3=M#P!S&*Rz7e
zJ-S(EaDY7vs=;=EEZ*@V4-|ONQltqg3yLs54hDu7fuARz6OTyw!p6YxBIqO38NWe1
zmyh810_PA32pgPQcs?SBwt+{lD>zV>vO}D^mK|(AJg}!i#pkk5?vgNc4`OFv0H;@1
zaELgwL&Kp0WaZKiPzSVtc+)>1TLeyYKJ4J4(wBWQlcZXVE~;5_Ftgl1x-DR4`GR;_
zC}uf89WA?>4eV&q%@CS*HiTwf%(l5jQkhXyfR%ya#l?3}S1Evahu=-!Bjw7-F*%P{
zj&*}aXXuW}8@S|I7kG4ru9z$%D{nBtqce2ICw{@wj!*o8wGE&+0I^&_HP8l+?$8|`
zovsHwIzvxD>)y$~m9^?;vp^#A@!S9ZTMv{*>;Sd3UOfHx|3B2JyfazAPGtqr$jM<M
zR2)Qu3bWR4|Ns9leeu8a!T-`5|4T2tcnT^`nvW>FY-a!kp6daR<^vp{hDEQb9@N&{
zdWf}-5NjE}f%5~aItw@|L0Oztn}vbl#kO~dMgYhzMo6*%Cy`rk{{Mfi;n9t3{%vN6
zulOLwb3u%M{O|vNFze*uG=BLOkWUR59K#*M96SFzhB}7$^s2fED=>t5^y-4>V9(BP
zo}E{HG@pVS%?JN7zi@xE*<ZDgdGZELmwHeSNr{1hVZ)36|3U3yhnN5VPhezV2zdGb
zzXc-$L&K~8|5q?FFkE`||NjX_1_qPY|Np;WWMG)~`u~3pCI*IAumAtoU}9iMc=P|i
z2NMIs?Kl7bXD~4^M85t1zk`W^;l<nk|5q?EFr0q(|NjXl28I*w|Nno%#K2Jg;s1XQ
zW>6pF<NyB}%nS@0L4m={!0_ec|Nj}x3=D~%{{Qb_W?(q_>Hq%~%nS^Apa1_q!OXyr
z{Q3X?7t9O{sbBy9=KzK3*Z==DSQr?#e*6F5gN1=%`}hC<GgufHe181@-@(Gbu=B_N
z|0`G+7!-c}|9^sofg$qO|Nk#o7#KeP`v0GURf2)x*RTKoHCP!K6hO@yRtAO%fByfU
zz&bfgTb=R6<Vo84jL#<@(pIm3{{KI6mqmtwfgy&0f#Jf7|NnzPap1@&(8lD<%f{r(
z!_L9L0Ftj^U|?W+`Tu_sihL|wehvczg9{${Jq!#CZ7=`-4`Bdx#^4tC!wtB@z`(HU
z<^TU>C>9jL<^M1+FbKT*{~y#SW`OH2gUf>=Kl|1H|8*$(E8+4sj0_AXU;Y2z53(O&
zKo?v=3?l=B#q0n7AEOv>4=!KB$iVRX_5c5WQRIKX<>xRmFx+_a|NnXv`BiZFJ&X(t
z>2Lr4?*t_jgacaO3hpp6FkE>1|Nll51J=Oh|1dHzB)<Fq-x*oH4lE6hA{izIhL(5#
z|K}phGi87kfTGZbiGcxBfTe&t!|))ChbxF-Vqg$`|Nnm`iUBEb`5Gn$hPe0t|C=Jq
z7l5U~4w%Elz)<}D|9>V>9~5Rj^It}g3XlW#FflNMe*FKxz8Tp7CWse63hpp5FzopF
z|NmJO`4b@hU<>{*F)*Zl`v0E^)bW8?!1Na`FT>2h0BSu<MbSS2E^oukz_91@|9YH3
z6vNEG!1?9>|8!&vn3Lc>s9|Pc2>AN{za_E-C1CTx4xGcxz>xX%|NmLY@=Q~~3P2v*
z!_2_&_^ZSJ|Ln*LoWSy61MV<0Fr51O|GzAX10=u>aA9Cz_`}S=aN*lzBSR++7ZwJF
zAK(7}pM23lc=H6qlbn-J*aiqakph{_z#s{s7*6O;*0Pgl)Sc{QSI=m$`IMbGBa^Pe
z<co}=lO-HH84WfkIV@wWhv|Z90#nQk0t_FZrhx^Z1T%vm18i&xDg>sO8H5-L<iSi7
zf|)@WKJbMs!OS4S03Ch;CrG#)GlM9@4d}QOT#$i*ftf*!0X9~KDlX0d8<#>AmtbIk
z4!WR<OEN^Dh(m{Cm>HxPG7KgQIlD9JPL6VpmxL+;#RbTKU<L*TMzE_VUvk!G)Sb-a
z(kJx;I`#)r0K#{{ia<V?yvju%Htq(J0pVX@SxkR0gYCc!C^4`&W`Julf}DcsKYK<7
z1|bGMh6m7yQv_v2kj4H`i2?}_kAVT4f*BYXA}1eo6=%!_k+O4{Aex^+2kJm&HAr;>
zBLf2{$p{-dFoA|P(SwhH0aW&ZteqnUQqRBuE`k^s7*>PKt$zizd!qnEHU&a4>}6zN
z5MYpG$bg13RG7gNte&3%Jyo6ri}NwKK+S>K@)PRr3(!gpT!%3*FdTuX7h<pwffx-g
zR~Q%=E`prp`4l3}z$yxn1(zxe3=HB><65A>0Iu>F7#O}l)iXk^2baU3_?+zMF79~_
zs!It?*KMe{s361^aN)|pz#s$_mxhjVf~yq<1_pVMX_9tKkf1?Lrwk0<AX&!v$%!7~
z_3xo3SV4yw!8IoX14AAY1A`!wBz(*kVlM+jHB@~7KSTsv&oD4Bbb{0)Wp>a2AxOmx
zsCo(Lcq_PKV_;xd3K17#D1auiRFG;028OL5$9bNFNHbVKa}~HgWnf^q1{G(ArV(%<
z&A`C$6;!b^NHG+kr2?19jh^E5ub{e)Lmklxwd)I1d?j@7xF0Ic$P7ut+E8(DbAW+?
zftwi=prHH>8Nh}rXAp;~_ktFf;DQ%4%FYZ*=?s(Ey#*5&LL<Ho8inBckAZ=~0IJs+
zsux_SGcYi;Ld8KNh#-5w^&tZTgEdrqB{UC$YY9+Ge6pgaxMUPFB-+q(L)v6UZ*kKG
zs9sKSkckWo;2Mg7fnf?%e5)`-99*?BFfhzxW?)d7e34ODvjG}X8=%Pq+<;<WU|0_p
z=Vo{T8t?^a-n`H|jB&E4ui<2E7MaPVzKU$|sVRviiIWfb&Y4``7dH94pN~{QQD$CA
zd|7HTLwtNvadCWcNn%k6LvCVb-sDjK`J4ax`!Q|~2uxsRauS}rDMXJ8mWQ86O@0+(
zCIqWcU~~fWWTQ|$L0EkPqh%%+h8hS$D-&3y(!(-&Q>Z>Cv}QP=JNZ?pIgEEfcd}L(
zoOeTaau$O3KzH)0Fmq1m1i}UV$*;o9Ibn&-V6s*?oEKp*ISawdFqph5+@8^3@~d!r
jP6JQ~F))1KoNN?f#?@g3;qGFdTohr(<YYH_RfHM<(3c1x

-- 
GitLab