|
Ecrit par denis bertin pour Denis-Draw le 12.09.2010. Permet de démontrer l'utilisation de sinusoïde et de leurs correspondances exactes. Cette représentation serait déjà dans le Codex Leicester de léonard de Vinci.
procedure TDisque_window.sinus_sur_deux_plans;
const k_position_depart_y=10000;
k_position_depart_x=5000;
k_rayon_spirale=7200;
var i:integer;
forme_sinusoide:wformes1.tforme_dessin;
forme_spirale_develloper:wformes1.tforme_dessin;
deux_lignes_sur_les_axes:wformes1.tforme_dessin;
trois_ligne_vertical:wformes1.tforme_dessin;
un_calque_actif:col_plan.TCalque;
position:tpoint;
position_spirale:integer;
un_point_projecter_sur_le_plan_de_dessous_y:integer;
coordonner:tpoint;
a_color_une_couleur:tcolorref;
begin
un_calque_actif:=wmsg.col_dessin.Get_calque_actif;
if un_Calque_actif=nil then begin exit; end;
forme_sinusoide:=wformes1.tforme_dessin.create(k_position_depart_x,k_position_depart_y);
position_spirale:=k_position_depart_y+k_position_depart_y div 2;
forme_spirale_develloper:=wformes1.tforme_dessin.create(k_position_depart_x,position_spirale);
for i:=0 to 720 do
begin
if i mod 10= 0 then
begin
hls_rvb.hls_to_tcolorref(i/720*360,0.5,1,a_color_une_couleur);
position.x:=round(cos(i*utile.pisur180)*(k_rayon_spirale-i*10)) div 2;
position.y:=i*10;
forme_sinusoide.elements.add(font_ob1.lignenode.create(position.x,-position.y));
deux_lignes_sur_les_axes:=wformes1.tforme_dessin.create(k_position_depart_x,k_position_depart_y-position.y);
deux_lignes_sur_les_axes.elements.add(font_ob1.lignenode.Create(position.x,0));
deux_lignes_sur_les_axes.calcul;
deux_lignes_sur_les_axes.couleur_pinceau:=a_color_une_couleur;
deux_lignes_sur_les_axes.brush1.lbColor:=a_color_une_couleur;
un_calque_actif.add(deux_lignes_sur_les_axes);
trois_ligne_vertical:=wformes1.tforme_dessin.create(
k_position_depart_x+position.x,k_position_depart_y-position.y);
trois_ligne_vertical.couleur_pinceau:=a_color_une_couleur;
trois_ligne_vertical.brush1.lbColor:=a_color_une_couleur;
un_point_projecter_sur_le_plan_de_dessous_y:=
position_spirale+round(sin(i*utile.pisur180)*position.x-k_position_depart_y+position.y);
coordonner.x:=0;
coordonner.y:=un_point_projecter_sur_le_plan_de_dessous_y;
trois_ligne_vertical.elements.Add(
font_ob1.ligneNode.create(coordonner.x,coordonner.y));
forme_spirale_develloper.elements.add(
font_ob1.lignenode.Create(
coordonner.x+trois_ligne_vertical.x-forme_spirale_develloper.x,
coordonner.y+trois_ligne_vertical.y-forme_spirale_develloper.y));
trois_ligne_vertical.calcul;
un_calque_actif.add(trois_ligne_vertical);
end;
end;
forme_spirale_develloper.calcul;
forme_sinusoide.calcul;
un_calque_actif.add(forme_sinusoide);
un_calque_actif.add(forme_spirale_develloper);
Cherche_le_cadre_surface;
invalidaterect(self.hwindow,nil,false);
postmessage(self.hwindow,wm_selection_changer,0,0);
end; {TDisque_window.sinus_sur_deux_plans}
|