Calcul des angles d'un triangle
Bonsoir , j'ai elaboré un programme qui tourne pour calculer les angles aux sommets d'un triangle mais c'etait un peu laborieux
Option Base 1
Sub calcul_angles_triangle()
a = Array(1, 2) '1ier vecteur
b = Array(2, 6) '2 ieme vecteur
c = Array(0, 1) '3 ieme vecteur
Point = Array(a, b, c)
For i = 1 To 3
For j = 1 To 3
If i <> j Then
x = x & " " & i & j
End If
Next
Next
s = Split(x, " ")
For i = 1 To UBound(s)
If i Mod 2 <> 0 Then
w = w & " " & s(i) & s(i + 1)
End If
Next
e = Split(w, " ")
For j = 1 To UBound(e)
ps = (Point(Val(Mid(e(j), 2, 1)))(1) - Point(Val(Mid(e(j), 1, 1)))(1)) * (Point(Val(Mid(e(j), 4, 1)))(1) - Point(Val(Mid(e(j), 3, 1)))(1)) + (Point(Val(Mid(e(j), 2, 1)))(2) - Point(Val(Mid(e(j), 1, 1)))(2)) * (Point(Val(Mid(e(j), 4, 1)))(2) - Point(Val(Mid(e(j), 3, 1)))(2))
norme_vecteur1 = Sqr((Point(Val(Mid(e(j), 2, 1)))(1) - Point(Val(Mid(e(j), 1, 1)))(1)) ^ 2 + (Point(Val(Mid(e(j), 2, 1)))(2) - Point(Val(Mid(e(j), 1, 1)))(2)) ^ 2)
norme_vecteur2 = Sqr((Point(Val(Mid(e(j), 4, 1)))(1) - Point(Val(Mid(e(j), 3, 1)))(1)) ^ 2 + (Point(Val(Mid(e(j), 4, 1)))(2) - Point(Val(Mid(e(j), 3, 1)))(2)) ^ 2)
MsgBox Round((Application.WorksheetFunction.Acos(ps / (norme_vecteur1 * norme_vecteur2))) * 180 / 3.14, 2) 'retourne les angles aux sommets
Next
End Sub
Il marche puisque la somme des angles obtenus fait 180° environ , peut on faire plus court ?...tel quel ca me semble etre mal pensé ou trop lourd ? Merci
Bonjour
Un vieux document, retrouvé dans mes archives...
Si cela t'intéresse...
Bye !
bonjour, quelques suggestions:
1° ajouter
option explicit
en début de module
2° utiliser des noms de variables qui aident à comprendre à quoi sert chaque variable
3° ajouter quelques commentaires. au minimum, expliquer comment tu représentes ton triangle. peut-être aussi, pourquoi pas, expliquer quelle technique mathématique tu utilises pour réaliser ce travail.
ceci me semble plus clair:
Option Explicit
Option Base 0
Sub calcul_angles_triangle()
Dim Point(), s0, s1, S2, ps, norme_vecteur1, norme_vecteur2, angle
Point = Array(Array(1, 2), Array(2, 6), Array(0, 1))
For s0 = 0 To UBound(Point)
s1 = (s0 + 1) Mod 3
S2 = (s1 + 1) Mod 3
ps = (Point(s1)(0) - Point(s0)(0)) _
* (Point(S2)(0) - Point(s0)(0)) _
+ (Point(s1)(1) - Point(s0)(1)) _
* (Point(S2)(1) - Point(s0)(1))
norme_vecteur1 = Sqr((Point(s1)(0) - Point(s0)(0)) ^ 2 + (Point(s1)(1) - Point(s0)(1)) ^ 2)
norme_vecteur2 = Sqr((Point(S2)(0) - Point(s0)(0)) ^ 2 + (Point(S2)(1) - Point(s0)(1)) ^ 2)
angle = Round((Application.WorksheetFunction.Acos(ps / (norme_vecteur1 * norme_vecteur2))) * 180 / WorksheetFunction.Pi(), 2)
MsgBox angle
'Debug.Print angle 'retourne les angles aux sommets
Next
End Sub
Merci gmb et yg_be je vais voir de près vos suggestions, un grand merci