Triangles rectangles en 3D

Pour expliquer certains fonctionnements, principes et fondements.
Avatar de l’utilisateur
Anto
Level 10
Level 10
 
Messages: 1916
Localisation: Drôme (26)
Âge: 23 ans

Messagepar Anto » Sam Fév 18, 2023 2:27 pm

Ça vous est déjà arrivé d'avoir besoin de faire un triangle rectangle en 3D, d'avoir bien galéré et d'être arrivé à rien ? Moi oui. :lol:

Les triangles en 2D sont assez simple à trouver quand on a une idée de la forme qu'on veut, en utilisant la plaque Technic avec plein de trous. Ou alors en utilisant la technique de la double diagonale. Mais en 3D c'est plus compliqué étant donné que... c'est en 3D. :dent:


J'ai donc fait un p'tit programme qui fait le boulot à ma place ! Il permet d'étudier toutes les possibilités pour une longueur d'hypoténuse maximale donnée. On peut également choisir un pas entre deux trous successifs (par exemple 1/2 : le programme va étudier toutes les possibilités en se décalant à chaque fois de 1/2 tenon. C'est un décalage qui peut se faire assez simplement selon ce qu'on cherche à faire).

Si on ne trouve pas le triangle parfait pour notre modèle, on peut augmenter l'erreur sur les triangles : il ne seront pas parfaits mais ça peut permettre d'avoir une bonne base pour trouver un triangle (quasiment) parfait à la main. Par exemple, si l'un des côtés devrait faire entre 4 et 5 tenons, peut-être qu'une poutre 4x2 Technic pourrait permettre de s'approcher grandement d'un triangle parfait.


Voilà le programme (fait sous Python) :

Code: Tout sélectionner
# Hypothénuse, côté 1, côté 2, côté 3
T1 = []
T2 = []

Lmax = 20
pas = 1
erreur = 1

for i in range(1, int(Lmax/pas)+1):
    for j in range(1, i):
        for k in range(1, j):
            for l in range(1, k):
                if (i*pas)**2 == (j*pas)**2 + (k*pas)**2 + (l*pas)**2:
                    T1 = T1 + [[i*pas+1, j*pas+1, k*pas+1, l*pas+1]]
                elif abs(i**2 - (j**2 + k**2 + l**2)) <= erreur:
                    T2 = T2 + [[i+1, j+1, k+1, l+1]]

print('Triangles parfaits :\n ', T1)
print('Triangles justes à ', str(erreur), ' près :\n', T2)



En quelques mots :
- Lmax : longueur maximale d'étude
- pas : distance entre deux trous successifs
- erreur : erreur autorisée sur l'égalité de Pythagore (pas sur la longueur d'un côté, donc une erreur de 1 n'est pas forcément grande si on regarde la taille d'un côté qui ne convient pas, en particulier sur les grands triangles)

Les boucles for constituent des triangles ordonnés tels que Hypothénuse > côté 1 > côté 2 > côté 3, puis on vérifie s'ils respectent l'égalité de Pythagore :
hypothénuse² = côté_1² + côté_2² + côté_3² (+ ... + côté_n² si vous arrivez à construire en dimension n :lol:)

Le résultat est la liste des [Hypothénuse, côté 1, côté 2, côté 3], où les côtés sont directement la taille des poutres à utiliser, et pas la distance entre les centres des trous. (Pour un triangle qui possède une poutre 5L, c'est 4 qui est utilisé pour le calcul car les centres des trous sont espacés de 4 tenons)

Et on peut directement avoir des triangles parfaits en 3D :
Image


Voilà ce qu'on obtient pour un pas de 1 et une erreur de 1 :

Triangles parfaits :
[[8, 7, 4, 3], [10, 9, 5, 2], [12, 10, 7, 3], [14, 13, 5, 4], [15, 13, 7, 5], [16, 12, 11, 3], [16, 15, 6, 3], [18, 13, 10, 9], [19, 17, 9, 3], [20, 16, 11, 7], [20, 19, 7, 2]]

Triangles justes à 1 près :
[[6, 5, 4, 2], [7, 6, 4, 2], [8, 6, 5, 4], [9, 7, 6, 3], [11, 8, 7, 5], [11, 9, 7, 2], [11, 10, 5, 3], [12, 9, 8, 4], [12, 10, 6, 5], [12, 11, 5, 3], [13, 11, 7, 4], [14, 10, 9, 6], [14, 11, 9, 3], [14, 13, 6, 2], [15, 11, 10, 5], [15, 12, 8, 6], [15, 13, 8, 3], [15, 14, 6, 2], [16, 13, 9, 5], [16, 13, 10, 2], [17, 12, 11, 7], [17, 13, 9, 8], [17, 15, 7, 6], [18, 13, 12, 6], [18, 16, 8, 5], [18, 16, 9, 2], [18, 17, 6, 4], [19, 13, 11, 10], [19, 16, 9, 7], [19, 18, 6, 4], [20, 14, 13, 8], [20, 15, 11, 9], [20, 16, 12, 5], [20, 17, 10, 6], [20, 17, 11, 3], [20, 18, 9, 4], [21, 15, 14, 7], [21, 17, 10, 9], [21, 17, 13, 2], [21, 20, 7, 3]]

(Les triangles parfaits ne figurent pas dans le liste des triangles justes à x près)


Voilà, j'espère que ça pourra en aider certains ! :)
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 4 invités