Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#26 07-07-2014 19:16:27

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Re,

Petite précision:

Notez que les triangles du post précédent sont classés par ordre décroissant de leurs aires.

Pour chaque périmètre considéré, un triangle donné présentera en effet une apparence d'autant plus 'étirée' qu'il sera rangé vers la droite.


@+

Hors ligne

#27 07-07-2014 22:18:09

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Mis en couleurs, voilà ce que ça donne:


P = 03: ---- 1,1,1
P = 05: ---- 2,2,1
P = 06: ---- 2,2,2
P = 07: ---- 3,2,2 - 3,3,1
P = 08: ---- 3,3,2
P = 09: ---- 3,3,3 - 4,3,2 - 4,4,1
P = 10: ---- 4,3,3 - 4,4,2
P = 11: ---- 4,4,3 - 5,3,3 - 5,4,2 - 5,5,1
P = 12: ---- 4,4,4 - 5,4,3 - 5,5,2
P = 13: ---- 5,4,4 - 5,5,3 - 6,4,3 - 6,5,2 - 6,6,1
P = 14: ---- 5,5,4 - 6,4,4 - 6,5,3 - 6,6,2
P = 15: ---- 5,5,5 - 6,5,4 - 6,6,3 - 7,4,4 - 7,5,3 - 7,6,2 - 7,7,1
P = 16: ---- 6,5,5 - 6,6,4 - 7,5,4 - 7,6,3 - 7,7,2
P = 17: ---- 6,6,5 - 7,5,5 - 7,6,4 - 7,7,3 - 8,5,4 - 8,6,3 - 8,7,2 - 8,8,1
P = 18: ---- 6,6,6 - 7,6,5 - 7,7,4 - 8,5,5 - 8,6,4 - 8,7,3 - 8,8,2
P = 19: ---- 7,6,6 - 7,7,5 - 8,6,5 - 8,7,4 - 8,8,3 - 9,5,5 - 9,6,4 - 9,7,3 - 9,8,2 - 9,9,1
P = 20: ---- 7,7,6 - 8,6,6 - 8,7,5 - 8,8,4 - 9,6,5 - 9,7,4 - 9,8,3 - 9,9,2
P = 21: ---- 7,7,7 - 8,7,6 - 8,8,5 - 9,6,6 - 9,7,5 - 9,8,4 - 9,9,3 - 10,6,5 - 10,7,4 -10,8,3 - 10,9,2 - 10,10,1
P = 22: ---- 8,7,7 - 8,8,6 - 9,7,6 - 9,8,5 - 9,9,4 - 10,6,6 - 10,7,5 - 10,8,4 - 10,9,3 - 10,10,2
P = 23: ---- 8,8,7 - 9,7,7 - 9,8,6 - 9,9,5 - 10,7,6 - 10,8,5 - 10,9,4 - 10,10,3 - 11,6,6 - 11,7,5 - 11,8,4 - 11,9,3 - 11,10,2 - 11,11,1


etc...


[Corrections faites: pour les périmètres 22, il manquait 8,8,6 et pour les périmètres 19, il manquait 9,8,2  9,7,3  9,6,4 et 9,5,5. Merci totomm! ---- C'était un bug au recopiage, je les avais bien trouvés sur le papier.]


On reconnaîtra les triangles équilatéraux, les triangles isocèles, les triangles dont les dimensions sont des entiers consécutifs ou différent d'un même entier et le fameux triangle égyptien de dimension '3,4,5' le seul qui soit rectangle dans cette liste.


@+

Dernière modification par 0^0 (09-07-2014 09:26:04)

Hors ligne

#28 07-07-2014 22:49:36

totomm
Membre
Inscription : 25-08-2011
Messages : 1 093

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

Cest bien ce qui était attendu comme énumération de TOUS les triangles.
Mais...
On arrive difficilement à ne pas faire d'oubli avec papier crayon et même si on suit un algorithme précis. Exemple :
Pour périmètre 22, manque 8,8,6
Pour périmètre 19, manquent 9,8,2  9,7,3  9,6,4  9,5,5
Voici donc, comme encouragement au futur programmeur, un algorithme (que je crois sans erreur, qui tourne sous Python 3.2)

# Triangles à cotés entiers classés par pérmètres croissants
maxp=24 # Choisir la valeur limite pour le périmètre
for p in range(3,maxp): # p est le périmètre
    for AC in range(1,maxp): # AC sera limité bien avant maxp
        BC=(p-AC)//2 # division euclidienne
        if BC<AC:
            break # AC est trop grand, passer à la valeur suivante de AC
        AB=p-AC-BC
        while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
            if AB>=AC+BC: # le triangle n'existe pas
                break # donc sortie de la boucle while...
            print("périmètre =",p,AC,BC,AB)
            BC-=1 #triangle suivant de même périmètre
            AB+=1
            if BC<AC:
                break
    print()

Note : Je ne serai qu'occasionnellement sur internet pendant un mois et demi, donc à la rentrée fin août.
Bonne continuation.

Hors ligne

#29 07-07-2014 23:52:46

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonsoir,

En effet! J'ai zappé tous ces triangles!!

votre algorithme à l'air de très bien fonctionner! :-)

Je vais essayer de voir comment il s'articule! Merci.


Bonnes vacances!


@+

Hors ligne

#30 09-07-2014 11:37:49

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

@ totomm,

Ci-dessous vous retrouverez les résultats que fournit votre programme.

----> Point faible: s'il fournit tous les triangles possibles, il ne les fournit pas dans le meilleur ordre possible, car en les classant comme je le propose (voir mes suggestions), les triangles apparaissent de cette manière par ordre croissant de leurs aires pour chaque périmètre considéré.

Par conséquent, bien que sujet à l'erreur de celui qui le met en oeuvre comme on a pu le constater, mon algorithme 'manuel' présente au moins un avantage certain: celui de produire les triangles recherchés dans un ordre respectueux également des aires selon les périmètres:


périmètre = 3 -- 1 1 1

périmètre = 5 -- 1 2 2

périmètre = 6 -- 2 2 2

périmètre = 7 -- 1 3 3
périmètre = 7 -- 2 2 3

périmètre = 8 -- 2 3 3

périmètre = 9 -- 1 4 4
périmètre = 9 -- 2 3 4
périmètre = 9 -- 3 3 3

périmètre = 10 -- 2 4 4
périmètre = 10 -- 3 3 4

périmètre = 11 -- 1 5 5
périmètre = 11 -- 2 4 5
périmètre = 11 -- 3 4 4 --- 3 3 5
périmètre = 11 -- 3 3 5 --- 3 4 4

périmètre = 12 -- 2 5 5
périmètre = 12 -- 3 4 5
périmètre = 12 -- 4 4 4

périmètre = 13 -- 1 6 6
périmètre = 13 -- 2 5 6
périmètre = 13 -- 3 5 5 --- 3 4 6
périmètre = 13 -- 3 4 6 --- 3 5 5
périmètre = 13 -- 4 4 5

périmètre = 14 -- 2 6 6
périmètre = 14 -- 3 5 6
périmètre = 14 -- 4 5 5 --- 4 4 6
périmètre = 14 -- 4 4 6 --- 4 5 5

périmètre = 15 -- 1 7 7
périmètre = 15 -- 2 6 7
périmètre = 15 -- 3 6 6 --- 3 5 7
périmètre = 15 -- 3 5 7 --- 4 4 7
périmètre = 15 -- 4 5 6 --- 3 6 6
périmètre = 15 -- 4 4 7 --- 4 5 6
périmètre = 15 -- 5 5 5


      [...]

_________________________________


Ordre d'apparition des triangles en suivant mon algorithme:

P = 03: ---- 1,1,1

P = 05: ---- 2,2,1

P = 06: ---- 2,2,2

P = 07: ---- 3,2,2
P = 07: ---- 3,3,1

P = 08: ---- 3,3,2

P = 09: ---- 3,3,3
P = 09: ---- 4,3,2
P = 09: ---- 4,4,1

P = 10: ---- 4,3,3
P = 10: ---- 4,4,2

P = 11: ---- 4,4,3
P = 11: ---- 5,3,3
P = 11: ---- 5,4,2
P = 11: ---- 5,5,1

P = 12: ---- 4,4,4
P = 12: ---- 5,4,3
P = 12: ---- 5,5,2

P = 13: ---- 5,4,4
P = 13: ---- 5,5,3
P = 13: ---- 6,4,3
P = 13: ---- 6,5,2
P = 13: ---- 6,6,1

P = 14: ---- 5,5,4
P = 14: ---- 6,4,4
P = 14: ---- 6,5,3
P = 14: ---- 6,6,2

P = 15: ---- 5,5,5
P = 15: ---- 6,5,4
P = 15: ---- 6,6,3
P = 15: ---- 7,4,4
P = 15: ---- 7,5,3
P = 15: ---- 7,6,2
P = 15: ---- 7,7,1

P = 16: ---- 6,5,5
P = 16: ---- 6,6,4
P = 16: ---- 7,5,4
P = 16: ---- 7,6,3
P = 16: ---- 7,7,2

P = 17: ---- 6,6,5
P = 17: ---- 7,5,5
P = 17: ---- 7,6,4
P = 17: ---- 7,7,3
P = 17: ---- 8,5,4
P = 17: ---- 8,6,3
P = 17: ---- 8,7,2
P = 17: ---- 8,8,1


      [...]


<<<< Observez qu'ici, les triangles apparaissent par ordre décroissant de leurs aires pour chaque périmètre considérés. Ce classement permet donc pour chaque périmètre, de démarrer le listing par le triangle dont les cotés sont les moins inégaux possibles (c'est un triangle équilatéral 1 fois sur 3), pour finir par le plus 'étiré' (ce sera dans tout les cas le triangle isocèle le plus allongé possible, excepté pour le triangle de périmètre 3, le seul possible.. qui est équilatéral...) >>>>

_________________________________


Pour rentrer un peu plus dans les détails:



Pour chaque périmètre:


1. Les premiers triangles sont faciles à déterminer:

1,1,1 - [2,1,1] - 2,2,1 - 2,2,2 - 3,2,2 - 3,3,2 - 3,3,3 - 4,3,3 - 4,4,3 - 4,4,4 - 5,4,4 - 5,5,4 - 5,5,5 - 6,5,5 - 6,6,5 - 6,6,6 - 7,6,6 - 7,7,6 - 7,7,7 - 8,7,7 - 8,8,7 - 8,8,8 - 9,8,8 - 9,9,8 - 9,9,9 -10,9,9 -10,10,9 - 10,10,10 - 11,10,10 -11,11,10 -11,11,11 -12,11,11 - ...

-----> Pour un périmètre P, trois cas se présentent:

1) Si P%3 = 0: le premier triangle sera: P/3, P/3, P/3
2) Si P%3 = 1: le premier triangle sera: P//3+1, P//3, P//3
3) Si P%3 = 2: le premier triangle sera: P//3+1, P//3+1, P//3


2. De même pour ce qui est des derniers triangles:

1,1,1 - [1,1,2] - 2,2,1 - 2,2,2 - 3,3,1 - 3,3,2 - 4,4,1 - 4,4,2 - 5,5,1 -5,5,2 - 6,6,1 - 6,6,2 - 7,7,1 - 7,7,2 - 8,8,1 - 8,8,2 - 9,9,1 - 9,9,2 - 10,10,1 -10,10,2 - 11,11,1 - 11,11,2 - 12,12,1 - 12,12,2 - 13,13,1 -13,13,2 - 14,14,1 - 14,14,2 - 15,15,1 - 15,15,2 - ...

-----> Pour un périmètre P, deux cas se présentent:

1) Si P%2 = 0: le dernier triangle sera: P/2-1, P/2-1, 2
2) Si P%2 = 1: le dernier triangle sera: P//2, P//2, 1


3. La progression des triangles suivants obéit toujours aux mêmes règles, et cela jusqu'au dernier triangle tel que défini plus haut, pour éviter le cas du triangle plat:

Règle 0: on part du premier triangle.. ou du triangle obtenu..

Règle 1: on respectera: nombre_1 >= nombre_2 >= nombre 3

Règle 2: on appliquera autant que possible la formule:

         nombre_2 du triangle suivant = nombre_2 triangle considéré + 1,

              et

         nombre_3 du triangle suivant = nombre_3 triangle considéré - 1,

   (Ce qui laisse le nombre_1 inchangé)

Règle 3: s'il n'est pas ou plus possible d'appliquer la règle 2, on passe à la ligne suivante et on applique la formule:
               
         nombre_1 du triangle suivant = nombre_1 du triangle considéré + 1,

         nombre2 = (P - nombre_1 obtenu)//2 + reste*,                             *note: le reste soit: P%2

              et

         nombre_3 =  (P - nombre_1 obtenu)//2

   On fait cela jusqu'à obtenir le dernier triangle tel que défini en '2.' pour ce périmètre


Exemple:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Premier triangle pour P = 23:

         (P = 23, P//3 = 7, P%23 = 2)
----> P = 23: ----  8, 8, 7 --- On part de ce triangle (Règle 0) pour déterminer ensuite les triangles suivants possibles pour ce périmètre en respectant les règles énoncées.
     ---- Ici on ne peut peut aller au-delà de 8 pour le nombre_2,
            ---- On applique donc la Règle 2: on passe à la ligne suivante en appliquant la formule:
               
                            nombre_1 du triangle suivant = nombre_1 du triangle précédant + 1

                               etc...


P = 23: ----  8, 8, 7 --- le premier triangle --- (soit celui duquel l'on part)

P = 23: ----  9, 7, 7 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ----  9, 8, 6     --- on détermine les triangle possibles suivants en respectant les règles énoncées.
P = 23: ----  9, 9, 5

P = 23: ---- 10, 7, 6 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ---- 10, 8, 5     ---
P = 23: ---- 10, 9, 4
P = 23: ---- 10,10,3

P = 23: ---- 11, 6, 6 --- nombre1, (P - nombre_1)//2 + reste, (P - nombre_1)//2
P = 23: ---- 11, 7, 5     ---
P = 23: ---- 11, 8, 4
P = 23: ---- 11, 9, 3
P = 23: ---- 11,10,2
P = 23: ---- 11,11,1 --- soit le dernier triangle tel que défini en '2.' --- (Celui auquel l'on s'arrête)


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



@ +

Dernière modification par 0^0 (09-07-2014 14:04:03)

Hors ligne

#31 09-07-2014 13:32:46

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

En somme tu as un problème de tri...
J'ai ajouté diverses bricoles au prog de rotomm, pour que :
- l'affichage des périmètres reste par ordre croissant
- que pour un même périmètre, les triangles soient rangées par ordre d'aire croissante.
ne va donc pas te convenir
(5, 1, 2, 2)

(6, 2, 2, 2)

(7, 1, 3, 3)
(7, 2, 2, 3)

(8, 2, 3, 3)

(9, 1, 4, 4)
(9, 2, 3, 4)
(9, 3, 3, 3)

(10, 2, 4, 4)
(10, 3, 3, 4)

(11, 1, 5, 5)
(11, 2, 4, 5)
(11, 3, 3, 5)
(11, 3, 4, 4)

(12, 2, 5, 5)
(12, 3, 4, 5)
(12, 4, 4, 4)

(13, 1, 6, 6)
(13, 2, 5, 6)
(13, 3, 4, 6)
(13, 3, 5, 5)
(13, 4, 4, 5)
(14, 2, 6, 6)
(14, 3, 5, 6)
(14, 4, 4, 6)
(14, 4, 5, 5)

(15, 1, 7, 7)
(15, 2, 6, 7)
(15, 3, 5, 7)
(15, 4, 4, 7)
(15, 3, 6, 6)
(15, 4, 5, 6)
(15, 5, 5, 5)

(16, 2, 7, 7)
(16, 3, 6, 7)
(16, 4, 5, 7)
(16, 4, 6, 6)
(16, 5, 5, 6)

(17, 1, 8, 8)
(17, 2, 7, 8)
(17, 3, 6, 8)
(17, 4, 5, 8)
(17, 3, 7, 7)
(17, 4, 6, 7)
(17, 5, 5, 7)
(17, 5, 6, 6)

(18, 2, 8, 8)
(18, 3, 7, 8)
(18, 4, 6, 8)
(18, 5, 5, 8)
(18, 4, 7, 7)
(18, 5, 6, 7)
(18, 6, 6, 6)

(19, 1, 9, 9)
(19, 2, 8, 9)
(19, 3, 7, 9)
(19, 4, 6, 9)
(19, 5, 5, 9)
(19, 3, 8, 8)
(19, 4, 7, 8)
(19, 5, 6, 8)
(19, 5, 7, 7)
(19, 6, 6, 7)

(20, 2, 9, 9)
(20, 3, 8, 9)
(20, 4, 7, 9)
(20, 5, 6, 9)
(20, 4, 8, 8)
(20, 5, 7, 8)
(20, 6, 6, 8)
(20, 6, 7, 7)

(21, 1, 10, 10)
(21, 2, 9, 10)
(21, 3, 8, 10)
(21, 4, 7, 10)
(21, 5, 6, 10)
(21, 3, 9, 9)
(21, 4, 8, 9)
(21, 5, 7, 9)
(21, 6, 6, 9)
(21, 5, 8, 8)
(21, 6, 7, 8)
(21, 7, 7, 7)

(22, 2, 10, 10)
(22, 3, 9, 10)
(22, 4, 8, 10)
(22, 5, 7, 10)
(22, 6, 6, 10)
(22, 4, 9, 9)
(22, 5, 8, 9)
(22, 6, 7, 9)
(22, 6, 8, 8)
(22, 7, 7, 8)

(23, 1, 11, 11)
(23, 2, 10, 11)
(23, 3, 9, 11)
(23, 4, 8, 11)
(23, 5, 7, 11)
(23, 6, 6, 11)
(23, 3, 10, 10)
(23, 4, 9, 10)
(23, 5, 8, 10)
(23, 6, 7, 10)
(23, 5, 9, 9)
(23, 6, 8, 9)
(23, 7, 7, 9)
(23, 7, 8, 8)

(24, 2, 11, 11)
(24, 3, 10, 11)
(24, 4, 9, 11)
(24, 5, 8, 11)
(24, 6, 7, 11)
(24, 4, 10, 10)
(24, 5, 9, 10)
(24, 6, 8, 10)
(24, 7, 7, 10)
(24, 6, 9, 9)
(24, 7, 8, 9)
(24, 8, 8, 8)

puisque, pour p=23, tu veux terminer par 11,11,1 et que j'ai travaillé sur la base du programme de totomm alors que toi, tu sembles vouloir autre chose...

J'ai vérifié, toujours sur la base du programme de totomm, le classement à périmètre égal par ordre d'aires décroissantes et je n'ai pas le même classement que toi :
(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)

Mais c'est juste une histoire d'ordre des côtés sur une ligne précise :
(5, 1, 2, 2)

(6, 2, 2, 2)

(7, 2, 2, 3)
(7, 1, 3, 3)

(8, 2, 3, 3)

(9, 3, 3, 3)
(9, 2, 3, 4)
(9, 1, 4, 4)

(10, 3, 3, 4)
(10, 2, 4, 4)

(11, 3, 4, 4)
(11, 3, 3, 5)
(11, 2, 4, 5)
(11, 1, 5, 5)

(12, 4, 4, 4)
(12, 3, 4, 5)
(12, 2, 5, 5)

(13, 4, 4, 5)
(13, 3, 5, 5)
(13, 3, 4, 6)
(13, 2, 5, 6)
(13, 1, 6, 6)

(14, 4, 5, 5)
(14, 4, 4, 6)
(14, 3, 5, 6)
(14, 2, 6, 6)

(15, 5, 5, 5)
(15, 4, 5, 6)
(15, 3, 6, 6)
(15, 4, 4, 7)
(15, 3, 5, 7)
(15, 2, 6, 7)
(15, 1, 7, 7)

(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)

(17, 5, 6, 6)
(17, 5, 5, 7)
(17, 4, 6, 7)
(17, 3, 7, 7)
(17, 4, 5, 8)
(17, 3, 6, 8)
(17, 2, 7, 8)
(17, 1, 8, 8)

(18, 6, 6, 6)
(18, 5, 6, 7)
(18, 4, 7, 7)
(18, 5, 5, 8)
(18, 4, 6, 8)
(18, 3, 7, 8)
(18, 2, 8, 8)

(19, 6, 6, 7)
(19, 5, 7, 7)
(19, 5, 6, 8)
(19, 4, 7, 8)
(19, 3, 8, 8)
(19, 5, 5, 9)
(19, 4, 6, 9)
(19, 3, 7, 9)
(19, 2, 8, 9)
(19, 1, 9, 9)

(20, 6, 7, 7)
(20, 6, 6, 8)
(20, 5, 7, 8)
(20, 4, 8, 8)
(20, 5, 6, 9)
(20, 4, 7, 9)
(20, 3, 8, 9)
(20, 2, 9, 9)

(21, 7, 7, 7)
(21, 6, 7, 8)
(21, 5, 8, 8)
(21, 6, 6, 9)
(21, 5, 7, 9)
(21, 4, 8, 9)
(21, 3, 9, 9)
(21, 5, 6, 10)
(21, 4, 7, 10)
(21, 3, 8, 10)
(21, 2, 9, 10)
(21, 1, 10, 10)

(22, 7, 7, 8)
(22, 6, 8, 8)
(22, 6, 7, 9)
(22, 5, 8, 9)
(22, 4, 9, 9)
(22, 6, 6, 10)
(22, 5, 7, 10)
(22, 4, 8, 10)
(22, 3, 9, 10)
(22, 2, 10, 10)

(23, 7, 8, 8)
(23, 7, 7, 9)
(23, 6, 8, 9)
(23, 5, 9, 9)
(23, 6, 7, 10)
(23, 5, 8, 10)
(23, 4, 9, 10)
(23, 3, 10, 10)
(23, 6, 6, 11)
(23, 5, 7, 11)
(23, 4, 8, 11)
(23, 3, 9, 11)
(23, 2, 10, 11)
(23, 1, 11, 11)

(24, 8, 8, 8)
(24, 7, 8, 9)
(24, 6, 9, 9)
(24, 7, 7, 10)
(24, 6, 8, 10)
(24, 5, 9, 10)
(24, 4, 10, 10)
(24, 6, 7, 11)
(24, 5, 8, 11)
(24, 4, 9, 11)
(24, 3, 10, 11)
(24, 2, 11, 11)

Le triangle équilatéral 1,1,1 n'apparaît pas : c'est normal, j'ai commencé avec p=5...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#32 09-07-2014 17:32:04

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

yoshi a écrit :

En somme tu as un problème de tri...

En effet lol.

yoshi a écrit :

J'ai ajouté diverses bricoles au prog de rotomm, pour que :
- l'affichage des périmètres reste par ordre croissant
- que pour un même périmètre, les triangles soient rangées par ordre d'aire croissante.
ne va donc pas te convenir

Non, cela ne me gêne pas... Du moment que pour un périmètre considéré les triangles apparaissent dans un ordre qui se justifie, cela me va parfaitement.

À cette fin, considérer les aires de chaque triangle me semble être un bon choix à ce niveau. Qu'on les range par ordre croissant ou décroissant importe peu...
- J'ai choisi de les faire apparaître par ordre décroissant de leurs aires, car de cette manière le triangle dont les cotés sont les moins inégaux occupe la première place. C'est un choix personnel de nature esthétique, mais pas seulement... Je m'explique: l'on peut très bien aussi présenter ce triangle comme étant en réalité celui qui est le moins 'étiré'.

J'en profite ici pour mieux définir cette notion:

[tex]E_{a,b,c}[/tex] est l' 'étirement' d'un triangle a,b,c tel que:  [tex]E_{a,b,c} = \frac{(Périmètre_{a,b,c})^2}{Aire_{a,b,c}}.\frac{\sqrt{3}}{6^2}[/tex]

yoshi a écrit :

puisque, pour p=23, tu veux terminer par 11,11,1 et que j'ai travaillé sur la base du programme de totomm alors que toi, tu sembles vouloir autre chose...
J'ai vérifié, toujours sur la base du programme de totomm, le classement à périmètre égal par ordre d'aires décroissantes et je n'ai pas le même classement que toi :
(16, 5, 5, 6)
(16, 4, 6, 6)
(16, 4, 5, 7)
(16, 3, 6, 7)
(16, 2, 7, 7)
Mais c'est juste une histoire d'ordre des côtés sur une ligne précise :

Oui, mais ceci non plus n'est pas bien grave...

;)


Pourrais-je voir le programme tel que modifié par tes soins?



Voici les ordres d'apparition des triangles en suivant mon algorithme (1° colonne) --- en inversant l'ordre d'énumération des triangles qu'il donne par périmètre considéré (2° colonne) --- (et en 3° colonne: les résultats du programme de totomm que tu as modifié):

P = 03: ---- 1,1,1 ---- 1,1,1 ---- (1,1,1)

P = 05: ---- 2,2,1 ---- 2,2,1 ---- (1,2,2)

P = 06: ---- 2,2,2 ---- 2,2,2 ---- (2,2,2)

P = 07: ---- 3,2,2 ---- 3,3,1 ---- (1,3,3)
P = 07: ---- 3,3,1 ---- 3,2,2 ---- (2,2,3)

P = 08: ---- 3,3,2 ---- 3,3,2 ---- (2,3,3)

P = 09: ---- 3,3,3 ---- 4,4,1 ---- (1,4,4)
P = 09: ---- 4,3,2 ---- 4,3,2 ---- (2,3,4)
P = 09: ---- 4,4,1 ---- 3,3,3 ---- (3,3,3)

P = 10: ---- 4,3,3 ---- 4,4,2 ---- (2,4,4)
P = 10: ---- 4,4,2 ---- 4,3,3 ---- (3,3,4)

P = 11: ---- 4,4,3 ---- 5,5,1 ---- (1,5,5)
P = 11: ---- 5,3,3 ---- 5,4,2 ---- (2,4,5)
P = 11: ---- 5,4,2 ---- 5,3,3 ---- (3,3,5)
P = 11: ---- 5,5,1 ---- 4,4,3 ---- (3,4,4)

P = 12: ---- 4,4,4 ---- 5,5,2 ---- (2,5,5)
P = 12: ---- 5,4,3 ---- 5,4,3 ---- (2,4,5)
P = 12: ---- 5,5,2 ---- 5,5,2 ---- (2,5,5)

P = 13: ---- 5,4,4 ---- 6,6,1 ---- (1,6,6)
P = 13: ---- 5,5,3 ---- 6,5,2 ---- (2,5,6)
P = 13: ---- 6,4,3 ---- 6,4,3 ---- (3,4,6)
P = 13: ---- 6,5,2 ---- 5,5,3 ---- (3,5,5)
P = 13: ---- 6,6,1 ---- 5,4,4 ---- (4,4,5)

P = 14: ---- 5,5,4 ---- 6,6,2 ---- (2,6,6)
P = 14: ---- 6,4,4 ---- 6,5,3 ---- (3,5,6)
P = 14: ---- 6,5,3 ---- 6,4,4 ---- (4,4,6)
P = 14: ---- 6,6,2 ---- 5,5,4 ---- (4,5,5)

P = 15: ---- 5,5,5 ---- 7,7,7 ---- (7,7,7)
P = 15: ---- 6,5,4 ---- 7,6,2 ---- (2,6,7)
P = 15: ---- 6,6,3 ---- 7,5,3 ---- (3,5,7)
P = 15: ---- 7,4,4 ---- 7,4,4 ---- (4,4,7)
P = 15: ---- 7,5,3 ---- 6,6,3 ---- (3,6,6)
P = 15: ---- 7,6,2 ---- 6,5,4 ---- (4,5,6)
P = 15: ---- 7,7,1 ---- 5,5,5 ---- (5,5,5)

P = 16: ---- 6,5,5 ---- 7,7,2 ---- (2,7,7)
P = 16: ---- 6,6,4 ---- 7,6,3 ---- (3,6,7)
P = 16: ---- 7,5,4 ---- 7,5,4 ---- (4,5,7)
P = 16: ---- 7,6,3 ---- 6,6,4 ---- (4,6,6)
P = 16: ---- 7,7,2 ---- 6,5,5 ---- (5,5,6)

P = 17: ---- 6,6,5 ---- 8,8,1 ---- (1,8,8)
P = 17: ---- 7,5,5 ---- 8,7,2 ---- (2,7,8)
P = 17: ---- 7,6,4 ---- 8,6,3 ---- (3,6,8)
P = 17: ---- 7,7,3 ---- 8,5,4 ---- (4,5,8)
P = 17: ---- 8,5,4 ---- 7,7,3 ---- (3,7,7)
P = 17: ---- 8,6,3 ---- 7,6,4 ---- (4,6,7)
P = 17: ---- 8,7,2 ---- 7,5,5 ---- (5,5,7)
P = 17: ---- 8,8,1 ---- 6,6,5 ---- (5,6,6)

P = 18: ---- 6,6,6 ---- 8,8,2 ---- (2,8,8)
P = 18: ---- 7,6,5 ---- 8,7,3 ---- (3,7,8)
P = 18: ---- 7,7,4 ---- 8,6,4 ---- (4,6,8)
P = 18: ---- 8,5,5 ---- 8,5,5 ---- (5,5,8)
P = 18: ---- 8,6,4 ---- 7,7,4 ---- (4,7,7)
P = 18: ---- 8,7,3 ---- 7,6,5 ---- (5,6,7)
P = 18: ---- 8,8,2 ---- 6,6,6 ---- (6,6,6)

P = 19: ---- 7,6,6 ---- 9,9,1 ---- (1,9,9)
P = 19: ---- 7,7,5 ---- 9,8,2 ---- (2,8,9)
P = 19: ---- 8,6,5 ---- 9,7,3 ---- (3,7,9)
P = 19: ---- 8,7,4 ---- 9,6,4 ---- (4,6,9)
P = 19: ---- 8,8,3 ---- 9,5,5 ---- (5,5,9)
P = 19: ---- 9,5,5 ---- 8,8,3 ---- (3,8,8)
P = 19: ---- 9,6,4 ---- 8,7,4 ---- (4,7,8)
P = 19: ---- 9,7,3 ---- 8,6,5 ---- (5,6,8)
P = 19: ---- 9,8,2 ---- 7,7,5 ---- (5,7,7)
P = 19: ---- 9,9,1 ---- 7,6,6 ---- (6,6,7)

P = 20: ---- 7,7,6 ---- 9,9,2 ---- (2,9,9)
P = 20: ---- 8,6,6 ---- 9,8,3 ---- (3,8,9)
P = 20: ---- 8,7,5 ---- 9,7,4 ---- (4,7,9)
P = 20: ---- 8,8,4 ---- 9,6,5 ---- (5,6,9)
P = 20: ---- 9,6,5 ---- 8,8,4 ---- (4,8,8)
P = 20: ---- 9,7,4 ---- 8,7,5 ---- (5,7,8)
P = 20: ---- 9,8,3 ---- 8,6,6 ---- (6,6,8)
P = 20: ---- 9,9,2 ---- 7,7,6 ---- (6,7,7)


  [...]



@+

Hors ligne

#33 09-07-2014 19:03:16

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,


C'est toujours difficile de s'introduire dans le prog de quelqu'un.
totomm aurait certainement procédé autrement : s'il n'avait pas annoncé n'être présent que très ponctuellement pendant un bout de temps, je ne serais pas intervenu...
Pour utiliser un prog Python entre les balises code et /code !
- le sélectionner
- le copier
- lancer Python via son interface standard "IDLE (Python Gui)"
- Cliquer File --> New File
- dans la page vide, faire : coller.
- Si l'indentation n'est pas bonne 'décalage à droite de plusieurs espaces tout le prog dès la première ligne : si elle est bien "collée" à gauche, on saute directement au dernier point,
- Tout sélectionner
- Menu Format --> Dedent Region
- Sauvegarder le prog en n'omettant pas l'extension .py

Je n'ai que très peu modifié le corps de prog de totomm : ma production personnelle vient surtout après...
Les 2 premières lignes doivent figurer dans tout prog Python. Si je ne me trompe pas :
- La première permet d'utiliser le prog tel quel avec Python sous Linux
- La deuxième définit l'encodage des caractères spéciaux...
Absentes, le prog fonctionne quand même sous Windows ; s'il y a des caractères accentués, par contre, ils risquent d'avoir un aspect bizarre...

On doit pouvoir faire "plus propre" que ce code (c'est ce que j'ai trouvé de plus "simple" et plus pratique - pour moi - pour l'instant) :


#!/usr/bin/python
# -*- coding: UTF-8 -*-

from math import sqrt
from operator import itemgetter

# Triangles à cotés entiers classés par pérmètres croissants
maxp=25 # Choisir la valeur limite pour le périmètre
Trg,Peri,nb=[(0,0,0,0),(1,0,0,0),(2,0,0,0),(3,1,1,1),(4,0,0,0)],[],5
Dico={0:[0,1],1:[0,1],2:[0,1],3:[1,2],4:[0,1]}

for p in range(5,maxp): # p est le périmètre
    nb1=nb
    for AC in range(1,maxp): # AC sera limité bien avant maxp
        BC=(p-AC)//2 # division euclidienne
        if BC<AC:
            break # AC est trop grand, passer à la valeur suivante de AC
        AB=p-AC-BC
        while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
            if AB>=AC+BC: # le triangle n'existe pas
                break # donc sortie de la boucle while...
            #print("périmètre =",p,AC,BC,AB)
            nb+=1
            Trg.append((p,AC,BC,AB))
            BC-=1 #triangle suivant de même périmètre
            AB+=1
            if BC<AC:
                break
    Dico.update({p:[nb1,nb]})    # je stocke dans un dictionnaire, clé p, indice début, indice fin dans liste Trg

# Recherche des triangles de même périmètre, stockage, tri et remplacement
for p in range(5,maxp):
    dp=p/2
    a,b=Dico[p]
    i=0
    Ordre=[]
    if b-a>1:                        # S'il y a plus d'1 triangle de même périmètre... (1)
        Peri=Trg[a:b]
        for (x,y,z,t) in Peri:
            s=dp*sqrt(dp*(dp-y)*(dp-z)*(dp-t)) # Formule de Heron
            Ordre.append((i,s))                # stockage n° d'ordre du triangle dans Peri et son aire
            i+=1                               # incrémente nb de tr.
        Ordre=sorted(Ordre,key=itemgetter(1))  # je trie sur le 2e élément
        for i,(x,s) in enumerate(Ordre):       # extrait n° du tr et couple (indice,aire)
            Trg[a+i]=Peri[x]                   # Je remplace dans la liste globale les triangles triés

# Affichage de la liste triée
x1=5
for i,(x,y,z,t)in enumerate(Trg):
    if i>4:
        if x!=x1 and x1>4 and x>4:
            x1=x
            print()
        print (Trg[i])

Explication de texte.
En Python, il y a des listes :
* Trg --> liste globale des triangles, stockés sous forme de quadruplets (p,AB,AC,BC), liste initialisée avec les triangles de p =0 à 4.
   Certains n'existent pas, d'accord, mais ils sont là pour me faciliter l'écriture et la gestion ultérieure...
* Peri : liste des triangles de même périmètre
* Ordre : qui contiendra les couples (indice du triangle dans Peri, son aire)

Mais aussi des dictionnaires :
Dico en est un.
L'avantage par rapport à une liste : il n'a pas besoin d'être trié.
Si j'appelle Dico[23], peu importe où cela est rangé, Python cherche la clé périmètre 23 et me renvoie [98,112].
Si maintenant je demande Trg[98:112], Python renvoie :
[(23, 1, 11, 11), (23, 2, 10, 11), (23, 3, 9, 11), (23, 4, 8, 11), (23, 5, 7, 11), (23, 6, 6, 11), (23, 3, 10, 10), (23, 4, 9, 10), (23, 5, 8, 10), (23, 6, 7, 10), (23, 5, 9, 9), (23, 6, 8, 9), (23, 7, 7, 9), (23, 7, 8, 8)]
(Avec les aires croissantes)

Pour passer des aires croissantes à des aires décroissantes, il me suffit de substituer :
Ordre=sorted(Ordre,key=itemgetter(1), reverse=True)
à la ligne :
Ordre=sorted(Ordre,key=itemgetter(1))

Je ne crois pas avoir oublié d'explications vitales, au cas où, tu le dis !
Attention, dans une liste, le 1er enregistrement a pour indice 0...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#34 09-07-2014 22:19:21

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Re,

Merci yoshi pour ta version de ce programme et toutes les explications qui vont avec! :)


Il tourne très bien et m'a permis de constater une chose fort intéressante que je n'avais pas prévue:

Mon algorithme 'manuel' ne répond parfaitement à mes attentes que jusqu'à un périmètre maximal égal à 26. Au delà rien ne va plus!!

En effet:

1) Pour un périmètre égal à 26 j'avais déjà noté que les triangles 7,12,12 et 4,11,11 ont la même aire. - (Il a-t-il d'autres cas semblables apparaissant plus tôt?) - L'ordre reste donc correct.

2)  C'est à partir d'un périmètre égal à 27 que l'ordre des triangles que donne mon algorithme ne correspond plus à celui des aires classées par ordre de grandeur.


Conclusion: Le programme de totomm ainsi amélioré par tes soins est donc le meilleur jusqu'à présent et répond parfaitement à mes attentes.


Encore merci pour vos apports!!


@+

Hors ligne

#35 10-07-2014 05:34:48

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,


Classement des triangles donné par le programme de totomm modifié par yoshi:


(26, 2, 12, 12)
(26, 3, 11, 12)
(26, 4, 10, 12)
(26, 5, 9, 12)
(26, 6, 8, 12)
(26, 4, 11, 11) ----- [tex]Aire_{(4,11,11)} = 6\sqrt13[/tex]          4,11,11   et   7,7,12    sont    interchangeables
(26, 7, 7, 12)   ----- [tex]Aire_{(7,7,12)} = 6\sqrt13[/tex]               
(26, 5, 10, 11)
(26, 6, 9, 11)
(26, 7, 8, 11)
(26, 6, 10, 10)
(26, 7, 9, 10)
(26, 8, 8, 10)
(26, 8, 9, 9)

27, 1, 13, 13)
(27, 2, 12, 13)
(27, 3, 11, 13)
(27, 4, 10, 13)
(27, 5, 9, 13)
(27, 6, 8, 13)
(27, 7, 7, 13)
(27, 3, 12, 12)
(27, 4, 11, 12)
(27, 5, 10, 12)
(27, 6, 9, 12)
(27, 5, 11, 11) ----- interpénétration des triangles de plus long coté = 11 dans les triangles de plus long coté = 12
(27, 7, 8, 12)   ----- interpénétration des triangles de plus long coté = 12 dans les triangles de plus long coté = 11
(27, 6, 10, 11)
(27, 7, 9, 11)
(27, 8, 8, 11)
(27, 7, 10, 10)
(27, 8, 9, 10)
(27, 9, 9, 9)


@+

Hors ligne

#36 10-07-2014 09:38:12

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,

Content que tu sois content...
Autre chose ?

Il ne reste plus qu'à adapter le programme de recherche  écrit par totomm pour les points intérieurs à distances entières des sommets à ces résultats.
Générer tous les triangles de p < 120 est très rapide....
On peut éliminer (1,1,1), (1,2,2), (2,2,2) sachant que ces distances dans ce cas sont au minimum égales à 1 au maximum égales à 2...
Et sûrement quelques-unes, mais c'est anecdotique...

Je vois ça comme ça :
1. A partir de ce programme, enregistrer les quadruplets pour p < 121, il y en a 12600...
2. Dans l'autre programme commencer, par les recharger.
3. Supprimer les 3 premières boucles :
    for AB
          for AC
               for BC
4. Les rempla
Dans l'autre programme, commencer par recharger ces 12600 quadruplets et les stocker dans une liste


Arx Tarpeia Capitoli proxima...

Hors ligne

#37 10-07-2014 11:01:31

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

Oui je vais méditer tout ça...

Et je suis à mon tour content que tu sois en sois content...

Autre chose? Euh... Oui! Je suis en train d'essayer de concocter un programme permettant de trouver dans l'ordre, cette fois c'est plus facile, tous les triangles qui pour un même périmètre (jusqu'à P_max_donné) ont également une même aire.

Bon, je ne suis encore pas très doué pour le moment, alors je ne sais pas ce que ça va donner...


@+

Hors ligne

#38 10-07-2014 11:08:58

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,

Bonne chance !
Tiens un résultat pour toi :

N° 1  :  8 19 22  ---  6 17 4
N° 2  :  16 17 17  ---  10 9 10
N° 3  :  15 15 24  ---  13 13 4
N° 4  :  18 20 26  ---  15 13 9
N° 5  :  20 20 24  ---  13 13 11
N° 6  :  20 20 24  ---  15 15 7
N° 7  :  20 21 23  ---  14 13 10
N° 8  :  13 30 32  ---  6 28 8
N° 9  :  23 27 28  ---  18 20 8
N° 10  :  24 26 28  ---  17 21 8
N° 11  :  25 25 30  ---  17 17 12
N° 12  :  26 30 32  ---  19 15 18
N° 13  :  20 31 39  ---  19 22 11
N° 14  :  24 27 39  ---  15 26 11
N° 15  :  24 31 35  ---  19 26 7
N° 16  :  13 39 39  ---  8 33 9
N° 17  :  13 39 39  ---  9 33 8
N° 18  :  14 38 39  ---  8 34 8
N° 19  :  16 38 44  ---  12 34 8
N° 20  :  16 39 43  ---  13 34 7
N° 21  :  17 38 43  ---  12 35 7
N° 22  :  25 29 44  ---  25 21 10
N° 23  :  22 37 39  ---  13 28 15
N° 24  :  24 37 37  ---  13 30 13
N° 25  :  24 37 37  ---  15 26 15
N° 26  :  24 37 37  ---  20 19 20
N° 27  :  29 29 40  ---  25 25 6
N° 28  :  25 36 37  ---  14 27 15
N° 29  :  30 31 37  ---  26 13 20
N° 30  :  26 26 48  ---  25 25 3
N° 31  :  18 41 41  ---  15 28 15
N° 32  :  23 36 41  ---  10 33 15
N° 33  :  28 32 40  ---  28 13 21
N° 34  :  30 32 38  ---  28 11 23
N° 35  :  32 34 34  ---  20 18 20
N° 36  :  32 32 40  ---  8 33 25
N° 37  :  32 32 40  ---  33 8 25
N° 38  :  31 36 37  ---  20 18 24
N° 39  :  30 30 48  ---  25 25 11
N° 40  :  30 30 48  ---  26 26 8
N° 41  :  30 32 46  ---  27 25 9
N° 42  :  29 39 40  ---  17 27 18
N° 43  :  30 39 39  ---  17 28 17
N° 44  :  30 39 39  ---  25 16 25
N° 45  :  28 35 49  ---  29 22 15
N° 46  :  35 35 42  ---  29 29 8
N° 47  :  18 48 51  ---  17 36 14
N° 48  :  32 38 50  ---  25 30 13
N° 49  :  32 39 49  ---  32 18 24
N° 50  :  32 40 48  ---  33 18 23

J'ai poussé jusqu'au périmètre 200 : je trouve 297 triangles dont quelques doublons (plusieurs points intérieurs, pas mal de triangles isocèles mais aucun triangle équilatéral...

@+

[EDIT]Périmètres<=  250 --> 532 réponses.
Les 10 dernières :

N° 523  :  70 85 95  ---  58 43 48
N° 524  :  74 83 93  ---  47 56 41
N° 525  :  76 81 93  ---  36 63 48
N° 526  :  74 85 91  ---  49 56 39
N° 527  :  77 81 92  ---  36 64 47
N° 528  :  76 83 91  ---  47 58 39
N° 529  :  77 83 90  ---  63 57 28
N° 530  :  80 85 85  ---  41 66 41
N° 531  :  80 85 85  ---  50 45 50
N° 532  :  80 85 85  ---  58 33 58

En fait, j'ai fusionné les 2 programmes : je lance d'abord la partie génération de triangles, puis j'exploite la liste créée, avec le 1er programme de totomm : j'évite ainsi les accès disque.

Dernière modification par yoshi (10-07-2014 11:47:26)


Arx Tarpeia Capitoli proxima...

Hors ligne

#39 10-07-2014 11:54:41

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Re,

Magnifique!

   (J'aimerai déjà en être à savoir faire cela... sans gros bugs!!)


Comme tu le sais, le premier triangle équilatéral à apparaître devrait être celui de 112 de coté, soit pour un périmètre de 336.


@+

Hors ligne

#40 10-07-2014 12:01:25

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,

je suis en train de tester pour p<=300...
Si tu penses que cela n'a pas buggué ce matin, tu te trompes : j'ai bien eu 20 à 30 erreurs...
Mais il y a belle lurette que j'en ai pris mon parti !

Je te tiens au courant.

@+

[EDIT]
893 réponses :

N° 884  :  87 96 117  ---  74 65 35
N° 885  :  90 96 114  ---  84 33 69
N° 886  :  86 102 112  ---  50 66 60
N° 887  :  90 102 108  ---  52 64 58
N° 888  :  96 102 102  ---  50 76 50
N° 889  :  96 102 102  ---  52 70 52
N° 890  :  96 102 102  ---  60 54 60
N° 891  :  96 102 102  ---  73 35 73
N° 892  :  96 102 102  ---  80 26 80
N° 893  :  99 100 101  ---  78 77 27

Je vais essayé d'en avoir 1100 maxi : tu n'auras plus qu'à éliminer les doublons...


Arx Tarpeia Capitoli proxima...

Hors ligne

#41 10-07-2014 12:38:19

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Je vais donc essayer d'en prendre mon parti moi aussi! - C'est en effet une très sage attitude...

Quant aux doublons: en effet il y en a quelques uns, mais il ne sont pas si fréquents que ça à vrai dire... Ce n'est donc pas bien gênant, je m'en accommoderai très bien!    ;)

Merci!

:)

Hors ligne

#42 10-07-2014 12:39:07

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Re,

J'ai demandé p<=336, j'ai limité le nb de triangles à 1100 ; les 10 derniers :

    N° 1091  :  64 130 130  ---  40 102 40
    N° 1092  :  64 130 130  ---  68 66 68
    N° 1093  :  70 116 138  ---  55 101 25
    N° 1094  :  66 126 132  ---  56 92 38
    N° 1095  :  72 114 138  ---  44 98 44
    N° 1096  :  66 128 130  ---  38 104 40
    N° 1097  :  71 117 136  ---  33 117 39
    N° 1098  :  74 113 137  ---  45 104 35
    N° 1099  :  71 123 130  ---  55 101 28
    N° 1100  :  90 96 138  ---  81 75 27

Tu veux les 1100 ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#43 10-07-2014 12:46:12

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Volontiers!

Et le programme aussi si tu veux bien?


Peut-être que c'est mieux par mail?
                                   

@+

Dernière modification par 0^0 (10-07-2014 12:47:50)

Hors ligne

#44 10-07-2014 14:24:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,

C'est parti !

Tu n'as de limite que ta quantité de RAM.
pour p<=336 il y a un peu plus de 268000 triangles à traiter

Amuse-toi bien

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#45 10-07-2014 16:32:36

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bravo pour avoir réussi à tenir compte de toutes les conditions que j'avais formulées ici et dans l'autre fil! :)

Avec ce dernier programme, le premier triangle équilatéral apparaît en  N° 1249:

N° 1249  :  112 112 112  ---   57  65  73
N° 1250  :  112 112 112  ---   57  73  65
N° 1251  :  112 112 112  ---   65  57  73
N° 1252  :  112 112 112  ---   65  73  57
N° 1253  :  112 112 112  ---   73  57  65
N° 1254  :  112 112 112  ---   73  65  57

Un grand merci à toi!


@+

Hors ligne

#46 11-07-2014 08:31:26

totomm
Membre
Inscription : 25-08-2011
Messages : 1 093

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

Content que vous soyez tous deux satisfaits
@ yoshi : Pour moi aucun problème quand vous prenez la main, et même j'apprends encore de votre programmation....
Toujours présent très ponctuellement quand Internet est possible.

Hors ligne

#47 11-07-2014 10:24:09

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

Vous me voyez très content que vous soyez content que nous soyons contents... ^_^

Très bien..., j'avais plutôt l'impression d'apprendre de votre programmation,  ; donc alors chacun de nous apprend de l'autre.
Voilà (légèrement retouché pour gagner des instructions) ce que j'ai envoyé à O^O :*

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from math import sqrt
from operator import itemgetter

def triangles(Max,nombre,Trg):
    for AC,BC,AB in Trg:
        AC2,BC2,AB2 = AC**2,BC**2,AB**2
        b=AB-1
        for AM in range(1, b):
            AM2 = AM**2
            for BM in range(AB - AM + 1,Max):
                BM2 = BM**2
                xc = (AC2 + AB2 - BC2)/(2 * AB)
                yc = sqrt(AC2 - xc**2)
                xm = (AM2 + AB2 - BM2)/(2 * AB)
                ym = sqrt(AM2 - xm**2)            
                if ym * xc - (xm * yc) + 0.001 < 0 and ym * (xc - AB) - (yc * (xm - AB)) - 0.001 > 0:
                    #M est intérieur                          
                    CMd = sqrt((xm - xc)**2 + (ym - yc)**2)
                    CM=int(CMd + 0.0000001)
                    if abs(CM - CMd) < 0.000001:
                        #recalcul sur entiers
                        xcL = AC2 + AB2 - BC2
                        xmL = AM2 + AB2 - BM2
                        Yc2 = 4 * AB2 * AC2 - (xcL**2)  #4*AB*AB*yc*yc
                        Ym2 = 4 * AB2 * AM2 - (xmL**2) #4*AB*AB*ym*ym
                        g = 2 * AB2 * (AC2 + AM2 - CM**2) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
                        if g**2 == Yc2 * Ym2:
                            nombre += 1
                            print("N°","%4i" % nombre," : ","%3i" % AC,"%3i" % BC,"%3i" % AB," --- ","%3i" % AM,"%3i" % BM, "%3i" % CM)
                            if nombre == 1300:            
                                return
                else:
                    break


# Triangles à cotés entiers classés par pérmètres croissants

maxp=336 # Choisir la valeur limite pour le périmètre

nombre=0
Trg,Peri,nb=[(0,0,0,0),(1,0,0,0),(2,0,0,0),(3,1,1,1),(4,0,0,0)],[],5
Dico={0:[0,1],1:[0,1],2:[0,1],3:[1,2],4:[0,1]}

for p in range(5,maxp): # p est le périmètre
    nb1=nb
    for AC in range(1,maxp): # AC sera limité bien avant maxp
        BC=(p-AC)//2 # division euclidienne
        if BC<AC:
            break # AC est trop grand, passer à la valeur suivante de AC
        AB=p-AC-BC
        while 1: # boucle pour tous les triangles tels que AC<=BC<=AB
            if AB>=AC+BC: # le triangle n'existe pas
                break # donc sortie de la boucle while...
            #print("périmètre =",p,AC,BC,AB)
            nb+=1
            Trg.append((p,AC,BC,AB))  # Stockage du quadruplet trouvé
            BC-=1 #triangle suivant de même périmètre
            AB+=1
            if BC<AC:
                break
    Dico.update({p:[nb1,nb]})  # je complète mon dictionnaire

for p in range(5,maxp):
    dp=p/2
    a,b=Dico[p]
    Ordre=[]
    if b-a>1:  # s'il y a plus d'un triangle de périmètre p
        Peri=Trg[a:b]  
        for i,(x,y,z,t)in enumerate(Peri):
            s=dp*sqrt(dp*(dp-y)*(dp-z)*(dp-t))  # Formule de Heron
            Ordre.append((i,s))
        Ordre=sorted(Ordre,key=itemgetter(1)) # tri sur 2e élément d'un tuple
        for i,(x,s) in enumerate(Ordre): # évite gestion compteur
            Trg[a+i]=Peri[x]  #remplacement par les tuples triés

#je ne garde que les n-5 derniers enregistrements
Trg=Trg[5:]

Tr=[]    
for (p,x,y,z) in Trg:
    Tr.append((x,y,z)) # nouvelle liste sans périmètres
   
del(Trg)  # Suppression 1ere liste : gain espace mémoire

triangles(maxp,nombre,Tr)  # Appel du prog totomm

Je râle assez quand je n'ai pas connaissance de la "philosophie" qui sous-tend un programme pour ne pas prêter le flanc à mon tour...
Voici donc le pourquoi de ce qui figure ci-dessus.
Il me fallait conserver les périmètres et les longueurs des côtés :
Créer une liste de listes ? plusieurs listes ? En point de mire : les tris futurs. Je n'ai pas fait d'essais, mais ça ne me tentait pas...
J'ai finalement opté pour des tuples : je garde tout ensemble et les tris de tuples sur un élément quelconque est très facile pour qui a déjà rencontré itemgetter et employé.
C'est peut-être un peu plus lourd, je ne sais pas : question programmation je me fie à mon instinct, même s'il lui est arrivé d'être défaillant...
Après, j'étais face à l'alternative suivante :
* Relever tous les triangles de même périmètre et leurs côtés après constitution de la liste.
   Ce 1er point était faisable mais il y avait beaucoup de code pour mon goût
* Les relever pendant leur création ou pouvoir les retrouver facilement après.
   J'avais envisagé une liste de listes, mais j'ai trouvé ça trop pénible à gérer (encore l'instinct ? Oui et non. J'ai fait quelques essais quand même...)
   J'ai fini par opter pour un dictionnaire où les clés étaient les périmètres avec [indice 1er triangle:indice 2e triangle+1] comme valeurs
   D'où la suppression ultérieure de 3 boucles dans votre script initial puisque les les triangles (tous) sont déjà existants.
   Il n'y a plus qu'à charger les 3 côtés : encore un tuple. J'aurais pu utiliser une liste, mais il m'aurait fallu charger les éléments par 3...
   Et les affecter ensuite. Avec un tuple, c'est plus immédiat

Mais il fallait encore les trier sur les aires, si plus d'un triangle.
Là encore, j'ai préféré traiter au fur et à mesure les triangles de même aire dans une liste à part : Peri.
A partir de Peri, où je n'ai pas vu comment trier sur place, j'ai créé une autre liste de couples (indice dans Peri, aire) que j'ai triée.
L'ordre devant être retrouvé j'ai trié sur le 2e élément, l'aire.
Pour trier des tuples sur n'importe quel élément emploi de itemgetter(indice) obligatoire.
Et comme je l'ai déjà indiqué, pour un tri /aires décroissantes dans sorted, on rajoute reverse=True à la fin.

Noter que sur les listes simples, reverse() donne la liste inversée :

>>> Y=[1,7,4,8,2,9,10]
>>> Y.reverse()
>>> Y
[10, 9, 2, 8, 4, 7, 1]
>>>

J'espère que si vous aviez eu besoin d'éclaircissements, ceux-ci ont été suffisants.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#48 11-07-2014 13:32:31

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Bonjour,

S'il y a encore de nombreuses choses qui m'échappent, ce ne peut être qu'en dépit de toutes vos très bonnes explications. Donc même si je les accueille toujours avec beaucoup de reconnaissance, il faut voir que la programmation c'est un peu pour moi comme apprendre du chinois...

Par exemple, relativement au problème du classement des triangles à cotés entiers par aires croissantes (ou décroissantes, peu importe) et par périmètres successifs (voir le post #33), j'essaye sans résultat depuis des heures, de toutes les manières possibles imaginables (enfin.. sauf les bonnes visiblement), d'afficher les aires correspondantes à coté des 'cotes' des triangles classés...

Mon intention était de pouvoir facilement retrouver parmi les triangles de même périmètre, ceux qui on également une même aire.

Je n'ai pour le moment réussi qu'à exploiter le programme de totomm en le modifiant comme suit:


from math import sqrt

print ("Triangles à cotés entiers classés par périmètres + aires\n")
Pmin=int (input("Périmètre min = "))
if Pmin < 3:
    print ("le périmètre minimal doit être supérieur ou égal à 3")
    Pmin=int (input("Périmètre min = "))
Pmax=int (input("Périmètre max = "))
print ("\n")
for P in range(Pmin,Pmax+1):
    for AC in range (1,Pmax+1):
        BC = (P-AC)//2
        if BC<AC:
            break
        AB=P-AC-BC
        dP=(AB+BC+AC)/2
        s=sqrt(dP*(dP-AB)*(dP-BC)*(dP-AC))
        while 1:
            if AB>=AC+BC:
                break
            print ("Périmètre =",P,"---",AB,BC,AC,"---","Aire :",s)
            BC=BC-1
            AB=AB+1
            if BC<AC:
                break
    print ()

 

Les aires s'affichent bien, mais comme les triangles ne sont pas classés en fonction d'elles, il en résulte qu'il est très fastidieux de les comparer, dès que les triangles deviennent un peu nombreux...

Je piétine...


@+

Dernière modification par 0^0 (14-07-2014 10:13:10)

Hors ligne

#49 11-07-2014 13:54:46

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Triangles ayant un point intérieur à distance entière des sommets

Salut,

Je peux le faire, il "suffit" de stocker en plus des longueurs des côtés, les périmètres, et de calculer simultanément les aires ...
Ensuite lors de l'affichage, écrire, n° triangle, périmètre, côté, côté, côté, aire...
C'est ça que tu veux ?
Je m'y attelle...
RDV dans un moment, pour un aperçu...

@+

Dernière modification par yoshi (11-07-2014 14:19:46)


Arx Tarpeia Capitoli proxima...

Hors ligne

#50 11-07-2014 14:02:34

0^0
Membre
Inscription : 24-06-2014
Messages : 325

Re : Triangles ayant un point intérieur à distance entière des sommets

Re,

Oui en effet il semblerait que cela soit ça!

Donc d'accord pour l'aperçu! :)

(C'est en comparant les programmes que je risque de comprendre le mieux, donc plus j'en aurais sous le coude plus ça risque de faire 'tilt'...)


@+

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt quatre moins cinquante trois
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums