xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 2011
-
27 mai 2006 à 12:00
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007
-
11 juin 2006 à 22:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 11 juin 2006 à 22:12
Tu as raison, il faut que je change de type de programme. Je commence à tourner en rond ...
Mais pas au point de créer des virus ou des trucs qui "éteignent" ou font "planter".
J'ai passé l'age !!!
J'ai quand-même mis sur le site une nouvelle source : "Le centre du cercle retrouvé par Napoléon", puisque j'ai terminé le code aujourd'hui.
Mais rien de bien nouveau en fait sur l'écriture elle-même.
Ta question : " Sais-tu comment faire croire à Windows que tu utilises la touche < caps-lock > ?"
Réponse : franchement, je ne sais pas.
Je vais regarder tes 2 nouvelles sources la semaine prochaine.
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 11 juin 2006 à 17:20
il est vrais que hack//sing ne passe plus sur game one mais tu peut te référer a la colection des .hack//
il y a quelque jeux-video qui sont sortits...
mais pas exelents...
sinon pour faire une capture d'écrant : je sais pas.
et toi sait tu comment faire croire a windows que tu utilise la toucehe caps-locks
maintenant tu nous fait encore une source sur les géometrie...
soit plus creatif...
moi g créé un virus, 3 class, 2 utilitaires pour windows, 1programme de compression (pas genial), 3 otre de codage, 8 qui servent a rien, 1 qui fait planter python, 1 idem mé pour windows, et pour finir un qui eiteindre window dé qu'il se demare...
voil a c apeu pré tout et oui une IA pouris..
mé change de type de programme..
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 10 juin 2006 à 15:18
Sir XEOLINE !
La version 10 reprend la fonction "Naruto" que tu as insérée dans le script.
Je l'ai complétée pour que le triangle reste toujours à l'intérieur de la fenêtre.
Merci en tout cas, car je n'avais pas trouvé.
Le script est en effet très chargé en commentaires; mais je préfère le laisser comme cela pour le moment pour ceux qui chercheront à étudier le problème de math et aussi pour les débutants.
Je n'ai pas encore regardé tes deux sources : je veux le faire "à tête reposée", donc en début de semaine prochaine.
OK pour les mangas, je me doutais de quelque chose !
Quant au .hack//sing , je veux bien regarder, mais où ????
Au fait, peux-tu me donner un exemple pour faire une "capture d'écran" : je ne sais pas.
Dernier point, je termine actuellement une nouvelle source sur les 9 cercles de Napoléon.
Le problème est le suivant : on a un cercle dont on a perdu le centre; comment faire pour le retrouver avec un compas seulement ?
Napoléon, l'empereur, était aussi fort en géométrie. Il a trouvé la solution !
A suivre et A+
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 9 juin 2006 à 20:48
regarde mes 2 sources
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 9 juin 2006 à 20:00
24 min 9 s
voila ct simple...
(voila une fonction nommée naruto :) )
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 9 juin 2006 à 19:58
#########################
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
# Python version 2.4.2
# Tk version 8.4
# IDLE version 1.1.2
# <<< DROITE et CERCLE d' EULER >>>
# facteur d'échelle lié à la résolution de l'écran du PC : on peut l'augmenter ou le diminuer
#########################################################
# version 9
#Ce script a été vu, corrigé et amélioré par XEOLIN :
# avec notamment :
# - l' ajout d' un menu_bouton au clic droit de la souris
# - l' ajout d'une fonction "who create it ?"
# On considère le triangle quelconque ABC avec les points remarquables suivants :
# G : centre de gravité
# H : orthocentre
# O : centre du cercle circonscrit
# I : centre du cercle inscrit
# E : centre du cercle d'Euler
# Ge : point de Gergonne
# N : point de Nagel
# Le cercle d'Euler passe par les neufs points suivants :
# les milieux des trois côtés du triangle : mA, mB, mC
# les pieds des hauteurs issues des trois sommets : hA, hB, hC
# les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC
# La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
# Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
from Tkinter import*
from math import *
from tkMessageBox import askokcancel
def pop_up(event=None) :
frame = Frame(root, relief=RIDGE)
entry Entry(frame, width '21')
menu Menu(entry, tearoff 0)
menu.add_command(label ='Présentation du script', underline =0,command = rahxephon)
menu.add_separator()
menu.add_command(label ='Triangle', underline =0,command = animation_triangle)
menu.add_separator()
menu.add_command(label ='Centre de gravité', underline =0,command = centre_de_gravite)
menu.add_command(label ='Orthocentre', underline =0,command = ortho_centre)
menu.add_command(label ='Cercle circonscrit', underline =0,command = cercle_circonscrit)
menu.add_command(label ='Cercle et droite d\' Euler', underline =0,command = Euler)
menu.add_command(label ='Cercle inscrit', underline =0,command = cercle_inscrit)
menu.add_command(label ='Points de Gergonne et de Nagel', underline =0,command = Gergonne_Nagel)
menu.add_command(label ='Figure de synthèse', underline =0,command = synthese)
menu.add_separator()
menu.add_command(label ='Stop !', underline =0,command = stop)
menu.add_command(label ='Quitter le jeu !', underline =0,command = quitter)
menu.add_separator()
menu.add_command(label ='A propos', underline =0,command = hack_sing)
ycoord = entry.winfo_pointery()
xcoord = entry.winfo_pointerx()
menu.tk_popup(xcoord, ycoord)
def naruto(event=None) :
n=ss.get()
facteur_echelle(int(n))
L,H=120.*f,80.*f
can.configure(height=H,width=L)
def rahxephon():
global fen1
fen1=Tk()
fen1.configure (bg='grey100')
fen1.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen1.overrideredirect(TRUE)
Label(fen1,text="""\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Les propriétés du triangle ont intéressé de nombreux mathématiciens au cours des siècles.
Tous se sont attachés à repérer des points remarquables dans le triangle et à mettre en lumière les relations qui pouvaient exister entre ces points.
Il en est ainsi de la droite d'EULER qui relie le centre de gravité, l'orthocentre, le centre du cercle circonscrit et le centre du cercle d'Euler.\n
On trouvera un excellent document sur ce sujet sur le site suivant :\n
http://www.reunion.iufm.fr/dep/mathematiques/abracadabri/geoplane/cocyclik/CInsEx3.htmhttp://www.reunion.iufm.fr/dep/mathematiques/abracadabri/geoplane/cocyclik/CInsEx3.htm)
On considère le triangle quelconque ABC avec les points remarquables suivants :
G : centre de gravité\nH : orthocentre
O : centre du cercle circonscrit
I : centre du cercle inscrit
E : centre du cercle d'Euler
Ge : point de Gergonne
N : point de Nagel
Le cercle d'Euler passe par les neufs points suivants :
les milieux des trois côtés du triangle : mA, mB, mC
les pieds des hauteurs issues des trois sommets : hA, hB, hC
les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC
La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
""",bg='grey100',fg='grey0',font='Arial 10 bold',justify=LEFT).pack()
Button(fen1,text='OK',command=fen1.destroy).pack()
fen1.mainloop()
def hack_sing():
global fen
fen=Tk()
fen.configure (bg='grey0')
fen.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen.overrideredirect(TRUE)
Label(fen,text="""\n\n\n\n\n\n\n\n\n\n\n\n\n\n
By HCD avec le concours de XEOLIN""",bg='grey0',fg='grey100',font='Arial 20 bold').pack()
Button(fen,text='OK',font='Arial 10 bold',command=fen.destroy).pack()
fen.mainloop()
def facteur_echelle(a):
"récupération de la valeur (a) choisie sur l'échelle"
global f
f=int(a) #affectation à la variable <f>
def vitesse(a):
"récupération de la valeur (a) choisie sur l'échelle"
global k
k=int(a) #affectation à la variable <k>
def animer():
"résolution du triangle et animation "
global xA,yA,xB,yB,xC,yC # coordonnées des sommets A, B, C
global dxA,dyA,dxB,dyB,dxC,dyC # coordonnées des vecteurs vitesses des sommets A, B, C
global a,b,c,p # longueur des côtés BC,CA,AB et demi périmètre
global A,B,C #angles aux sommets A,B,C
global xmA,ymA,xmB,ymB,xmC,ymC # coordonnées des milieux des côtés BC, CA, AB
global xG,yG # coordonnées du centre de gravité (G)
global xhA,yhA,xhB,yhB,xhC,yhC # coordonnées des pieds des hauteurs issues des trois sommets A, B, C
global xH,yH # coordonnées de l'orthocentre (H)
global xO,yO,RO # coordonnées du centre (O) et rayon (RO) du cercle circonscrit
global xE,yE,RE # coordonnées du centre (E) et rayon (RE) du cercle d'Euler
global xaA,yaA,xbB,ybB,xcC,ycC # coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
global xGergonne,yGergonne,xNagel,yNagel # coordonnées des points de Gergonne et de Nagel
global xI,yI,RI # coordonnées du centre (I) et rayon (RI) du cercle inscrit
global xiA,yiA,xiB,yiB,xiC,yiC # coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
global xeA,yeA,xeB,yeB,xeC,yeC # coordonnées des points de contact entre les cercles exinscrits et les côtés du triangle
global k
k=0.9999*k
if flag==1 :
can.delete(ALL)
# animation
xA,yA,xB,yB,xC,yC=xA+k*dxA,yA+k*dyA,xB+k*dxB,yB+k*dyB,xC+k*dxC,yC+k*dyC
# résolution du triangle
a,b,c=hypot(xC-xB,yC-yB),hypot(xA-xC,yA-yC),hypot(xA-xB,yA-yB)
p=(a+b+c)/2 # demi périmètre (p)
RI=sqrt((p-a)*(p-b)*(p-c)/p)# rayon (RI) du cercle inscrit
if p==a:A=0
if p==b:B=0
if p==c:C=0
if p==a or p==b or p==c:RI,RO=0,infini
else:
A,B,C=2*atan(RI/(p-a)),2*atan(RI/(p-b)),2*atan(RI/(p-c))# angles aux sommets
RO=a*b*c/RI/p/4# rayon (RO) du cercle circonscrit
RE=RO/2 # rayon (RE) du cercle d'Euler
# coordonnées des milieux des côtés BC, CA, AB et du centre de gravité G ( isobarycentre : A[1], B[1], C[1] )
barycentre(0,1,1);xmA,ymA=x,y
barycentre(1,0,1);xmB,ymB=x,y
barycentre(1,1,0);xmC,ymC=x,y
barycentre(1,1,1);xG,yG=x,y
# coordonnées des pieds des hauteurs issues des trois sommets A, B, C et de l'orthocentre H : barycentre de A[tan(A)], B[tan(B)], C[tan(C)]
barycentre(0,tan(B),tan(C));xhA,yhA=x,y
barycentre(tan(A),0,tan(C));xhB,yhB=x,y
barycentre(tan(A),tan(B),0);xhC,yhC=x,y
barycentre(tan(A),tan(B),tan(C));xH,yH=x,y
# coordonnées du centre (O) du cercle circonscrit : barycentre de A[sin(2*A)], B[sin(2*B)], C[sin(2*C)]
barycentre(sin(2*A),sin(2*B),sin(2*C));xO,yO=x,y
# coordonnées du centre (E) du cercle d'Euler
xE,yE=(xO+xH)/2,(yO+yH)/2
# coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
xaA,yaA= (xH+xA)/2,(yH+yA)/2
xbB,ybB= (xH+xB)/2,(yH+yB)/2
xcC,ycC= (xH+xC)/2,(yH+yC)/2
# coordonnées du point de Gergonne : barycentre de A[(p-b)*(p-c)], B[(p-c)*(p-a)], C[(p-a)*(p-b)]
barycentre((p-b)*(p-c),(p-c)*(p-a),(p-a)*(p-b));xGergonne,yGergonne=x,y
# coordonnées du point de Nagel : barycentre de A[p-a], B[p-b], C[p-c]
barycentre(p-a,p-b,p-c);xNagel,yNagel=x,y
# coordonnées du centre (I) du cercle inscrit : barycentre de A[a], B[b], C[c]
barycentre(a,b,c);xI,yI=x,y
# coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
if p==a:xiA,yiA=0,0
else:barycentre(0,(p-c)*(p-a),(p-a)*(p-b));xiA,yiA=x,y
if p==b:xiB,yiB=0,0
else:barycentre((p-b)*(p-c),0,(p-a)*(p-b));xiB,yiB=x,y
if p==c:xiC,yiC=0,0
else:barycentre((p-b)*(p-c),(p-c)*(p-a),0);xiC,yiC=x,y
# coordonnées des points de contact entre les cercles exinscrit et les côtés du triangle
xeA,yeA=2*xmA+-xiA,2*ymA+-yiA
xeB,yeB=2*xmB+-xiB,2*ymB+-yiB
xeC,yeC=2*xmC+-xiC,2*ymC+-yiC
# maintien du triangle dans le plan de jeu
if xA<8 or xA>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xB<8 or xB>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xC<8 or xC>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if yA<8 or yA>H-8:dyA,dyB,dyC=-dyA,dyB,dyC
if yB<8 or yB>H-8:dyA,dyB,dyC=-dyA,-dyB,-dyC
if yC<8 or yC>H-8:dyA,dyB,dyC=dyA,dyB,-dyC
#lancement de l'animation des différentes figures
if tt==1 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:animation_triangle()
if tt==0 and gg==1 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:centre_de_gravite()
if tt==0 and gg==0 and hh==1 and oo==0 and ee==0 and ii==0 and gn==0:ortho_centre()
if tt==0 and gg==0 and hh==0 and oo==1 and ee==0 and ii==0 and gn==0:cercle_circonscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==1 and ii==0 and gn==0:Euler()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==1 and gn==0:cercle_inscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==1:Gergonne_Nagel()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0 and ss==1:synthese()
def barycentre(k1,k2,k3):
" cette fonction donne les coordonnées x et y du barycentre des points A, B, C auxquels sont affectés les coefficients k1, k2, k3"
global x,y
m,n,o=k1,k2,k3
x,y=(m*xA+n*xB+o*xC)/(m+n+o),(m*yA+n*yB+o*yC)/(m+n+o)
def animation_triangle():
" A,B,C sont les sommets du triangle"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,1,0,0,0,0,0,0
texte="A,B,C sommets"
information.config(text=texte)
can.create_text(150,500,text="Le triangle a pour sommets A, B, C",fill="white")
triangle()
root.after(10,animer)
def centre_de_gravite():
" mA,mB,mC sont les milieux des côtés du triangle et G le centre de gravité"
global flag,tt,gg,hh,oo,ee,ii
flag,tt,gg,hh,oo,ee,ii,gn=1,0,1,0,0,0,0,0
texte="A,B,C sommets\nG Centre de gravité"
information.config(text=texte)
can.create_text(150,500,text="Le centre de gravité G est à l' intersection \ndes droites issues des sommets A, B, C et \npassant par les milieux des côtés BC, CA, AB",fill="white")
ligne_mA_A=can.create_line(xA,yA,xmA,ymA,fill='#007030',width=2)
ligne_mB_B=can.create_line(xB,yB,xmB,ymB,fill='#007030',width=2)
ligne_mC_C=can.create_line(xC,yC,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
root.after(10,animer)
def ortho_centre():
" hA,hB,hC sont les pieds des hauteurs issues des sommets du triangle et H l'orthocentre"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,1,0,0,0,0
texte="A,B,C sommets\nH orthocentre"
information.config(text=texte)
can.create_text(150,500,text="L' orthocentre H est à l' intersection \ndes hauteurs issues des sommets A, B, C",fill="white")
ligne_hA_A=can.create_line(xA,yA,xhA,yhA,fill='#007030',width=2)
ligne_hB_B=can.create_line(xB,yB,xhB,yhB,fill='#007030',width=2)
ligne_hC_C=can.create_line(xC,yC,xhC,yhC,fill='#007030',width=2)
ligne_hA_H=can.create_line(xH,yH,xhA,yhA,fill='#007030',width=2)
ligne_hB_H=can.create_line(xH,yH,xhB,yhB,fill='#007030',width=2)
ligne_hC_H=can.create_line(xH,yH,xhC,yhC,fill='#007030',width=2)
triangle()
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
root.after(10,animer)
def cercle_circonscrit():
"centre (O) et rayon (RO) du cercle circonscrit "
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,1,0,0,0
texte='''A,B,C sommets\nO centre du cercle circonscrit'''
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
cercle_circonscrit=can.create_oval(xO-RO,yO-RO,xO+RO,yO+RO,outline='gold',width=1)
ligne_mA_CT=can.create_line(xO,yO,xmA,ymA,fill='#007030',width=2)
ligne_mB_CT=can.create_line(xO,yO,xmB,ymB,fill='#007030',width=2)
ligne_mC_CT=can.create_line(xO,yO,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="gold",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="gold",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="gold",width=1)
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
root.after(10,animer)
def Euler():
"centre (E) et rayon (RE) du cercle d'Euler et droite d'Euler"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,1,0,0
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler"
information.config(text=texte)
can.create_text(250,500,text= '''Le cercle d' Euler passe par les 9 points suivants :
- les milieux des trois côtés du triangle
- les pieds des hauteurs issues des trois sommets
- les milieux des segments joignant les trois sommets à l'orthocentre
La droite d' Euler relie les 4 points suivants: G, H, O, E
avec la relation EO / EG HO / OG ( 3)''',fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
cercle_Euler=can.create_oval(xE-RE,yE-RE,xE+RE,yE+RE,outline="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
aA=can.create_oval(xaA-3,yaA-3,xaA+3,yaA+3,fill="green",width=1)
bB=can.create_oval(xbB-3,ybB-3,xbB+3,ybB+3,fill="green",width=1)
cC=can.create_oval(xcC-3,ycC-3,xcC+3,ycC+3,fill="green",width=1)
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
root.after(10,animer)
def cercle_inscrit():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,1,0
texte="A,B,C sommets\nG Centre de gravité\nI centre du Cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (I) du cercle inscrit est à l' intersection\ndes bissectrices issues des sommets A, B, C",fill="white")
ligne_A_I=can.create_line(xI,yI,xA,yA,fill='#007030',width=2)
ligne_B_I=can.create_line(xI,yI,xB,yB,fill='#007030',width=2)
ligne_C_I=can.create_line(xI,yI,xC,yC,fill='#007030',width=2)
ligne_iA_I=can.create_line(xI,yI,xiA,yiA,fill='#007030',width=1)
ligne_iB_I=can.create_line(xI,yI,xiB,yiB,fill='#007030',width=1)
ligne_iC_I=can.create_line(xI,yI,xiC,yiC,fill='#007030',width=1)
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='yellow',width=1)
triangle()
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="yellow",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="yellow",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="yellow",width=1)
root.after(10,animer)
def Gergonne_Nagel():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,0,1
texte="A,B,C sommets\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(250,500,text= '''Le point de Gergonne est à l'intersection des droites issues des sommets et passant
par les points de contact du cercle inscrit avec les côtés du triangle
Le point de Nagel est à l'intersection des droites issues des sommets et passant par
les points de contact des cercles exinscrits avec les côtés du triangle
La droite de Nagel relie les 3 points suivants : N, G, I
avec la relation IG = GN / 2''',fill="white")
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='#007030',width=1)
ligne_iA_A=can.create_line(xA,yA,xiA,yiA,fill='#007030',width=2)
ligne_iB_B=can.create_line(xB,yB,xiB,yiB,fill='#007030',width=2)
ligne_iC_C=can.create_line(xC,yC,xiC,yiC,fill='#007030',width=2)
ligne_eA_A=can.create_line(xA,yA,xeA,yeA,fill='#007030',width=2)
ligne_eB_B=can.create_line(xB,yB,xeB,yeB,fill='#007030',width=2)
ligne_eC_C=can.create_line(xC,yC,xeC,yeC,fill='#007030',width=2)
triangle()
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="light blue",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="light blue",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="light blue",width=1)
marqueur_eA=can.create_oval(xeA-3,yeA-3,xeA+3,yeA+3,fill="orange",width=1)
marqueur_eB=can.create_oval(xeB-3,yeB-3,xeB+3,yeB+3,fill="orange",width=1)
marqueur_eC=can.create_oval(xeC-3,yeC-3,xeC+3,yeC+3,fill="orange",width=1)
root.after(10,animer)
def synthese():
" figure de synthèse"
global flag,tt,gg,hh,oo,ee,ii,gn,ss
flag,tt,gg,hh,oo,ee,ii,gn,ss=1,0,0,0,0,0,0,0,1
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler\nI centre du cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
root.after(10,animer)
def stop():
global flag
flag=0
dxA,dyA,dxB,dyB,dxC,dyC=0,0,0,0,0,0
def quitter():
ans=askokcancel('',"Voulez-vous réellement quitter ?")
if ans:root.quit()
######## Programme principal ############################################
root = Tk()
root.title("#>>>>>>>| DROITE et CERCLE d' EULER |<<<<<<<# By HCD and XEOLIN")
root.bind('',pop_up)
root.bind('',pop_up)# commande au clavier du menu pop-up
# données initiales:
L,H=1200*f,800*f # largeur et hauteur du plan
flag,tt,gg,hh,oo,ee,ii,gn,ss=0,0,0,0,0,0,0,0,0
infini=tan(pi/2)
xA,yA,xB,yB,xC,yC=100*f,100*f,50.,500*f,700*f,700*f
dxA,dyA,dxB,dyB,dxC,dyC=0.2*f,0.2*f,0.2*f,0.2*f,0.2*f,-0.2*f
information=Label(can2,text="",height=16,width=36,relief=GROOVE,bg="brown",fg="white",justify=LEFT,command=None)
information.pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Quitter le jeu !',height=1,width=35,relief=GROOVE,bg="white",command=quitter).pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
Button(can2,text='Stop !',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Figure de synthèse',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=synthese).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Points de Gergonne et de Nagel',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Gergonne_Nagel).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle inscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_inscrit).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='''Cercle et droite d' Euler''',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Euler).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle circonscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_circonscrit).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Orthocentre',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=ortho_centre).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Centre de gravité',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=centre_de_gravite).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Triangle',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=animation_triangle).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
ss=Scale(from_ =2,to=20,showvalue=10,length=50,command=naruto)
ss.grid(row=0,column=0)
kmin,kmax,kdef=0,10,1
vitesse_jeu=Scale(can2,length=215,orient=HORIZONTAL,sliderlength=11,label="Vitesse de l'animation (entre 0 et 10)", from_ =kmin, to =kmax, troughcolor ='white',command =vitesse)
vitesse_jeu.pack(padx=1,pady=1,side=BOTTOM,anchor=SW)
vitesse_jeu.set(kdef)
root.mainloop()
root.destroy()
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 9 juin 2006 à 19:34
(as-tu remarquer le nom de mes variables, c'est une facon simple de se rappeler, ce sont les nom de mes manga preferés)
(si tu peut voir un .hack//sing regarde le les dessins sont sublibles, même si l'istoir est 50-50)
bon c simpas de ta part d'avoir laisser ma source (celle ci-dessus) tel quel (je ne sait pas si sa s'ecrit comme cela) en vers7
et puis non je ne suis pas d'accort pour en rester la... (tu purais faire une version compressée suprimer les commentaires etc)
donc pour la fonction pour la redimention utilise le script suivant :
!!! lancement du chrono !!!
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 8 juin 2006 à 01:18
XEOLIN
Je viens de mettre la version 9 sur le site.
Celle-ci fait apparaître le menu pop-up que tu as ajouté, ainsi que la commande clavier .
Dans le menu, j'ai supprimé "Tout" et je l'ai remplacé par "Présentation du script", placé au début.
Par contre, je n'ai pas réussi à trouver l'astuce qui permet de redimensionner la fenêtre avec un widget Scale.
On peut laisser comme cela à mon avis, sauf si tu as une idée.
De même, j'ai essayé d'empêcher le problème de l'accélération du mouvement au fur et à mesure des clics sur les boutons, mais sans succès.
J'ai finalement introduit un freinage k=0.999*k
Je pense que l'on peut s'en contenter.
En conclusion, serais-tu d'accord pour que l'on en reste là ???
HCD
(Au fait, si tu as besoin d'un éclaircissement en math, n'hésites pas : je ferai le maximum)
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 6 juin 2006 à 23:02
Capeau XEOLIN pour ta réactivité !
Modifier un code en 36mn29s alors que tu n'en es pas l'auteur, il faut le faire !
J' apprécie l'humour ... Bien vu pour Ho C'est Difficile !!!
Pour ton info, j'ai fait l'Ecole Polytechnique en 1963. Ceci explique cela ...
Eh oui, j'ai bien 63 ans : et 50 ans nous séparent !!! SAUF quant on discute le coup en PYTHON, où là tu me donnes des leçons (en fait il n'y a pas d'âge pour cela) !!!
Je m'arrête, car il est tard.
Je reprendrai demain pour continuer à améliorer le script selon tes idées (mettre un widget (Scale) pour changer la grandeur de la fenêtre + régler le problème de la vitesse qui augmente à chaque fois que l'on clique sur le même bouton).
Good night sir
A+
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 6 juin 2006 à 21:11
a+
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 6 juin 2006 à 21:10
#########################
#! /usr/bin/env python
f=0.75 # facteur d'échelle lié à la résoloution de l'écran du PC : on peut l'augmenter ou le diminuer
#########################################################
#Amilioration par xeolin : #
#Ajout de menu_bouton au clic droit de la sourit #
#Ajout d'une fonction who create it ? #
#pour miopes... et monosouris (y fo penser au autre) #
#modifier en 36min29s #
#########################################################
# -*- coding: Latin-1 -*-
# Python version 2.4.2
# Tk version 8.4
# IDLE version 1.1.2
# <<< DROITE et CERCLE d' EULER >>>
# version 7
# Dans cette version on a simplifié l'écriture du code en faisant systématiquement appel à la fonction "barycentre" pour définir les points remarquables du triangle.
# PRESENTATION
# On considère le triangle quelconque ABC avec les points remarquables suivants :
# G : centre de gravité
# H : orthocentre
# O : centre du cercle circonscrit
# I : centre du cercle inscrit
# E : centre du cercle d'Euler
# Ge : point de Gergonne
# N : point de Nagel
# Le cercle d'Euler passe par les neufs points suivants :
# les milieux des trois côtés du triangle : mA, mB, mC
# les pieds des hauteurs issues des trois sommets : hA, hB, hC
# les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC)
# La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
# Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
def rahxephon(): #/*pour toi ossi*/
global fen1
fen1=Tk()
fen1.configure (bg='grey100')
fen1.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen1.overrideredirect(TRUE)
Label(fen1,text="""Et bas non,\n il l'a pas fait \n;)""",bg='grey100',fg='grey0',font='Arial 150 bold').pack()
Button(fen1,text='OK',command=fen1.destroy).pack()
fen.mainloop()
def hack_sing(): #/*pour toi*/
global fen
fen=Tk()
fen.configure (bg='grey0')
fen.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen.overrideredirect(TRUE)
Label(fen,text="""By HCD""",bg='grey0',fg='grey100',font='Arial 250 bold').pack()
Button(fen,text='OK',font='Arial 100 bold',command=fen.destroy).pack()
fen.mainloop()
def vitesse(a):
"récupération de la valeur (a) choisie sur l'échelle"
global k
k=int(a) #affectation à la variable <k>
def animer():
"résolution du triangle et animation "
global xA,yA,xB,yB,xC,yC # coordonnées des sommets A, B, C
global dxA,dyA,dxB,dyB,dxC,dyC # coordonnées des vecteurs vitesses des sommets A, B, C
global a,b,c,p # longueur des côtés BC,CA,AB et demi périmètre
global A,B,C #angles aux sommets A,B,C
global xmA,ymA,xmB,ymB,xmC,ymC # coordonnées des milieux des côtés BC, CA, AB
global xG,yG # coordonnées du centre de gravité (G)
global xhA,yhA,xhB,yhB,xhC,yhC # coordonnées des pieds des hauteurs issues des trois sommets A, B, C
global xH,yH # coordonnées de l'orthocentre (H)
global xO,yO,RO # coordonnées du centre (O) et rayon (RO) du cercle circonscrit
global xE,yE,RE # coordonnées du centre (E) et rayon (RE) du cercle d'Euler
global xaA,yaA,xbB,ybB,xcC,ycC # coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
global xGergonne,yGergonne,xNagel,yNagel # coordonnées des points de Gergonne et de Nagel
global xI,yI,RI # coordonnées du centre (I) et rayon (RI) du cercle inscrit
global xiA,yiA,xiB,yiB,xiC,yiC # coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
global xeA,yeA,xeB,yeB,xeC,yeC # coordonnées des points de contact entre les cercles exinscrits et les côtés du triangle
# résolution du triangle
a,b,c=hypot(xC-xB,yC-yB),hypot(xA-xC,yA-yC),hypot(xA-xB,yA-yB)
p=(a+b+c)/2 # demi périmètre (p)
RI=sqrt((p-a)*(p-b)*(p-c)/p)# rayon (RI) du cercle inscrit
if p==a:A=0
if p==b:B=0
if p==c:C=0
if p==a or p==b or p==c:RI,RO=0,infini
else:
A,B,C=2*atan(RI/(p-a)),2*atan(RI/(p-b)),2*atan(RI/(p-c))# angles aux sommets
RO=a*b*c/RI/p/4# rayon (RO) du cercle circonscrit
RE=RO/2 # rayon (RE) du cercle d'Euler
# coordonnées des milieux des côtés BC, CA, AB et du centre de gravité G ( isobarycentre : A[1], B[1], C[1] )
barycentre(0,1,1);xmA,ymA=x,y
barycentre(1,0,1);xmB,ymB=x,y
barycentre(1,1,0);xmC,ymC=x,y
barycentre(1,1,1);xG,yG=x,y
# coordonnées des pieds des hauteurs issues des trois sommets A, B, C et de l'orthocentre H : barycentre de A[tan(A)], B[tan(B)], C[tan(C)]
barycentre(0,tan(B),tan(C));xhA,yhA=x,y
barycentre(tan(A),0,tan(C));xhB,yhB=x,y
barycentre(tan(A),tan(B),0);xhC,yhC=x,y
barycentre(tan(A),tan(B),tan(C));xH,yH=x,y
# coordonnées du centre (O) du cercle circonscrit : barycentre de A[sin(2*A)], B[sin(2*A)], C[sin(2*A)]
barycentre(sin(2*A),sin(2*B),sin(2*C));xO,yO=x,y
# coordonnées du centre (E) du cercle d'Euler
xE,yE=(xO+xH)/2,(yO+yH)/2
# coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
xaA,yaA= (xH+xA)/2,(yH+yA)/2
xbB,ybB= (xH+xB)/2,(yH+yB)/2
xcC,ycC= (xH+xC)/2,(yH+yC)/2
# coordonnées du point de Gergonne : barycentre de A[(p-b)*(p-c)], B[(p-c)*(p-a)], C[(p-a)*(p-b)]
barycentre((p-b)*(p-c),(p-c)*(p-a),(p-a)*(p-b));xGergonne,yGergonne=x,y
# coordonnées du point de Nagel : barycentre de A[p-a], B[p-b], C[p-c]
barycentre(p-a,p-b,p-c);xNagel,yNagel=x,y
# coordonnées du centre (I) du cercle inscrit : barycentre de A[a], B[b], C[c]
barycentre(a,b,c);xI,yI=x,y
# coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
if p==a:xiA,yiA=0,0
else:barycentre(0,(p-c)*(p-a),(p-a)*(p-b));xiA,yiA=x,y
if p==b:xiB,yiB=0,0
else:barycentre((p-b)*(p-c),0,(p-a)*(p-b));xiB,yiB=x,y
if p==c:xiC,yiC=0,0
else:barycentre((p-b)*(p-c),(p-c)*(p-a),0);xiC,yiC=x,y
# coordonnées des points de contact entre les cercles exinscrit et les côtés du triangle
xeA,yeA=2*xmA+-xiA,2*ymA+-yiA
xeB,yeB=2*xmB+-xiB,2*ymB+-yiB
xeC,yeC=2*xmC+-xiC,2*ymC+-yiC
# maintien du triangle dans le plan de jeu
if xA<8 or xA>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xB<8 or xB>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xC<8 or xC>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if yA<8 or yA>H-8:dyA,dyB,dyC=-dyA,dyB,dyC
if yB<8 or yB>H-8:dyA,dyB,dyC=-dyA,-dyB,-dyC
if yC<8 or yC>H-8:dyA,dyB,dyC=dyA,dyB,-dyC
#lancement de l'animation des différentes figures
if tt==1 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:animation_triangle()
if tt==0 and gg==1 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:centre_de_gravite()
if tt==0 and gg==0 and hh==1 and oo==0 and ee==0 and ii==0 and gn==0:ortho_centre()
if tt==0 and gg==0 and hh==0 and oo==1 and ee==0 and ii==0 and gn==0:cercle_circonscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==1 and ii==0 and gn==0:Euler()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==1 and gn==0:cercle_inscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==1:Gergonne_Nagel()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0 and ss==1:synthese()
def barycentre(k1,k2,k3):
" cette fonction donne les coordonnées x et y du barycentre des points A, B, C auxquels sont affectés les coefficients k1, k2, k3"
global x,y
m,n,o=k1,k2,k3
x,y=(m*xA+n*xB+o*xC)/(m+n+o),(m*yA+n*yB+o*yC)/(m+n+o)
def animation_triangle():
" A,B,C sont les sommets du triangle"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,1,0,0,0,0,0,0
texte="A,B,C sommets"
information.config(text=texte)
can.create_text(150,500,text="Le triangle a pour sommets A, B, C",fill="white")
triangle()
root.after(100,animer)
def centre_de_gravite():
" mA,mB,mC sont les milieux des côtés du triangle et G le centre de gravité"
global flag,tt,gg,hh,oo,ee,ii
flag,tt,gg,hh,oo,ee,ii,gn=1,0,1,0,0,0,0,0
texte="A,B,C sommets\nG Centre de gravité"
information.config(text=texte)
can.create_text(150,500,text="Le centre de gravité G est à l' intersection \ndes droites issues des sommets A, B, C et \npassant par les milieux des côtés BC, CA, AB",fill="white")
ligne_mA_A=can.create_line(xA,yA,xmA,ymA,fill='#007030',width=2)
ligne_mB_B=can.create_line(xB,yB,xmB,ymB,fill='#007030',width=2)
ligne_mC_C=can.create_line(xC,yC,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
root.after(100,animer)
def ortho_centre():
" hA,hB,hC sont les pieds des hauteurs issues des sommets du triangle et H l'orthocentre"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,1,0,0,0,0
texte="A,B,C sommets\nH orthocentre"
information.config(text=texte)
can.create_text(150,500,text="L' orthocentre H est à l' intersection \ndes hauteurs issues des sommets A, B, C",fill="white")
ligne_hA_A=can.create_line(xA,yA,xhA,yhA,fill='#007030',width=2)
ligne_hB_B=can.create_line(xB,yB,xhB,yhB,fill='#007030',width=2)
ligne_hC_C=can.create_line(xC,yC,xhC,yhC,fill='#007030',width=2)
ligne_hA_H=can.create_line(xH,yH,xhA,yhA,fill='#007030',width=2)
ligne_hB_H=can.create_line(xH,yH,xhB,yhB,fill='#007030',width=2)
ligne_hC_H=can.create_line(xH,yH,xhC,yhC,fill='#007030',width=2)
triangle()
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
root.after(100,animer)
def cercle_circonscrit():
"centre (O) et rayon (RO) du cercle circonscrit "
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,1,0,0,0
texte='''A,B,C sommets\nO centre du cercle circonscrit'''
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
cercle_circonscrit=can.create_oval(xO-RO,yO-RO,xO+RO,yO+RO,outline='gold',width=1)
ligne_mA_CT=can.create_line(xO,yO,xmA,ymA,fill='#007030',width=2)
ligne_mB_CT=can.create_line(xO,yO,xmB,ymB,fill='#007030',width=2)
ligne_mC_CT=can.create_line(xO,yO,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="gold",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="gold",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="gold",width=1)
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
root.after(100,animer)
def Euler():
"centre (E) et rayon (RE) du cercle d'Euler et droite d'Euler"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,1,0,0
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler"
information.config(text=texte)
can.create_text(250,500,text= '''Le cercle d' Euler passe par les 9 points suivants :
- les milieux des trois côtés du triangle
- les pieds des hauteurs issues des trois sommets
- les milieux des segments joignant les trois sommets à l'orthocentre
La droite d' Euler relie les 4 points suivants: G, H, O, E
avec la relation EO / EG HO / OG ( 3)''',fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
cercle_Euler=can.create_oval(xE-RE,yE-RE,xE+RE,yE+RE,outline="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
aA=can.create_oval(xaA-3,yaA-3,xaA+3,yaA+3,fill="green",width=1)
bB=can.create_oval(xbB-3,ybB-3,xbB+3,ybB+3,fill="green",width=1)
cC=can.create_oval(xcC-3,ycC-3,xcC+3,ycC+3,fill="green",width=1)
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
root.after(100,animer)
def cercle_inscrit():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,1,0
texte="A,B,C sommets\nG Centre de gravité\nI centre du Cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (I) du cercle inscrit est à l' intersection\ndes bissectrices issues des sommets A, B, C",fill="white")
ligne_A_I=can.create_line(xI,yI,xA,yA,fill='#007030',width=2)
ligne_B_I=can.create_line(xI,yI,xB,yB,fill='#007030',width=2)
ligne_C_I=can.create_line(xI,yI,xC,yC,fill='#007030',width=2)
ligne_iA_I=can.create_line(xI,yI,xiA,yiA,fill='#007030',width=1)
ligne_iB_I=can.create_line(xI,yI,xiB,yiB,fill='#007030',width=1)
ligne_iC_I=can.create_line(xI,yI,xiC,yiC,fill='#007030',width=1)
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='yellow',width=1)
triangle()
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="yellow",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="yellow",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="yellow",width=1)
root.after(100,animer)
def Gergonne_Nagel():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,0,1
texte="A,B,C sommets\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(250,500,text= '''Le point de Gergonne est à l'intersection des droites issues des sommets et passant
par les points de contact du cercle inscrit avec les côtés du triangle
Le point de Nagel est à l'intersection des droites issues des sommets et passant par
les points de contact des cercles exinscrits avec les côtés du triangle
La droite de Nagel relie les 3 points suivants : N, G, I
avec la relation IG = GN / 2''',fill="white")
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='#007030',width=1)
ligne_iA_A=can.create_line(xA,yA,xiA,yiA,fill='#007030',width=2)
ligne_iB_B=can.create_line(xB,yB,xiB,yiB,fill='#007030',width=2)
ligne_iC_C=can.create_line(xC,yC,xiC,yiC,fill='#007030',width=2)
ligne_eA_A=can.create_line(xA,yA,xeA,yeA,fill='#007030',width=2)
ligne_eB_B=can.create_line(xB,yB,xeB,yeB,fill='#007030',width=2)
ligne_eC_C=can.create_line(xC,yC,xeC,yeC,fill='#007030',width=2)
triangle()
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="light blue",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="light blue",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="light blue",width=1)
marqueur_eA=can.create_oval(xeA-3,yeA-3,xeA+3,yeA+3,fill="orange",width=1)
marqueur_eB=can.create_oval(xeB-3,yeB-3,xeB+3,yeB+3,fill="orange",width=1)
marqueur_eC=can.create_oval(xeC-3,yeC-3,xeC+3,yeC+3,fill="orange",width=1)
root.after(100,animer)
def synthese():
" figure de synthèse"
global flag,tt,gg,hh,oo,ee,ii,gn,ss
flag,tt,gg,hh,oo,ee,ii,gn,ss=1,0,0,0,0,0,0,0,1
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler\nI centre du cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
root.after(100,animer)
def stop():
global flag
flag=0
dxA,dyA,dxB,dyB,dxC,dyC=0,0,0,0,0,0
def quitter():
ans=askokcancel('',"Voulez-vous réellement quitter ?")
if ans:root.quit()
######## Programme principal ############################################
root = Tk()
root.title("#>>>>>>>| DROITE et CERCLE d' EULER |<<<<<<<# By HCD")
root.bind('',pop_up)
root.bind('',pop_up)#ca sert a rien mais bon pour les non sourisistes (en estimant que ca existe encore)
# données initiales:
L,H=1200*f,800*f # largeur et hauteur du plan
flag,tt,gg,hh,oo,ee,ii,gn,ss=0,0,0,0,0,0,0,0,0
infini=tan(pi/2)
xA,yA,xB,yB,xC,yC=100*f,100*f,50.,500*f,700*f,700*f
dxA,dyA,dxB,dyB,dxC,dyC=0.25*f,0.25*f,0.25*f,0.25*f,0.25*f,-0.25*f
can=Canvas(root,bg='dark green',height=H,width=L)
can.grid(row=1,column=0,rowspan=2)
can2=Canvas(root,bg='brown',highlightbackground='brown')
can2.grid(row=1,column=1,sticky=N)
information=Label(can2,text="",height=16,width=36,relief=GROOVE,bg="brown",fg="white",command=None)
information.pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Quitter le jeu !',height=1,width=35,relief=GROOVE,bg="white",command=quitter).pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
Button(can2,text='Stop !',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Figure de synthèse',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=synthese).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Points de Gergonne et de Nagel',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Gergonne_Nagel).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle inscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_inscrit).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='''Cercle et droite d' Euler''',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Euler).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle circonscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_circonscrit).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Orthocentre',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=ortho_centre).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Centre de gravité',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=centre_de_gravite).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Triangle',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=animation_triangle).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
kmin,kmax,kdef=0,10,1
vitesse_jeu=Scale(can2,length=215,orient=HORIZONTAL,sliderlength=15*f,label="Vitesse de l'animation (entre 0 et 10)", from_ =kmin, to =kmax, troughcolor ='white',command =vitesse)
vitesse_jeu.pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
vitesse_jeu.set(kdef)
root.mainloop()
root.destroy()
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 6 juin 2006 à 20:33
1° escuse moi de m'être mal exprime : si tu clique par exemple 2 fois d'afilés sur le bouton triangle, il iras 2x+ vite et si tu recommence plusieur(s?) fois encore le script se mettera a boeuger....
2° je sais que c'est embetant a faire mais tu pourai metre un widget (Scale) pour changer la grandeur de la fenetre
3° mais de rien et le tien :
Ho
C'est
Difficile
non?
4. bon j'ai dit droite (et non courbe) et cercle d'Euler et tout d'un coup un delic est apparut tombant comme un aiclair sur ma prof (bon j'en fé un peut trop) t elle m'a expliquer l'origine
bon d'apres ce que je me souvient c'est (pour la droite)
le centre du cercle inscrit et le circonscrit et l'orthocentre qui sont alignés sur une même droite
et pour le cercle : c'est 7 (ou 8) point qui sont sur un cercle dont certaint sont issue du pied qegrhioqrhgrhsrhuoqhgjqnç'"èé-_çè-çà"'uihui( brouhaha ) zefjiqhtze_"-è_uid
et vla.
5° bobn je te poserai 2 question a chaque fois que je te mailrait ( holala le super vocabulaire bon on va dire que je posterai un message t'étant adressé) j'en ai fait une pour ton psedo et he... bon...
as-tu vraiment 63 ans?
(non franchement tu fais plus jeune)
6° Moi ma fable preférée est : 'l'âne chargé de sel et l'âne chargé d'éponge'
pourquoi ? cela trace la differannce même entre moi et les 21 autres eleves de ma classe (j'en exclus 2)
7) je modifirai ta source...
A tout de suite (si je fini le prog a temps)
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 6 juin 2006 à 15:38
Merci XEOLIN pour ta réponse.
Voici la mienne dans l'ordre de tes remarques.
1° "activer/désactiver" les boutons : je n'ai rien fait pour le moment, car je pense qu'il est peut-être préférable de laisser la possibilité d'aller d'un bouton à un autre (pour revoir une figure, par exemple). Quel est ton avis ?
2° Taille de l'écran et nombre de pixels : je n'y avais pas pensé. Comme solution, j'ai ajouté au début du script un "facteur d'échelle" (f) réglable.Il vaut 0.75 au départ.(je suis avec f=1 avec mon grand écran).
3° Merci pour l'info sur l'origine de ton PSEUDO; Il sonne bien en effet.
4° Une prof de math qui ne connaît pas la droite d'Euler : cela me surprend beaucoup, car c'est une grande classique quand on étudie les propriétés remarquables des triangles. Tu devrais lui redemander en lui parlant bien de "droite".
5° A ta question 1, ma réponse est la lettre "X" :
X désigne le plus souvent une variable inconnue dans une équation
X est aussi la lettre symbole de lEcole Polytechnique (des forts en math !)
6° A la question 2, il y a une phrase que j'aime bien dans la fable de LA FONTAINE intitulée"Le lion et le rat" :
" Patience et longueur de temps font plus que force ni que rage"
A bientôt sur le site
(PS: je viens de mettre une version 7 sur le site)
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 2 juin 2006 à 21:09
je sais mais l'hortographe c dur...
mé HCD tou mé décois car tou a oublié moun dernier conseille : mé des "stat=DISABLED" a tes boutons (tu sé quant lé boutones sone désactibé) (que j'aime écrire en phonétique)
et puis le nombre de pixels de ton ordi s'exprime en miliards ou quoi : comme pour ton serpent pas comme les autre tu oublit que les autres ont des résolutions plus faible (moi je suis en 1280/960 et ca rentre même pas dans l'écrant donc ca serai simpas de fair une version 800/500)
et pour finir, je sais plus...
A oui je vais te modifier ton script quant tu aura changé la résolution de ton programme fesant (faute mé ché pas ou) qui fé avancé la "CHOSE"
et pis c'est a peu prés tout.
Xeolin ou Sk8gis ou Tipro75 ou Aegis
et c ca l'evolution des psedo...
et pour ceux qui veulent connaitre l'etimologie de Xeolin :
ca vien du dessin animé s'appelant Rah-Xephon
ou le pilote de cette antitée est surnomé Olin (j'ai pas compris pq)
et j'ai trouvé que xéolin était simpas comme tout...
et oui (A les grand discour...):
j'ai demandé a ma prof de math ce qu'était la "droite d' Euler" (bon j'ai dit "courbe d' Euler")
et elle m'a répondu quelle ne savait pas...
et 2 question personelles :
1-quelle est ta touche préférée du clavier ?
2-et quelle est ta phrase de philo préférée ?
les deux sont dificile a répondre...
1-La touche Fin seulement a cause de son utilitée
2- "Les relations humaines sont essenciellement (big faute mé ché pas toujours ou) basés sur des interet comuns (2 big faure mé idem)"
A+ au plaisir de te lire (j'ai bien aimé cette formule)
XeOlin
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 1 juin 2006 à 22:52
Salut XEOLIN !
Pour info : "cartésien" vient du nom du philosophe et mathématicien René DESCARTES ( 1596-1650 ). C'est ainsi que l' on désigne un repère Ox,Oy dans le plan : tout point y a pour coordonnées x(abcisse) et y(ordonnée).
Que tu sois le meilleur de la classe ne me surprend pas ...
Quant à l'ortho, je sais que c'est du boulot, mais pas plus que d'apprendre à programmer : comme la syntaxe,cela ne s'invente pas... Il faut simplement s'y "coller".
Je viens de remettre une nouvelle version sur le site qui comporte des améliorations du code, mais je n'ai pas intégré le menu POPUP.
En fait,j'ai essayé, mais je n'ai pas réussi.
Peux-tu me donner un coup de main STP ?
C'est nouveau pour moi.
MERCI encore et A+
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 1 juin 2006 à 16:46
g pris des bonnes résolutons :
orthographe ne s'écrit pas hortographes
jamais ne s'écrit pas j'amais
tu comprends ne s'écrit pas tu comprent
et oui pour que l'on ne pense pas du bien de frankystadore (Conquestador)
c moi qui ai entierement réécrit la source :)
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 1 juin 2006 à 16:40
Non c pas la peine de m'expliquer (j'amais entendu le mot cartésiennes)
car mon niveau de math ne me permet pas de, de comprendre.
(même si je suis le meilleur de la classe , eh en pratiquement tout (NB je pense
que tu comprent le presque, voir mes fautes d'hortographes))
de plus il y aa une source sur python france : MENU POPUP AU CLIC DROIT DE LA SOURIS
de frankystadore
qui l'a franchement mal ecrit...
class voi :
def popupChoices(self, event=None):
"""Popup right-click menu of special parameter operations"""
self.frame = Frame(self.window, relief=RIDGE)
self.entry Entry(self.frame, width '21')
self.menu Menu(self.entry, tearoff 0)
self.menu.add_command(label "1",command None)
self.menu.add_separator()
self.menu.add_command(label "2",command None)
self.menu.add_command(label "3",command None)
ycoord = self.entry.winfo_pointery()
xcoord = self.entry.winfo_pointerx()
self.menu.tk_popup(xcoord, ycoord)
HCD
Messages postés86Date d'inscriptionjeudi 18 août 2005StatutMembreDernière intervention20 février 2007 30 mai 2006 à 22:58
A l'attention de XEOLIN.
Je suis content de te voir réagir.
Le code paraît compliqué: en fait,il ne l'est pas.
Je dirais plutôt qu'il est "lourd".
Ceci tient au fait que tous les points remarquables du triangle se définissent comme intersections de droites en coordonnées cartésiennes dans la fenêtre Tkinter.
Pour tenir compte de tes remarques, je viens de mettre sur le site une nouvelle version avec notamment un curseur permettant de faire varier la vitesse de l'animation de la "chose"...Le système de boutons est complètement revu.
Pour le "menu pop-up avec le bouton droit", je veux bien, mais je ne sais pas comment m'y prendre ???
A+ au plaisir de te lire
HCD
xeolin
Messages postés336Date d'inscriptionsamedi 26 novembre 2005StatutMembreDernière intervention 8 novembre 20112 27 mai 2006 à 12:00
alors la hcd tu m'épate : j'ai jamais vu une formule mathematique aussi compliquée !!!
bon sinon TA PAS HONTE !!
y a même pas de truc pour acceler le mouvement de ta 'chose'.
de plus franchement a quoi ca sert d'avoir 3 menu bouton pour avoir une fonction dans chacune et pour finir tu n'a même pas mis de fonction credits !
et un menu pop-up avec le bouton droit ne serait pas de trop...
et il n'y a pas de titre sur la fenetre demandant si on veut ou non quiter...
11 juin 2006 à 22:12
Mais pas au point de créer des virus ou des trucs qui "éteignent" ou font "planter".
J'ai passé l'age !!!
J'ai quand-même mis sur le site une nouvelle source : "Le centre du cercle retrouvé par Napoléon", puisque j'ai terminé le code aujourd'hui.
Mais rien de bien nouveau en fait sur l'écriture elle-même.
Ta question : " Sais-tu comment faire croire à Windows que tu utilises la touche < caps-lock > ?"
Réponse : franchement, je ne sais pas.
Je vais regarder tes 2 nouvelles sources la semaine prochaine.
HCD
11 juin 2006 à 17:20
il y a quelque jeux-video qui sont sortits...
mais pas exelents...
sinon pour faire une capture d'écrant : je sais pas.
et toi sait tu comment faire croire a windows que tu utilise la toucehe caps-locks
maintenant tu nous fait encore une source sur les géometrie...
soit plus creatif...
moi g créé un virus, 3 class, 2 utilitaires pour windows, 1programme de compression (pas genial), 3 otre de codage, 8 qui servent a rien, 1 qui fait planter python, 1 idem mé pour windows, et pour finir un qui eiteindre window dé qu'il se demare...
voil a c apeu pré tout et oui une IA pouris..
mé change de type de programme..
10 juin 2006 à 15:18
La version 10 reprend la fonction "Naruto" que tu as insérée dans le script.
Je l'ai complétée pour que le triangle reste toujours à l'intérieur de la fenêtre.
Merci en tout cas, car je n'avais pas trouvé.
Le script est en effet très chargé en commentaires; mais je préfère le laisser comme cela pour le moment pour ceux qui chercheront à étudier le problème de math et aussi pour les débutants.
Je n'ai pas encore regardé tes deux sources : je veux le faire "à tête reposée", donc en début de semaine prochaine.
OK pour les mangas, je me doutais de quelque chose !
Quant au .hack//sing , je veux bien regarder, mais où ????
Au fait, peux-tu me donner un exemple pour faire une "capture d'écran" : je ne sais pas.
Dernier point, je termine actuellement une nouvelle source sur les 9 cercles de Napoléon.
Le problème est le suivant : on a un cercle dont on a perdu le centre; comment faire pour le retrouver avec un compas seulement ?
Napoléon, l'empereur, était aussi fort en géométrie. Il a trouvé la solution !
A suivre et A+
HCD
9 juin 2006 à 20:48
9 juin 2006 à 20:00
voila ct simple...
(voila une fonction nommée naruto :) )
9 juin 2006 à 19:58
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
# Python version 2.4.2
# Tk version 8.4
# IDLE version 1.1.2
# <<< DROITE et CERCLE d' EULER >>>
# facteur d'échelle lié à la résolution de l'écran du PC : on peut l'augmenter ou le diminuer
#########################################################
# version 9
#Ce script a été vu, corrigé et amélioré par XEOLIN :
# avec notamment :
# - l' ajout d' un menu_bouton au clic droit de la souris
# - l' ajout d'une fonction "who create it ?"
#########################################################
f=0.75
# PRESENTATION
# On considère le triangle quelconque ABC avec les points remarquables suivants :
# G : centre de gravité
# H : orthocentre
# O : centre du cercle circonscrit
# I : centre du cercle inscrit
# E : centre du cercle d'Euler
# Ge : point de Gergonne
# N : point de Nagel
# Le cercle d'Euler passe par les neufs points suivants :
# les milieux des trois côtés du triangle : mA, mB, mC
# les pieds des hauteurs issues des trois sommets : hA, hB, hC
# les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC
# La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
# Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
from Tkinter import*
from math import *
from tkMessageBox import askokcancel
def pop_up(event=None) :
frame = Frame(root, relief=RIDGE)
entry Entry(frame, width '21')
menu Menu(entry, tearoff 0)
menu.add_command(label ='Présentation du script', underline =0,command = rahxephon)
menu.add_separator()
menu.add_command(label ='Triangle', underline =0,command = animation_triangle)
menu.add_separator()
menu.add_command(label ='Centre de gravité', underline =0,command = centre_de_gravite)
menu.add_command(label ='Orthocentre', underline =0,command = ortho_centre)
menu.add_command(label ='Cercle circonscrit', underline =0,command = cercle_circonscrit)
menu.add_command(label ='Cercle et droite d\' Euler', underline =0,command = Euler)
menu.add_command(label ='Cercle inscrit', underline =0,command = cercle_inscrit)
menu.add_command(label ='Points de Gergonne et de Nagel', underline =0,command = Gergonne_Nagel)
menu.add_command(label ='Figure de synthèse', underline =0,command = synthese)
menu.add_separator()
menu.add_command(label ='Stop !', underline =0,command = stop)
menu.add_command(label ='Quitter le jeu !', underline =0,command = quitter)
menu.add_separator()
menu.add_command(label ='A propos', underline =0,command = hack_sing)
ycoord = entry.winfo_pointery()
xcoord = entry.winfo_pointerx()
menu.tk_popup(xcoord, ycoord)
def naruto(event=None) :
n=ss.get()
facteur_echelle(int(n))
L,H=120.*f,80.*f
can.configure(height=H,width=L)
def rahxephon():
global fen1
fen1=Tk()
fen1.configure (bg='grey100')
fen1.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen1.overrideredirect(TRUE)
Label(fen1,text="""\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Les propriétés du triangle ont intéressé de nombreux mathématiciens au cours des siècles.
Tous se sont attachés à repérer des points remarquables dans le triangle et à mettre en lumière les relations qui pouvaient exister entre ces points.
Il en est ainsi de la droite d'EULER qui relie le centre de gravité, l'orthocentre, le centre du cercle circonscrit et le centre du cercle d'Euler.\n
On trouvera un excellent document sur ce sujet sur le site suivant :\n
http://www.reunion.iufm.fr/dep/mathematiques/abracadabri/geoplane/cocyclik/CInsEx3.htmhttp://www.reunion.iufm.fr/dep/mathematiques/abracadabri/geoplane/cocyclik/CInsEx3.htm)
On considère le triangle quelconque ABC avec les points remarquables suivants :
G : centre de gravité\nH : orthocentre
O : centre du cercle circonscrit
I : centre du cercle inscrit
E : centre du cercle d'Euler
Ge : point de Gergonne
N : point de Nagel
Le cercle d'Euler passe par les neufs points suivants :
les milieux des trois côtés du triangle : mA, mB, mC
les pieds des hauteurs issues des trois sommets : hA, hB, hC
les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC
La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
""",bg='grey100',fg='grey0',font='Arial 10 bold',justify=LEFT).pack()
Button(fen1,text='OK',command=fen1.destroy).pack()
fen1.mainloop()
def hack_sing():
global fen
fen=Tk()
fen.configure (bg='grey0')
fen.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen.overrideredirect(TRUE)
Label(fen,text="""\n\n\n\n\n\n\n\n\n\n\n\n\n\n
By HCD avec le concours de XEOLIN""",bg='grey0',fg='grey100',font='Arial 20 bold').pack()
Button(fen,text='OK',font='Arial 10 bold',command=fen.destroy).pack()
fen.mainloop()
def facteur_echelle(a):
"récupération de la valeur (a) choisie sur l'échelle"
global f
f=int(a) #affectation à la variable <f>
def vitesse(a):
"récupération de la valeur (a) choisie sur l'échelle"
global k
k=int(a) #affectation à la variable <k>
def animer():
"résolution du triangle et animation "
global xA,yA,xB,yB,xC,yC # coordonnées des sommets A, B, C
global dxA,dyA,dxB,dyB,dxC,dyC # coordonnées des vecteurs vitesses des sommets A, B, C
global a,b,c,p # longueur des côtés BC,CA,AB et demi périmètre
global A,B,C #angles aux sommets A,B,C
global xmA,ymA,xmB,ymB,xmC,ymC # coordonnées des milieux des côtés BC, CA, AB
global xG,yG # coordonnées du centre de gravité (G)
global xhA,yhA,xhB,yhB,xhC,yhC # coordonnées des pieds des hauteurs issues des trois sommets A, B, C
global xH,yH # coordonnées de l'orthocentre (H)
global xO,yO,RO # coordonnées du centre (O) et rayon (RO) du cercle circonscrit
global xE,yE,RE # coordonnées du centre (E) et rayon (RE) du cercle d'Euler
global xaA,yaA,xbB,ybB,xcC,ycC # coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
global xGergonne,yGergonne,xNagel,yNagel # coordonnées des points de Gergonne et de Nagel
global xI,yI,RI # coordonnées du centre (I) et rayon (RI) du cercle inscrit
global xiA,yiA,xiB,yiB,xiC,yiC # coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
global xeA,yeA,xeB,yeB,xeC,yeC # coordonnées des points de contact entre les cercles exinscrits et les côtés du triangle
global k
k=0.9999*k
if flag==1 :
can.delete(ALL)
# animation
xA,yA,xB,yB,xC,yC=xA+k*dxA,yA+k*dyA,xB+k*dxB,yB+k*dyB,xC+k*dxC,yC+k*dyC
# résolution du triangle
a,b,c=hypot(xC-xB,yC-yB),hypot(xA-xC,yA-yC),hypot(xA-xB,yA-yB)
p=(a+b+c)/2 # demi périmètre (p)
RI=sqrt((p-a)*(p-b)*(p-c)/p)# rayon (RI) du cercle inscrit
if p==a:A=0
if p==b:B=0
if p==c:C=0
if p==a or p==b or p==c:RI,RO=0,infini
else:
A,B,C=2*atan(RI/(p-a)),2*atan(RI/(p-b)),2*atan(RI/(p-c))# angles aux sommets
RO=a*b*c/RI/p/4# rayon (RO) du cercle circonscrit
RE=RO/2 # rayon (RE) du cercle d'Euler
# coordonnées des milieux des côtés BC, CA, AB et du centre de gravité G ( isobarycentre : A[1], B[1], C[1] )
barycentre(0,1,1);xmA,ymA=x,y
barycentre(1,0,1);xmB,ymB=x,y
barycentre(1,1,0);xmC,ymC=x,y
barycentre(1,1,1);xG,yG=x,y
# coordonnées des pieds des hauteurs issues des trois sommets A, B, C et de l'orthocentre H : barycentre de A[tan(A)], B[tan(B)], C[tan(C)]
barycentre(0,tan(B),tan(C));xhA,yhA=x,y
barycentre(tan(A),0,tan(C));xhB,yhB=x,y
barycentre(tan(A),tan(B),0);xhC,yhC=x,y
barycentre(tan(A),tan(B),tan(C));xH,yH=x,y
# coordonnées du centre (O) du cercle circonscrit : barycentre de A[sin(2*A)], B[sin(2*B)], C[sin(2*C)]
barycentre(sin(2*A),sin(2*B),sin(2*C));xO,yO=x,y
# coordonnées du centre (E) du cercle d'Euler
xE,yE=(xO+xH)/2,(yO+yH)/2
# coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
xaA,yaA= (xH+xA)/2,(yH+yA)/2
xbB,ybB= (xH+xB)/2,(yH+yB)/2
xcC,ycC= (xH+xC)/2,(yH+yC)/2
# coordonnées du point de Gergonne : barycentre de A[(p-b)*(p-c)], B[(p-c)*(p-a)], C[(p-a)*(p-b)]
barycentre((p-b)*(p-c),(p-c)*(p-a),(p-a)*(p-b));xGergonne,yGergonne=x,y
# coordonnées du point de Nagel : barycentre de A[p-a], B[p-b], C[p-c]
barycentre(p-a,p-b,p-c);xNagel,yNagel=x,y
# coordonnées du centre (I) du cercle inscrit : barycentre de A[a], B[b], C[c]
barycentre(a,b,c);xI,yI=x,y
# coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
if p==a:xiA,yiA=0,0
else:barycentre(0,(p-c)*(p-a),(p-a)*(p-b));xiA,yiA=x,y
if p==b:xiB,yiB=0,0
else:barycentre((p-b)*(p-c),0,(p-a)*(p-b));xiB,yiB=x,y
if p==c:xiC,yiC=0,0
else:barycentre((p-b)*(p-c),(p-c)*(p-a),0);xiC,yiC=x,y
# coordonnées des points de contact entre les cercles exinscrit et les côtés du triangle
xeA,yeA=2*xmA+-xiA,2*ymA+-yiA
xeB,yeB=2*xmB+-xiB,2*ymB+-yiB
xeC,yeC=2*xmC+-xiC,2*ymC+-yiC
# maintien du triangle dans le plan de jeu
if xA<8 or xA>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xB<8 or xB>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xC<8 or xC>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if yA<8 or yA>H-8:dyA,dyB,dyC=-dyA,dyB,dyC
if yB<8 or yB>H-8:dyA,dyB,dyC=-dyA,-dyB,-dyC
if yC<8 or yC>H-8:dyA,dyB,dyC=dyA,dyB,-dyC
#lancement de l'animation des différentes figures
if tt==1 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:animation_triangle()
if tt==0 and gg==1 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:centre_de_gravite()
if tt==0 and gg==0 and hh==1 and oo==0 and ee==0 and ii==0 and gn==0:ortho_centre()
if tt==0 and gg==0 and hh==0 and oo==1 and ee==0 and ii==0 and gn==0:cercle_circonscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==1 and ii==0 and gn==0:Euler()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==1 and gn==0:cercle_inscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==1:Gergonne_Nagel()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0 and ss==1:synthese()
def barycentre(k1,k2,k3):
" cette fonction donne les coordonnées x et y du barycentre des points A, B, C auxquels sont affectés les coefficients k1, k2, k3"
global x,y
m,n,o=k1,k2,k3
x,y=(m*xA+n*xB+o*xC)/(m+n+o),(m*yA+n*yB+o*yC)/(m+n+o)
def animation_triangle():
" A,B,C sont les sommets du triangle"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,1,0,0,0,0,0,0
texte="A,B,C sommets"
information.config(text=texte)
can.create_text(150,500,text="Le triangle a pour sommets A, B, C",fill="white")
triangle()
root.after(10,animer)
def triangle():
"dessin du triangle"
cote_AB=can.create_line(xA,yA,xB,yB,fill="red",width=2)
cote_BC=can. create_line(xB,yB,xC,yC,fill="red",width=2)
cote_CA=can. create_line(xC,yC,xA,yA,fill="red",width=2)
sommet_A=can.create_oval(xA-8,yA-8,xA+8,yA+8,fill="red",width=1)
sommet_B=can.create_oval(xB-8,yB-8,xB+8,yB+8,fill="red",width=1)
sommet_C=can.create_oval(xC-8,yC-8,xC+8,yC+8,fill="red",width=1)
lettre_A=can.create_text(xA,yA,text="A",fill="white")
lettre_B=can.create_text(xB,yB,text="B",fill="white")
lettre_C=can.create_text(xC,yC,text="C",fill="white")
def centre_de_gravite():
" mA,mB,mC sont les milieux des côtés du triangle et G le centre de gravité"
global flag,tt,gg,hh,oo,ee,ii
flag,tt,gg,hh,oo,ee,ii,gn=1,0,1,0,0,0,0,0
texte="A,B,C sommets\nG Centre de gravité"
information.config(text=texte)
can.create_text(150,500,text="Le centre de gravité G est à l' intersection \ndes droites issues des sommets A, B, C et \npassant par les milieux des côtés BC, CA, AB",fill="white")
ligne_mA_A=can.create_line(xA,yA,xmA,ymA,fill='#007030',width=2)
ligne_mB_B=can.create_line(xB,yB,xmB,ymB,fill='#007030',width=2)
ligne_mC_C=can.create_line(xC,yC,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
root.after(10,animer)
def ortho_centre():
" hA,hB,hC sont les pieds des hauteurs issues des sommets du triangle et H l'orthocentre"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,1,0,0,0,0
texte="A,B,C sommets\nH orthocentre"
information.config(text=texte)
can.create_text(150,500,text="L' orthocentre H est à l' intersection \ndes hauteurs issues des sommets A, B, C",fill="white")
ligne_hA_A=can.create_line(xA,yA,xhA,yhA,fill='#007030',width=2)
ligne_hB_B=can.create_line(xB,yB,xhB,yhB,fill='#007030',width=2)
ligne_hC_C=can.create_line(xC,yC,xhC,yhC,fill='#007030',width=2)
ligne_hA_H=can.create_line(xH,yH,xhA,yhA,fill='#007030',width=2)
ligne_hB_H=can.create_line(xH,yH,xhB,yhB,fill='#007030',width=2)
ligne_hC_H=can.create_line(xH,yH,xhC,yhC,fill='#007030',width=2)
triangle()
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
root.after(10,animer)
def cercle_circonscrit():
"centre (O) et rayon (RO) du cercle circonscrit "
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,1,0,0,0
texte='''A,B,C sommets\nO centre du cercle circonscrit'''
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
cercle_circonscrit=can.create_oval(xO-RO,yO-RO,xO+RO,yO+RO,outline='gold',width=1)
ligne_mA_CT=can.create_line(xO,yO,xmA,ymA,fill='#007030',width=2)
ligne_mB_CT=can.create_line(xO,yO,xmB,ymB,fill='#007030',width=2)
ligne_mC_CT=can.create_line(xO,yO,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="gold",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="gold",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="gold",width=1)
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
root.after(10,animer)
def Euler():
"centre (E) et rayon (RE) du cercle d'Euler et droite d'Euler"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,1,0,0
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler"
information.config(text=texte)
can.create_text(250,500,text= '''Le cercle d' Euler passe par les 9 points suivants :
- les milieux des trois côtés du triangle
- les pieds des hauteurs issues des trois sommets
- les milieux des segments joignant les trois sommets à l'orthocentre
La droite d' Euler relie les 4 points suivants: G, H, O, E
avec la relation EO / EG HO / OG ( 3)''',fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
cercle_Euler=can.create_oval(xE-RE,yE-RE,xE+RE,yE+RE,outline="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
aA=can.create_oval(xaA-3,yaA-3,xaA+3,yaA+3,fill="green",width=1)
bB=can.create_oval(xbB-3,ybB-3,xbB+3,ybB+3,fill="green",width=1)
cC=can.create_oval(xcC-3,ycC-3,xcC+3,ycC+3,fill="green",width=1)
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
root.after(10,animer)
def cercle_inscrit():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,1,0
texte="A,B,C sommets\nG Centre de gravité\nI centre du Cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (I) du cercle inscrit est à l' intersection\ndes bissectrices issues des sommets A, B, C",fill="white")
ligne_A_I=can.create_line(xI,yI,xA,yA,fill='#007030',width=2)
ligne_B_I=can.create_line(xI,yI,xB,yB,fill='#007030',width=2)
ligne_C_I=can.create_line(xI,yI,xC,yC,fill='#007030',width=2)
ligne_iA_I=can.create_line(xI,yI,xiA,yiA,fill='#007030',width=1)
ligne_iB_I=can.create_line(xI,yI,xiB,yiB,fill='#007030',width=1)
ligne_iC_I=can.create_line(xI,yI,xiC,yiC,fill='#007030',width=1)
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='yellow',width=1)
triangle()
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="yellow",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="yellow",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="yellow",width=1)
root.after(10,animer)
def Gergonne_Nagel():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,0,1
texte="A,B,C sommets\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(250,500,text= '''Le point de Gergonne est à l'intersection des droites issues des sommets et passant
par les points de contact du cercle inscrit avec les côtés du triangle
Le point de Nagel est à l'intersection des droites issues des sommets et passant par
les points de contact des cercles exinscrits avec les côtés du triangle
La droite de Nagel relie les 3 points suivants : N, G, I
avec la relation IG = GN / 2''',fill="white")
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='#007030',width=1)
ligne_iA_A=can.create_line(xA,yA,xiA,yiA,fill='#007030',width=2)
ligne_iB_B=can.create_line(xB,yB,xiB,yiB,fill='#007030',width=2)
ligne_iC_C=can.create_line(xC,yC,xiC,yiC,fill='#007030',width=2)
ligne_eA_A=can.create_line(xA,yA,xeA,yeA,fill='#007030',width=2)
ligne_eB_B=can.create_line(xB,yB,xeB,yeB,fill='#007030',width=2)
ligne_eC_C=can.create_line(xC,yC,xeC,yeC,fill='#007030',width=2)
triangle()
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="light blue",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="light blue",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="light blue",width=1)
marqueur_eA=can.create_oval(xeA-3,yeA-3,xeA+3,yeA+3,fill="orange",width=1)
marqueur_eB=can.create_oval(xeB-3,yeB-3,xeB+3,yeB+3,fill="orange",width=1)
marqueur_eC=can.create_oval(xeC-3,yeC-3,xeC+3,yeC+3,fill="orange",width=1)
root.after(10,animer)
def synthese():
" figure de synthèse"
global flag,tt,gg,hh,oo,ee,ii,gn,ss
flag,tt,gg,hh,oo,ee,ii,gn,ss=1,0,0,0,0,0,0,0,1
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler\nI centre du cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
root.after(10,animer)
def stop():
global flag
flag=0
dxA,dyA,dxB,dyB,dxC,dyC=0,0,0,0,0,0
def quitter():
ans=askokcancel('',"Voulez-vous réellement quitter ?")
if ans:root.quit()
######## Programme principal ############################################
root = Tk()
root.title("#>>>>>>>| DROITE et CERCLE d' EULER |<<<<<<<# By HCD and XEOLIN")
root.bind('',pop_up)
root.bind('',pop_up)# commande au clavier du menu pop-up
# données initiales:
L,H=1200*f,800*f # largeur et hauteur du plan
flag,tt,gg,hh,oo,ee,ii,gn,ss=0,0,0,0,0,0,0,0,0
infini=tan(pi/2)
xA,yA,xB,yB,xC,yC=100*f,100*f,50.,500*f,700*f,700*f
dxA,dyA,dxB,dyB,dxC,dyC=0.2*f,0.2*f,0.2*f,0.2*f,0.2*f,-0.2*f
can=Canvas(root,bg='dark green',height=H,width=L)
can.grid(row=1,column=1,rowspan=2)
can2=Canvas(root,bg='brown',highlightbackground='brown')
can2.grid(row=1,column=2,sticky=N)
information=Label(can2,text="",height=16,width=36,relief=GROOVE,bg="brown",fg="white",justify=LEFT,command=None)
information.pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Quitter le jeu !',height=1,width=35,relief=GROOVE,bg="white",command=quitter).pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
Button(can2,text='Stop !',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Figure de synthèse',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=synthese).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Points de Gergonne et de Nagel',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Gergonne_Nagel).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle inscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_inscrit).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='''Cercle et droite d' Euler''',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Euler).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle circonscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_circonscrit).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Orthocentre',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=ortho_centre).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Centre de gravité',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=centre_de_gravite).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
Button(can2,text='Triangle',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=animation_triangle).pack(padx=4,pady=4,side=BOTTOM,anchor=SW)
ss=Scale(from_ =2,to=20,showvalue=10,length=50,command=naruto)
ss.grid(row=0,column=0)
kmin,kmax,kdef=0,10,1
vitesse_jeu=Scale(can2,length=215,orient=HORIZONTAL,sliderlength=11,label="Vitesse de l'animation (entre 0 et 10)", from_ =kmin, to =kmax, troughcolor ='white',command =vitesse)
vitesse_jeu.pack(padx=1,pady=1,side=BOTTOM,anchor=SW)
vitesse_jeu.set(kdef)
root.mainloop()
root.destroy()
9 juin 2006 à 19:34
(si tu peut voir un .hack//sing regarde le les dessins sont sublibles, même si l'istoir est 50-50)
bon c simpas de ta part d'avoir laisser ma source (celle ci-dessus) tel quel (je ne sait pas si sa s'ecrit comme cela) en vers7
et puis non je ne suis pas d'accort pour en rester la... (tu purais faire une version compressée suprimer les commentaires etc)
donc pour la fonction pour la redimention utilise le script suivant :
!!! lancement du chrono !!!
8 juin 2006 à 01:18
Je viens de mettre la version 9 sur le site.
Celle-ci fait apparaître le menu pop-up que tu as ajouté, ainsi que la commande clavier .
Dans le menu, j'ai supprimé "Tout" et je l'ai remplacé par "Présentation du script", placé au début.
Par contre, je n'ai pas réussi à trouver l'astuce qui permet de redimensionner la fenêtre avec un widget Scale.
On peut laisser comme cela à mon avis, sauf si tu as une idée.
De même, j'ai essayé d'empêcher le problème de l'accélération du mouvement au fur et à mesure des clics sur les boutons, mais sans succès.
J'ai finalement introduit un freinage k=0.999*k
Je pense que l'on peut s'en contenter.
En conclusion, serais-tu d'accord pour que l'on en reste là ???
HCD
(Au fait, si tu as besoin d'un éclaircissement en math, n'hésites pas : je ferai le maximum)
6 juin 2006 à 23:02
Modifier un code en 36mn29s alors que tu n'en es pas l'auteur, il faut le faire !
J' apprécie l'humour ... Bien vu pour Ho C'est Difficile !!!
Pour ton info, j'ai fait l'Ecole Polytechnique en 1963. Ceci explique cela ...
Eh oui, j'ai bien 63 ans : et 50 ans nous séparent !!! SAUF quant on discute le coup en PYTHON, où là tu me donnes des leçons (en fait il n'y a pas d'âge pour cela) !!!
Je m'arrête, car il est tard.
Je reprendrai demain pour continuer à améliorer le script selon tes idées (mettre un widget (Scale) pour changer la grandeur de la fenêtre + régler le problème de la vitesse qui augmente à chaque fois que l'on clique sur le même bouton).
Good night sir
A+
HCD
6 juin 2006 à 21:11
6 juin 2006 à 21:10
#! /usr/bin/env python
f=0.75 # facteur d'échelle lié à la résoloution de l'écran du PC : on peut l'augmenter ou le diminuer
#########################################################
#Amilioration par xeolin : #
#Ajout de menu_bouton au clic droit de la sourit #
#Ajout d'une fonction who create it ? #
#pour miopes... et monosouris (y fo penser au autre) #
#modifier en 36min29s #
#########################################################
# -*- coding: Latin-1 -*-
# Python version 2.4.2
# Tk version 8.4
# IDLE version 1.1.2
# <<< DROITE et CERCLE d' EULER >>>
# version 7
# Dans cette version on a simplifié l'écriture du code en faisant systématiquement appel à la fonction "barycentre" pour définir les points remarquables du triangle.
# PRESENTATION
# On considère le triangle quelconque ABC avec les points remarquables suivants :
# G : centre de gravité
# H : orthocentre
# O : centre du cercle circonscrit
# I : centre du cercle inscrit
# E : centre du cercle d'Euler
# Ge : point de Gergonne
# N : point de Nagel
# Le cercle d'Euler passe par les neufs points suivants :
# les milieux des trois côtés du triangle : mA, mB, mC
# les pieds des hauteurs issues des trois sommets : hA, hB, hC
# les milieux des segments joignant les trois sommets à l'orthocentre : aA, bB, cC)
# La droite d'Euler passe par les quatre points O, E, G, H :qui forment une division harmonique : EO / EG HO / OG ( 3)
# Les trois points G, I , N sont alignés, avec la relation : GN =2*GI (on a aussi HN = 2*OI)
from Tkinter import*
from math import *
from tkMessageBox import askokcancel
def pop_up(event=None) :
frame = Frame(root, relief=RIDGE)
entry Entry(frame, width '21')
menu Menu(entry, tearoff 0)
menu.add_command(label ='Triangle', underline =0,command = animation_triangle)
menu.add_separator()
menu.add_command(label ='Centre de gravité', underline =0,command = centre_de_gravite)
menu.add_command(label ='Orthocentre', underline =0,command = ortho_centre)
menu.add_command(label ='Cercle circonscrit', underline =0,command = cercle_circonscrit)
menu.add_command(label ='Cercle et droite d\' Euler', underline =0,command = Euler)
menu.add_command(label ='Cercle inscrit', underline =0,command = cercle_inscrit)
menu.add_command(label ='Points de Gergonne et de Nagel', underline =0,command = Gergonne_Nagel)
menu.add_command(label ='Figure de synthèse', underline =0,command = synthese)
menu.add_separator()
menu.add_command(label ='Tout', underline =0,command = rahxephon)
menu.add_separator()
menu.add_command(label ='Stop !', underline =0,command = stop)
menu.add_command(label ='Quitter le "jeu"', underline =0,command = quitter)
menu.add_separator()
menu.add_command(label ='A propos', underline =0,command = hack_sing)
ycoord = entry.winfo_pointery()
xcoord = entry.winfo_pointerx()
menu.tk_popup(xcoord, ycoord)
def rahxephon(): #/*pour toi ossi*/
global fen1
fen1=Tk()
fen1.configure (bg='grey100')
fen1.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen1.overrideredirect(TRUE)
Label(fen1,text="""Et bas non,\n il l'a pas fait \n;)""",bg='grey100',fg='grey0',font='Arial 150 bold').pack()
Button(fen1,text='OK',command=fen1.destroy).pack()
fen.mainloop()
def hack_sing(): #/*pour toi*/
global fen
fen=Tk()
fen.configure (bg='grey0')
fen.geometry("%sx%s+0+0"%(root.winfo_screenwidth(),root.winfo_screenheight()))
fen.overrideredirect(TRUE)
Label(fen,text="""By HCD""",bg='grey0',fg='grey100',font='Arial 250 bold').pack()
Button(fen,text='OK',font='Arial 100 bold',command=fen.destroy).pack()
fen.mainloop()
def vitesse(a):
"récupération de la valeur (a) choisie sur l'échelle"
global k
k=int(a) #affectation à la variable <k>
def animer():
"résolution du triangle et animation "
global xA,yA,xB,yB,xC,yC # coordonnées des sommets A, B, C
global dxA,dyA,dxB,dyB,dxC,dyC # coordonnées des vecteurs vitesses des sommets A, B, C
global a,b,c,p # longueur des côtés BC,CA,AB et demi périmètre
global A,B,C #angles aux sommets A,B,C
global xmA,ymA,xmB,ymB,xmC,ymC # coordonnées des milieux des côtés BC, CA, AB
global xG,yG # coordonnées du centre de gravité (G)
global xhA,yhA,xhB,yhB,xhC,yhC # coordonnées des pieds des hauteurs issues des trois sommets A, B, C
global xH,yH # coordonnées de l'orthocentre (H)
global xO,yO,RO # coordonnées du centre (O) et rayon (RO) du cercle circonscrit
global xE,yE,RE # coordonnées du centre (E) et rayon (RE) du cercle d'Euler
global xaA,yaA,xbB,ybB,xcC,ycC # coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
global xGergonne,yGergonne,xNagel,yNagel # coordonnées des points de Gergonne et de Nagel
global xI,yI,RI # coordonnées du centre (I) et rayon (RI) du cercle inscrit
global xiA,yiA,xiB,yiB,xiC,yiC # coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
global xeA,yeA,xeB,yeB,xeC,yeC # coordonnées des points de contact entre les cercles exinscrits et les côtés du triangle
if flag==1 :
can.delete(ALL)
# animation
xA,yA,xB,yB,xC,yC=xA+k*dxA,yA+k*dyA,xB+k*dxB,yB+k*dyB,xC+k*dxC,yC+k*dyC
# résolution du triangle
a,b,c=hypot(xC-xB,yC-yB),hypot(xA-xC,yA-yC),hypot(xA-xB,yA-yB)
p=(a+b+c)/2 # demi périmètre (p)
RI=sqrt((p-a)*(p-b)*(p-c)/p)# rayon (RI) du cercle inscrit
if p==a:A=0
if p==b:B=0
if p==c:C=0
if p==a or p==b or p==c:RI,RO=0,infini
else:
A,B,C=2*atan(RI/(p-a)),2*atan(RI/(p-b)),2*atan(RI/(p-c))# angles aux sommets
RO=a*b*c/RI/p/4# rayon (RO) du cercle circonscrit
RE=RO/2 # rayon (RE) du cercle d'Euler
# coordonnées des milieux des côtés BC, CA, AB et du centre de gravité G ( isobarycentre : A[1], B[1], C[1] )
barycentre(0,1,1);xmA,ymA=x,y
barycentre(1,0,1);xmB,ymB=x,y
barycentre(1,1,0);xmC,ymC=x,y
barycentre(1,1,1);xG,yG=x,y
# coordonnées des pieds des hauteurs issues des trois sommets A, B, C et de l'orthocentre H : barycentre de A[tan(A)], B[tan(B)], C[tan(C)]
barycentre(0,tan(B),tan(C));xhA,yhA=x,y
barycentre(tan(A),0,tan(C));xhB,yhB=x,y
barycentre(tan(A),tan(B),0);xhC,yhC=x,y
barycentre(tan(A),tan(B),tan(C));xH,yH=x,y
# coordonnées du centre (O) du cercle circonscrit : barycentre de A[sin(2*A)], B[sin(2*A)], C[sin(2*A)]
barycentre(sin(2*A),sin(2*B),sin(2*C));xO,yO=x,y
# coordonnées du centre (E) du cercle d'Euler
xE,yE=(xO+xH)/2,(yO+yH)/2
# coordonnées des milieux des segments joignant les trois sommets à l'orthocentre
xaA,yaA= (xH+xA)/2,(yH+yA)/2
xbB,ybB= (xH+xB)/2,(yH+yB)/2
xcC,ycC= (xH+xC)/2,(yH+yC)/2
# coordonnées du point de Gergonne : barycentre de A[(p-b)*(p-c)], B[(p-c)*(p-a)], C[(p-a)*(p-b)]
barycentre((p-b)*(p-c),(p-c)*(p-a),(p-a)*(p-b));xGergonne,yGergonne=x,y
# coordonnées du point de Nagel : barycentre de A[p-a], B[p-b], C[p-c]
barycentre(p-a,p-b,p-c);xNagel,yNagel=x,y
# coordonnées du centre (I) du cercle inscrit : barycentre de A[a], B[b], C[c]
barycentre(a,b,c);xI,yI=x,y
# coordonnées des points de contact entre le cercle inscrit et les côtés du triangle
if p==a:xiA,yiA=0,0
else:barycentre(0,(p-c)*(p-a),(p-a)*(p-b));xiA,yiA=x,y
if p==b:xiB,yiB=0,0
else:barycentre((p-b)*(p-c),0,(p-a)*(p-b));xiB,yiB=x,y
if p==c:xiC,yiC=0,0
else:barycentre((p-b)*(p-c),(p-c)*(p-a),0);xiC,yiC=x,y
# coordonnées des points de contact entre les cercles exinscrit et les côtés du triangle
xeA,yeA=2*xmA+-xiA,2*ymA+-yiA
xeB,yeB=2*xmB+-xiB,2*ymB+-yiB
xeC,yeC=2*xmC+-xiC,2*ymC+-yiC
# maintien du triangle dans le plan de jeu
if xA<8 or xA>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xB<8 or xB>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if xC<8 or xC>L-8:dxA,dxB,dxC=-dxA,-dxB,-dxC
if yA<8 or yA>H-8:dyA,dyB,dyC=-dyA,dyB,dyC
if yB<8 or yB>H-8:dyA,dyB,dyC=-dyA,-dyB,-dyC
if yC<8 or yC>H-8:dyA,dyB,dyC=dyA,dyB,-dyC
#lancement de l'animation des différentes figures
if tt==1 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:animation_triangle()
if tt==0 and gg==1 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0:centre_de_gravite()
if tt==0 and gg==0 and hh==1 and oo==0 and ee==0 and ii==0 and gn==0:ortho_centre()
if tt==0 and gg==0 and hh==0 and oo==1 and ee==0 and ii==0 and gn==0:cercle_circonscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==1 and ii==0 and gn==0:Euler()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==1 and gn==0:cercle_inscrit()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==1:Gergonne_Nagel()
if tt==0 and gg==0 and hh==0 and oo==0 and ee==0 and ii==0 and gn==0 and ss==1:synthese()
def barycentre(k1,k2,k3):
" cette fonction donne les coordonnées x et y du barycentre des points A, B, C auxquels sont affectés les coefficients k1, k2, k3"
global x,y
m,n,o=k1,k2,k3
x,y=(m*xA+n*xB+o*xC)/(m+n+o),(m*yA+n*yB+o*yC)/(m+n+o)
def animation_triangle():
" A,B,C sont les sommets du triangle"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,1,0,0,0,0,0,0
texte="A,B,C sommets"
information.config(text=texte)
can.create_text(150,500,text="Le triangle a pour sommets A, B, C",fill="white")
triangle()
root.after(100,animer)
def triangle():
"dessin du triangle"
cote_AB=can.create_line(xA,yA,xB,yB,fill="red",width=2)
cote_BC=can. create_line(xB,yB,xC,yC,fill="red",width=2)
cote_CA=can. create_line(xC,yC,xA,yA,fill="red",width=2)
sommet_A=can.create_oval(xA-8,yA-8,xA+8,yA+8,fill="red",width=1)
sommet_B=can.create_oval(xB-8,yB-8,xB+8,yB+8,fill="red",width=1)
sommet_C=can.create_oval(xC-8,yC-8,xC+8,yC+8,fill="red",width=1)
lettre_A=can.create_text(xA,yA,text="A",fill="white")
lettre_B=can.create_text(xB,yB,text="B",fill="white")
lettre_C=can.create_text(xC,yC,text="C",fill="white")
def centre_de_gravite():
" mA,mB,mC sont les milieux des côtés du triangle et G le centre de gravité"
global flag,tt,gg,hh,oo,ee,ii
flag,tt,gg,hh,oo,ee,ii,gn=1,0,1,0,0,0,0,0
texte="A,B,C sommets\nG Centre de gravité"
information.config(text=texte)
can.create_text(150,500,text="Le centre de gravité G est à l' intersection \ndes droites issues des sommets A, B, C et \npassant par les milieux des côtés BC, CA, AB",fill="white")
ligne_mA_A=can.create_line(xA,yA,xmA,ymA,fill='#007030',width=2)
ligne_mB_B=can.create_line(xB,yB,xmB,ymB,fill='#007030',width=2)
ligne_mC_C=can.create_line(xC,yC,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
root.after(100,animer)
def ortho_centre():
" hA,hB,hC sont les pieds des hauteurs issues des sommets du triangle et H l'orthocentre"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,1,0,0,0,0
texte="A,B,C sommets\nH orthocentre"
information.config(text=texte)
can.create_text(150,500,text="L' orthocentre H est à l' intersection \ndes hauteurs issues des sommets A, B, C",fill="white")
ligne_hA_A=can.create_line(xA,yA,xhA,yhA,fill='#007030',width=2)
ligne_hB_B=can.create_line(xB,yB,xhB,yhB,fill='#007030',width=2)
ligne_hC_C=can.create_line(xC,yC,xhC,yhC,fill='#007030',width=2)
ligne_hA_H=can.create_line(xH,yH,xhA,yhA,fill='#007030',width=2)
ligne_hB_H=can.create_line(xH,yH,xhB,yhB,fill='#007030',width=2)
ligne_hC_H=can.create_line(xH,yH,xhC,yhC,fill='#007030',width=2)
triangle()
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
root.after(100,animer)
def cercle_circonscrit():
"centre (O) et rayon (RO) du cercle circonscrit "
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,1,0,0,0
texte='''A,B,C sommets\nO centre du cercle circonscrit'''
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
cercle_circonscrit=can.create_oval(xO-RO,yO-RO,xO+RO,yO+RO,outline='gold',width=1)
ligne_mA_CT=can.create_line(xO,yO,xmA,ymA,fill='#007030',width=2)
ligne_mB_CT=can.create_line(xO,yO,xmB,ymB,fill='#007030',width=2)
ligne_mC_CT=can.create_line(xO,yO,xmC,ymC,fill='#007030',width=2)
triangle()
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="gold",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="gold",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="gold",width=1)
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
root.after(100,animer)
def Euler():
"centre (E) et rayon (RE) du cercle d'Euler et droite d'Euler"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,1,0,0
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler"
information.config(text=texte)
can.create_text(250,500,text= '''Le cercle d' Euler passe par les 9 points suivants :
- les milieux des trois côtés du triangle
- les pieds des hauteurs issues des trois sommets
- les milieux des segments joignant les trois sommets à l'orthocentre
La droite d' Euler relie les 4 points suivants: G, H, O, E
avec la relation EO / EG HO / OG ( 3)''',fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
cercle_Euler=can.create_oval(xE-RE,yE-RE,xE+RE,yE+RE,outline="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
aA=can.create_oval(xaA-3,yaA-3,xaA+3,yaA+3,fill="green",width=1)
bB=can.create_oval(xbB-3,ybB-3,xbB+3,ybB+3,fill="green",width=1)
cC=can.create_oval(xcC-3,ycC-3,xcC+3,ycC+3,fill="green",width=1)
mA=can.create_oval(xmA-3,ymA-3,xmA+3,ymA+3,fill="pink",width=1)
mB=can.create_oval(xmB-3,ymB-3,xmB+3,ymB+3,fill="pink",width=1)
mC=can.create_oval(xmC-3,ymC-3,xmC+3,ymC+3,fill="pink",width=1)
hA=can.create_oval(xhA-3,yhA-3,xhA+3,yhA+3,fill="light blue",width=1)
hB=can.create_oval(xhB-3,yhB-3,xhB+3,yhB+3,fill="light blue",width=1)
hC=can.create_oval(xhC-3,yhC-3,xhC+3,yhC+3,fill="light blue",width=1)
root.after(100,animer)
def cercle_inscrit():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,1,0
texte="A,B,C sommets\nG Centre de gravité\nI centre du Cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (I) du cercle inscrit est à l' intersection\ndes bissectrices issues des sommets A, B, C",fill="white")
ligne_A_I=can.create_line(xI,yI,xA,yA,fill='#007030',width=2)
ligne_B_I=can.create_line(xI,yI,xB,yB,fill='#007030',width=2)
ligne_C_I=can.create_line(xI,yI,xC,yC,fill='#007030',width=2)
ligne_iA_I=can.create_line(xI,yI,xiA,yiA,fill='#007030',width=1)
ligne_iB_I=can.create_line(xI,yI,xiB,yiB,fill='#007030',width=1)
ligne_iC_I=can.create_line(xI,yI,xiC,yiC,fill='#007030',width=1)
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='yellow',width=1)
triangle()
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="yellow",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="yellow",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="yellow",width=1)
root.after(100,animer)
def Gergonne_Nagel():
"centre (I) et rayon (RI) du cercle inscrit et droite reliant les points de Gergonne et de Nagel"
global flag,tt,gg,hh,oo,ee,ii,gn
flag,tt,gg,hh,oo,ee,ii,gn=1,0,0,0,0,0,0,1
texte="A,B,C sommets\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(250,500,text= '''Le point de Gergonne est à l'intersection des droites issues des sommets et passant
par les points de contact du cercle inscrit avec les côtés du triangle
Le point de Nagel est à l'intersection des droites issues des sommets et passant par
les points de contact des cercles exinscrits avec les côtés du triangle
La droite de Nagel relie les 3 points suivants : N, G, I
avec la relation IG = GN / 2''',fill="white")
cercle_inscrit=can.create_oval(xI-RI,yI-RI,xI+RI,yI+RI,outline='#007030',width=1)
ligne_iA_A=can.create_line(xA,yA,xiA,yiA,fill='#007030',width=2)
ligne_iB_B=can.create_line(xB,yB,xiB,yiB,fill='#007030',width=2)
ligne_iC_C=can.create_line(xC,yC,xiC,yiC,fill='#007030',width=2)
ligne_eA_A=can.create_line(xA,yA,xeA,yeA,fill='#007030',width=2)
ligne_eB_B=can.create_line(xB,yB,xeB,yeB,fill='#007030',width=2)
ligne_eC_C=can.create_line(xC,yC,xeC,yeC,fill='#007030',width=2)
triangle()
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_iA=can.create_oval(xiA-3,yiA-3,xiA+3,yiA+3,fill="light blue",width=1)
marqueur_iB=can.create_oval(xiB-3,yiB-3,xiB+3,yiB+3,fill="light blue",width=1)
marqueur_iC=can.create_oval(xiC-3,yiC-3,xiC+3,yiC+3,fill="light blue",width=1)
marqueur_eA=can.create_oval(xeA-3,yeA-3,xeA+3,yeA+3,fill="orange",width=1)
marqueur_eB=can.create_oval(xeB-3,yeB-3,xeB+3,yeB+3,fill="orange",width=1)
marqueur_eC=can.create_oval(xeC-3,yeC-3,xeC+3,yeC+3,fill="orange",width=1)
root.after(100,animer)
def synthese():
" figure de synthèse"
global flag,tt,gg,hh,oo,ee,ii,gn,ss
flag,tt,gg,hh,oo,ee,ii,gn,ss=1,0,0,0,0,0,0,0,1
texte="A,B,C sommets\nG Centre de gravité\nH orthocentre\nO centre du cercle circonscrit\nE centre du cercle d' Euler\nI centre du cercle inscrit\nN point de Nagel\nGe point de Gergonne"
information.config(text=texte)
can.create_text(150,500,text="Le centre (O) du cercle circonscrit est à \nl' intersection des médiatrices des\ncôtés BC, CA, AB",fill="white")
triangle()
droite_Euler_1=can.create_line(xO,yO,xG,yG,fill="white",width=1)
droite_Euler_2=can.create_line(xH,yH,xG,yG,fill="white",width=1)
droite_Nagel=can.create_line(xI,yI,xNagel,yNagel,fill="white",width=1)
marqueur_G=can.create_oval(xG-8,yG-8,xG+8,yG+8,fill="pink",width=1)
lettre_G=can.create_text(xG,yG,text="G",fill="black")
marqueur_H=can.create_oval(xH-8,yH-8,xH+8,yH+8,fill="light blue",width=1)
lettre_H=can.create_text(xH,yH,text="H",fill="black")
centre_cercle_circonscrit=can.create_oval(xO-8,yO-8,xO+8,yO+8,fill="gold",width=1)
lettre_O=can.create_text(xO,yO,text="O",fill="black")
centre_cercle_Euler=can.create_oval(xE-8,yE-8,xE+8,yE+8,fill="white",width=1)
lettre_E=can.create_text(xE,yE,text="E",fill="black")
centre_cercle_inscrit=can.create_oval(xI-8,yI-8,xI+8,yI+8,fill="yellow",width=1)
lettre_I=can.create_text(xI,yI,text="I",fill="black")
point_de_Gergonne=can.create_oval(xGergonne-8,yGergonne-8,xGergonne+8,yGergonne+8,fill="light blue",width=1)
lettre_Ge=can.create_text(xGergonne,yGergonne,text="Ge",fill="black")
point_de_Nagel=can.create_oval(xNagel-8,yNagel-8,xNagel+8,yNagel+8,fill="orange",width=1)
lettre_N=can.create_text(xNagel,yNagel,text="N",fill="black")
root.after(100,animer)
def stop():
global flag
flag=0
dxA,dyA,dxB,dyB,dxC,dyC=0,0,0,0,0,0
def quitter():
ans=askokcancel('',"Voulez-vous réellement quitter ?")
if ans:root.quit()
######## Programme principal ############################################
root = Tk()
root.title("#>>>>>>>| DROITE et CERCLE d' EULER |<<<<<<<# By HCD")
root.bind('',pop_up)
root.bind('',pop_up)#ca sert a rien mais bon pour les non sourisistes (en estimant que ca existe encore)
# données initiales:
L,H=1200*f,800*f # largeur et hauteur du plan
flag,tt,gg,hh,oo,ee,ii,gn,ss=0,0,0,0,0,0,0,0,0
infini=tan(pi/2)
xA,yA,xB,yB,xC,yC=100*f,100*f,50.,500*f,700*f,700*f
dxA,dyA,dxB,dyB,dxC,dyC=0.25*f,0.25*f,0.25*f,0.25*f,0.25*f,-0.25*f
can=Canvas(root,bg='dark green',height=H,width=L)
can.grid(row=1,column=0,rowspan=2)
can2=Canvas(root,bg='brown',highlightbackground='brown')
can2.grid(row=1,column=1,sticky=N)
information=Label(can2,text="",height=16,width=36,relief=GROOVE,bg="brown",fg="white",command=None)
information.pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Quitter le jeu !',height=1,width=35,relief=GROOVE,bg="white",command=quitter).pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
Button(can2,text='Stop !',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Figure de synthèse',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=synthese).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Points de Gergonne et de Nagel',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Gergonne_Nagel).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle inscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_inscrit).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='''Cercle et droite d' Euler''',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=Euler).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Cercle circonscrit',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=cercle_circonscrit).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Orthocentre',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=ortho_centre).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Centre de gravité',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=centre_de_gravite).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
Button(can2,text='Triangle',height=1,width=35,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=animation_triangle).pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
kmin,kmax,kdef=0,10,1
vitesse_jeu=Scale(can2,length=215,orient=HORIZONTAL,sliderlength=15*f,label="Vitesse de l'animation (entre 0 et 10)", from_ =kmin, to =kmax, troughcolor ='white',command =vitesse)
vitesse_jeu.pack(padx=5*f,pady=5*f,side=BOTTOM,anchor=SW)
vitesse_jeu.set(kdef)
root.mainloop()
root.destroy()
6 juin 2006 à 20:33
2° je sais que c'est embetant a faire mais tu pourai metre un widget (Scale) pour changer la grandeur de la fenetre
3° mais de rien et le tien :
Ho
C'est
Difficile
non?
4. bon j'ai dit droite (et non courbe) et cercle d'Euler et tout d'un coup un delic est apparut tombant comme un aiclair sur ma prof (bon j'en fé un peut trop) t elle m'a expliquer l'origine
bon d'apres ce que je me souvient c'est (pour la droite)
le centre du cercle inscrit et le circonscrit et l'orthocentre qui sont alignés sur une même droite
et pour le cercle : c'est 7 (ou 8) point qui sont sur un cercle dont certaint sont issue du pied qegrhioqrhgrhsrhuoqhgjqnç'"èé-_çè-çà"'uihui( brouhaha ) zefjiqhtze_"-è_uid
et vla.
5° bobn je te poserai 2 question a chaque fois que je te mailrait ( holala le super vocabulaire bon on va dire que je posterai un message t'étant adressé) j'en ai fait une pour ton psedo et he... bon...
as-tu vraiment 63 ans?
(non franchement tu fais plus jeune)
6° Moi ma fable preférée est : 'l'âne chargé de sel et l'âne chargé d'éponge'
pourquoi ? cela trace la differannce même entre moi et les 21 autres eleves de ma classe (j'en exclus 2)
7) je modifirai ta source...
A tout de suite (si je fini le prog a temps)
6 juin 2006 à 15:38
Voici la mienne dans l'ordre de tes remarques.
1° "activer/désactiver" les boutons : je n'ai rien fait pour le moment, car je pense qu'il est peut-être préférable de laisser la possibilité d'aller d'un bouton à un autre (pour revoir une figure, par exemple). Quel est ton avis ?
2° Taille de l'écran et nombre de pixels : je n'y avais pas pensé. Comme solution, j'ai ajouté au début du script un "facteur d'échelle" (f) réglable.Il vaut 0.75 au départ.(je suis avec f=1 avec mon grand écran).
3° Merci pour l'info sur l'origine de ton PSEUDO; Il sonne bien en effet.
4° Une prof de math qui ne connaît pas la droite d'Euler : cela me surprend beaucoup, car c'est une grande classique quand on étudie les propriétés remarquables des triangles. Tu devrais lui redemander en lui parlant bien de "droite".
5° A ta question 1, ma réponse est la lettre "X" :
X désigne le plus souvent une variable inconnue dans une équation
X est aussi la lettre symbole de lEcole Polytechnique (des forts en math !)
6° A la question 2, il y a une phrase que j'aime bien dans la fable de LA FONTAINE intitulée"Le lion et le rat" :
" Patience et longueur de temps font plus que force ni que rage"
A bientôt sur le site
(PS: je viens de mettre une version 7 sur le site)
HCD
2 juin 2006 à 21:09
mé HCD tou mé décois car tou a oublié moun dernier conseille : mé des "stat=DISABLED" a tes boutons (tu sé quant lé boutones sone désactibé) (que j'aime écrire en phonétique)
et puis le nombre de pixels de ton ordi s'exprime en miliards ou quoi : comme pour ton serpent pas comme les autre tu oublit que les autres ont des résolutions plus faible (moi je suis en 1280/960 et ca rentre même pas dans l'écrant donc ca serai simpas de fair une version 800/500)
et pour finir, je sais plus...
A oui je vais te modifier ton script quant tu aura changé la résolution de ton programme fesant (faute mé ché pas ou) qui fé avancé la "CHOSE"
et pis c'est a peu prés tout.
Xeolin ou Sk8gis ou Tipro75 ou Aegis
et c ca l'evolution des psedo...
et pour ceux qui veulent connaitre l'etimologie de Xeolin :
ca vien du dessin animé s'appelant Rah-Xephon
ou le pilote de cette antitée est surnomé Olin (j'ai pas compris pq)
et j'ai trouvé que xéolin était simpas comme tout...
et oui (A les grand discour...):
j'ai demandé a ma prof de math ce qu'était la "droite d' Euler" (bon j'ai dit "courbe d' Euler")
et elle m'a répondu quelle ne savait pas...
et 2 question personelles :
1-quelle est ta touche préférée du clavier ?
2-et quelle est ta phrase de philo préférée ?
les deux sont dificile a répondre...
1-La touche Fin seulement a cause de son utilitée
2- "Les relations humaines sont essenciellement (big faute mé ché pas toujours ou) basés sur des interet comuns (2 big faure mé idem)"
A+ au plaisir de te lire (j'ai bien aimé cette formule)
XeOlin
1 juin 2006 à 22:52
Pour info : "cartésien" vient du nom du philosophe et mathématicien René DESCARTES ( 1596-1650 ). C'est ainsi que l' on désigne un repère Ox,Oy dans le plan : tout point y a pour coordonnées x(abcisse) et y(ordonnée).
Que tu sois le meilleur de la classe ne me surprend pas ...
Quant à l'ortho, je sais que c'est du boulot, mais pas plus que d'apprendre à programmer : comme la syntaxe,cela ne s'invente pas... Il faut simplement s'y "coller".
Je viens de remettre une nouvelle version sur le site qui comporte des améliorations du code, mais je n'ai pas intégré le menu POPUP.
En fait,j'ai essayé, mais je n'ai pas réussi.
Peux-tu me donner un coup de main STP ?
C'est nouveau pour moi.
MERCI encore et A+
HCD
1 juin 2006 à 16:46
orthographe ne s'écrit pas hortographes
jamais ne s'écrit pas j'amais
tu comprends ne s'écrit pas tu comprent
et oui pour que l'on ne pense pas du bien de frankystadore (Conquestador)
c moi qui ai entierement réécrit la source :)
1 juin 2006 à 16:40
car mon niveau de math ne me permet pas de, de comprendre.
(même si je suis le meilleur de la classe , eh en pratiquement tout (NB je pense
que tu comprent le presque, voir mes fautes d'hortographes))
de plus il y aa une source sur python france : MENU POPUP AU CLIC DROIT DE LA SOURIS
de frankystadore
qui l'a franchement mal ecrit...
class voi :
def popupChoices(self, event=None):
"""Popup right-click menu of special parameter operations"""
self.frame = Frame(self.window, relief=RIDGE)
self.entry Entry(self.frame, width '21')
self.menu Menu(self.entry, tearoff 0)
self.menu.add_command(label "1",command None)
self.menu.add_separator()
self.menu.add_command(label "2",command None)
self.menu.add_command(label "3",command None)
ycoord = self.entry.winfo_pointery()
xcoord = self.entry.winfo_pointerx()
self.menu.tk_popup(xcoord, ycoord)
30 mai 2006 à 22:58
Je suis content de te voir réagir.
Le code paraît compliqué: en fait,il ne l'est pas.
Je dirais plutôt qu'il est "lourd".
Ceci tient au fait que tous les points remarquables du triangle se définissent comme intersections de droites en coordonnées cartésiennes dans la fenêtre Tkinter.
Pour tenir compte de tes remarques, je viens de mettre sur le site une nouvelle version avec notamment un curseur permettant de faire varier la vitesse de l'animation de la "chose"...Le système de boutons est complètement revu.
Pour le "menu pop-up avec le bouton droit", je veux bien, mais je ne sais pas comment m'y prendre ???
A+ au plaisir de te lire
HCD
27 mai 2006 à 12:00
bon sinon TA PAS HONTE !!
y a même pas de truc pour acceler le mouvement de ta 'chose'.
de plus franchement a quoi ca sert d'avoir 3 menu bouton pour avoir une fonction dans chacune et pour finir tu n'a même pas mis de fonction credits !
et un menu pop-up avec le bouton droit ne serait pas de trop...
et il n'y a pas de titre sur la fenetre demandant si on veut ou non quiter...