Pour répondre à Doum-Doum.
doum-doum a écrit :Petite question connait on les coordonnées complexes des sommets des secteurs angulaires du triangle ?
Oui, c'est justement parce que le repère est orthonormé qu'il est possible de représenter les positions des sommets du triangle indifféremment par leur coordonnées cartésiennes, coordonnées complexes
a+i.b ou coordonnées polaires (r , w°).
Si le repère n'est pas orthonormé, alors il y aura une transformation à faire entre les coordonnées cartésiennes dans le repère (quelconque) et la valeur complexe du même point.
Comme le repère est orthonormé, l'utilisation des affixes complexes est astucieuse et directe. C'est à dire que le point de coordonnées x=a, y=b aura comme affixe complexe justement a+i.b
Mais chose bien plus importante, c'est que la norme complexe correspond à la distance euclidienne et il existe une relation entre coordonnée, distance et angle lié à l'existence du cercle d'Euler (celui de ma figure).
Ce qui fait que l'on peut utiliser les fonctions ABS et ARG sur les nombres complexes cela correspondra aux distances et aux angles dans le plan euclidien.
babaorhum a écrit :Code : Tout sélectionner
10 INPUT "Point A - Entrer XA,YA :";XA,YA 100 PRINT "**RESULTATS**"
20 INPUT "Point B - Entrer XB,YB :";XB,YB 110 PRINT "LONGUEUR AB :";AB
30 INPUT "Point C - Entrer XC,YC :";XC,YC 120 PRINT "LONGUEUR BC :";BC
40 AB = sqr((XB-XA)^2+(YB-YA)^2) 130 PRINT "LONGUEUR AC :";AC
50 BC = sqr((XC-XB)^2+(YC-YB)^2) 140 PRINT "ANGLE BAC:";AA
60 AC = sqr((XC-XA)^2+(YC-YA)^2) 150 PRINT "ANGLE ABC:";BB
70 cc = ACS((BC^2+AC^2-AB^2)/(2*BC*AC)) 160 PRINT "ANGLE BCA:";CC
80 AA = ACS((AC^2+AB^2-BC^2)/(2*AC*AB)) 160 PRINT "ANGLE BCA:";CC
90 BB = 180-AA-CC 200 END
Bien joué. Pour une première version c'est déjà un bon programme.
Et difficile de beaucoup l'optimiser, surtout pour les BASIC de pockets qui n'ont pas d'appel de sous programme avec passage d'arguments.
bernouilli92 a écrit :Voici ma solution pour hp48sx et suivantes
Elle fonctionne quel que soit le mode angulaire.
Les coordonnées des points sont à entrer sous forme de 3 nombres complexes.
J'ai le même principe.
Mon code nécessite de saisir les coordonnées des trois sommets sous forme complexe.
Il fonctionne aussi quelque soit le mode trigonométrique. Bien évidemment, les résultats sont affichés dans cette unité angulaire.
Pour économiser les pas de programme et ne pas avoir à jongler avec les n ROLL et n ROLLD, j’utilise deux astuces :
- Les trois niveaux de la pile contiennent les affixes complexes des trois sommets,
- La fonction ROT est utilisée entre chaque calcul de distance et d’angle afin d’évaluer les cas correspondant à chacun des sommets: B C A pour calcul en considérant le sommet A, puis C A B et finalement A B C pour le sommet C.
- Mémorise temporairement les résultats dans la mémoire statistique. Un simple Σ+ permet d’y faire entrer le résultat du calcul et un RCL Σ permet de les afficher.
- Normalise le résultat angulaire à l'aide de COS ACOS (plus court et universel contrairement à 360 MOD, 2PI MOD ou autre…)
- Cette normalisation est utile pour éviter d'avoir des angles négatifs ou au-delà de 180°
- Pour chaque sommet, la longueur du coté opposé et l’angle interne sont calculés à l’aide des fonctions complexes ABS et ARG (qui ici donnent directement distance et angle). Pour éviter de calculer deux fois une des différences, l’instruction de conversion P->R est utilisée car, grace à C->R, elle laisse dans la pile successivement ABS et ARG. Ce qui permet en une seule passe d’avoir la longueur(ABS) et une première partie du calcul de l’angle (ARG).
Code : Tout sélectionner
« CLΣ // Efface contenu mémoire Statique ΣDAT
1 3 START
ROT ΣDstAng // Calcule distance et angle pour A,B et C
NEXT
RCLΣ // Affiche les résultats
»
'LATRI' STO
Format des résultats :
[[ a AA ] // longueur de coté opposé et angle au somme A
[ b BB ] // longueur de coté opposé et angle au somme B
[ c CC ]] // longueur de coté opposé et angle au somme C
«
3 PICK OVER - R->P C->R // Calcul distance |b-a| et angle(b-a)°
4 PICK 4 PICK - ARG // Calcul angle (c-a)°
SWAP - COS ACOS // Calcul angle interne au sommet a et normalise
2 ->ARRY Σ+ // mémorise Distance et Angle dans mémoire stat.
»
'ΣDstAng' STO
Pour le triangle suivant,
- crettraingle.png (13.23 Kio) Vu 3064 fois
J’obtiens en mode DEG :
Code : Tout sélectionner
┌───────────────────────┐
│2: │
│1: │
│4 FIX DEGREE_ │
│LATRI: : : : : │
└───────────────────────┘
[ENTER] Choisir le mode trigonométrique.
┌───────────────────────┐
│2: (9.0000,5.0000)│
│1: (5.0000,7.0000)│
│(2,4_ │
│LATRI: : : : : │
└───────────────────────┘
Saisir les coordonnées (x,y) des trois sommets
┌───────────────────────┐
│2: (9.0000,5.0000)│
│1: (5.0000,7.0000)│
│(2,4_ │
│LATRI: : : : : │
└───────────────────────┘
Exécuter LATRI
┌───────────────────────┐
│1: [[ 4.4721 34.6952 ] │
│ [ 4.2426 108.4349 ]│
│ [ 7.0711 36.8699 ]]│
│ΣDAT:LATRI: : : : │
└───────────────────────┘
Lire les résultats
colonne de gauche longueur des cotés
colonne de droite angle (ici en DEGREE)
Evidemment, l'ordre des résultats dans la matrice résultat dépend de l'ordre des coordonnées des sommets initiaux.
A noter que les résultats sont indépendants de la position de l'origine du repère.