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

Windows Forms Discussion :

plus grand segment perpendiculaire a un autre dans une courbe


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut plus grand segment perpendiculaire a un autre dans une courbe
    bonjour
    j'ai besoin de trouver le petit axe dans une courbe fermé
    j'ai une liste de point et j'ai calculé la plus grande distance
    le petit axe est le plus grand segment perpendiculaire au grand axe limité par la courbe.


    j'ai fait une méthode qui ne mène pas toujour au résultat :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
     
    	 void PetitAxe(arraylist liste)
    		 {
     
     
    			 //ici le a1 de la droite D1
    			 float a1 = (float)(pointB.Y - pointA.Y) / (float)(pointB.X - pointA.X);
    			 //pour le b1 on la calcule par détermination d'un point...
     
    			 float b1 =pointA.Y - a1 *pointA.X;
     
    			 //je vai vérifier pour le point B..
    			 double err = 0.01;
    			 if (Math.Abs(a1) >= err)
    			 {
     
    				 //ici il faut bien voir car dans ce cas 
    				 //a2 n'est pas importante donc m'ai l'important c'est le x==>
    				 //par conséquent on fait x=const
    				 //donc le Y n'est pas importante
    				 double max = 0;
     
    				 //la distance
    				 double distance = 0;
    				 int indexA = 0; int indexB = 0;
    				 double b2 = 0;
    				 for (int i = 0; i < liste.Count; i++)
    				 {
    					 //chercher le b2
     
    					 b2 = liste[i].X;
    					 //ici on a trouvé a et b pour la droite...
    					 //il faut chercher dans la liste l'autre point 
    					 //qui peut etre le plus grand(non ici le point appartenant
    					 //a la droite puis calculer la distance...A(x,y)
    					 for (int p = 0; p < liste.Count - 1; p++)
    					 {
    						 if (p != i)
    						 {
    							 if ((liste[p].X == b2))
    							 {
    								 //ici on a le point appartient a cette droite donc on fait break
    								 //on calcule la distance...
    								 distance = liste[p].DistanceTo(liste[i]);
    								 if (distance >= max)
    								 {
    									 max = distance;
    									 indexA = i;
    									 indexB = p;
    								 }
    								 break;
    							 }
    						 }
    					 }
    				 }
     
    //pour le résultat les points AA,BB
    				AA = liste[indexA];
    				 BB = liste[indexB];
     
     
     
    			 }
    			 else
    			 {
     
     
    			 //il faut parcourir toute la liste pour connaitre les perpendiculaires
    			 //aussi il faut bien calculer le max de la distance entre le point perpendiculaire
     
    			 //ici il faut commencer par déterminer les droites perpendiculaires...
    			 double a2 = -1 / a1;
    			 //il faut ici calculer le point appartenant a cette droite...
    			 double b2;
    			 //la distance
    			 double distance = 0;
    			 //les points extremes...
    			 IntPoint A, B;
    			 double max = 0;
    			 int indexA = 0; int indexB = 0;
     
    			 for (int i = 0; i < liste.Count; i++)
    			 {
    				 //chercher le b2
     
    				 b2 = liste[i].Y - a2 * liste[i].X;
    				 //ici on a trouvé a et b pour la droite...
    				 //il faut chercher dans la liste l'autre point 
    				 //qui peut etre le plus grand(non ici le point appartenant
    				 //a la droite puis calculer la distance...A(x,y)
    				 for (int p = 0; p < liste.Count - 1; p++)
    				 {
    					 if (p != i)
    					 {
    						 if ((a2 * liste[p].X + b2) - liste[p].Y == 0)
    						 {
    							 //ici on a le point appartient a cette droite donc on fait break
    							 //on calcule la distance...
    							 distance = liste[p].DistanceTo(liste[i]);
    							 if (distance >= max)
    							 {
    								 max = distance;
    								 indexA = i;
    								 indexB = p;
    							 }
    							 break;
    						 }
    					 }
    				 }
    			 }
    			 //ici il aut acquérire les points... AA,BB le résultat
     
    			AA = liste[indexA];
    			 BB = liste[indexB];
     
    			 }
    		 }

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Ton indentation de code est illisible !!

    N.B. : J'ai jamais compris pourquoi certains utilisent des indentation qui demanderaient des ecrans de 50 pouces ?

    Cela étant, tu ne serait quand meme pas mieux dans un forum math ou algo ?

  3. #3
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    j'ai pensé poser ma question ici car c'est un peut générique
    en plus j'ai mis ce code pour expliquer un peut
    sinon j'ai besoin just d'une indiquation pour faire les droites perpendiculaires.
    peut etre je poserait dans algo pour avoir une reponse mathématique

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/10/2009, 14h12
  2. passer d'une fenetre à une autre dans une application cdc
    Par ainosaidan dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 23/08/2007, 13h21
  3. Réponses: 3
    Dernier message: 21/07/2007, 01h48
  4. Réponses: 11
    Dernier message: 05/10/2006, 13h20
  5. se deplcer d'un enregstrm à autre dans une tableavec clavie
    Par AFAT dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/09/2004, 14h19

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