PDA

Afficher la version complète : Programmation en C du flocon de Van Koch



Xadawa
04/02/2007, 15h09
Salut à tous amis SuSiens...
Je programme en ce moment un programme en C pour créer un flocon de Van Koch, pour faire cela, il me manque juste un algorithme qui permet de calculer les coordonnées du 3ème point d'un triangle équilatéral :
C
/\
/ \
/ \
/ ________ \
A B

J'ai à ma disposition les fonctions suivantes :
- Calcul de la hauteur
- Calcul les coordonnées d'un vecteur orthogonal
- Calcul de la longueur d'un coté
- Calcul des coordonnées du milieu d'un coté

J'avais pensé m'y prendre comme ceci mais ma hauteur ne fait la longueur d'un coté et non pas la hauteur calculée :
Point Coord3pt(Point P1, Point P2)
{
Point P,V;
double H;
P=Milieu(P1,P2); // On calcul les coordonnées du milieu P
H=Hauteur(LongSeg(P1,P2)); // La hauteur qu'il me faudrait -->
V=VecteurOrtho(CoordVecteur(P1,P2)); // On calcul les coordonées du vecteur AB et on calcul son vecteur orthogonal
return Addition(P,V); // On additionne les coordonnées du vecteur avec le milieu P
}

Merci d'avance, c'est pas un problème bien compliqué mais la je bloque...

Merci de m'aider car là je ne sais pas trop comment m'y prendre

Heero_Yuy
05/02/2007, 10h53
Salux,

La géométrie et moi, on a toujours fait 2 voire 3 http://www.alionet.org/style_emoticons/<#EMO_DIR#>/tongue.gif , mais une petite idée comme ça en passant. As-tu pensé au théorème de Pythagore, qui doit-être utilisée pour la triangulation ?

Je pense qu'une petite recherche sur Google sur le mot-clé "triangulation" te permettrait te trouver une réponse à ta question, ou alors sur "flocon de Van Koch" te permettra de trouver l'algorithme.

MacDo
05/02/2007, 12h30
tu n'utilises pas la hauteur http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif

J'imagine que V est normé, dans ta routine ?
En d'autres termes, j'imagine que ta fonction VecteurOrtho renvoie un vecteur orthogonal et de norme 1, juste ?

Fais aussi gaffe à l'orientation du vecteur orthogonal... http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif

ps. La triangulation n'a rien à voir avec ton problème... http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif

En plus précis... Je ne sais pas comment tu accèdes aux composantes X et Y d'un élément du type "Point". Je supposerai donc que c'est Point.X et Point.Y... Je suppose aussi que tu sais additionner des vecteurs, c'est à dire que P2-P1 est le point (P2.X-P1.X, P2.Y-P1.Y).

Je note "Norme" la fonction qui renvoie la norme d'un vecteur. En d'autre termes :

Double Norme(Point P)
{
return sqrt((P.X)^2 + (P.Y)^2);
}

La hauteur du triangle équilatéral dont la base est formée par le segment de droite joignant P1 à P2 est donnée par (en ayant utilisé le théorème de Pythagore, naturellement) : sqrt(3)Norme(P2-P1)/2.


Point Coord3pt(Point P1, Point P2)
{
Point P,V;
double H;
P=Milieu(P1,P2); // On calcul les coordonnées du milieu P, c'est (P1+P2)/2.
H=sqrt(3)Norme(P2-P1)/2; // La hauteur du triangle équilatéral de base P1P2.
V=VecteurOrtho(CoordVecteur(P1,P2)); // On calcul les coordonnées du vecteur P1P2 et on calcule son vecteur orthogonal NORME
[...] Maintenant tu calcules V2 en disant que V2.X = V.X*H et V2.Y = V.Y*H.
return Addition(P,V2);
}
Hope this helps...

Heero_Yuy
05/02/2007, 16h13
ps. La triangulation n'a rien à voir avec ton problème... http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif[/b]

Je suis d'accord que la triangulation n'a rien à voir avec le problème de base, mais :

<div class='quotetop'>Citation </div>
La Triangulation est aussi le processus qui permet de déterminer une distance en calculant la longueur de l'un des côtés d'un triangle, et en mesurant deux angles de ce triangle. Cette méthode utilise des identités trigonométriques.[/b]

vu la définition de Wikipedia (http://fr.wikipedia.org/wiki/Triangulation), au final, on tombe sur les mêmes algorithmes :

<div class='quotetop'>Citation </div>
Les propriétés souvent utilisées pour la triangulation sont:

* La somme des angles d'un triangle est égale à π radians (180 degrés).
* La loi des sinus
* Le théorème d'Al-Kashi
* Le théorème de Pythagore[/b]

Calculer la distance entre 2 points permet de trouver la position d'un point par rapport à un autre, si on connaît les coordonnées de ce dernier.


[Edit] J'ai trouvé ce lien (http://www.efg2.com/Lab/FractalsAndChaos/vonKochCurve.htm) (en anglais mais les formules mathématiques sont universelles http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif )

MacDo
05/02/2007, 16h47
Ce n'est pas parce qu'il y a la racine du mot triangle dans "triangulation" qu'il s'agit de la même chose. Et le fait qu'on utilise dans les deux cas le théorème de Pythagore n'est pas suffisant non plus. La triangulation est un peu plus évoluée que cela (si peu, c'est vrai). Ici, ce n'est pas un problème de triangulation.

Le principe de la triangulation est le suivant : imagine que tu es quelquepart, que moi, je suis autrepart et qu'on a un troisième pote encore à un autre endroit. On voit tous les trois en même temps un objet, et chacun d'entre nous peut déterminer la distance qui nous sépare de l'objet (tu peux déterminer à quelle distance tu te trouves de l'objet, je peux déterminer la distance à laquelle je me trouve de cet objet et le troisième idem). Si on peut se communiquer ces informations, alors on peut déterminer où est exactement l'objet observé. Rien à voir avec la construction d'une médiatrice d'un segment.

<div class='quotetop'>Citation </div>
Calculer la distance entre 2 points permet de trouver la position d'un point par rapport à un autre, si on connaît les coordonnées de ce dernier.[/b]
Faux, bien sûr :-) Si tu ne connais que la distance (d) d'un point (P1) par rapport à un autre (P2), tu ne peux dire de P1 qu'une chose : qu'il se trouve sur le cercle de rayon d centré en P2. Point. Rien de plus.

Pour finir, le lien que tu donnes est éventuellement intéressant pour la culture de Xadawa (bien que je pense qu'il sait déjà tout cela puisqu'il essaie de programmer la chose). La seule chose intéressante qu'il y a sur cette page (et encore, le raisonnement n'est pas complet) est que le flocon fractale a une aire finie, alors qu'il a un périmètre infini.

Heero_Yuy
05/02/2007, 17h12
Ce n'est pas parce qu'il y a la racine du mot triangle dans "triangulation" qu'il s'agit de la même chose. Et le fait qu'on utilise dans les deux cas le théorème de Pythagore n'est pas suffisant non plus. La triangulation est un peu plus évoluée que cela (si peu, c'est vrai). Ici, ce n'est pas un problème de triangulation.

Le principe de la triangulation est le suivant : imagine que tu es quelquepart, que moi, je suis autrepart et qu'on a un troisième pote encore à un autre endroit. On voit tous les trois en même temps un objet, et chacun d'entre nous peut déterminer la distance qui nous sépare de l'objet (tu peux déterminer à quelle distance tu te trouves de l'objet, je peux déterminer la distance à laquelle je me trouve de cet objet et le troisième idem). Si on peut se communiquer ces informations, alors on peut déterminer où est exactement l'objet observé. Rien à voir avec la construction d'une médiatrice d'un segment.

<div class='quotetop'>Citation
Calculer la distance entre 2 points permet de trouver la position d'un point par rapport à un autre, si on connaît les coordonnées de ce dernier.[/b]
Faux, bien sûr :-) Si tu ne connais que la distance (d) d'un point (P1) par rapport à un autre (P2), tu ne peux dire de P1 qu'une chose : qu'il se trouve sur le cercle de rayon d centré en P2. Point. Rien de plus.

Pour finir, le lien que tu donnes est éventuellement intéressant pour la culture de Xadawa (bien que je pense qu'il sait déjà tout cela puisqu'il essaie de programmer la chose). La seule chose intéressante qu'il y a sur cette page (et encore, le raisonnement n'est pas complet) est que le flocon fractale a une aire finie, alors qu'il a un périmètre infini.
[/b][/quote]

Excuse-moi. Je n'aurais peut-être pas dû parler de triangulation, et comme je l'ai dit plus haut la géométrie et moi, ça fait 2. Je me suis certainement mal exprimé, mais les formules mathématiques sont là (notamment Pythagore - que tu as utilisé dans le bout de code que tu as fourni). C'est juste que je voulais parler des formules, c'est tout et la triangulation est venue comme ça. Mais bon, ne tergiversons pas là-dessus.

@Xadawa : oublie la triangulation.

MacDo
05/02/2007, 17h26
Pas de souci http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif on ne peut pas tout savoir hein http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif L'avantage, c'est que, maintenant, certains auront appris un peu de quoi parle la triangulation http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif (et ca sert partout, hein, en premier dans les gps, bien sûr)

Heero_Yuy
05/02/2007, 17h34
Pas de souci http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif on ne peut pas tout savoir hein http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif L'avantage, c'est que, maintenant, certains auront appris un peu de quoi parle la triangulation http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif (et ca sert partout, hein, en premier dans les gps, bien sûr)[/b]
Effectivement http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif

Xadawa
06/02/2007, 18h59
C'était bien un problème de formule, je n'utilisais nulle part la hauteur... Je mettrais le code et quelques screen pr ceux que ca interesse...

Merci à tous