Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
tp_8_galaxy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
arnaud.devevey
tp_8_galaxy
Commits
f6d46722
Commit
f6d46722
authored
6 years ago
by
arnaud.devevey
Browse files
Options
Downloads
Patches
Plain Diff
20h30
parent
b3d4f757
No related branches found
No related tags found
No related merge requests found
Pipeline
#6084
failed
6 years ago
Stage: test
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
perso/galaxy.c
+49
-10
49 additions, 10 deletions
perso/galaxy.c
perso/star.c
+42
-8
42 additions, 8 deletions
perso/star.c
perso/star.h
+4
-4
4 additions, 4 deletions
perso/star.h
with
95 additions
and
22 deletions
perso/galaxy.c
+
49
−
10
View file @
f6d46722
...
...
@@ -40,7 +40,8 @@ int main(int argc, char **argv) {
printf
(
"
\n\n
"
);
tests
();
Box
box_initial
=
new_box
(
0
.
0
,
0
.
0
,
10
.
0
,
10
.
0
);
double
zone
=
1e10
;
Box
box_initial
=
new_box
(
-
zone
,
zone
,
zone
,
-
zone
);
// Galaxy* galaxy = create_and_init_galaxy(nb_stars, box_initial, DELTA_T);
...
...
@@ -49,7 +50,6 @@ int main(int argc, char **argv) {
/*
gestion_de_la_ligne_de_commande();
allocation_mémoire_et_initialisation_de_la_galaxie();
itérations_temporelles {
liberation_des_etoiles_qui_sortent_du_domaine();
...
...
@@ -81,28 +81,67 @@ int main(int argc, char **argv) {
Galaxy
*
create_and_init_galaxy
(
int
nb_bodies
,
Box
box
,
double
delta_t
)
{
Star
*
list_stars
=
malloc
(
sizeof
(
Star
)
*
nb_bodies
);
Vector
*
v_null
=
new_vec
(
0
,
0
);
Star
*
temp
;
for
(
int
i
=
0
;
i
<
nb_bodies
;
i
++
)
{
if
(
i
==
0
)
{
// on crée une étoile en (0;0) qui a comme masse 10^6 * masse solaire
// Star* sun = new_star_vel(new_vec(0, 0), speed, acc, 1e6 * MASSE_SOLAIRE, DELTA_T);
// list_stars[0] = sun;
temp
=
new_star_vel
(
*
v_null
,
*
v_null
,
*
v_null
,
1e6
*
MASSE_SOLAIRE
,
0
.
0
);
}
else
{
double
m_i
=
random_mass
();
Vector
r_i
=
random_position
();
// si pos est dans box
Vector
v_i
=
random_speed
(
r_i
,
m_i
);
temp
=
new_star_vel
(
r_i
,
v_i
,
*
v_null
,
m_i
,
0
.
0
);
}
list_stars
[
i
]
=
*
temp
;
for
(
int
i
=
1
;
i
<=
nb_bodies
;
i
++
)
{
// Star* temp = new_star_vel(
);
// on regarde comment cette étoile se fait attirer par le "soleil"
// update_acc(list_stars[i], list_stars[0]
);
}
Galaxy
*
galaxy
=
malloc
(
sizeof
(
Galaxy
));
galaxy
->
nb_bodies
=
nb_bodies
;
galaxy
->
stars
=
list_stars
;
galaxy
->
box
=
box
;
return
galaxy
;
}
void
reset_acc_galaxy
(
Galaxy
*
galaxy
)
{
printf
(
"bla"
);
Vector
*
v_null
=
new_vec
(
0
,
0
);
for
(
int
i
=
0
;
i
<
galaxy
->
nb_bodies
;
i
++
)
{
galaxy
->
stars
[
i
].
acc
=
*
v_null
;
/*if (galaxy -> stars[i] != NULL) {
}*/
}
free
(
v_null
);
}
void
update_pos_galaxy
(
Galaxy
*
galaxy
,
double
delta_t
)
{
printf
(
"bla"
);
for
(
int
i
=
0
;
i
<
galaxy
->
nb_bodies
;
i
++
)
{
update_pos_star
(
&
(
galaxy
->
stars
[
i
]),
delta_t
);
}
}
void
free_galaxy
(
Galaxy
*
galaxy
)
{
/*
for (int i = 0; i < galaxy -> nb_bodies; i++) {
free(galaxy -> stars[i]);
}
*/
}
...
...
This diff is collapsed.
Click to expand it.
perso/star.c
+
42
−
8
View file @
f6d46722
...
...
@@ -59,11 +59,18 @@ void reset_acc(Star* star) {
void
update_acc
(
Star
*
target
,
const
Star
*
const
s2
)
{
// target se fait attirer par s2
Vector
*
rj_ri
=
sub_vec
(
&
(
s2
->
pos
),
&
(
target
->
pos
));
int
G_mi_mj
=
FORCE_GRAVITATION
*
target
->
mass
*
s2
->
mass
;
Vector
*
temp
=
mul_vec
(
rj_ri
,
G_mi_mj
);
target
->
acc
=
*
mul_vec
(
temp
,
(
1
/
pow
(
norm
(
rj_ri
),
3
)));
free
(
rj_ri
);
free
(
temp
);
}
void
update_pos
(
Star
*
star
,
double
delta_t
)
{
void
update_pos
_star
(
Star
*
star
,
double
delta_t
)
{
// new_position = (2 * pos) - previous_pos + (acc * delta_t * delta_t)
star
->
pos
=
*
(
mul_vec
(
&
(
star
->
pos
),
2
));
star
->
pos
=
*
(
sub_vec
(
&
(
star
->
pos
),
&
(
star
->
previous_pos
)));
...
...
@@ -100,13 +107,13 @@ Vector random_position() {
}
Vector
random_speed
(
Star
*
star
)
{
Vector
random_speed
(
Vector
r_i
,
double
m_i
)
{
// math.sqrt(FORCE_GRAVITATION * (star -> mass + )) * chaque composante du vecteur v(-sin(phi) ; cos(phi))
// où phi = atan2(star -> position.y / star -> position.x) // tan⁻¹
Vector
*
p_norm
=
new_vec
(
star
->
pos
.
x
,
star
->
pos
.
y
);
double
temp
=
sqrt
(
FORCE_GRAVITATION
*
(
star
->
mass
+
(
1e6
*
MASSE_SOLAIRE
))
/
norm
(
p_norm
));
double
phi
=
atan2
(
star
->
pos
.
y
,
star
->
pos
.
x
);
Vector
*
p_norm
=
new_vec
(
r_i
.
x
,
r_i
.
y
);
double
temp
=
sqrt
(
FORCE_GRAVITATION
*
(
m_i
+
(
1e6
*
MASSE_SOLAIRE
))
/
norm
(
p_norm
));
double
phi
=
atan2
(
r_i
.
y
,
r_i
.
x
);
Vector
speed
;
speed
.
x
=
temp
*
(
-
sin
(
phi
));
...
...
@@ -116,7 +123,7 @@ Vector random_speed(Star* star) {
}
// il faut deja faire une liste de stars qui se trouvent dans une box
Star
*
super_star
(
Star
*
list_stars
,
int
size_list
)
{
Star
*
super_star
=
malloc
(
sizeof
(
Star
));
...
...
@@ -131,7 +138,6 @@ Star* super_star(Star* list_stars, int size_list) {
// masse
super_star
->
mass
+=
list_stars
[
i
].
mass
;
}
// ne donne pas la même chose si on fait /= 2 pour chaque boucle for
...
...
@@ -145,6 +151,34 @@ Star* super_star(Star* list_stars, int size_list) {
}
Vector
*
resultante
(
Vector
*
list_stars
,
int
size_list
)
{
Vector
*
Fi
=
new_vec
(
0
.
0
,
0
.
0
);
for
(
int
i
=
0
;
i
<
size_list
;
i
++
)
{
for
(
int
j
=
0
;
j
<
size_list
;
j
++
)
{
if
(
j
!=
i
)
{
/*
Vector* rj_ri = sub_vec(&(list_stars[j] -> pos), &(list_stars[i] -> pos));
int G_mi_mj = FORCE_GRAVITATION * list_stars[i] -> mass * list_stars[j] -> mass;
Vector* temp = mul_vec(rj_ri, G_mi_mj);
Fi = add_vec(Fi, temp)
*/
}
}
}
Fi
->
x
/=
size_list
;
Fi
->
y
/=
size_list
;
return
Fi
;
}
void
new_position
(
Star
*
star
,
Vector
resultante
)
{
star
->
acc
=
*
(
add_vec
(
&
(
star
->
acc
),
&
resultante
));
}
int
random_10
()
{
...
...
This diff is collapsed.
Click to expand it.
perso/star.h
+
4
−
4
View file @
f6d46722
...
...
@@ -48,10 +48,10 @@ void update_pos_star(Star* star, double delta_t);
void
print_star
(
const
Star
*
const
star
);
//
calcule la force résultante d'une liste de vecteurs
Vector
resultante
(
Vector
*
*
list_
vectors
);
//
retourne l'accélération d'une étoile d'après toutes les autres d'une liste
Vector
*
resultante
(
Vector
*
list_
stars
,
int
size_list
);
// calcule la position de l
a
étoile après avoir subi la force résultante des autres vecteurs (deuxième loi de Newton)
// calcule la position de l
'
étoile après avoir subi la force résultante des autres vecteurs (deuxième loi de Newton)
void
new_position
(
Star
*
star
,
Vector
resultante
);
// calcule l'accélération
...
...
@@ -66,7 +66,7 @@ int random_mass();
Vector
random_position
();
// retourne une vitesse aléatoire
Vector
random_speed
(
Star
*
star
);
Vector
random_speed
(
Vector
r_i
,
double
m_i
);
// calcule une super etoile d'après le poids et la position d'un groupe d'étoiles
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment