Coord du 3ème point d'un triangle équilatéral

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
xadawa
Messages: 4
Enregistré le: 04 Fév 2007, 18:18

Coord du 3ème point d'un triangle équilatéral

par xadawa » 04 Fév 2007, 18:22

Salut à tous amis Mathématiciens...
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 ou AB ma base et C mon sommet dont les coordonées sont a calculer

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


Oups dsl double post



buzard
Membre Relatif
Messages: 274
Enregistré le: 22 Mai 2006, 14:29

par buzard » 04 Fév 2007, 18:35

en notation vectorielle ca donne tout simplement :



en définissant

fait attention à l'orde A puis B , pour avoir les pointes toutes dans le même sens. (la formule donne un sens directe au triangle)

parametre par l'angle pendant que tu y est, en remplacant simplement sqrt(3)/2 par sin(a).

pour l'orientation des pointes tu peut essayer l'alternance, ou encore mieux défini en fonction de l'ecriture binaire d'un nombre réel donné en parametre, c'est assez amusant à faire.

xadawa
Messages: 4
Enregistré le: 04 Fév 2007, 18:18

par xadawa » 04 Fév 2007, 18:38

oki merci je vais essayer de mettre ca en C et je te tiens au courant

buzard
Membre Relatif
Messages: 274
Enregistré le: 22 Mai 2006, 14:29

par buzard » 04 Fév 2007, 18:42

j'ai fait un edit, si tu relis ca sera encore mieux

au revoir

xadawa
Messages: 4
Enregistré le: 04 Fév 2007, 18:18

par xadawa » 04 Fév 2007, 18:52

J'ai mis en oeuvre la formule que tu m'a donné, mais cela ne fonctionne pas, j'ai peut etre mal "algorithmé" lol... Si tu pouvais regarder ou si tu avais une formule plus "algorithmique" pour mes fonctions... ca serais sympa... merci d'avance


Point M,OA,OB,temp,AB;
M=Milieu(P1,P2);
OA=CoordVecteur(M,P1);
OB=CoordVecteur(M,P2);
temp=Addition(OA,OB);
temp.x=temp.x/2;
temp.y=temp.y/2;
AB=VecteurOrtho(CoordVecteur(P1,P2));
AB.x=AB.x*sqrt(3)/2;
AB.y=AB.y*sqrt(3)/2;
return Addition(temp,AB);

buzard
Membre Relatif
Messages: 274
Enregistré le: 22 Mai 2006, 14:29

par buzard » 04 Fév 2007, 19:47

c'est faaciiile (lol)


[PHP]
double sin_a = 0.5*sqrt(3.0);
double r_A[3] = {2.0 / 3, 1.0 / 3}; // définition barycentrique de A
double r_B[3] = {1.0 / 3, 2.0 / 3}; // r[0] + r[1] = 1


void VanKoch(
int n, // profondeur de récursion (10 c'est déjà beacoup)
Point P, Point Q, // points de calculs
)
{
Point A, B, C; // points intermédiaire

if (n>0)
{

// A = (1-r_A) P + r_A Q

A.x = r_A[0] * P.x + r_A[1] * Q.x;
A.y = r_A[0] * P.y + r_A[1] * Q.y;

// B = (1-r_B) P + r_B Q

B.x = r_B[0] * P.x + r_B[1] * Q.x;
B.y = r_B[0] * P.y + r_B[1] * Q.y;

// C = U A + V B, U et V sont deux matrices

C.x = 0.5 * (A.x + B.x) + sin_a * (A.y - B.y);
C.y = 0.5 * (A.y + B.y) - sin_a * (A.x - B.x);


// la récursion (assez lourde, mais bon faut bien faire bosser le proc)

VanKoch(n-1, P, A);
VanKoch(n-1, A, C);
VanKoch(n-1, C, B);
VanKoch(n-1, B, Q);

} else {

segment(P, Q); // et oui! sinon on voit rien

}}


void flocon (int n, Point P[3])
{
VanKoch(n, P[0], P[1]);
VanKoch(n, P[1], P[2]);
VanKoch(n, P[0], P[2]);
}[/PHP]


en jouent sur l'ordre d'entrée des points tu obtiens des variations interessantes.

voilà, post quelques images une fois que c'est ok, ça sera sympa.



PS : en C++ tu peut surcharger les operateurs pour alleger l'ecriture

buzard
Membre Relatif
Messages: 274
Enregistré le: 22 Mai 2006, 14:29

par buzard » 05 Fév 2007, 19:50

Eh ho! je veux voir les dessins, c'est pas cool de demandé de l'aide puis au final y'a pas de résultat. allé montre donc ce que tu arrive à faire avec ta suse.

buzard
Membre Relatif
Messages: 274
Enregistré le: 22 Mai 2006, 14:29

par buzard » 05 Fév 2007, 22:20

plus de politesse dans ce monde de brute,

en scilab ca prend 30 lignes pour faire ça :

[CENTER]ImageImage
ImageImage
ImageImage[/CENTER]

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 28 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite