Vers le tracé de trajectoire (Présentation)
include "D:/Bibliothéque graphique.ml";;
let Pi=4.*.atan(1.0);;
type plein_point=plein|point;;
type foyer=soleil|autre;;
type conique={e:float;p:float;aap:float};;
type comete={equ:conique;foyer:foyer};;
let n_element tableau n=let l=vect_length tableau in
tableau.(n-(l*(n/l)));;
let fond_ecran couleur=set_color couleur;
fill_rect 0 0 (size_x()) (size_y());
set_color black;;
#open "random";;
let etoiles nombre couleur=set_color couleur;
for i=1 to nombre do
point_ecr {X=(int (size_x()));Y=(int (size_y()))};done;
set_color black;;
let ciel n couleurs=let y=(vect_length couleurs) in
for i=0 to (y-1) do
etoiles (n/y) (couleurs.(i));done;;
let ciel2 n=for i=0 to n do etoiles 1 (rgb (int 255) (int 255) (int 255)) done;;
let astre_solaire rayon repère= set_color yellow;
fill_circle (repère.O.X) (repère.O.Y) (int_of_float((float_of_int(repère.I))*.rayon));
set_color red;
move_rep {x=(-.rayon);y=0.} repère;
line_rep {x=rayon;y=0.} repère;
move_rep {x=0.;y=(1./.2.)*.rayon} repère;
line_rep {x=0.;y=(1./.2.)*.(-.rayon)} repère;
set_color black;;
let color_conique nom repere pp n tableau depart intervalle=
let dt=(intervalle)/.(float_of_int n)
and valeur p e teta aap=p/.(1.+.(e*.cos(teta-.aap)))
and p=nom.equ.p and e=nom.equ.e and aap=nom.equ.aap in
let t=ref(depart+.aap+.dt) in
begin
match pp with
|plein ->set_color (n_element tableau 1);
move_rep {x=(valeur p e (!t) aap)*.cos(!t);y=(valeur p e (!t) aap)*.sin(!t)} repere;
for i=2 to n-1 do
t:=!t+.dt;
set_color (n_element tableau i);
line_rep {x=((valeur p e !t aap)*.cos(!t));y=((valeur p e !t aap)*.sin(!t))} repere;
done;
|point ->for i=1 to n-1 do
set_color (n_element tableau i);
point_rep {x=((valeur p e !t aap)*.cos(!t));y=((valeur p e !t aap)*.sin(!t))} repere;
t:=!t+.dt;
done;
end;
set_color black;;
let trace_comete nom repere pp n tableau=
match (nom.equ.e) with
|1.0->color_conique nom repere pp n tableau (-.Pi) (2.*.Pi)
|x when x<.1. ->color_conique nom repere pp n tableau (0.) (2.*.Pi)
|x ->let g=acos(-.1./.x) in
match (nom.foyer) with
|soleil->color_conique nom repere pp n tableau (-.g) (2.*.g)
|autre->color_conique nom repere pp n tableau (g) ((2.*.Pi)-.(2.*.g));;
let trajectoire comète pp centre largeur=clear_graph();
let repere=(vision centre largeur) in
fond_ecran black;
ciel 150 [|white;yellow;cyan|];
trace_rep repere 1 blue;
astre_solaire ((comète.equ.p)/.5.) repere;
trace_comete comète repere pp 500 [|blue;white;red;yellow;magenta|];;