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

#1 02-07-2014 12:55:09

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

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

Bonjour,

Il s'agit de triangles à cotés entiers (Suite à discussion initiée par 0^0 dans le forum "Enigmes").
le sommet A est à l'origine des coordonnées et [AB], le plus grand coté, sur l'axe des abscisses.
Ce code est adaptable pour des triangles non-scalènes.
Le langage choisi est un langage strictement typé pour assurer que certains calculs se font bien sur des entiers.

Programme pour déterminer les triangles scalènes de cotés entiers possédant au moins un point M à distance entière de chaque sommet..
Le programme est un module (.vb) dans Visual Basic express 2010
L' option "Strict On" garantit que les calculs sur entiers Long  dans la partie "recalcul sur entiers" s'effectuent bien sur des "Long" sans aucune introduction de décimales.
Voir() est une procédure (non donnée) de création simultanée de fichier en plus de l'affichage sur console.

Option Explicit On
Option Strict On
Imports System.Math
Module TrianglesEntiers_M

    Sub TrianglesEntiers()
        Dim nombre As Integer = 0
        Dim Max As Long = 120

        Dim CM, Yc2, Ym2 As Long
        Dim xc, yc, xm, ym As Double
        For AC As Long = 1 To Max
            Dim AC2 As Long = AC * AC
            For BC As Long = AC + 1 To Max + 1
                Dim BC2 As Long = BC * BC
                For AB As Long = BC + 1 To AC + BC - 1
                    Dim AB2 As Long = AB * AB
                    For AM As Long = 1 To AB - 1
                        Dim AM2 As Long = AM * AM
                        For BM As Long = AB - AM + 1 To Max
                            Dim BM2 As Long = BM * BM

                            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 Then

                                'M est intérieur
                                Dim CMd As Double = Sqrt((xm - xc) ^ 2 + (ym - yc) ^ 2)
                                CM = CInt(CMd + 0.000000001)
                                If Abs(CM - CMd) < 0.000001 Then

                                    ' recalcul sur entiers
                                    Dim xcL, xmL As Long
                                    xcL = AC2 + AB2 - BC2
                                    xmL = AM2 + AB2 - BM2
                                    Yc2 = 4 * AB2 * AC2 - (xcL * xcL) '4*AB*AB*yc*yc
                                    Ym2 = 4 * AB2 * AM2 - (xmL * xmL) '4*AB*AB*ym*ym
                                    Dim G As Long = 2 * AB2 * (AC2 + AM2 - (CM * CM)) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
                                    If G * G = Yc2 * Ym2 Then
                                        nombre += 1
                                        Voir("N° " & nombre & " : " & AC & " " & BC & " " & AB & " " & AM & " " & BM & " " & CM)
                                        If nombre = 1001 Then Exit Sub
                                    End If
                                End If
                            else
                                exit for ' dès que M est extérieur
                            End If
                        Next
                    Next
                Next
            Next
        Next
    End Sub 'TrianglesEntiers()

End Module

Dernière modification par totomm (03-07-2014 17:18:16)

Hors ligne

#2 02-07-2014 15:45:35

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

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

Re,

Il faudra bien que je m'y mette un jour...


@+

Hors ligne

#3 03-07-2014 11:52:38

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Bonjour,

J'ai traduit aussi scrupuleusement que possible du VB en Python, mais j'ai un plantage au 3e tour ici :
ym = sqrt(AM2 - xm**2)
Voilà ce que me donne print(xm,AM2,AB2,AC2,BC2) placé juste avant cette ligne :
0.1 1 25 9 16
-1.0 1 25 9 16
-2.3 1 25 9 16
et le résultat de AM2-xm**2 est -4.29...

ou avec les quotients entiers :
0 1 25 9 16
-1 1 25 9 16
-3 1 25 9 16
-8
Donc l'erreur est "normale"... sauf que le passage de -4.29 à -8 simplement en substituant // à / me paraît louche !

J'ai dû rater quelque chose avant, mais quoi... Je n'ai plus le temps de chercher pour le moment.

Pour information, en Python (j'ai découvert ça depuis peu) :

>>> sqrt(225).is_integer()
True
>>> sqrt(224).is_integer()
False
>>>

@+

Dernière modification par yoshi (03-07-2014 14:45:30)


Arx Tarpeia Capitoli proxima...

Hors ligne

#4 03-07-2014 17:33:19

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

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

Bonsoir,

@ yoshi : Que c'est difficile de ne pas transmettre les bugs initiaux des programmes !!
J'ai eu aussi ce bug sur sqrt d'une valeur négative parce que BM croit jusqu'à Max.

Pourtant j'y avais pensé dès que j'ai commencé à écrire le programme, mais j'ai oublié de transmettre ce que j'avais aouté :

                            else
                                exit for ' dès que M est extérieur

juste avant le dernier "end if" qui précède les "next".
Cela empèche BM de progresser et renvoie au AM suivant, xm ne peut plus être < 0 : je viens de l'insérer au post #1

Les 1001 triangles sont calculés en 2 mn 57s et non 14 min 57 s.

Sauf nouvel oubli. Cordialement : totomm

Hors ligne

#5 03-07-2014 18:08:58

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Bonsoir,

Rectifié, plus de plantage...
Le prog tourne... sans résultats.
Donc j'ai un autre problème ailleurs.
Probablement déjà la transcription de :
1)  CM = CInt(CMd + 0.000000001)
CInt : j'ai cherché une doc où j'ai cru lire
CInt(8,43) --> 8
CInt(8,51) --> 9
Ce serait l'arrondi à l'entier le plus proche ?
Quel est le but de l'ajout de 0.000000001 ?

2)  If Abs(CM - CMd) < 0.000001 Then
Test si CM -CMd très proche de 0 (à 10^-6 près) ?

Donc, j'ai fixé Max à 20 et je lui ai fait afficher AB, AC, BC dans cet ordre.
Arrêt à 37, 19, 20 sans rien trouver...
Je teste l'arrondi à l'entier : pas plus de succès.

from math import sqrt

def triangles(Max, nombre):
    for AC in range(1,Max):
        AC2 = AC**2
        for BC in range(AC + 1, Max + 1):
            BC2 = BC**2
            for AB in range(BC + 1,AC + BC - 1):
                AB2 = AB**2
                for AM in range(1, AB - 1):
                    AM2 = AM**2
                    for BM in range(AB - AM + 1,Max):
                        print(AB,AC,BC)
                        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 = round((CMd + 0.0000001),0)
                            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°",nombre," : ",AC,BC,AB," --- ",AM,BM,CM)
                                    if nombre == 11:             # j'ai demandé l'arrêt à 11  et non 1001 pour test
                                        return
                        else:
                            break

nombre = 0
Max = 20
triangles(Max, nombre)

Je verrai ça plus tard

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 03-07-2014 19:58:15

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

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

Bonsoir,

J'ai vu dès la 2ème ligne : AC2 = AC**2
AC2 va être un nombre flottant. il faut AC2=AC*AC pour que AC2 soit un nombre entier...

Voici mon code qui donne (Pyton 3.2) exactement les mêmes 1001 triangles que le programme en Visual Basic
mais en Python il met environ 23 minutes (idle GUI sous Windows, interprété), sans créer de fichier,
alors que Vb (compilé et sous debugger) met moins de 3 minutes (en créant aussi un fichier en plus de l'affichage console

from math import sqrt

def trianglesEntiers():
    nombre, max=0,121
    for ac in range(1,max):
        ac2=ac*ac
        for bc in range(ac+1,max+1):
            bc2=bc*bc
            for ab in range(bc+1,ac+bc-1):
                ab2=ab*ab
                for am in range(1,ab-1):
                    am2=am*am
                    for bm in range(ab-am+1,max):
                        bm2=bm*bm
                        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.000000001)
                            if abs(cm-cmd)<0.000001:
                                #recalcul avec entiers
                                xcl=ac2+ab2-bc2
                                xml=am2+ab2-bm2
                                yc2=4*ab2*ac2-(xcl*xcl)
                                ym2=4*ab2*am2-(xml*xml)
                                g=2*ab2*(ac2+am2-(cm*cm))-((ab2+am2-bm2)*(ac2+ab2-bc2))
                                if g*g==yc2*ym2:
                                    nombre+=1
                                    print("N°",nombre," :",ac,bc,ab,am,bm,cm)
                                    if nombre==1001:
                                        return
                        else:
                            break
trianglesEntiers()

Hors ligne

#7 03-07-2014 20:07:36

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Bonsoir,

Merci.

AC2 va être un nombre flottant. il faut AC2=AC*AC pour que AC2 soit un nombre entier...

C'est que j'ai remplacé partout !
Mais là quelque chose méchappe :
vous êtes en train de dire que [tex]AC^2 \ne AC*AC[/tex] au niveau typage !
Il va falloir que je vérifie ça...
J'avais déjà lu qu'en Python AC*AC était un peu plus rapide que AC², mais encore jamais que l'un était un flottant et l'autre non !

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 03-07-2014 20:07:54

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

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

Re-Bonsoir,

Je n'ai pas trouvé comment arrêter (sortir de l’exécution) quand on veut terminer depuis une boucle for imbriquée...
Ce pourquoi j'ai utilisé une procédure def car le return fonctionne alors !

Je reprends la constatation
Si la comparaison if g*g==yc2*ym2: se fait sur des flottants, il suffit qu'une 15ème décimale soit différente (!!!) pour faire échouer ce qui serait vrai entre entiers

Cordialement : totomm

Hors ligne

#9 03-07-2014 20:09:31

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Re,

Je n'ai pas trouvé comment arrêter (sortir de l’exécution) quand on veut terminer depuis une boucle for imbriquée...
Ce pourquoi j'ai utilisé une procédure def car le return fonctionne alors !

Même raison !

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#10 03-07-2014 20:21:18

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

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

ReBonsoir,

Dès que l'on utilise une opération autre que multiplication pour élever à une puissance, on passe en flottant (double en général)
x=2**3 donne x en flottant, x=2*2*2 donne x en entier : C'est le piège de Python qui donne par ailleurs des programmes plus lisible et plus faciles à écrire que VB. C'est la grande différence, avec les inconvénients de ses avantages entre un langage typé (VB) et non typé (Python).

Mais je ne connais pas suffisamment Python pour savoir si on peut forcer son comportement (typage dynamique vers statique) comme le fait l'option "strict on" avec VB.
Ainsi avec VB, s'il m'arrive d'écrire x=y^2 avec x déclaré entier (ou entier long), j'ai un avertissement.

Cordialement

EDIT du 04/07/2014  NON : En Python, X=2**3 est bien du type 'int' de même que x=2^3 en Visual Basic si x est déclaré integer.
L'opération "élever à la puissance" est dans le cas du VB "effectuée en flottant", mais une conversion est faite éventuellement suivant le type déclaré. En Python je suppose que cela dépend du type des 2 nombres utilisés ?

Dernière modification par totomm (04-07-2014 08:14:37)

Hors ligne

#11 03-07-2014 21:06:37

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Dès que l'on utilise une opération autre que multiplication pour élever à une puissance, on passe en flottant (double en général)
x=2**3 donne x en flottant, x=2*2*2 donne x en entier : C'est le piège de Python (...)

Quel piège ?
Pourtant, voyez ces vérifications :
- directe :

>>> type(2**3)
<class 'int'>
 

- indirecte :

>>> (2**3).is_integer()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    (2**3).is_integer()
AttributeError: 'int' object has no attribute 'is_integer'

>>>

Alors ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#12 04-07-2014 06:47:31

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

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

Bonjour,

@ yoshi : Je peux m'être trompé en faisant des hypothèses sur Python que je connais insuffisamment....

Et j'ai regardé plus avant votre programme : xc et xm doivent être calculés en division normale, pas en division entière (euclidienne)...
Le principe de mon programme c'est de trouver la longueur d'un [CM] suffisamment proche d'un entier pour avoir alors un entier dont on vérifie sa pertinence.

Et mieux vaut peut-être convertir CM en entier par CM = int() que par CM=round() qui pourrait (?) renvoyer une valeur entière représentée en flottant...

Dernière modification par totomm (04-07-2014 06:54:49)

Hors ligne

#13 04-07-2014 07:52:45

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

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

Bonjour,

avec type(x) on voit que 3**2 est bien du type entier, mais round(2.00001,0) reste du type float et vaut 2.0
EDIT : J'ai donc modifié (EDIT) mon post #10

Avec les 2 // en / pour xc et xm dans le programme de yoshi : C'est OK, mais CM reste du type float
Avec round() remplacé par int() , Max =121 et if nombre=1001 : Résultat exactement identique pour programme yoshi et programme VB de totomm

Dernière modification par totomm (04-07-2014 08:15:44)

Hors ligne

#14 04-07-2014 09:13:19

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Bonjour

Ok, objection valable pour round().
Je plaide les circonstances atténuantes : je n'ai pas VB et j'ai cherché un équivalent à CInt...
J'ai pensé à int, mais int(3.85)--> 3 alors que, sauf erreur, en VB CInt(3,85) --> 4 : si c'est bien le cas, la nuance de taille quand même ! D'où l'emploi du round() insuffisamment réfléchi :
pour simuler le CInt, j'aurais dû écrire int(round(2.00001,0)).
D'autre part, je ne savais pas quelle était la "philosophie" précise sous-tendant vos calculs.
Idel pour le : la doc consultée m'a dit qu'en VB le / désignait le quotient entier : apparemment, c'est donc inexact !

Je vais devoir comparer votre version avec la mienne de très près, parce que je viens de remettre / en lieu et place de // et corriger round() en int(round()), je n'ai pas plus de résultats qu'hier...
Même punition en mettant seulement int().
J'ai donc encore raté autre chose...

J'ai pourtant adapté votre programme ainsi :
j'ai copié/collé votre prog dans Python 3.4 et fait les modifs ligne après ligne pour être sûr de ne rien inventer...

Bon, là, je n'ai plus le temps, peut-être d'ici 2-3 h...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#15 04-07-2014 10:54:55

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

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

bonjour,

Voila exactement votre code avec 3 lignes modifiées plus Max=121 :

from math import sqrt

def triangles(Max, nombre):
    for AC in range(1,Max):
        AC2 = AC**2
        for BC in range(AC + 1, Max + 1):
            BC2 = BC**2
            for AB in range(BC + 1,AC + BC - 1):
                AB2 = AB**2
                for AM in range(1, AB - 1):
                    AM2 = AM**2
                    for BM in range(AB - AM + 1,Max):
                        #print(AB,AC,BC)
                        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 = round((CMd + 0.0000001),0)
                            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°",nombre," : ",AC,BC,AB," --- ",AM,BM,CM)
                                    if nombre == 11:             # j'ai demandé l'arrêt à 11  et non 1001 pour test
                                        return
                        else:
                            break

nombre = 0
Max = 121
triangles(Max, nombre)


et le résultat de l'exécution :

Python 3.2.2 (default, Sep  4 2011, 09:07:29) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
N° 1  :  8 19 22  ---  6 17 4
N° 2  :  12 57 59  ---  8 54 6
N° 3  :  13 30 32  ---  6 28 8
N° 4  :  14 38 39  ---  8 34 8
N° 5  :  16 38 44  ---  12 34 8
N° 6  :  16 39 43  ---  13 34 7
N° 7  :  16 70 76  ---  14 64 9
N° 8  :  16 71 73  ---  11 63 13
N° 9  :  17 38 43  ---  12 35 7
N° 10  :  17 73 80  ---  21 61 13
N° 11  :  18 20 26  ---  15 13 9
>>>

Vous pouvez supprimer ce post après l'avoir vu. Cordialement totomm

Hors ligne

#16 04-07-2014 12:22:25

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

RE,

Effectivement, votre version tourne...
J'ai donc comparé point par point avec les dernières modifs de ce matin (pas retouché depuis) : conforme !
Je l'ai donc relancé et maintenant il tourne !
Invraisemblable... C'est bien la première fois que ça m'arrive.
Désolé, mais j'ai quelques soucis domestiques en ce moment avec ma chère vieille (88 ans) mère : ça m'accapare pas mal.
Bon l'important est qu'il fonctionne.
Je vais pouvoir essayer de gagner du temps.

Merci

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#17 04-07-2014 15:28:46

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

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

Bonjour,

Sans doute Max était resté â 20 en avant-dernière ligne. Le plus petit côté AB est de 22...

Hors ligne

#18 04-07-2014 19:41:05

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

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

Bonjour

Serait-il très compliqué de modifier le programme de façon à ce qu'il donne aussi les cas où certaines d'entre les valeurs AB, BC, AC, AM, BM et CM sont égales?

Il permettrait ainsi de fournir la liste complète de tous les triangles entiers ABC possibles "ayant un point M intérieur à distances entières des sommets" pour un "Max" donné, ce qui serait vraiment parfait.


@+

Hors ligne

#19 05-07-2014 14:05:23

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

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

Bonjour,

@0^0 : Bien des choses ne sont pas si compliquées, donc faisables. Et chacun peut en faire une partie.

Si vous voulez "la liste complète de tous les triangles entiers ABC possibles…",
il faut peut-être définir un classement de tous ces triangles : Je vous suggère un classement par périmètres croissants.
Définissez donc comment cela pourrait être et donnez les 20 premiers de votre classement.

Hors ligne

#20 05-07-2014 16:06:44

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

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

Bonjour,

totomm a écrit :

Bien des choses ne sont pas si compliquées, donc faisables. Et chacun peut en faire une partie.

Que j'aimerais que certaines choses "pas si compliquées" aux dires des uns, me soient plus familières... Ainsi, je pourrais tenter de participer comme je le souhaiterais, même si ce n'est que pour une petite part...

Or je suis tout juste en train de découvrir les bases 'Python': je précise que je ne connaissais encore rien de rien à la programmation il n'y a que quelques jours de cela...

totomm a écrit :

"Si vous voulez "la liste complète de tous les triangles entiers ABC possibles…",
il faut peut-être définir un classement de tous ces triangles : Je vous suggère un classement par périmètres croissants.
Définissez donc comment cela pourrait être et donnez les 20 premiers de votre classement.

Je planche sur la question depuis un certain temps sans guère avancer...

Au départ je recherchais une formule permettant d'attribuer à tout triangle une seule valeur qui dépendrait à la fois de son aire et de son périmètre, valeur permettant un classement et qui serait en théorie la même pour tous les triangles ayant une même aire et un même périmètre.

Cela dit, j'en arrive aussi à me dire que considérer seulement le Périmètre est sans doute plus adéquat (???) ou en tout cas au moins plus pratique, à défaut de mieux...
Je dis cela dans le sens que pour un périmètre donné, il existe une aire minimale égale à 0 (soit celle du triangle plat correspondant) et une aire maximale égale à celle du triangle équilatéral ayant ce périmètre, soit:  [tex]S_{max} = \left(\frac{Périmètre}{3}\right)^2.\frac{\sqrt{3}}{4}[/tex], alors que ce n'est pas le cas si l'on considère seulement les aires...
> En effet, pour chaque aire donnée, il y a bien un périmètre minimal correspondant: encore celui d'un triangle équilatéral, mais pas de périmètre maximal défini, car ce dernier peut être infini... Ce serait bien gênant pour un triangle à qui l'on attribuerait une valeur qui ne l'est pas*!

*note: autrement dit: infinie...


Mis à part cela, et à part si j'ai raté quelque chose, je ne vois pas en quoi un tel classement serait finalement nécessaire pour obtenir l'ensemble des triangles adéquats possibles - en y incluant ceux possédants des dimensions égales - pour un "Max" choisi, arbitraire certes....


@+

Hors ligne

#21 05-07-2014 19:14:38

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

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

Bonsoir,

Complément à mon post #19 : On doit pouvoir considérer les triangles dont le périmètre est 3, puis 4, puis 5, etc.
Pour chaque valeur du périmètre le nombre de triangles entiers est fini.
Pas besoin donc d'évoquer les aires pour classer les triangles...
Pouvez-vous ainsi, en utilisant papier crayon (avant d'essayer de programmer) énumérer les 20 premiers ?

Hors ligne

#22 05-07-2014 19:40:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 376

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

Saut,

@O^O
Bravo d'essayer d'apprendre à programmer.
Presque tout le monde est d'accord pour dire qu'il vaut mieux commencer par le livre de Gerard Swinnen : Apprendre à programmer avec Python 3.
Tu peux soit acheter le livre si tu préfères une version papier ou le télécharger en cliquant ici.
Le lien est tout à fait légal : ce livre est sous licence libre.
Si ça ne marche pas tout seul au début (et même après) ne pas te décourager, mais "20 fois sur le métier remets ton ouvrage"...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#23 06-07-2014 22:52:26

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

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

Bonsoir,


@ Yoshi,

Merci pour les encouragements et le lien. Je suis tombé par moi-même sur ce livre qui a l'air excellent, je vais m'y mettre.

C'est vraiment bien que des livres de cette qualité soient en accès libre.


@ totomm,

En m'aidant de vos (désolé pour la politesse, je m'aperçois que je vous tutoyais) résultats, voici les 20 premiers que je trouve, vérifications faites à la calculette:

N° 01  :  08 19 22  -  06 17 04 --- 49 --- 27
N° 02  :  18 20 26  -  15 13 09 --- 64 --- 37 --- 179,5995..
N° 03  :  20 21 23  -  14 13 10 --- 64 --- 37 --- 194,9769..
N° 04  :  13 30 32  -  06 28 08 --- 75 --- 42
N° 05  :  23 27 28  -  18 20 08 --- 78 --- 46 --- 286,9982..
N° 06  :  24 26 28  -  17 21 08 --- 78 --- 46 --- 289,2317..
N° 07  :  20 31 39  -  19 22 11 --- 80 --- 52
N° 08  :  26 30 32  -  19 15 18 --- 88 --- 52
N° 09  :  24 27 39  -  15 26 11 --- 90 --- 52 --- 319,4683..
N° 10  :  24 31 35  -  19 26 07 --- 90 --- 52 --- 363,7306..
N° 11  :  14 38 39  -  08 34 08 --- 91 --- 50
N° 12  :  16 38 44  -  12 34 08 --- 98 --- 54 --- 298,2197..
N° 13  :  16 39 43  -  13 34 07 --- 98 --- 54 --- 311,4803..
N° 14  :  17 38 43  -  12 35 07 --- 98 --- 54 --- 321,6955..
N° 15  :  22 37 39  -  13 28 15 --- 98 --- 56 --- 398,4469..
N° 16  :  25 29 44  -  25 21 10 --- 98 --- 56 --- 342,9285..
N° 17  :  25 36 37  -  14 27 15 --- 98 --- 56 --- 428,3176..
N° 18  :  30 31 37  -  26 13 20 --- 98 --- 59 --- 448,4372..
N° 19  :  23 36 41  -  10 33 15 ---100 --- 58 --- 412,4318..
N° 20  :  28 32 40  -  28 13 21 ---100 --- 62 --- 444,9719..

Les trois dernières colonnes sont respectivement les sommes des longueurs extérieures, les sommes des longueurs intérieures et les aires des triangles ABC de mêmes périmètres.

L'ordre exact est discutable... Au moins deux aires (mises en rouge) pourraient être considérées en vue d'un autre classement...


@+

Dernière modification par 0^0 (07-07-2014 20:35:05)

Hors ligne

#24 07-07-2014 08:06:52

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

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

Bonjour,

@ 0^0 : il y a une petite incompréhension dans votre dernière réponse après mes posts #19 et #21.

Il ne s'agit pas de considérer les triangles présents dans le fichier que je vous ai envoyé, ces triangles sont scalènes,  tels que AC, BC, AB entiers et AC<BC<AB. Quand AC est choisi on a une infinité de triangles possibles si on ne limite pas BC et AB, donc on ne peut énumérer TOUS les triangles ainsi.

Pour énumérer TOUS les triangles entiers (puisqu'ils sont "dénombrables"), il faut énumérer successivement tous les triangles ayant pour périmètre 3, puis 4, etc.
Pour chaque périmètre successif les triangles possibles sont en nombre fini. C'est le principe du "dénombrable" : une infinité dénombrable (les périmètres) d'ensembles finis (les triangles ayant un périmètre donné).

Ensuite on pourra définir parmi TOUS les triangles entiers, comment on trouve tous ceux qui ont au moins un point à distance entière des 3 sommets

Hors ligne

#25 07-07-2014 17:34:31

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

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

Bonjour,


En effet totomm, j'avais mal compris...


- Je ne regrette cependant pas d'avoir fait ce petit travail en post #23, car il a au moins le mérite de mettre en évidence 2 ou 3 propriétés que je trouve assez intéressantes... Les avez-vous tu remarquées? -



Voici donc les 20 premiers triangles demandés + 88:


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


Note: Je n'ai pas pris en compte les triangles plats.


[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.]



@+

Dernière modification par 0^0 (08-07-2014 08:07:48)

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 deuxième mot de cette phrase?

Pied de page des forums