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

Algorithmes et structures de données Discussion :

ecart de courbe


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 43
    Points : 31
    Points
    31
    Par défaut ecart de courbe
    Bonjour,
    je dois programmer une fonction qui, en partant d'une courbe de point, va en tracant une 2° en décalé (le meilleur exemple: une route et la barrière le long de celle-ci)
    Le principe est de partir de 3 points (2 segments, donc). Je prends les coordonnées d'un point d'origine et je calcule celle d'un point a une distance D du point perpendiculairement au segment. Meme chose pour les 2 autres points, avec pour celui du milieu 2 projetés (1 pour chaque segment) puis je calcule le point d intersection des 2 droites formées par les 2 premiers et les 2 derniers points.
    Le soucis est que parfois, le point ne doit pas etre affiché. Si par exemple la rote fait un virage tres tres sérrée et que la distance D est tres importante.
    j'ai fait actuellement quelque chose qui marche pour les écart "faible",mais dès que ceux-ci sont importants, le résultat final donne n'importe quoi.

    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
     
     while(vertex3){  //tant que nous avons un 3° point
        pt3     = vertex3->GetPt10();//recup' des coordonnées du 3° point
        ang2    = GeAngle(&pt2,&pt3);//calcul de l angle entre 2, 3 et horizon
        polAng2 = GetOffsetAng(offSet,ang2);
        GePolar(&ptc,&pt2,polAng2,offset);//calcul des coord des projetés
        GePolar(&ptd,&pt3,polAng2,offset);
    	angle1= atan2(pt2.y - pt1.y , pt2.x - pt1.x);
    	angle2= atan2(pt3.y - pt2.y , pt3.x - pt2.x);
     
    	if (angle1>=Ge2Pi) angle1 -=Ge2Pi;
    	if (angle2>=Ge2Pi) angle2 -=Ge2Pi;
    	if (angle1<=(-Ge2Pi)) angle1 +=Ge2Pi;
    	if (angle2<=(-Ge2Pi)) angle2+=Ge2Pi;
        if(!GeLineInter(&ptres,&pta,&ptb,&ptc,&ptd))return 0;
     
    	if ((((angle2-angle1)>0) && (offSet<0)) || (((angle2-angle1)<0) && (offSet>0)) || ((angle1>((Ge2Pi)/4)) && (angle2<((Ge2Pi)/4)) && (offSet<0)) || ((angle1<((Ge2Pi)/4)) && (angle2>((Ge2Pi)/4)) && (offSet>0))) // si la barriere est du cote oppose au virage
    	{
    		ptList.AddPoint(ptres);
    	}else{
    		m = (ptd.y - pta.y) / (ptd.x - pta.x);
    		b = ptd.y - m*ptd.x;
    		if (((ptres.y - (( m*ptres.x)+b))/(pt2.y - (( m*pt2.x)+b)))>0) // cas ou les Res et pt2 sont du meme cote de la droite ad
    		{// si le pt resultant et le 2° point sont du meme cote de la droite ad: trace de res
    			ptList.AddPoint(ptres);
    		}
    	}
        pt2 = pt3;
        pta = ptc;
        ptb = ptd;
        vertex2 = vertex3;
        vertex3 = cEnt->GetDifferentSubEnt(vertex2);
      }
    Avez vous des idées? Je me doute que je suis pas tres clair dans mes explication et mes commentaires de code, alors si vous avez des questions hésitez pas...

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut 1
    Bonjour,

    meme si c'est pas tres clair, j'ai compris le souci. Tu as déjà localisé l'erreur, ce qui est une bonne chose.
    Lorsque tu dis :
    Le soucis est que parfois, le point ne doit pas etre affiché. Si par exemple la rote fait un virage tres tres sérrée et que la distance D est tres importante.
    il te suffit de verifier que les coordonnées du point soient dans ton écran. Si tu affiches avec opengl ou tout autre couche graphique, c'est toi qui définit la taille de la fenetre d'affichage, donc tu en as les dimensions.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Non, en réalité, il s agit d une fonction pour autocad. Le probleme est (ca demande un peu d imagination ou un stylo) que si ta route (vu du dessus) prend un tres brusque virage a gauche, par exemple, et que tu traces une barriere a gauche egalement, si l ecard entre ta route et ta barriere est trop grand, la representation de celle ci va "boucler".
    Le code que j ai donné permet de tracer la barriere pour des ecarts faible (sous autocad, de l ordre de 50m) maisil pète les plombs pour 1000m en me renvoyant qqchose de plus proche d'un picasso sous exta que d'une cartographie routière...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    z'avez pas d'idée?

Discussions similaires

  1. Graphique : Ecart entre 2 courbes colorisé
    Par maxoup dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2015, 16h00
  2. recherche doc sur les courbe de bézier
    Par amaury pouly dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/04/2003, 22h41
  3. Réponses: 2
    Dernier message: 01/04/2003, 22h09
  4. Courbe lissée
    Par crakdown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/11/2002, 17h58
  5. [VB6] [MSChart] Courbe incorrecte
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 08/10/2002, 21h53

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