Commit 4bb40576 authored by Alexandre De Fonvillars's avatar Alexandre De Fonvillars
Browse files

modif

parent 34a255e1
......@@ -25,19 +25,17 @@ void calculAbscisseCordes(double x[], double y[], double a[], double b[]) //x &
y[4] = a[1]*gDonnees.corde.xs+b[1];
}
void calculPente(double x[], double y[], double a[]) //a[3]
{
int i;
for (i = 0; i < 3; i++) {
a[i] = (double) (y[i] - y[i-1])/(x[i]-x[i-1]);
}
}
double calculEchelle(double hmax, double xmax)
{
return minDouble(L_ZONE - X_ZONE, H_ZONE - Y_ZONE) / maxDouble(hmax, xmax);
}
double calculPente(double x1, double x2, double y1, double y2)
{
return (double) (y2 - y1)/(x2 -x1);
}
void zoneDessinMultiTranslationCoord(double x[], double y[], double u[], double echelle) {
int i;
......@@ -105,37 +103,47 @@ void zoneDessinDessinerCordes(double x[], double y[]) // x: position des points
fl_pie( x[i] - RAYON, y[i] - RAYON, RAYON * 2, RAYON * 2, 0, 360 ) ;
}
void zoneDessinDessinerRessorts(double x[], double y[], double a[], double b[]) {
int i; double xdraw, ydraw, xgap;
void zoneDessinDessinerRessorts(double x[], double y[]) {
int i, j, nbr2dents1, nbr2dents2; // i et j sont des compteurs. nbr2dents : nombre de dents du ressort
double xdraw, ydraw, xgap, ygap; //Création de compteurs en x et en y et des variables d'incrémentation
xgap = (double) (L_ZONE - X_ZONE)/35;
nbr2dents1 = 20;
///Création des ressorts verticaux
for (i = 1; i < 3; i ++) {
ydraw = y[0]+(y[i]-y[0])/4;
xdraw = x[i];
ygap = (y[i]-y[0])/(nbr2dents1*4); //Pour chaque dent, il faut 2 points, les dents se situent sur seulement la moitié du ressort
fl_color(FL_RED);
fl_begin_complex_polygon();
fl_gap();
fl_line(xdraw, y[0], xdraw, ydraw);
fl_line(xdraw, ydraw, xdraw + xgap, ydraw + ygap);
ydraw += ygap;
for (j = 0; j < nbr2dents1; j++) {
if (j%2 == 0) {fl_line(xdraw + xgap, ydraw, xdraw - xgap, ydraw + 2*ygap);}
else {fl_line(xdraw - xgap, ydraw, xdraw + xgap, ydraw + 2*ygap);}
ydraw+=2*ygap;
}
fl_line(xdraw + xgap, ydraw, xdraw, ydraw + ygap);
ydraw += ygap;
fl_line(xdraw, ydraw, xdraw, y[0]+(y[i]-y[0]));
fl_end_complex_polygon();
}
}
///création du ressort intermédiaire
double pente = calculPente(x[1], x[2], y[1], y[2]);
nbr2dents2 = 10;
xdraw = x[1] + (x[2]-x[1])/4;
ydraw = y[1]+(x[2]-x[1])*pente/4;
xgap = (x[2] - x[1])/(nbr2dents2*4);
// DessinerZone pour tester
void ZoneDessinDessinerCB( Fl_Widget* widget, void* data )
{
// On efface toute la zone ( en dessinant dessus un rectangle plein, noir )
fl_color(FL_BLACK);
fl_rectf(X_ZONE, Y_ZONE, L_ZONE, H_ZONE);
///Declaration des variables
double x[5] = {1.5, 2, 4, 5, 4};
double y1[5]; double y2[5];
double a[3] = {-6, -0.25, 3.5};
double b[3] = {13, 1.5, -13.5};
fl_begin_complex_polygon();
fl_line(x[1], y[1], xdraw, ydraw);
fl_line(xdraw, ydraw, xdraw+xgap, )
double echelle = calculEchelle(8 , 5);
calculAbscisseCordes(x, y1, a, b);
zoneDessinMultiTranslationCoord(x, y1, y2, echelle);
zoneDessinDessinerCordes(x, y1);
zoneDessinDessinerCordes(x, y2);
fl_end_complex_polygon();
}
// DessinerZone à partir des données du pb
......@@ -155,14 +163,8 @@ void ZoneDessinDessinerCBpb( Fl_Widget* widget, void* data )
zoneDessinDessinerCordes(x, yHaut);
zoneDessinDessinerCordes(x, yBas);
zoneDessinDessinerRessorts(x, yHaut);
zoneDessinDessinerRessorts(x, yBas);
}
}
void ZoneDessinDessinerCBressorts( Fl_Widget* widget, void* data )
{
fl_color(FL_BLACK);
fl_rectf(X_ZONE, Y_ZONE, L_ZONE, H_ZONE);
}
......@@ -3,10 +3,11 @@
#ifndef _u2_dessin_h
#define _u2_dessin_h
#define RAYON 3 //Défini la valeur du rayon des cercles si on choisit d'en mettre
#define RAYON 3 //Défini la valeur du rayon des cercles
// Declaration des sous-programmes par ordre d'utilisation: Lorsqu'il y a "ZoneDessin" : on travail avec les coords en pixel
void calculAbscisseCordes(double x[], double y[], double a[], double b[]); //Calcul de la coordonnee y des cordes
double calculPente(double x1, double x2, double y1, double y2);
double calculEchelle(double hmax, double x); //Renvoie un rapport qui permet de passer des dimensions phyiques du probleme en nbr de pixel
void zoneDessinMultiTranslationCoord(double x[], double y[], double echelle); //Operations sur les coordonnes pour les faire tenir dans la zone de dessin
void zoneDessinDessinerCordes(double x[], double y[]);
......
......@@ -179,6 +179,11 @@ double calculPsub()
{
P_sub = gDonnees.Psub;
}
else
{
P_sub = P_supra;
}
return P_sub;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment