GRAVITATION UNIVERSELLE

jpountz Messages postés 9 Date d'inscription samedi 22 juillet 2006 Statut Membre Dernière intervention 2 septembre 2006 - 27 août 2006 à 15:04
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015 - 11 sept. 2006 à 03:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39275-gravitation-universelle

Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
11 sept. 2006 à 03:08
Merçi tu m'honores ^^
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
10 sept. 2006 à 22:57
Pardonnes-moi : je n'avais pas les yeux en face des trous !!!
Les deux écritures donnent évidemment des résultats identiques.
Pour moi, ton code est parfait maintenant.
Et je le note 10.

HCD
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
10 sept. 2006 à 04:59
f=sqrt((f1*u12+f2*u13)*(f1*u12+f2*u13)+(f1*v12+f2*v13)*(f1*v12+f2*v13))

et

f=sqrt((f1*u12+f2*u13)**2+(f1*v12+f2*v13)**2)

ce n'est pas la même chose?
car j'ai opté pour le second.
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
7 sept. 2006 à 23:10
Tu n'as toujours pas corrigé le code comme je te l'indiquais le 28/O8 :

au lieu de :
f=sqrt(abs((f1*u12+f2*u13)+(f1*v12+f2*v13)))
mettre :
f=sqrt((f1*u12+f2*u13)*(f1*u12+f2*u13)+(f1*v12+f2*v13)*(f1*v12+f2*v13))

HCD
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
29 août 2006 à 01:03
OK mais il te reste à mettre le code corrigé sur le site.
Good night Sir.

HCD
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
29 août 2006 à 00:06
J'ai corrigé.
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
28 août 2006 à 23:53
Désolé, mais en y regardant de plus près :

aulieu de :
f=sqrt(abs((f1*u12+f2*u13)+(f1*v12+f2*v13)))

je pense qu'il faut mettre
f=sqrt((f1*u12+f2*u13)*(f1*u12+f2*u13)+(f1*v12+f2*v13)*(f1*v12+f2*v13))

ceci règle en même temps le problème de signe
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
28 août 2006 à 23:41
Oui c'est bon la force est bien égale à zero quand je met un astre au milieu des deux autres. ^^
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
28 août 2006 à 23:20
Je pense que tu es sur la bonne voie.
La théorie sur les vecteurs est un peu surprenante au départ, mais en s'accrochant un peu on s'apperçoit très vite que leur manipulation est facile. Elle permet de faire plein de choses intéressantes en électromagnétisme, par exemple. Mais elle n'est pas indispensable pour vivre, bien entendu !!!
Compte tenu de ce que tu sais faire en programmation, je suis certain que tu y arriveras sans peine.
Pour la question de signe, il faut vraiment y regarder de près pour être sûr que la formulation résiste à tous les cas de figures.
Un test à faire : vérifier que si astre1 est au milieu de astre2 et de astre3 (de même masse) la force est bien égale à zéro (les deux attractions se compensent dans ce cas).
A bientôt.

HCD
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
28 août 2006 à 22:56
J'ai utilisé la fonction abs() pour l'histoire des signes car cela engendre des erreurs de domaine puisque la racine carrée d'un nombre négatif ne peut-être calculée sinon je voulais te dire que les vecteurs je ne connais pas trop c'est pour cela que ça me pose problème (trop feignasse à l'école peut-être ^^) sinon j'aai fait des recherches à ce sujet et j'en déduis que cette méthode permet de calculer la force résultante F3=F1+F2 qui s'exerce sur un corps.

Bref un peu dur à digérer mais j'y arriverai ^^
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
28 août 2006 à 22:49
Ah ... j'oubliais !
Les modifications apportées à ton code sont les bonnes.
Reste à bien vérifier les questions de signe.

HCD
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
28 août 2006 à 22:40
Quand tu écris :

sqrt((f12*U12+f13*U13)*(f12*U12+f13*U13)+((f12*V12+f13*V13)*(f12*V12+f13*V13))

ce n'est pas une distance que tu calcules,stricto sensu, mais la LONGUEUR (ou la NORME comme dit JPOUNTZ) du VECTEUR (appelons le <vecteur1>) de coordonnées :

f12*U12+f13*U13 (sur l'axe des abcisses)
f12*V12+f13*V13 (sur l'axe des ordonnées)

Ce VECTEUR est lui-même la somme "vectorielle" des deux VECTEURS (appelons les <vecteur21> et <vecteur31>) de coordonnées :
pour le <vecteur21>
f12*U12(sur l'axe des abcisses)
f12*V12(sur l'axe des ordonnées)
pour le <vecteur31>
f13*U13 (sur l'axe des abcisses)
f13*V13 (sur l'axe des ordonnées)

La NORME du <vecteur21> est ainsi égale à : sqrt((f12*U12)*((f12*U12))+(f12*V12)*(f12*V12))
soit encore :f12*sqrt(U12*U12+V12*V12)=f12 puisque le vecteur (U12,V12) est unitaire (NORME=1)
Ilen est de même pour le <vecteur31> dont la NORME est égale f13

Touy ce qui précède est une autre façon de dire les choses.
Mais à la base tout repose sur l'addition VECTORIELLE comme te le rappelle JPOUNTZ.

Sinon j'ai bien reçu des deux autres messages et te répondrai dès mon retour dans environ une semaine.
jpountz Messages postés 9 Date d'inscription samedi 22 juillet 2006 Statut Membre Dernière intervention 2 septembre 2006
28 août 2006 à 21:21
Aïe, la mise en page a foutu le camp quand j'ai validé! ^^
Tu peux copier mon message dans le champ "AJOUTER UN COMMENTAIRE" en bas, tu verras mieux.
jpountz Messages postés 9 Date d'inscription samedi 22 juillet 2006 Statut Membre Dernière intervention 2 septembre 2006
28 août 2006 à 21:17
Ce que HCD veut dire, c'est que les forces s'additionnent vectoriellement. Par exemple, si tu mets l'astre 2 entre les astres 1 et 3 et à égale distance de chacun, la force exercée sur l'astre 2 est nulle puisque les deux forces f12 et f32 se compensent exactement.

C'est pour cela qu'il faut additionner les forces vectoriellement.
__
^ -> /|
->| F2 / ---->
F1| + -------> = / F1+F2 par exemple
| /
-----> ----->
et la norme de F1+F2 vaut en appelant Fx, la composante horizontale de F1+F2 et y la composante verticale, sqrt(Fx*Fx+Fy*Fy) ce qui est analogue à la formule de calcul des distances comme tu l'as remarqué.

En fait la valeur de la force est égale à la norme du vecteur représentant la force qui est elle-même proportionnelle à la "longueur" du vecteur, c'est pour ça que c'est la même formule que celle des distances!
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
28 août 2006 à 20:01
Tu prends la formule du calcul de la distance entre 2 points pour calculer la somme des forces exercées sur astre1 :

sqrt((f12*U12+f13*U13)*(f12*U12+f13*U13)+((f12*V12+f13*V13)*(f12*V12+f13*V13))

Je ne comprend pas ^^
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
28 août 2006 à 00:28
Je te répondrai, c'est promis.
Il est un peu tard ce soir : je coupe !!!
Sur le principe :
La force d'attraction de astre2 sur astre1 est un vecteur :appelons le <vecteur 21>.
Son module égal à m1*m2*6.67e-11/di et il est porté par la droite reliant astre2 à astre 1.
Il en est de même pour astre3 et astre1, avec le <vecteur 31>.

Donc la force résultante des attractions de astre2 et de astre3 sur astre1 est égale à la somme vectorielle :
<vecteur 21> + <vecteur 31>

Dans le code, il faut calculer les coordonnées de ces deux vecteurs, faire l'addition pour chaque coordonnées, puis calculer le module (d'où l'utilisation de sqrt)

Good night Sir !

HCD
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
28 août 2006 à 00:05
De plus pourquoi utilises-tu sqrt pour calculer la force résultante sur astre1?
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
28 août 2006 à 00:00
Pourrais-tu s'il te plaît me transmettre les formules mathématiques qui t'on permis d'exposer ce raisonnement s'il te plaît ça m'aiderait beaucoup ^^
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
27 août 2006 à 23:14
Merci pour avoir apporté toutes ces précisions.
Peut-être serait-il bien de les ajouter au début du code dans une rubrique "PRESENTATION du SCRIPT" ?

Qant à la "somme des deux vecteurs", j'y reviens car, en fait, tu additionnes leurs modules.
Par exemple :
dans
def astre1(event):
f=(forceG(m1, m2, di))+(forceG(m1,m3,di2))

avec f = m1*m2*6.67e-11/di**2 + m1*m3*6.67e-11/di2**2


La bonne approche est la suivante :

soit X1,Y1 les coordonnées de astre1
soit X2,Y2 les coordonnées de astre2
soit X3,Y3 les coordonnées de astre3

soit D12 = sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)) la distance entre astre1 et astre2
soit D13 = sqrt((X3-X1)*(X3-X1)+(Y3-Y1)*(Y3-Y1)) la distance entre astre1 et astre3

Le vecteur unitaire porté par la droite astre1/astre2 a pour coordonnées:
U12,V12 = (X2-X1)/D12,(Y2-Y1)/D12
Le vecteur unitaire porté par la droite astre1/astre3 a pour coordonnées:
U13,V13 = (X3-X1)/D13,(Y3-Y1)/D13

soit f12 le module de la force d'attraction mutuelle entre astre1 et astre2 : f12 = m1*m2*6.67e-11/D12**2
Les coordonnées de cette force sont :f12*U12,f12*V12
soit f13 le module de la force d'attraction mutuelle entre astre1 et astre3 : f13 = m1*m3*6.67e-11/D13**2
Les coordonnées de cette force sont :f13*U13,f13*V13

A partir de là, les coordonnées des forces résultantes sur astre1 sont : f12*U12+f13*U13,f12*V12+f13*V13
et son module est égal à : f1 = sqrt((f12*U12+f13*U13)*(f12*U12+f13*U13)+((f12*V12+f13*V13)*(f12*V12+f13*V13))

Dans ton code tu prends en fait : f1 = f12 + f13 , ce qui est très différent.
Si problème, n'hésites pas à me le dire.

HCD
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
27 août 2006 à 21:30
Bonsoir tout le monde et tout d'abord je voulais vous dire que j'étais content que mon code vous ai plus ^^

Donc je répondrai clairement à tes deux questions HCD :

*Pour la 1er c'est simple l'unité correspondant à la masse des astres est le kilogramme.
Je corrige cela tout de suite mais normalment sache que quand tu entres la valeur du poids d'un astre celui-ci s'affiche en bas de la fenêtre avec l'unité Kg.
Cela permet quand même de voir l'unité de masse.

*Pour répondre à ta 2e question je dirai que j'ai mis l'échelle afin de se placer où l'on veut dans l'échelle des grandeur afin de calculer la force éxercé entre les corps.
Car les astres qui sont présent dans le programme peuvents très bien représenter toutes sortes de corps quelconque aussi bien une balle de tennis qu'un être humain bien entendu on suppose cela en fonction des masses choisis ce qui permet de se donner une idée des forces éxercés entre des corps de poids distincs donc si le corps est d'une masse faible on prendra de préférence une échelle plus réduite et ce sera tout le contraire si la masse est plus conséquente tout est question d'interprétation de la part de l'utilisateur du programme.

Donc si je veux calculer la force exercée entre 2 astres je prendrai de préférence une échelle à 1e9 qui correspond à la distance année lumière.

Si ce sont 2 balles de tennis je prendrai une échelle à 0,001 de préférence qui correspondra au mètre ou sinon 0,00001 qui correspondra au cm car 1 vaut 1 km dans ce programme.

Mais c'est vrai que j'ai mis des boutons astres donc c'est un peut inutile d'avoir mis l'échelle
je tâcherai donc de faire une modif à ce niveau là ^^

Sinon j'ai effectivement fait la somme des 2 vecteurs de force s'exerçant sur un astre, j'espère que ce n'est pas une erreur de ma part X(

En tout cas merçi pour ces remarques je vais apporter les modifications nécessaires. ^^

Shakan.
HCD Messages postés 86 Date d'inscription jeudi 18 août 2005 Statut Membre Dernière intervention 20 février 2007
27 août 2006 à 16:25
Comme le suggère JPOUNZ ton code m'a bien plu !
Je ferai les mêmes remarques : tu devrais préciser :
1° dans quelle unité il faut rentrer les masses (j'ai essayé 1e24,5e24,2e24)
2° à quoi sert le paramètre "échelle" ? Pourquoi ne pas le fixer une bonne fois pour toute à la valeur 1 ?

Sur le fond, je pense que les forces s'additionnent vectoriellement.
La force d'attraction mutuelle astre1/astre2 est portée par la droite qui relie astre1 à astre2: "vecteur f12".
De même pour astre1 et astre3: "vecteur f13".
La force résultante sur astre1 est donc : "vecteur f12" + "vecteur f13".

Qu'en penses-tu ?

Sinon la syntaxe de ton code est parfaite.
Je noterai un 10 mérité quand tu auras vu ces questions.

HCD
jpountz Messages postés 9 Date d'inscription samedi 22 juillet 2006 Statut Membre Dernière intervention 2 septembre 2006
27 août 2006 à 15:04
Sympa :)
Ça serait bien si tu pouvais mettre un zip, parce-que le copier-coller depuis le site est pas top (pour moi en tout cas).
C''est bien conçu: clair, bien commenté, mais c'est un peu dommage que tu fasses les calculs avec les valeurs exactes (pour G notamment) mais que tu ne précise pas en quelle unité il faut rentrer les masses (kg il me semble) et à quoi correspond l'entrée échelle (nombre de mètres correspondant à une distance de 1 pixel sur l'écran c'est bien ça?)

Bravo, ça devrait bien plaire à HCD ^^
Rejoignez-nous