Detecter axe de symétrie dans un polygone

alexis0788 Messages postés 9 Date d'inscription samedi 1 septembre 2007 Statut Membre Dernière intervention 11 octobre 2008 - 17 avril 2008 à 09:05
Brutus64 Messages postés 2 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 29 mai 2008 - 29 mai 2008 à 19:27
Bonjour à tous, je suis actuellement en fin de projet informatique en C sur les polygones.
Je touche au but mais la dernière question est, je trouve, vraiment difficile...
Voila, je cherche à détecter dans un polygone non croisé et convexe la présence éventuelle d'un axe de symétrie.
S'il en existe plusieurs, je dois donner au minimum l'équation d'un axe.
Je travaille avec deux structure:


Code :

<ol class="olcode" id="code1">
<li>
typedef
struct POINT {char *nom;
</li>
<li>                               float abscisse;
</li>
<li>                               float ordonnee;
</li>
<li>                               struct POINT *succ;} point;
</li>
<li>
</li>
<li>
typedef
struct DROITE {float a;float b;float c;} droite;</li>
</ol>



 
Voici les fonctions que j'ai déjà réalisé:


Code :

<ol class="olcode" id="code2">
<li>

//creer un point

</li>
<li>point *newp();
</li>
<li>
</li>
<li>

//affiche les points

</li>
<li>
void affichep(point *p);
</li>
<li>
</li>
<li>

//creer une chaine de points

</li>
<li>point *chainep();
</li>
<li>
</li>
<li>

//calcul du perimetre

</li>
<li>
void perimetre(point *p);
</li>
<li>
</li>
<li>

//calcul de l'aire à partir de la formule d'Héron

</li>
<li>
void aire(point *p);
</li>
<li>
</li>
<li>

//determine si les deux côtés s'intersectent et renvoie 1 si c'est le cas sinon renvoie 0;

</li>
<li>

//côtéun=points un et deux; côtédeux=points trois et quatre

</li>
<li>
int intersection(point *un,point *deux,point *trois,point *quatre);
</li>
<li>
</li>
<li>

//si le polygone est croisé alors renvoie 1 sinon renvoie 0;

</li>
<li>
int croise(point *p);
</li>
<li>
</li>
<li>

//calcule l'angle entre p2p1 et p2p3

</li>
<li>
float angle(point *p1,point *p2,point *p3);
</li>
<li>
</li>
<li>

//determine si un angle est saillant (appartient a ]0;90[)

</li>
<li>
float saillant(point *p1,point *p2,point *p3);
</li>
<li>
</li>
<li>

//determine si un polygone est convexe:concave(1) si un seul angle est saillant, convexe(0) si tous les angles sont non saillants

</li>
<li>
int convexite(point *p);
</li>
<li>
</li>
<li>

//calcule le nombre de points du polygone

</li>
<li>
int comptepoint(point *p);
</li>
<li>
</li>
<li>

//resoud un systeme a deux inconnues

</li>
<li>point * equasolve(droite d1,droite d2);
</li>
<li>
</li>
<li>

//donne le point d'intersection de deux mediatrices

</li>
<li>point * media_inter(point *p1,point *p2,point *p3);
</li>
<li>
</li>
<li>

//determine si un point appartient a une droite

</li>
<li>
int p_appartient(point *centre,point *p1,point *p2);
</li>
<li>
</li>
<li>

//determine s'il existe le cercle circonscrit

</li>
<li>droite cercle_cir(point *p);
</li>
<li>
</li>
<li>

//determine l'intersection de deux bissectrices

</li>
<li>point * bis_inter(point *un,point *deux,point *trois,point *quatre);
</li>
<li>
</li>
<li>

//determine s'il existe le point de symetrie

</li>
<li>point * point_sym(point *p);</li>
</ol>



 
Merci de votre aide...
 
 

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
17 avril 2008 à 18:21
J'aurais tendance à dire que si il existe un axe de symétrie, il passe nécessairement par la moyenne des points (mais bon, c juste intuitif). Donc si cela est vrai, suffit ensuite de tester avec tous les vertex. L'hypothèse permet de simplifier pas mal la complexité du problème (en terme de temps de calcul).

Enfin voila, ce que je peux te dire après quelques minutes de réflexions. Ya surement mieux, mais bon.
0
Brutus64 Messages postés 2 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 29 mai 2008
29 mai 2008 à 19:27
Bonjour Alexis,

Comment détermines tu les coordonnées de chaque point ? Est-ce à l'aide d'une fonction ? Si tel est le cas, je devrais pouvoir t'aider ...
0
Rejoignez-nous