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).

#51 11-07-2014 14:29:12

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

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

Re,

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

from math import sqrt
from operator import itemgetter

def triangles(Max,nombre,Trg):
    for p,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
                            dp = p/2
                            s=round(sqrt(dp*(dp-AB)*(dp-AC)*(dp-BC)),3)
                            print("N°","%4i" % nombre," : ","Périmètre :","%3i" % p," *", "%3i" % AC,"%3i" % BC,"%3i" % AB," --- ","%3i" % AM,"%3i" % BM, "%3i" % CM,"  Aire :", s)
                            if nombre == 1300:            
                                return
                else:
                    break


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

maxp=121 # 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:]
   
triangles(maxp,nombre,Trg)  # Appel du prog totomm

N°    1  :  Périmètre :  49  *   8  19  22  ---    6  17   4   Aire : 74.555
N°    2  :  Périmètre :  50  *  16  17  17  ---   10   9  10   Aire : 120.0
N°    3  :  Périmètre :  54  *  15  15  24  ---   13  13   4   Aire : 108.0
N°    4  :  Périmètre :  64  *  18  20  26  ---   15  13   9   Aire : 179.6
N°    5  :  Périmètre :  64  *  20  20  24  ---   13  13  11   Aire : 192.0
N°    6  :  Périmètre :  64  *  20  20  24  ---   15  15   7   Aire : 192.0
N°    7  :  Périmètre :  64  *  20  21  23  ---   14  13  10   Aire : 194.977
N°    8  :  Périmètre :  75  *  13  30  32  ---    6  28   8   Aire : 194.675
N°    9  :  Périmètre :  78  *  23  27  28  ---   18  20   8   Aire : 286.998
N°   10  :  Périmètre :  78  *  24  26  28  ---   17  21   8   Aire : 289.232
N°   11  :  Périmètre :  80  *  25  25  30  ---   17  17  12   Aire : 300.0
N°   12  :  Périmètre :  88  *  26  30  32  ---   19  15  18   Aire : 364.768
N°   13  :  Périmètre :  90  *  20  31  39  ---   19  22  11   Aire : 307.409
N°   14  :  Périmètre :  90  *  24  27  39  ---   15  26  11   Aire : 319.468
N°   15  :  Périmètre :  90  *  24  31  35  ---   19  26   7   Aire : 363.731
N°   16  :  Périmètre :  91  *  13  39  39  ---    8  33   9   Aire : 249.954
N°   17  :  Périmètre :  91  *  13  39  39  ---    9  33   8   Aire : 249.954
N°   18  :  Périmètre :  91  *  14  38  39  ---    8  34   8   Aire : 264.331
N°   19  :  Périmètre :  98  *  16  38  44  ---   12  34   8   Aire : 298.22
N°   20  :  Périmètre :  98  *  16  39  43  ---   13  34   7   Aire : 311.48
N°   21  :  Périmètre :  98  *  17  38  43  ---   12  35   7   Aire : 321.696
N°   22  :  Périmètre :  98  *  25  29  44  ---   25  21  10   Aire : 342.929
N°   23  :  Périmètre :  98  *  22  37  39  ---   13  28  15   Aire : 398.447
N°   24  :  Périmètre :  98  *  24  37  37  ---   13  30  13   Aire : 420.0
N°   25  :  Périmètre :  98  *  24  37  37  ---   15  26  15   Aire : 420.0
N°   26  :  Périmètre :  98  *  24  37  37  ---   20  19  20   Aire : 420.0
N°   27  :  Périmètre :  98  *  29  29  40  ---   25  25   6   Aire : 420.0
N°   28  :  Périmètre :  98  *  25  36  37  ---   14  27  15   Aire : 428.318
N°   29  :  Périmètre :  98  *  30  31  37  ---   26  13  20   Aire : 448.437
N°   30  :  Périmètre : 100  *  26  26  48  ---   25  25   3   Aire : 240.0
N°   31  :  Périmètre : 100  *  18  41  41  ---   15  28  15   Aire : 360.0
N°   32  :  Périmètre : 100  *  23  36  41  ---   10  33  15   Aire : 412.432
N°   33  :  Périmètre : 100  *  28  32  40  ---   28  13  21   Aire : 444.972
N°   34  :  Périmètre : 100  *  30  32  38  ---   28  11  23   Aire : 464.758
N°   35  :  Périmètre : 100  *  32  34  34  ---   20  18  20   Aire : 480.0
N°   36  :  Périmètre : 104  *  32  32  40  ---    8  33  25   Aire : 499.6
N°   37  :  Périmètre : 104  *  32  32  40  ---   33   8  25   Aire : 499.6
N°   38  :  Périmètre : 104  *  31  36  37  ---   20  18  24   Aire : 511.937
N°   39  :  Périmètre : 108  *  30  30  48  ---   25  25  11   Aire : 432.0
N°   40  :  Périmètre : 108  *  30  30  48  ---   26  26   8   Aire : 432.0
N°   41  :  Périmètre : 108  *  30  32  46  ---   27  25   9   Aire : 477.594
N°   42  :  Périmètre : 108  *  29  39  40  ---   17  27  18   Aire : 532.447
N°   43  :  Périmètre : 108  *  30  39  39  ---   17  28  17   Aire : 540.0
N°   44  :  Périmètre : 108  *  30  39  39  ---   25  16  25   Aire : 540.0
N°   45  :  Périmètre : 112  *  28  35  49  ---   29  22  15   Aire : 480.1
N°   46  :  Périmètre : 112  *  35  35  42  ---   29  29   8   Aire : 588.0
N°   47  :  Périmètre : 117  *  18  48  51  ---   17  36  14   Aire : 431.947
N°   48  :  Périmètre : 120  *  32  38  50  ---   25  30  13   Aire : 607.947
N°   49  :  Périmètre : 120  *  32  39  49  ---   32  18  24   Aire : 622.961
N°   50  :  Périmètre : 120  *  32  40  48  ---   33  18  23   Aire : 634.98

J'ai donc gardé la liste initiale et supprimé :
- la 2nde liste où je réenregistrais les côtés sans le périmètre
- la suppression de la 1ere liste
J'ai modifié dans la def :
for AC,BC,AB in Trg:
en
for p,AC,BC,AB in Trg:

Juste avant l'affichage, le calcule l'aire et je l'arrondis à 3 chiffres après la virgule.

Et je vois, que ça va te donner probablement à réfléchir sur le classement des triangles...

Alors ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#52 11-07-2014 14:42:54

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

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

Re re,

En fait, j'ai réfléchi:

- Il serait encore mieux que comme dans la modification que je viens de faire dans mon programme plus haut, le tien puisse fonctionner pour des 'périmètres min' et 'max' choisis.

- Il serait de plus 'encore encore' mieux que seuls s'affichent les triangles dont les aires sont égales... Ce qui ferait encore moins de tri à réaliser par l'utilisateur lui-même... (soit moi en l’occurrence...)


@+

Hors ligne

#53 11-07-2014 14:57:10

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

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

Nos messages se sont croisés.

Je vois que tu as réalisé la chose sur le programme permettant de trouver les triangles à cotés entiers possédant au moins un point M à distances entières de leurs sommets, ce qui le compète encore d'avantage! Bravo!

Mais ce que je demandais était de réaliser la même chose avec simplement les triangles à cotés entiers ordinaires... C'était le sujet des posts #24 #35, tu te rappelles?


Excuse moi pour tout le boulot que je te donne!


@+

Hors ligne

#54 11-07-2014 14:57:36

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

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

Salut,

- Il serait encore mieux que comme dans la modification que je viens de faire dans mon programme plus haut, le tien puisse fonctionner pour des 'périmètres min' et 'max' choisis.

Je ne vois pas ce que tu veux dire...

As-tu vu mon programme modifié et les sorties qui vont avec ? Cf post #51...

Tu ne veux travailler que dans l'affichage des triangles ? Tu ne t'intéresses plus aux points intérieurs ?

Ah,  si peut-être, je crois que j'ai compreis.
C'est ça que tu veux ?

N°    1  :  Périmètre :  75  *  13  30  32  ---    6  28   8   Aire : 194.675
N°    2  :  Périmètre :  78  *  23  27  28  ---   18  20   8   Aire : 286.998
N°    3  :  Périmètre :  78  *  24  26  28  ---   17  21   8   Aire : 289.232
N°    4  :  Périmètre :  80  *  25  25  30  ---   17  17  12   Aire : 300.0
N°    5  :  Périmètre :  88  *  26  30  32  ---   19  15  18   Aire : 364.768
N°    6  :  Périmètre :  90  *  20  31  39  ---   19  22  11   Aire : 307.409
N°    7  :  Périmètre :  90  *  24  27  39  ---   15  26  11   Aire : 319.468
N°    8  :  Périmètre :  90  *  24  31  35  ---   19  26   7   Aire : 363.731
N°    9  :  Périmètre :  91  *  13  39  39  ---    8  33   9   Aire : 249.954
N°   10  :  Périmètre :  91  *  13  39  39  ---    9  33   8   Aire : 249.954
N°   11  :  Périmètre :  91  *  14  38  39  ---    8  34   8   Aire : 264.331
N°   12  :  Périmètre :  98  *  16  38  44  ---   12  34   8   Aire : 298.22
N°   13  :  Périmètre :  98  *  16  39  43  ---   13  34   7   Aire : 311.48
N°   14  :  Périmètre :  98  *  17  38  43  ---   12  35   7   Aire : 321.696
N°   15  :  Périmètre :  98  *  25  29  44  ---   25  21  10   Aire : 342.929
N°   16  :  Périmètre :  98  *  22  37  39  ---   13  28  15   Aire : 398.447
N°   17  :  Périmètre :  98  *  24  37  37  ---   13  30  13   Aire : 420.0
N°   18  :  Périmètre :  98  *  24  37  37  ---   15  26  15   Aire : 420.0
N°   19  :  Périmètre :  98  *  24  37  37  ---   20  19  20   Aire : 420.0
N°   20  :  Périmètre :  98  *  29  29  40  ---   25  25   6   Aire : 420.0
N°   21  :  Périmètre :  98  *  25  36  37  ---   14  27  15   Aire : 428.318
N°   22  :  Périmètre :  98  *  30  31  37  ---   26  13  20   Aire : 448.437
N°   23  :  Périmètre : 100  *  26  26  48  ---   25  25   3   Aire : 240.0
N°   24  :  Périmètre : 100  *  18  41  41  ---   15  28  15   Aire : 360.0
N°   25  :  Périmètre : 100  *  23  36  41  ---   10  33  15   Aire : 412.432
N°   26  :  Périmètre : 100  *  28  32  40  ---   28  13  21   Aire : 444.972
N°   27  :  Périmètre : 100  *  30  32  38  ---   28  11  23   Aire : 464.758
N°   28  :  Périmètre : 100  *  32  34  34  ---   20  18  20   Aire : 480.0
N°   29  :  Périmètre : 104  *  32  32  40  ---    8  33  25   Aire : 499.6
N°   30  :  Périmètre : 104  *  32  32  40  ---   33   8  25   Aire : 499.6
N°   31  :  Périmètre : 104  *  31  36  37  ---   20  18  24   Aire : 511.937
N°   32  :  Périmètre : 108  *  30  30  48  ---   25  25  11   Aire : 432.0
N°   33  :  Périmètre : 108  *  30  30  48  ---   26  26   8   Aire : 432.0
N°   34  :  Périmètre : 108  *  30  32  46  ---   27  25   9   Aire : 477.594
N°   35  :  Périmètre : 108  *  29  39  40  ---   17  27  18   Aire : 532.447
N°   36  :  Périmètre : 108  *  30  39  39  ---   17  28  17   Aire : 540.0
N°   37  :  Périmètre : 108  *  30  39  39  ---   25  16  25   Aire : 540.0.

J'ai choisi d'afficher entre un minp=75 et un maxp=112. Modifiables librement.

Avec :

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

from math import sqrt
from operator import itemgetter

def triangles(Max,nombre,Trg):
    for p,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
                            dp = p/2
                            s=round(sqrt(dp*(dp-AB)*(dp-AC)*(dp-BC)),3)
                            print("N°","%4i" % nombre," : ","Périmètre :","%3i" % p," *", "%3i" % AC,"%3i" % BC,"%3i" % AB," --- ","%3i" % AM,"%3i" % BM, "%3i" % CM,"  Aire :", s)
                            if nombre == 1300:            
                                return
                else:
                    break


# Triangles à cotés entiers classés par pérmètres croissants
minp=75   # Choisir la valeur de départ pour le périmètre
maxp=112 # Choisir la valeur limite (maxp - 1) 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={}

for p in range(minp,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(minp,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:]
   
triangles(maxp,nombre,Trg)  # Appel du prog totomm

C'est ça ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#55 11-07-2014 15:27:47

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

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

Ave,

Seulement les triangles bruts de décoffrage ?

Périmètre :  75   1  37  37 Aire : 18.498
Périmètre :  75   2  36  37 Aire : 31.598
Périmètre :  75   3  35  37 Aire : 40.214
Périmètre :  75   4  34  37 Aire : 46.887
Périmètre :  75   5  33  37 Aire : 52.366
Périmètre :  75   3  36  36 Aire : 53.953
Périmètre :  75   6  32  37 Aire : 56.995
Périmètre :  75   7  31  37 Aire : 60.969
Périmètre :  75   8  30  37 Aire : 64.408
Périmètre :  75   9  29  37 Aire : 67.396
Périmètre :  75   4  35  36 Aire : 68.636
Périmètre :  75  10  28  37 Aire : 69.989
Périmètre :  75  11  27  37 Aire : 72.23
Périmètre :  75  12  26  37 Aire : 74.151
Périmètre :  75  13  25  37 Aire : 75.777
Périmètre :  75  14  24  37 Aire : 77.126
Périmètre :  75  15  23  37 Aire : 78.212
Périmètre :  75  16  22  37 Aire : 79.047
Périmètre :  75  17  21  37 Aire : 79.638
Périmètre :  75   5  34  36 Aire : 79.99
Périmètre :  75  18  20  37 Aire : 79.99
Périmètre :  75  19  19  37 Aire : 80.107
Périmètre :  75   5  35  35 Aire : 87.277
Périmètre :  75   6  33  36 Aire : 89.294
Périmètre :  75   7  32  36 Aire : 97.139
Périmètre :  75   6  34  35 Aire : 101.666
Périmètre :  75   8  31  36 Aire : 103.855
Périmètre :  75   9  30  36 Aire : 109.651
Périmètre :  75   7  33  35 Aire : 113.434
Périmètre :  75  10  29  36 Aire : 114.667
Périmètre :  75   7  34  34 Aire : 118.368
Périmètre :  75  11  28  36 Aire : 119.0
Périmètre :  75  12  27  36 Aire : 122.723
Périmètre :  75   8  32  35 Aire : 123.333
Périmètre :  75  13  26  36 Aire : 125.891
Périmètre :  75  14  25  36 Aire : 128.544
Périmètre :  75  15  24  36 Aire : 130.713
Périmètre :  75   9  31  35 Aire : 131.785
Périmètre :  75   8  33  34 Aire : 131.998
Périmètre :  75  16  23  36 Aire : 132.423
Périmètre :  75  17  22  36 Aire : 133.692
Périmètre :  75  18  21  36 Aire : 134.53
Périmètre :  75  19  20  36 Aire : 134.948
Périmètre :  75  10  30  35 Aire : 139.054
Périmètre :  75   9  32  34 Aire : 143.434
Périmètre :  75  11  29  35 Aire : 145.318
Périmètre :  75   9  33  33 Aire : 147.113
Périmètre :  75  12  28  35 Aire : 150.701
Périmètre :  75  10  31  34 Aire : 153.17
Périmètre :  75  13  27  35 Aire : 155.297
Périmètre :  75  14  26  35 Aire : 159.173
Périmètre :  75  10  32  33 Aire : 159.761
Périmètre :  75  11  30  34 Aire : 161.511
Périmètre :  75  15  25  35 Aire : 162.38
Périmètre :  75  16  24  35 Aire : 164.957
Périmètre :  75  17  23  35 Aire : 166.935
Périmètre :  75  18  22  35 Aire : 168.333
Périmètre :  75  12  29  34 Aire : 168.667
Périmètre :  75  19  21  35 Aire : 169.166
Périmètre :  75  20  20  35 Aire : 169.443
Périmètre :  75  11  31  33 Aire : 170.491
Périmètre :  75  11  32  32 Aire : 173.381
Périmètre :  75  13  28  34 Aire : 174.781
Périmètre :  75  12  30  33 Aire : 179.648
Périmètre :  75  14  27  34 Aire : 179.961
Périmètre :  75  15  26  34 Aire : 184.285
Périmètre :  75  12  31  32 Aire : 184.894
Périmètre :  75  13  29  33 Aire : 187.462
Périmètre :  75  16  25  34 Aire : 187.812
Périmètre :  75  17  24  34 Aire : 190.587
Périmètre :  75  18  23  34 Aire : 192.642
Périmètre :  75  19  22  34 Aire : 194.0
Périmètre :  75  14  28  33 Aire : 194.096
Périmètre :  75  13  30  32 Aire : 194.675
Périmètre :  75  20  21  34 Aire : 194.675
Périmètre :  75  13  31  31 Aire : 197.021
Périmètre :  75  15  27  33 Aire : 199.668
Périmètre :  75  14  29  32 Aire : 202.974
Périmètre :  75  16  26  33 Aire : 204.263
Périmètre :  75  14  30  31 Aire : 207.27
Périmètre :  75  17  25  33 Aire : 207.948
Périmètre :  75  15  28  32 Aire : 209.967
Périmètre :  75  18  24  33 Aire : 210.769
Périmètre :  75  19  23  33 Aire : 212.761
Périmètre :  75  20  22  33 Aire : 213.947
Périmètre :  75  21  21  33 Aire : 214.341
Périmètre :  75  16  27  32 Aire : 215.78
Périmètre :  75  15  29  31 Aire : 215.91
Périmètre :  75  15  30  30 Aire : 217.855
Périmètre :  75  17  26  32 Aire : 220.507
Périmètre :  75  16  28  31 Aire : 223.128
Périmètre :  75  18  25  32 Aire : 224.217
Périmètre :  75  16  29  30 Aire : 226.712
Périmètre :  75  19  24  32 Aire : 226.96
Périmètre :  75  20  23  32 Aire : 228.77
Périmètre :  75  17  27  31 Aire : 229.057
Périmètre :  75  21  22  32 Aire : 229.67
Périmètre :  75  18  26  31 Aire : 233.797
Périmètre :  75  17  28  30 Aire : 234.037
Périmètre :  75  17  29  29 Aire : 235.674
Périmètre :  75  19  25  31 Aire : 237.418
Périmètre :  75  18  27  30 Aire : 239.971
Périmètre :  75  20  24  31 Aire : 239.971
Périmètre :  75  21  23  31 Aire : 241.49
Périmètre :  75  22  22  31 Aire : 241.994
Périmètre :  75  18  28  29 Aire : 242.999
Périmètre :  75  19  26  30 Aire : 244.614
Périmètre :  75  20  25  30 Aire : 248.039
Périmètre :  75  19  27  29 Aire : 248.832
Périmètre :  75  19  28  28 Aire : 250.222
Périmètre :  75  21  24  30 Aire : 250.297
Périmètre :  75  22  23  30 Aire : 251.418
Périmètre :  75  20  26  29 Aire : 253.275
Périmètre :  75  20  27  28 Aire : 255.853
Périmètre :  75  21  25  29 Aire : 256.402
Périmètre :  75  22  24  29 Aire : 258.26
Périmètre :  75  23  23  29 Aire : 258.877
Périmètre :  75  21  26  28 Aire : 259.997
Périmètre :  75  21  27  27 Aire : 261.184
Périmètre :  75  22  25  28 Aire : 262.723
Périmètre :  75  23  24  28 Aire : 264.076
Périmètre :  75  22  26  27 Aire : 264.926
Périmètre :  75  23  25  27 Aire : 267.146
Périmètre :  75  24  24  27 Aire : 267.882
Périmètre :  75  23  26  26 Aire : 268.162
Périmètre :  75  24  25  26 Aire : 269.766
Périmètre :  75  25  25  25 Aire : 270.633


Périmètre :  76   2  37  37 Aire : 36.986
Périmètre :  76   3  36  37 Aire : 51.575
Périmètre :  76   4  35  37 Aire : 62.258
Périmètre :  76   5  34  37 Aire : 70.824
Périmètre :  76   4  36  36 Aire : 71.889
Périmètre :  76   6  33  37 Aire : 77.974
Périmètre :  76   7  32  37 Aire : 84.071
Périmètre :  76   5  35  36 Aire : 86.741
Périmètre :  76   8  31  37 Aire : 89.331
Périmètre :  76   9  30  37 Aire : 93.894
Périmètre :  76  10  29  37 Aire : 97.857
Périmètre :  76   6  34  36 Aire : 98.631
Périmètre :  76  11  28  37 Aire : 101.292
Périmètre :  76  12  27  37 Aire : 104.25
Périmètre :  76   6  35  35 Aire : 104.614
Périmètre :  76  13  26  37 Aire : 106.771
Périmètre :  76   7  33  36 Aire : 108.536
Périmètre :  76  14  25  37 Aire : 108.885
Périmètre :  76  15  24  37 Aire : 110.616
Périmètre :  76  16  23  37 Aire : 111.982
Périmètre :  76  17  22  37 Aire : 112.996
Périmètre :  76  18  21  37 Aire : 113.666
Périmètre :  76  19  20  37 Aire : 114.0
Périmètre :  76   8  32  36 Aire : 116.962
Périmètre :  76   7  34  35 Aire : 118.895
Périmètre :  76   9  31  36 Aire : 124.21
Périmètre :  76  10  30  36 Aire : 130.476
Périmètre :  76   8  33  35 Aire : 130.767
Périmètre :  76   8  34  34 Aire : 135.056
Périmètre :  76  11  29  36 Aire : 135.897
Périmètre :  76  12  28  36 Aire : 140.57
Périmètre :  76   9  32  35 Aire : 140.84
Périmètre :  76  13  27  36 Aire : 144.568
Périmètre :  76  14  26  36 Aire : 147.946
Périmètre :  76   9  33  34 Aire : 148.459
Périmètre :  76  10  31  35 Aire : 149.479
Périmètre :  76  15  25  36 Aire : 150.745
Périmètre :  76  16  24  36 Aire : 152.997
Périmètre :  76  17  23  36 Aire : 154.726
Périmètre :  76  18  22  36 Aire : 155.949
Périmètre :  76  19  21  36 Aire : 156.678
Périmètre :  76  11  30  35 Aire : 156.92
Périmètre :  76  20  20  36 Aire : 156.92
Périmètre :  76  10  32  34 Aire : 159.8
Périmètre :  76  10  33  33 Aire : 163.095
Périmètre :  76  12  29  35 Aire : 163.328
Périmètre :  76  13  28  35 Aire : 168.819
Périmètre :  76  11  31  34 Aire : 169.493
Périmètre :  76  14  27  35 Aire : 173.482
Périmètre :  76  11  32  33 Aire : 175.442
Périmètre :  76  15  26  35 Aire : 177.381
Périmètre :  76  12  30  34 Aire : 177.809
Périmètre :  76  16  25  35 Aire : 180.566
Périmètre :  76  17  24  35 Aire : 183.074
Périmètre :  76  13  29  34 Aire : 184.932
Périmètre :  76  18  23  35 Aire : 184.932
Périmètre :  76  12  31  33 Aire : 185.957
Périmètre :  76  19  22  35 Aire : 186.161
Périmètre :  76  20  21  35 Aire : 186.773
Périmètre :  76  12  32  32 Aire : 188.595
Périmètre :  76  14  28  34 Aire : 190.997
Périmètre :  76  13  30  33 Aire : 194.936
Périmètre :  76  15  27  34 Aire : 196.102
Périmètre :  76  13  31  32 Aire : 199.75
Périmètre :  76  16  26  34 Aire : 200.32
Périmètre :  76  14  29  33 Aire : 202.583
Périmètre :  76  17  25  34 Aire : 203.706
Périmètre :  76  18  24  34 Aire : 206.301
Périmètre :  76  19  23  34 Aire : 208.135
Périmètre :  76  15  28  33 Aire : 209.045
Périmètre :  76  14  30  32 Aire : 209.227
Périmètre :  76  20  22  34 Aire : 209.227
Périmètre :  76  21  21  34 Aire : 209.59
Périmètre :  76  14  31  31 Aire : 211.395
Périmètre :  76  16  27  33 Aire : 214.429
Périmètre :  76  15  29  32 Aire : 217.246
Périmètre :  76  17  26  33 Aire : 218.815
Périmètre :  76  15  30  31 Aire : 221.233
Périmètre :  76  18  25  33 Aire : 222.261
Périmètre :  76  16  28  32 Aire : 223.964
Périmètre :  76  19  24  33 Aire : 224.811
Périmètre :  76  20  23  33 Aire : 226.495
Périmètre :  76  21  22  33 Aire : 227.332
Périmètre :  76  16  29  31 Aire : 229.495
Périmètre :  76  17  27  32 Aire : 229.495
Périmètre :  76  16  30  30 Aire : 231.309
Périmètre :  76  18  26  32 Aire : 233.923
Périmètre :  76  17  28  31 Aire : 236.347
Périmètre :  76  19  25  32 Aire : 237.31
Périmètre :  76  17  29  30 Aire : 239.7
Périmètre :  76  20  24  32 Aire : 239.7
Périmètre :  76  21  23  32 Aire : 241.122
Périmètre :  76  22  22  32 Aire : 241.595
Périmètre :  76  18  27  31 Aire : 241.909
Périmètre :  76  19  26  31 Aire : 246.268
Périmètre :  76  18  28  30 Aire : 246.577
Périmètre :  76  18  29  29 Aire : 248.113
Périmètre :  76  20  25  31 Aire : 249.487
Périmètre :  76  21  24  31 Aire : 251.611
Périmètre :  76  19  27  30 Aire : 252.063
Périmètre :  76  22  23  31 Aire : 252.666
Périmètre :  76  19  28  29 Aire : 254.912
Périmètre :  76  20  26  30 Aire : 256.25
Périmètre :  76  21  25  30 Aire : 259.199
Périmètre :  76  20  27  29 Aire : 260.223
Périmètre :  76  22  24  30 Aire : 260.952
Périmètre :  76  20  28  28 Aire : 261.534
Périmètre :  76  23  23  30 Aire : 261.534
Périmètre :  76  21  26  29 Aire : 264.136
Périmètre :  76  21  27  28 Aire : 266.571
Périmètre :  76  22  25  29 Aire : 266.713
Périmètre :  76  23  24  29 Aire : 267.993
Périmètre :  76  22  26  28 Aire : 270.111
Périmètre :  76  22  27  27 Aire : 271.234
Périmètre :  76  23  25  28 Aire : 272.213
Périmètre :  76  24  24  28 Aire : 272.91
Périmètre :  76  23  26  27 Aire : 274.299
Périmètre :  76  24  25  27 Aire : 275.819
Périmètre :  76  24  26  26 Aire : 276.782
Périmètre :  76  25  25  26 Aire : 277.604


Périmètre :  77   1  38  38 Aire : 18.998
Périmètre :  77   2  37  38 Aire : 32.464
Périmètre :  77   3  36  38 Aire : 41.333
Périmètre :  77   4  35  38 Aire : 48.212
Périmètre :  77   5  34  38 Aire : 53.87
Périmètre :  77   3  37  37 Aire : 55.454
Périmètre :  77   6  33  38 Aire : 58.66
Périmètre :  77   7  32  38 Aire : 62.781
Périmètre :  77   8  31  38 Aire : 66.358
Périmètre :  77   9  30  38 Aire : 69.476
Périmètre :  77   4  36  37 Aire : 70.576
Périmètre :  77  10  29  38 Aire : 72.194
Périmètre :  77  11  28  38 Aire : 74.555
Périmètre :  77  12  27  38 Aire : 76.593
Périmètre :  77  13  26  38 Aire : 78.332
Périmètre :  77  14  25  38 Aire : 79.793
Périmètre :  77  15  24  38 Aire : 80.99
Périmètre :  77  16  23  38 Aire : 81.936
Périmètre :  77   5  35  37 Aire : 82.287
Périmètre :  77  17  22  38 Aire : 82.637
Périmètre :  77  18  21  38 Aire : 83.102
Périmètre :  77  19  20  38 Aire : 83.333
Périmètre :  77   5  36  36 Aire : 89.783
Périmètre :  77   6  34  37 Aire : 91.902
Périmètre :  77   7  33  37 Aire : 100.026
Périmètre :  77   6  35  36 Aire : 104.635
Périmètre :  77   8  32  37 Aire : 107.0
Périmètre :  77   9  31  37 Aire : 113.036
Périmètre :  77   7  34  36 Aire : 116.805
Périmètre :  77  10  30  37 Aire : 118.279
Périmètre :  77   7  35  35 Aire : 121.886
Périmètre :  77  11  29  37 Aire : 122.83
Périmètre :  77  12  28  37 Aire : 126.763
Périmètre :  77   8  33  36 Aire : 127.067
Périmètre :  77  13  27  37 Aire : 130.135
Périmètre :  77  14  26  37 Aire : 132.988
Périmètre :  77  15  25  37 Aire : 135.356
Périmètre :  77   9  32  36 Aire : 135.853
Périmètre :  77   8  34  35 Aire : 135.994
Périmètre :  77  16  24  37 Aire : 137.262
Périmètre :  77  17  23  37 Aire : 138.727
Périmètre :  77  18  22  37 Aire : 139.764
Périmètre :  77  19  21  37 Aire : 140.382
Périmètre :  77  20  20  37 Aire : 140.588
Périmètre :  77  10  31  36 Aire : 143.434
Périmètre :  77   9  33  35 Aire : 147.862
Périmètre :  77  11  30  36 Aire : 149.995
Périmètre :  77   9  34  34 Aire : 151.654
Périmètre :  77  12  29  36 Aire : 155.663
Périmètre :  77  10  32  35 Aire : 157.995
Périmètre :  77  13  28  36 Aire : 160.533
Périmètre :  77  14  27  36 Aire : 164.677
Périmètre :  77  10  33  34 Aire : 164.794
Périmètre :  77  11  31  35 Aire : 166.71
Périmètre :  77  15  26  36 Aire : 168.147
Périmètre :  77  16  25  36 Aire : 170.985
Périmètre :  77  17  24  36 Aire : 173.222
Périmètre :  77  12  30  35 Aire : 174.22
Périmètre :  77  18  23  36 Aire : 174.881
Périmètre :  77  11  32  34 Aire : 175.979
Périmètre :  77  19  22  36 Aire : 175.979
Périmètre :  77  20  21  36 Aire : 176.525
Périmètre :  77  11  33  33 Aire : 178.961
Périmètre :  77  13  29  35 Aire : 180.674
Périmètre :  77  12  31  34 Aire : 185.562
Périmètre :  77  14  28  35 Aire : 186.184
Périmètre :  77  15  27  35 Aire : 190.83
Périmètre :  77  12  32  33 Aire : 190.982
Périmètre :  77  13  30  34 Aire : 193.783
Périmètre :  77  16  26  35 Aire : 194.675
Périmètre :  77  17  25  35 Aire : 197.765
Périmètre :  77  18  24  35 Aire : 200.136
Périmètre :  77  14  29  34 Aire : 200.808
Périmètre :  77  13  31  33 Aire : 201.239
Périmètre :  77  19  23  35 Aire : 201.812
Périmètre :  77  20  22  35 Aire : 202.811
Périmètre :  77  21  21  35 Aire : 203.143
Périmètre :  77  13  32  32 Aire : 203.664
Périmètre :  77  15  28  34 Aire : 206.759
Périmètre :  77  14  30  33 Aire : 209.993
Périmètre :  77  16  27  34 Aire : 211.727
Périmètre :  77  14  31  32 Aire : 214.437
Périmètre :  77  17  26  34 Aire : 215.78
Périmètre :  77  15  29  33 Aire : 217.424
Périmètre :  77  18  25  34 Aire : 218.968
Périmètre :  77  19  24  34 Aire : 221.329
Périmètre :  77  20  23  34 Aire : 222.889
Périmètre :  77  15  30  32 Aire : 223.579
Périmètre :  77  16  28  33 Aire : 223.665
Périmètre :  77  21  22  34 Aire : 223.665
Périmètre :  77  15  31  31 Aire : 225.593
Périmètre :  77  17  27  33 Aire : 228.813
Périmètre :  77  16  29  32 Aire : 231.281
Périmètre :  77  18  26  33 Aire : 232.94
Périmètre :  77  16  30  31 Aire : 234.997
Périmètre :  77  19  25  33 Aire : 236.1
Périmètre :  77  17  28  32 Aire : 237.685
Périmètre :  77  20  24  33 Aire : 238.332
Périmètre :  77  21  23  33 Aire : 239.661
Périmètre :  77  22  22  33 Aire : 240.102
Périmètre :  77  17  29  31 Aire : 242.852
Périmètre :  77  18  27  32 Aire : 242.892
Périmètre :  77  17  30  30 Aire : 244.55
Périmètre :  77  19  26  32 Aire : 246.979
Périmètre :  77  18  28  31 Aire : 249.306
Périmètre :  77  20  25  32 Aire : 250.0
Périmètre :  77  21  24  32 Aire : 251.994
Périmètre :  77  18  29  30 Aire : 252.452
Périmètre :  77  22  23  32 Aire : 252.985
Périmètre :  77  19  27  31 Aire : 254.465
Périmètre :  77  20  26  31 Aire : 258.406
Périmètre :  77  19  28  30 Aire : 258.852
Périmètre :  77  19  29  29 Aire : 260.298
Périmètre :  77  21  25  31 Aire : 261.184
Périmètre :  77  22  24  31 Aire : 262.837
Périmètre :  77  23  23  31 Aire : 263.386
Périmètre :  77  20  27  30 Aire : 263.861
Périmètre :  77  20  28  29 Aire : 266.546
Périmètre :  77  21  26  30 Aire : 267.555
Périmètre :  77  22  25  30 Aire : 269.991
Périmètre :  77  23  24  30 Aire : 271.2
Périmètre :  77  21  27  29 Aire : 271.306
Périmètre :  77  21  28  28 Aire : 272.545
Périmètre :  77  22  26  29 Aire : 274.656
Périmètre :  77  23  25  29 Aire : 276.646
Périmètre :  77  22  27  28 Aire : 276.959
Périmètre :  77  24  24  29 Aire : 277.307
Périmètre :  77  23  26  28 Aire : 279.863
Périmètre :  77  23  27  27 Aire : 280.927
Périmètre :  77  24  25  28 Aire : 281.304
Périmètre :  77  24  26  27 Aire : 283.282
Périmètre :  77  25  25  27 Aire : 284.062
Périmètre :  77  25  26  26 Aire : 284.975

minp=75, maxp=78

#!/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

minp=75   # Choisir la valeur de départ pour le périmètre
maxp=78 # Choisir la valeur limite (maxp - 1) 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={}
 
for p in range(minp,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(minp,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

Trg=Trg[5:]

# Affichage de la liste triée
p1=minp
for i,(p,y,z,t)in enumerate(Trg):
    dp = p/2
    s=round(sqrt(dp*(dp-y)*(dp-z)*(dp-t)),3)
    if p!= p1:
        p1=p
        print("\n")  
    print ("Périmètre :","%3i" % p,"%3i" % y,"%3i" % z,"%3i" % t,"Aire :",s)

A te lire.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#56 11-07-2014 15:35:06

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

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

Re salut,

yoshi a écrit :

- Il serait encore mieux que comme dans la modification que je viens de faire dans mon programme plus haut, le tien puisse fonctionner pour des 'périmètres min' et 'max' choisis.

Je ne vois pas ce que tu veux dire...

Oh c'est une petite chose, si tu lances le programmes que j'ai mis en post # 48, tu verras qu'il demande automatiquement les valeurs: 'Périmètre min' et 'Périmètre max' ce qui évite de passer en revue tous les triangles s'il l'on ne s'intéresse qu'à ceux dont les périmètres sont compris entre 2054 et 2067 par exemple. (Mais ça je devrais pouvoir le régler maintenant, suite à ton dernier post.)

yoshi a écrit :

As-tu vu mon programme modifié et les sorties qui vont avec ? Cf post #51...

Oui Je l'ai vu et je vais essayer de le bosser..

yoshi a écrit :

Tu ne veux travailler que dans l'affichage des triangles ? Tu ne t'intéresses plus aux points intérieurs ?

Dans l'immédiat oui.

C'est aussi un problème qui m'intéresse et qui est différent de celui des triangles à points M intérieurs (qui m'intéressent toujours autant cela dit.)

J'aimerais me pencher un peu plus sur les triangles entiers simples de même périmètres ET de mêmes aires, même si ces dernières ne sont généralement pas entières.. comme dans le cas particulier des triangles héroniens.

yoshi a écrit :

Ah,  si peut-être, je crois que j'ai compreis.

[........]

C'est ça que tu veux ?

Pas mal oui! Je le charge... C'est ça que je veux oui, mais pour les triangles ordinaires à côtés entiers maintenant.

Et comme je l'ai demandé plus haut, se serait bien, si possible, que seuls s'affichent les triangles dont les aires sont égales... Toujours pour les triangles simples à coté entiers, en oubliant pour le moment les triangles à point M intérieurs.


@+

Hors ligne

#57 11-07-2014 15:44:48

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

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

Salut,


J'ai un peu avancé : voir post #65.
Parmi les triangles de périmètres 75, 76 et 77 fournis, a priori comme ça, je n'en ai vu aucun avec la même aire...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#58 11-07-2014 15:45:51

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

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

Ouiiiii!! C'est ça!!!

Bien!! :)

Le même maintenant, avec seulement les triangles dont les aires sont égales, et ce sera parfait!!


J'aurais ainsi l'équipement dont j'ai besoin pour faire ma petite exploration dans le monde des triangles..


@+


:)

Hors ligne

#59 11-07-2014 15:52:20

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

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

(Messages croisés encore...)


Sinon oui, ils ne doivent pas être si fréquents que ça...


Les premiers que j'ai trouvés sont comme je l'ai indiqué: 11,11,4 et 7,12,12


@+

Hors ligne

#60 11-07-2014 16:09:56

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

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

Salut,


Parmi les triangles de périmètres 75, 76 et 77 fournis, a priori comme ça, je n'en ai vu aucun avec la même aire...

C'est bon, j'ai ce qu'il te faut, mais je dois m'absenter 2 h 30...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#61 11-07-2014 18:49:17

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

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

RE,

Je rencontre un pb d'affichage des résultats...
Il va te falloir patienter.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#62 11-07-2014 19:52:50

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

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

Re,


Est-que ceci te convient :

Périmètre :  43   4  18  21 Aire : 25.660037022576564
Périmètre :  49   3  22  24 Aire : 25.660037022576564

Périmètre :  39   3  18  18 Aire : 26.906086671978144
Périmètre :  39   6  14  19 Aire : 26.906086671978144

Périmètre :  37   8  11  18 Aire : 26.989581323169872
Périmètre :  45   4  19  22 Aire : 26.989581323169872

Périmètre :  36   4  15  17 Aire : 27.49545416973504
Périmètre :  42   3  19  20 Aire : 27.49545416973504

Périmètre :  36   4  16  16 Aire : 31.74901573277509
Périmètre :  48   3  22  23 Aire : 31.74901573277509

Périmètre :  39   4  17  18 Aire : 33.66656353119516
Périmètre :  45   7  16  22 Aire : 33.66656353119516

Périmètre :  43  11  11  21 Aire : 34.4265522525855
Périmètre :  49   3  23  23 Aire : 34.4265522525855

Périmètre :  36   7  12  17 Aire : 34.46737587922817
Périmètre :  44   4  19  21 Aire : 34.46737587922817

Périmètre :  37   5  16  16 Aire : 39.50870157319777
Périmètre :  37   6  14  17 Aire : 39.50870157319777
Périmètre :  45   4  20  21 Aire : 39.50870157319777

Périmètre :  40   9  12  19 Aire : 41.95235392680606
Périmètre :  44   6  17  21 Aire : 41.95235392680606

Périmètre :  40   5  17  18 Aire : 42.42640687119285
Périmètre :  40  10  11  19 Aire : 42.42640687119285

Périmètre :  36   7  13  16 Aire : 44.49719092257398
Périmètre :  44   7  16  21 Aire : 44.49719092257398

Périmètre :  42   5  18  19 Aire : 44.8998886412873
Périmètre :  42   9  13  20 Aire : 44.8998886412873

Périmètre :  36   8  12  16 Aire : 46.475800154489
Périmètre :  48   6  19  23 Aire : 46.475800154489

Périmètre :  39   6  16  17 Aire : 47.99414026732847
Périmètre :  39   9  12  18 Aire : 47.99414026732847

Périmètre :  36   7  14  15 Aire : 48.744230427815765
Périmètre :  44  10  13  21 Aire : 48.744230427815765

Périmètre :  40   6  17  17 Aire : 50.19960159204453
Périmètre :  42   6  17  19 Aire : 50.19960159204453

Périmètre :  38   7  15  16 Aire : 52.306787322488084
Périmètre :  38  10  11  17 Aire : 52.306787322488084
Périmètre :  48   5  21  22 Aire : 52.306787322488084

Périmètre :  36   8  14  14 Aire : 53.665631459994955
Périmètre :  40   8  14  18 Aire : 53.665631459994955
Périmètre :  48   9  16  23 Aire : 53.665631459994955

Périmètre :  39   7  16  16 Aire : 54.643732485985986
Périmètre :  49   5  22  22 Aire : 54.643732485985986

Périmètre :  36  10  11  15 Aire : 54.99090833947008
Périmètre :  48  10  15  23 Aire : 54.99090833947008

Périmètre :  37   8  14  15 Aire : 55.312182202476876
Périmètre :  49   6  20  23 Aire : 55.312182202476876

Périmètre :  40   7  16  17 Aire : 55.85696017507576
Périmètre :  48  11  14  23 Aire : 55.85696017507576

Périmètre :  44   6  19  19 Aire : 56.28498911788115
Périmètre :  48  12  13  23 Aire : 56.28498911788115

Périmètre :  36   9  13  14 Aire : 56.92099788303083
Périmètre :  40  11  11  18 Aire : 56.92099788303083

Périmètre :  36  10  12  14 Aire : 58.787753826796276
Périmètre :  48   6  20  22 Aire : 58.787753826796276

Périmètre :  36  11  11  14 Aire : 59.39696961966999
Périmètre :  42   7  17  18 Aire : 59.39696961966999
Périmètre :  42   9  14  19 Aire : 59.39696961966999

Périmètre :  36  10  13  13 Aire : 60.0
Périmètre :  40   8  15  17 Aire : 60.0

Périmètre :  42  10  13  19 Aire : 60.794736614282655
Périmètre :  44   8  16  20 Aire : 60.794736614282655

Périmètre :  36  11  12  13 Aire : 61.48170459575759
Périmètre :  42  11  12  19 Aire : 61.48170459575759

Périmètre :  36  12  12  12 Aire : 62.353829072479584
Périmètre :  48   6  21  21 Aire : 62.353829072479584

Périmètre :  39   9  14  16 Aire : 62.78086890128234
Périmètre :  49   8  18  23 Aire : 62.78086890128234

Périmètre :  40   9  14  17 Aire : 62.928530890209096
Périmètre :  44   7  18  19 Aire : 62.928530890209096

Périmètre :  41   8  16  17 Aire : 63.52902879786531
Périmètre :  41  10  13  18 Aire : 63.52902879786531

Périmètre :  45   7  19  19 Aire : 65.36197288944085
Périmètre :  49   9  17  23 Aire : 65.36197288944085

Périmètre :  40   9  15  16 Aire : 66.332495807108
Périmètre :  44  12  12  20 Aire : 66.332495807108

Périmètre :  49   7  20  22 Aire : 69.4509719154455
Périmètre :  49  12  14  23 Aire : 69.4509719154455

Périmètre :  39  12  12  15 Aire : 70.25622748198198
Périmètre :  45   9  16  20 Aire : 70.25622748198198

Périmètre :  40  11  13  16 Aire : 70.9929573971954
Périmètre :  42   9  16  17 Aire : 70.9929573971954
Périmètre :  42  11  13  18 Aire : 70.9929573971954
Périmètre :  48   9  17  22 Aire : 70.9929573971954

Périmètre :  42  10  15  17 Aire : 74.45804187594514
Périmètre :  44  10  15  19 Aire : 74.45804187594514

Périmètre :  40  12  14  14 Aire : 75.8946638440411
Périmètre :  48   8  19  21 Aire : 75.8946638440411
Périmètre :  48  12  14  22 Aire : 75.8946638440411

Périmètre :  44  11  14  19 Aire : 76.2102355330306
Périmètre :  48  13  13  22 Aire : 76.2102355330306

Périmètre :  40  13  13  14 Aire : 76.68115805072325
Périmètre :  42  11  14  17 Aire : 76.68115805072325

Périmètre :  45  12  14  19 Aire : 83.8357769690244
Périmètre :  49  11  16  22 Aire : 83.8357769690244

Périmètre :  42  13  14  15 Aire : 84.0
Périmètre :  48  10  17  21 Aire : 84.0

Périmètre :  44  12  16  16 Aire : 88.99438184514796
Périmètre :  44  13  14  17 Aire : 88.99438184514796
Périmètre :  48  13  14  21 Aire : 88.99438184514796

Périmètre :  46  11  17  18 Aire : 90.9945053286186
Périmètre :  46  13  14  19 Aire : 90.9945053286186

minp=36, maxp-1 = 50.
Les comparaisons d'aires ont été faites sur les valeurs de 16s2  (des entiers).

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#63 11-07-2014 21:06:48

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

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

Re,

Ceci est bien intéressant et me convient, mais ce n'est pas tout à fait ce que j'ai demandé... lol

Je t'avais 'simplement' demandé que tu adaptes si possible ton programme post # 55 de façon à ce qu'il ne conserve que les triangles de même aires pour les périmètres considérés, autrement dit: les triangles de même aire ET de même périmètre...

;)


_____________


Sinon, j'ai de mon coté passé en revue tous les triangles et leur aire jusqu'à périmètre = 80 inclus:

Sauf erreurs ou oublis de ma part (c'est possible) voici quelques observations:

- Les périmètres pour lesquels il n'y a pas de triangle de même aire deviennent rares à partir de périmètre = 47. Le seul que j'ai trouvé au delà de périmètre = 47 est Périmètre = 69. [3-25, 27, 29 30, 33, 35, 36, 43, 45, 47, 69...]

- Le nombre d'ensembles de triangles partageant la même aire pour un périmètre donné est assez variable: les périmètres pour lesquels j'ai compté les plus de couples de triangles sont périmètre = 56 : 7 couples, périmètre = 70 : 9 couples, et périmètre = 78 : 8 couples plus un ensemble de 3.

- Je n'ai observé que 2 ensembles de 3 triangles partageant une même aire:
        - [correction faite]
        - Périmètre = 78: - 33,31,14 - 34,29,15 - 35,24,29

- J'ai compté deux couples de triangle héroniens:
        - Périmètre = 70: - 28,25,17 - 29,21,20 : aire = 210
        - Périmètre = 71: - 32,31,08 - 34,19,18 : aire = 124

- Je constate que les valeurs des cotés des triangles dont on parle semblent obéir à une certaine loi qui reste cependant à déterminer...

- Les couples de triangles isocèles de même aire et de même périmètre sont relativement rares je n'en compte que 9 sur une liste comptant 113 ensembles (jusqu'à périmètre = 80). Ils sont relativement nombreux parmi les premiers à apparaître: 3 des 4 premiers sont isocèles.

Voilà pour le moment.


@+

Dernière modification par 0^0 (12-07-2014 11:42:04)

Hors ligne

#64 12-07-2014 08:59:52

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

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

SAlut,


les triangles de même aire ET de même périmètre...

Ou comment être clair et précis en peu de mots...

Donc, avec périmètre mini 49, maxi 59 (maxp = 60, pour que la boucle s'arrête à 59)

Aire : 69.451
Périmètre :  49 ; côtés :   7  20  22
Périmètre :  49 ; côtés :  12  14  23

Aire : 94.868
Périmètre :  50 ; côtés :  10  19  21
Périmètre :  50 ; côtés :  13  15  22

Aire : 65.962
Périmètre :  51 ; côtés :   6  22  23
Périmètre :  51 ; côtés :   8  19  24

Aire : 57.236
Périmètre :  52 ; côtés :   5  23  24
Périmètre :  52 ; côtés :   8  19  25

Aire : 83.785
Périmètre :  52 ; côtés :   8  21  23
Périmètre :  52 ; côtés :  11  17  24

Aire : 86.533
Périmètre :  52 ; côtés :   8  22  22
Périmètre :  52 ; côtés :  14  14  24

Aire : 47.286
Périmètre :  53 ; côtés :   4  24  25
Périmètre :  53 ; côtés :  13  14  26

Aire : 96.907
Périmètre :  53 ; côtés :   9  22  22
Périmètre :  53 ; côtés :  13  16  24

Aire : 67.35
Périmètre :  54 ; côtés :   6  23  25
Périmètre :  54 ; côtés :  13  15  26

Aire : 113.842
Périmètre :  54 ; côtés :  11  21  22
Périmètre :  54 ; côtés :  12  19  23

Aire : 109.137
Périmètre :  55 ; côtés :  10  22  23
Périmètre :  55 ; côtés :  11  20  24

Aire : 70.2
Périmètre :  56 ; côtés :   6  24  26
Périmètre :  56 ; côtés :  12  17  27

Aire : 94.657
Périmètre :  56 ; côtés :   8  24  24
Périmètre :  56 ; côtés :  12  18  26

Aire : 109.982
Périmètre :  56 ; côtés :  10  22  24
Périmètre :  56 ; côtés :  12  19  25

Aire : 112.25
Périmètre :  56 ; côtés :  10  23  23
Périmètre :  56 ; côtés :  13  18  25

Aire : 125.22
Périmètre :  56 ; côtés :  12  21  23
Périmètre :  56 ; côtés :  14  18  24

Aire : 126.996
Périmètre :  56 ; côtés :  12  22  22
Périmètre :  56 ; côtés :  16  16  24

Aire : 132.816
Périmètre :  56 ; côtés :  13  21  22
Périmètre :  56 ; côtés :  14  19  23

Aire : 51.171
Périmètre :  57 ; côtés :   4  26  27
Périmètre :  57 ; côtés :  11  18  28

Aire : 102.176
Périmètre :  58 ; côtés :   9  23  26
Périmètre :  58 ; côtés :  14  17  27

Aire : 120.897
Périmètre :  58 ; côtés :  11  22  25
Périmètre :  58 ; côtés :  15  17  26

Aire : 144.499
Périmètre :  58 ; côtés :  14  21  23
Périmètre :  58 ; côtés :  17  17  24

Aire : 90.172
Périmètre :  59 ; côtés :   7  26  26
Périmètre :  59 ; côtés :  12  19  28

Aire : 131.998
Périmètre :  59 ; côtés :  12  22  25
Périmètre :  59 ; côtés :  16  17  26

Obtenu via :

#!/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

minp=49   # Choisir la valeur de départ pour le périmètre
maxp=60 # Choisir la valeur limite (maxp - 1) pour le périmètre
 
nombre=0
Trg,Peri,nb=[],[],0
Dico={}
 
for p in range(minp,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
            s=p*(p-2*AB)*(p-2*AC)*(p-2*BC)
            Trg.append((p,AC,BC,AB,s))  # Stockage du quintuplet 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(minp,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,(p,x,y,z,s)in enumerate(Peri):
            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


p0,x0,y0,z0,s0=Trg[0]
n,cpt=len(Trg),0
for i in range(n):
    j=i-1
    p0,x0,y0,z0,s0=Trg[j]
    p,x,y,z,s=Trg[i]
    if s==s0:
        if cpt==0: # évite de répéter le 1er triangle, si plus de deux
            print ("Aire :", round(sqrt(s)/4,3))
            print ("Périmètre :","%3i" % p0,"; côtés :","%3i" % x0,"%3i" % y0,"%3i" % z0)
        print ("Périmètre :","%3i" % p,"; côtés :","%3i" % x,"%3i" % y,"%3i" % z)
        cpt+=1
    else:
        if cpt>0:
            print()
            cpt=0

Ce que j'avais écrit au sujet des dictionnaires non ordonnés a fini par me frapper...
Je n'initialise donc plus ni ma liste initiale de Triangles Trg, ni le dictionnaire Dico; je les déclare en tant que tels et vides :
Trg=[] et Dico={}

- Je n'ai observé que 2 ensemble de 3 triangles partageant une même aire:

Il y a même un ensemble de 4 triangles (cf post #62 ):

Périmètre :  40  11  13  16 Aire : 70.9929573971954
Périmètre :  42   9  16  17 Aire : 70.9929573971954
Périmètre :  42  11  13  18 Aire : 70.9929573971954
Périmètre :  48   9  17  22 Aire : 70.9929573971954

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#65 12-07-2014 11:32:55

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

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

Salut,


Parfait, c'est tout-à-fait ce qu'il me faut!

Merci pour ton aide!
     (Et aussi pour tes explications au sujet des dictionnaires non ordonnés...)

:)


yoshi a écrit :

les triangles de même aire ET de même périmètre...

Ou comment être clair et précis en peu de mots...

Je l'étais, mais je t'accorde que mes phrases étaient sans doute trop longues...


yoshi a écrit :

Il y a même un ensemble de 4 triangles (cf post #62 ):

Périmètre :  40  11  13  16 Aire : 70.9929573971954
Périmètre :  42   9  16  17 Aire : 70.9929573971954
Périmètre :  42  11  13  18 Aire : 70.9929573971954
Périmètre :  48   9  17  22 Aire : 70.9929573971954

Oui, je vois ça, c'est ton autre programme (celui du post # 62?) qui te donne ces résultats intéressants?


<<<<<  Il m'intéresse aussi celui-là! => Si tu peux me l'afficher j'aimerais bien. >>>>>


_______________


En faisant tourner ton dernier programme, je m'aperçois que comme je l'avais supposé: j'avais bien fait des petites erreurs et oublis dans mes observations faites plus haut au post # 63.

J'avais notamment dit que j'avais observé 2 ensembles de 3 triangles partageant une même aire:

- Périmètre = 54: - 25,23,06 - 26,15,13 - 26,14,14
- Périmètre = 78: - 33,31,14 - 34,29,15 - 35,24,29

                Or il n'y a que le deuxième a être exact: soit Périmètre = 78: - 33,31,14 - 34,29,15 - 35,24,29


@+

Hors ligne

#66 12-07-2014 11:40:47

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

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

Re,

Je réfléchis déjà à un "tout en un" qui inclurait tous les modules...
Voilà déjà le module souhaité :

#!/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

minp=36   # Choisir la valeur de départ pour le périmètre
maxp=52 # Choisir la valeur limite (maxp - 1) 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={}
 
for p in range(minp,maxp): # p est le périmètre
    nb1,dp=nb,p/2
    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
            s=p*(p-2*AB)*(p-2*AC)*(p-2*BC)
            Trg.append((p,AC,BC,AB,s))  # Stockage du quintuplet 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
 
Trg=Trg[5:]
Trg=sorted(Trg,key=itemgetter(4)) # tri sur 5e élément d'un tuple
p0,x0,y0,z0,s0=Trg[0]
n,cpt=len(Trg),0
for i in range(1,n):
    j=i-1
    p0,x0,y0,z0,s0=Trg[j]
    p,x,y,z,s=Trg[i]
    if s==s0:
        if cpt==0:
            print ("Périmètre :","%3i" % p0,"%3i" % x0,"%3i" % y0,"%3i" % z0,"Aire :",sqrt(s0)/4)
        print ("Périmètre :","%3i" % p,"%3i" % x,"%3i" % y,"%3i" % z,"Aire :",sqrt(s)/4)
        cpt+=1
    else:
        if cpt>0:
            print()
            cpt=0

Je t'enverrais la totale dès ce que sera fait...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#67 12-07-2014 11:43:11

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

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

Re,

Merci!

Ah oui ce serait pas mal en effet!


@+

Hors ligne

#68 12-07-2014 15:45:18

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

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

Salut,

C'est parti.
J'ai testé et pas trouvé de dysfonctionnements...

Tiens-moi au courant.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#69 12-07-2014 16:58:51

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

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

Re,

Je ne vois pas le programme...


@+

Hors ligne

#70 12-07-2014 18:08:15

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

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

Salut,

C'est parti = Envoyé par mail...
Bon, je double :

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

from math import sqrt
from operator import itemgetter


def MinMax():
    print ("            +++ Choix des périmères mini et maxi +++\n")
    while 1:
        mini=input("Perimètre minimim souhaité ?  ")
        try:
            minp=int(mini)
            break
        except ValueError:
            print ("Entrée incorrecte. Veuillez recommencer S.V.P..\n\n")            
    while 1:
        maxi=input("Perimètre maximum souhaité ?  ")
        try:
            maxp=int(maxi)
            if maxp<=minp:
                print ("Erreur,le maximum doit être supérieur au mini. Veuillez recommencer S.V.P..\n\n")
            else:
                break
        except ValueError:
            print ("Entrée incorrecte. Veuillez recommencer S.V.P..\n\n")
    print()
    return minp,maxp

def Generation_des_Triangles(minp,maxp,Trg,Dico,chx):
    nb,s=0,0
    for p in range(minp,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
                if chx in "234":
                    s=p*(p-2*AB)*(p-2*AC)*(p-2*BC)
                Trg.append((p,AC,BC,AB,s))  # Stockage du quintuplet 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
    return Trg,Dico

def Points_Intérieurs_triangles(Max,nombre,Trg):
    print("       +++ Points intérieurs à distances entières des sommets +++\n")
    for p,AC,BC,AB,s 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
                            s=round(sqrt(s)/4,3)
                            print("N°","%4i" % nombre," : ","Périmètre :","%3i" % p," *", "%3i" % AC,"%3i" % BC,"%3i" % AB," --- ","%3i" % AM,"%3i" % BM, "%3i" % CM)
                            if nombre == 1300:            
                                return
                else:
                    break

def Perimètres_et_aires_croissantes(minp,maxp,Trg,Dico):
    print ("   +++ Tri à périmètre égal par aires croissantes +++\n")
    for p in range(minp,maxp):
        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,(p,x,y,z,s)in enumerate(Peri):
                Ordre.append((i,s))
            Ordre=sorted(Ordre,key=itemgetter(1)) # tri sur 2e élément d'un tuple
            for i,(no,s) in enumerate(Ordre): # évite gestion compteur
                Trg[a+i]=Peri[no]  #remplacement par les tuples triés              
    # Affichage de la liste triée
    p1=minp
    for i,(p,x,y,z,s)in enumerate(Trg):
        if p!= p1:
            p1=p
            print("\n")  
        print ("Périmètre :","%3i" % p,"%3i" % x,"%3i" % y,"%3i" % z,"Aire :",round(sqrt(s)/4,3))
    return
   
def TriGlobal_AiresEgales_Affiche(Trg):
    print("       +++ Triangles triés par aires égales croissantes +++\n")
    Trg=sorted(Trg,key=itemgetter(4)) # tri sur 5e élément d'un tuple
    p0,x0,y0,z0,s0=Trg[0]
    n,cpt=len(Trg),0
    for i in range(1,n):
        j=i-1
        p0,x0,y0,z0,s0=Trg[j]
        p,x,y,z,s=Trg[i]
        if s==s0:
            if cpt==0:
                print ("Périmètre :","%3i" % p0,"%3i" % x0,"%3i" % y0,"%3i" % z0,"Aire :",sqrt(s0)/4)
            print ("Périmètre :","%3i" % p,"%3i" % x,"%3i" % y,"%3i" % z,"Aire :",sqrt(s)/4)
            cpt+=1
        else:
            if cpt>0:
                print()
                cpt=0
    return

def Tri_PerimetresEgaux_AiresEgales_Affichage(minp,maxp,Trg,Dico):
    print("       +++ Triangles triés par périmètres égaux croissants ET aires égales croissantes +++\n")
    for p in range(minp,maxp):
        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,(p,x,y,z,s)in enumerate(Peri):
                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  
     
    p0,x0,y0,z0,s0=Trg[0]
    n,cpt=len(Trg),0
    for i in range(n):
        j=i-1
        p0,x0,y0,z0,s0=Trg[j]
        p,x,y,z,s=Trg[i]
        if s==s0:
            if cpt==0: # évite de répéter le 1er triangle, si plus de deux
                print ("Aire :", round(sqrt(s)/4,3))
                print ("Périmètre :","%3i" % p0,"; côtés :","%3i" % x0,"%3i" % y0,"%3i" % z0)
            print ("Périmètre :","%3i" % p,"; côtés :","%3i" % x,"%3i" % y,"%3i" % z)
            cpt+=1
        else:
            if cpt>0:
                print()
                cpt=0
    return

# Menu
stoppe=0
while not stoppe:
    Trg,nb,nombre=[],0,0
    Dico={}
    print ("                 **************************")
    print ("                 * Tout sur les triangles *")
    print ("                 **************************")
    print ()
    print ()
    print ("             Voulez-vous :")
    print ()
    print ("     1. Rechercher les triangles avec points intérieurs à distances entières")
    print ("     2. Rechercher les triangles de même aire")
    print ("     3. Rechercher les triangles de même aire ET même périmètre")
    print ("     4. Afficher les triangles par aires croissantes pour des périmètres égaux")
    print ()
    print ("        5. Quitter le programme")
    print ()
    print ("                   **  Votre choix : * ",end="")
    while 1:
        chx=input()
        if chx=="5":
            stoppe=1
            break
        elif chx in "1 2 3 4":
            print ("\n")
            minp,maxp=MinMax()
            Trg,Dico=Generation_des_Triangles(minp,maxp,Trg,Dico,chx)
            if chx =="1":
                print()
                Points_Intérieurs_triangles(maxp,nombre,Trg)
                break
            elif chx=="2":              
                TriGlobal_AiresEgales_Affiche(Trg)
                break
            elif chx=="3":              
                Tri_PerimetresEgaux_AiresEgales_Affichage(minp,maxp,Trg,Dico)
                break
            else:                
                Perimètres_et_aires_croissantes(minp,maxp,Trg,Dico)
                break
        else:
            print ("Réponses attendues : 1,2,3,4 ou 5. Veuillez recommencer s'il vous plaît...")
            print ("\n")
            print ("\n")
            break
    print ("\n")
    print ("\n")

print ("                 A la prochaine !")

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#71 12-07-2014 18:11:43

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

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

Re,

Ah je n'avais pas vu excuse moi!

Je vais l'essayer!

:)

@+

Hors ligne

#72 12-07-2014 19:16:19

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

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

Re,

Il est tout bien ce programme!! :)  :)

Super!!  :)

Un grand grand merci à toi! :)  :)  :)


Juste un point de détail: je suggère de modifier comme suit (en début de programme):

[...]

def MinMax():
    print ("            +++ Choix des périmères mini et maxi +++\n")
    while 1:
        mini=input("Perimètre minimim souhaité ?  ")
        try:
            minp=int(mini)
            break
        except ValueError:
            print ("Entrée incorrecte. Veuillez recommencer S.V.P..\n\n")            
    while 1:
        maxim=int(input("Perimètre maximum souhaité ?  ")) #####
        maxi=maxim+1 #####
        try:
            maxp=int(maxi)
            if maxp<=minp:
                print ("Erreur,le maxi doit être supérieur ou égal au mini. Veuillez recommencer S.V.P..\n\n") #####
            else:
                break
        except ValueError:
            print ("Entrée incorrecte. Veuillez recommencer S.V.P..\n\n")
    print()
    return minp,maxp

[...]

(Les modifications sont indiquées par des # # # # #)

=> De cette manière les périmètres maxi que l'on entre sont réellement les périmètres maxi.


@ +

Hors ligne

#73 12-07-2014 19:29:52

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

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

Re,

Si ça te convient mieux...
Moi j'ai pris l'habitude, quand je voulais une fin de boucle de n, de rentrer n+1...
Affaire de goût !

Cela prouve en tout cas que tu comprends et que tu progresses en Python.
Précisions :
while 1 == Tant que c'est vrai, puisque 1 = True = Vrai, 0 = False = Faux.
while 1 est une boucle infinie dont on ne peut sortir qu'avec break...

stoppe = 0
while not stoppe:
on part avec stoppe = 0 donc faux...
while not stoppe = Tant que stop^pe n'est pas vrai.
C'est une variante de la précédente et dont on sort en mettant stoppe à 1 ou avec break

try:
    minp=int(mini)
    ...
exceptValueError:
    ....

c'est le couple "infernal" de Python.
Si je ne fais pas ça, si tu rentres autre chose qu'un nombre, paf plantage !
Là, j'intercepte l'entrée incorrecte et je renvoie un message d'invite à recommencer sans planter le programme.

@+

[EDIT]
Ça fonctionne, mais il y a erreur de module à cause des noms donnés.
J'ai fait quelques modifs, je te mets ça demain ici.

Dernière modification par yoshi (12-07-2014 22:09:13)


Arx Tarpeia Capitoli proxima...

Hors ligne

#74 12-07-2014 21:58:39

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

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

Re,

Oui comme je le disais: c'était un point de détail...


Bon, si je trouve des résultats surprenants, j'en ferai part ici.


@+

Hors ligne

#75 12-07-2014 22:10:34

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

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

Salut,

Ça fonctionne, mais je me suis trompé de module à cause des noms que j'ai donnés.
J'ai fait quelques modifs, je te remets ça demain ici.

@+


Arx Tarpeia Capitoli proxima...

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 deux moins quarantecinq
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