IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Tracer des lignes : la deuxième perpendiculaire à la première


Sujet :

C++Builder

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut Tracer des lignes : la deuxième perpendiculaire à la première
    bonjours ,
    voici ma problématique :
    j'ai une ligne que j'ai tracé sur la fiche , elle est definie par 2 pts ( depart , arrivée) ; comment je peux definir deux autres points pour tracer une 2° ligne à condition qu'elle soit perpandiculaire à la 1° .

    merci d'avance
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  2. #2
    Membre actif Avatar de cfdev
    Homme Profil pro
    Passionné
    Inscrit en
    Octobre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Passionné

    Informations forums :
    Inscription : Octobre 2004
    Messages : 220
    Points : 210
    Points
    210
    Par défaut
    lut,

    un petit exemple de lignes Perpendiculaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	int centerX = ClientWidth / 2;
    	int centerY = ClientHeight / 2;
     
    // X
    	Canvas->MoveTo(0,centerY);
    	Canvas->LineTo(ClientWidth,centerY);
     
    // Y
    	Canvas->MoveTo(centerX,0);
    	Canvas->LineTo(centerX,ClientHeight);
    espérant que ca t'aide

    ++
    mcercle facturation - Logiciel de facturation Win/Mac/Linux

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    merci vertuA, mais en fait je pense que ton exemple est un cas particulier c'est à dire que moi je veux tracer la 2° ligne quelle que soit l'inclisaison de la premiere et à la fin elle doivent etre perpendiculaire.
    j'espere que vous m'avez compris
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Normalement l'expression mm' = -1 devrait te dire quelque chose... où m = y1 - y0 / x1 - x0 ... Non ?

    Pour ton travail de recherche : JAPI

    A plus !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    merci,
    mes le probleme c'est que je connais aucune information sur la 2° ligne sauf qu'elle foit avoir un angle de 90 avec la 1°.

    merci à vous tous
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Dans ce cas il y en a une infinité... tant que le produit des pentes vaut -1 !
    Alors... on prend laquelle ?

    A plus !

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    on a :
    m1=(y2-y1)/(x2-x1)
    m2=(y3-y4)/(x3-x4)
    m1.m2=-1

    donc : y3-y4=x4-x3
    j'ai oublier de dire que cette droite est biscectrice ( donc mediatrice)

    je sais que sa fait trop , mais c'est un probleme qui me gene , parceque je travail sur une application de reconnaissance de visage sous builder et je doit saparer le visage suivant les 2 vecteurs propres le 1 celui qui passe par ls iris le 2° est le mediateur.

    merci encorS.
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut, je sais pas si ca peux t'aider voilà un exemple pour n'importe quel courbe à partir des équations de trigonométrie basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
       TPoint Point1,Point2;
       //première courbe
       Point1 = Point(100,100);
       Point2 = Point(220,40);
     
       Canvas->MoveTo(Point1.x,Point1.y);
       Canvas->LineTo(Point2.x,Point2.y);
       //calcul de l'angle du premier segment par rapport à l'horizontal
       double oppose      = Point1.y-Point2.y;
       double hypothenuse = sqrt( (Point2.x-Point1.x)*(Point2.x-Point1.x) + (Point2.y-Point1.y)*(Point2.y-Point1.y) );
       double angle       = ArcSin(oppose/hypothenuse);
       Label1->Caption = FloatToStrF(angle*180.0/M_PI,ffFixed,6,2) + "°";
     
       //point de référence
       Point1 = Point(100,100);
     
       //calcul du deuxième point de la courbe perpendiculaire
       //on considère que le segment à la même longueur que le premier
       double angle2 = M_PI_2-angle;
       double Yb = fabs( Point1.y - hypothenuse*sin(-angle2)) ;
       double Xb = sqrt( hypothenuse*hypothenuse - (Point1.y - Yb)*(Point1.y - Yb) ) + Point1.x;
     
       Point2 = Point(Xb,Yb);
     
       Canvas->MoveTo(Point1.x,Point1.y);
       Canvas->LineTo(Point2.x,Point2.y);
     
       //calcul de l'angle du deuxième segment par rapport à l'horizontal
       oppose      = Point1.y-Point2.y;
       hypothenuse = sqrt( (Point2.x-Point1.x)*(Point2.x-Point1.x) + (Point2.y-Point1.y)*(Point2.y-Point1.y) );
       angle       = ArcSin(oppose/hypothenuse);
       Label2->Caption = FloatToStrF(angle*180.0/M_PI,ffFixed,6,2) + "°";
    Je calcul l'angle de la première droite par rapport à l'horizontal et à partir d'un point donné, j'en trace la perpendiculaire.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    ok
    merci à vous tous sa marche ters bien
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Sinon sans trigo, on peut faire preuve du raisonnement suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TPoint p1 = Point(50,200);
    TPoint p2 = Point(150,20);
    TPoint m1;
    TPoint m2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Canvas->Pen->Color = clBlue;
    Canvas->Pen->Mode = pmCopy;
    Canvas->Pen->Style = psSolid;
    Canvas->MoveTo(p1.x, p1.y); Canvas->LineTo(p2.x, p2.y);
     
    m1 = Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
     
    double x = 0.0;
    double y = 0.0;
     
    double dx = p1.x - p2.x;
    double dy = p1.y - p2.y;
     
    if((dx == 0.0) && (dy == 0.0))
        {
        //pas de droite, le segment se résume à n'être qu'un point
        }
    else
        {
        if(dx == 0.0)
            {
            x = 100.0; //ou -100
            }
        else
            {
            if(dy == 0.0)
                {
                y = 100.0; // ou -100
                }
            else
                {
                double m = -dx / dy;
                if(m > 0.0)
                    {
                    x = 100.0; y = x * m; //ou -100
                    }
                else
                    {
                    x = 100.0; y = x * m; //ou -100
                    }
                }
            }
        }
    m2 = Point(m1.x + x, m1.y + y); //réajustement en absolu
    //Yapluka
    Canvas->Pen->Color = clRed;
    Canvas->MoveTo(m1.x, m1.y); Canvas->LineTo(m2.x, m2.y);
    Pendant un court instant, on aura raisonné en prenant m1 comme le centre d'un nouveau référentiel, ce qui explique le réajustement en absolu (tout aussi relatif) des coordonnées du point m2.

    A plus !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracer des lignes ,arcs de cercle et cercle
    Par lostchina dans le forum C++Builder
    Réponses: 16
    Dernier message: 12/06/2007, 06h59
  2. Pages de garde : tracer des lignes, inclure un graphe, ...
    Par vinzzzz dans le forum Mise en forme
    Réponses: 6
    Dernier message: 24/05/2007, 12h07
  3. Réponses: 6
    Dernier message: 27/04/2007, 22h50
  4. Tracer des lignes séléctionnables
    Par koolkris dans le forum Langage
    Réponses: 3
    Dernier message: 02/02/2006, 10h12
  5. Recherche de composant pour tracer des lignes
    Par n1portki dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/09/2005, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo