Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1560 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  système référentiel / masse vitesse et position relative.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

système référentiel / masse vitesse et position relative.

n°2294938
Profil sup​primé
Posté le 18-01-2017 à 00:15:09  answer
 

eBonjour.
 
Je ne sais pas encore comment je vais faire mais je souhaiterais implémenter un petit système d'objets en mouvement dans l'espace.
 
je cherche les operation fondamentale pour maintenir un tel système ainsi que l'astice ou procédé pour faire en sorte que ça bouge tout seul.
 
Pour étalé un peu ma pauvreté voici mon code avec Ada.
 
la bibliotyhèque s'appel mach.
 

Code :
  1. package Mach is
  2.   pragma Pure (Mach);
  3.  
  4.   Spec_Error : exception;
  5.   Impl_Limit : exception;
  6. end Mach;


Code :
  1. package Mach.abstracts is
  2.   pragma Pure (Mach.Abstracts);
  3. end Mach.Abstracts;


Code :
  1. package Mach.Abstracts.OS is
  2.  
  3.   -- OS is operating system.                                                  
  4.   -- Operating system is virtual modelization of real object.                  
  5.   subtype Distance_Range is Float;
  6.   type Orthonormal_record is tagged
  7.      record
  8.         X : Distance_Range := 0.0;
  9.         Y : Distance_Range := 0.0;
  10.         Z : Distance_Range := 0.0;
  11.      end record;
  12.  
  13.   subtype Kilogramme_Range is Float;
  14.  
  15.   type Space_Record is abstract tagged record
  16.      O : Orthonormal_Record;
  17.      Masse : Kilogramme_Range;
  18.   end record;
  19.  
  20.   subtype Speed_Range is Float;
  21.  
  22.   type Abstract_Object is abstract tagged limited null record;
  23. end Mach.Abstracts.OS;


Code :
  1. package Mach.Abstracts.OS.Objects is
  2.  
  3.   type Space_Name_record is new Space_Record with
  4.      record
  5.         Name : access Wide_String;
  6.      end record;
  7.  
  8.   type Object_record is abstract new Abstract_Object with
  9.      record
  10.         Space_Name : Space_Name_Record;
  11.         Position   : Orthonormal_Record;
  12.         Masse      : Kilogramme_Range := 0.0;
  13.      end record;
  14. end Mach.Abstracts.OS.Objects;


Code :
  1. package Mach.Abstracts.OS.Objects.Mobiles is
  2.  
  3.  
  4.  
  5.   type Mobile_Record is new Object_Record with
  6.      record
  7.         Immobilized : Boolean := False;
  8.      end record;
  9.  
  10.   type Inertic_Record;
  11.  
  12.   task type Inertic_Task(Inertic : access Inertic_Record) is
  13.      entry Move(Position    : in Orthonormal_Record;
  14.                 Speed       : in Speed_Range;
  15.                 Immobilized : in Boolean);
  16.      entry Set_Speed(Speed : in Speed_Range);
  17.      entry Get_Speed(Speed : out Speed_Range);
  18.      entry Set_Immobilized(Immobilized : in Boolean);
  19.      entry Get_Immobilized(Immobilized : out Boolean);
  20.      entry Set_Space_Name(Space_Name : in Space_Name_Record);
  21.      entry Get_Space_Name(Space_Name : in Space_Name_Record);
  22.      entry Set_Masse(Masse : in Kilogramme_Range);
  23.      entry Get_Masse(Masse : out Kilogramme_Range);
  24.      entry Set_Position(Position : in Orthonormal_Record);
  25.      entry Get_Position(Position : out Orthonormal_Record);
  26.   end Inertic_Task;
  27.  
  28.   type Inertic_Record is tagged limited record
  29.      Mobile  : Mobile_Record;
  30.      Speed   : Speed_Range := 0.0;
  31.      Inertie : Inertic_Task(Inertic_Record'Access);
  32.   end record;
  33.  
  34. private
  35.   procedure Move (Mobile      : in out Mobile_Record;
  36.                   Position    : in Orthonormal_Record;
  37.                   Speed       : in Speed_Range;
  38.                   Immobilized : in Boolean := False);
  39.  
  40.  
  41. end Mach.Abstracts.OS.Objects.Mobiles;


Code :
  1. package body Mach.Abstracts.OS.Objects.Mobiles is
  2.  
  3.   procedure Move (Mobile      : in out Mobile_Record;
  4.                   Position    : in Orthonormal_Record;
  5.                   Speed       : in Speed_Range;
  6.                   Immobilized : in Boolean := False) is
  7.   begin
  8.      if Speed /= 0.0 and Immobilized /= False then
  9.         raise Spec_Error;
  10.      end if;
  11.   end Move;
  12.  
  13.  
  14.  
  15.  
  16.   task body Inertic_Task is
  17.   begin
  18.      loop
  19.         select
  20.            accept Move(Position    : in Orthonormal_Record;
  21.                        Speed       : in Speed_Range;
  22.                        Immobilized : in Boolean) do
  23.               Inertic.Mobile.Move(Position, Speed, Immobilized);
  24.            end Move;
  25.         or
  26.            accept Set_Speed(Speed : in Speed_Range);
  27.         or
  28.            accept Get_Speed(Speed : out Speed_Range) do
  29.               Speed := Inertic.Speed;
  30.            end Get_Speed;
  31.         or
  32.  
  33.            accept Set_Immobilized(Immobilized : in Boolean);
  34.         or
  35.            accept Get_Immobilized(Immobilized : out Boolean) do
  36.               Immobilized := Inertic.Mobile.Immobilized;
  37.            end Get_Immobilized;
  38.         or
  39.  
  40.            accept Set_Space_Name(Space_Name : in Space_Name_Record);
  41.         or
  42.            accept Get_Space_Name(Space_Name : in Space_Name_Record);
  43.         or
  44.  
  45.            accept Set_Masse(Masse : in Kilogramme_Range);
  46.  
  47.  
  48.         or
  49.            accept Get_Masse(Masse : out Kilogramme_Range) do
  50.               Masse := Inertic.Mobile.Masse;
  51.            end Get_Masse;
  52.         or
  53.  
  54.            accept Set_Position(Position : in Orthonormal_Record);
  55.         or
  56.            accept Get_Position(Position : out Orthonormal_Record) do
  57.               Position := Inertic.Mobile.Position;
  58.            end Get_Position;
  59.         end select;
  60.      end loop;
  61.   end Inertic_Task;
  62.  
  63. end Mach.Abstracts.OS.Objects.Mobiles;


 
 
Enfin le programme principal :

Code :
  1. with Mach.Abstracts.Os;
  2. use Mach.Abstracts.Os;
  3. with Mach.Abstracts.Os.Objects;
  4. use Mach.Abstracts.Os.Objects;
  5. with Mach.Abstracts.Os.Objects.Mobiles;
  6. use Mach.Abstracts.Os.Objects.Mobiles;
  7. with Ada.Float_Text_Io;
  8. use Ada;
  9. with Ada.Wide_Text_Io;
  10. use Ada.Wide_Text_Io;
  11. procedure Machine is
  12.  
  13.  
  14.   Moi : Inertic_Record;
  15.   Position : Orthonormal_Record := (0.0, 0.0, 0.0);
  16.   Speed    : Speed_Range := 0.0;
  17.   Immobilized : Boolean := True;
  18.  
  19. begin
  20.   for I in 1..1 loop
  21.      Moi.Inertie.Move(Position, Speed, Immobilized);
  22.      Moi.Inertie.Get_Position(Position);
  23.      Put("x:" );
  24.      Float_Text_Io.Put(Position.X);
  25.      New_Line;
  26.      Put("y:" );
  27.      Float_Text_Io.Put(Position.X);
  28.      New_Line;
  29.      Put("z:" );
  30.      Float_Text_Io.Put(Position.X);
  31.      New_Line;
  32.      Moi.Inertie.Get_Speed(Speed);
  33.      Put("speed:" );
  34.      Float_Text_Io.Put(speed);
  35.      New_Line;
  36.      Moi.Inertie.Get_Immobilized(Immobilized);
  37.      Put("Immobilized: " );
  38.      if Immobilized then
  39.         Put("True" );
  40.      else
  41.         Put("False" );
  42.      end if;
  43.      New_Line;
  44.   end loop;
  45.   abort Moi.Inertie;
  46. end Machine;


Et son résultat :
 

x: 0.00000E+00
y: 0.00000E+00
z: 0.00000E+00
speed: 0.00000E+00
Immobilized: False


 
J'avais idée de créer un thread dans la tache intertic_task mais justement, je suis un poil paumé.
J'ai également l'idée de gérer le mouvement en fonction d'un délay établie selon la masse et la vitesse (l'accélération) et de déplacer l'objet à chaque pas de temps.
Merci pour votre aide.
 
 
J'oubliais...
 
 
Le principe que je voudrais implémenter, et basé sur deux ou trois axiome qui dirais que tout objet en movement à une masse et une position relativement à un autre objet qui a une vitesse.

Message cité 1 fois
Message édité par Profil supprimé le 18-01-2017 à 00:17:38
mood
Publicité
Posté le 18-01-2017 à 00:15:09  profilanswer
 

n°2294948
Totoche17
Posté le 18-01-2017 à 11:44:20  profilanswer
 


 
 
WTF, jovalise qui réinvente le PFD   :whistle:  

n°2294960
rufo
Pas me confondre avec Lycos!
Posté le 18-01-2017 à 17:32:39  profilanswer
 

Newton, ça peut être intéressant de regarder aussi ;)
 
Après, y'a des moteurs 3D qui implémentent la physique. Développer ce genre de chose from scratch, c'est un peu hardcore :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2294961
Totoche17
Posté le 18-01-2017 à 17:40:16  profilanswer
 

rufo a écrit :

Newton, ça peut être intéressant de regarder aussi ;)


 
Ah parce que le PFD ça a rien à voir avec Newton ?
 
 [:ruxx]

n°2294991
TotalRecal​l
Posté le 19-01-2017 à 14:45:38  profilanswer
 

Je te propose de nous faire une implémentation du problème à N corps avec autant de corps qu'on veut.  
J'espère que tu aimes les équations différentielles.
 
Mais sinon il doit y avoir des modélisations approchantes dans les moteurs physiques. Evidemment si tu veux un moteur physique en Ada ça va être plus compliqué à trouver.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2295014
Profil sup​primé
Posté le 19-01-2017 à 19:59:47  answer
 

je connais pas les equation différentielle, pas formellement.
Et comme c'était pour m'amuser un peux, ben on peux oublier pour moi.
J'ai quand même fait tourner un point dans le sens des aiguilles d'une montre.
Avec l'orloge au mileu et un messssage "hello world!"
Ca jette.
Merci quand même.
Si vous vouler je vous fille mon code.

n°2295015
Profil sup​primé
Posté le 19-01-2017 à 20:11:05  answer
 

C'était inspiré par le sujet Abstract dans java.  :heink:

n°2295028
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-01-2017 à 06:24:39  profilanswer
 

Tiens, lis ça. C'est une excellente ressource qui explique très clairement certains principes fondamentaux et leurs implémentations.
http://natureofcode.com/book/


---------------
J'ai un string dans l'array (Paris Hilton)
n°2295055
Trap D
Posté le 20-01-2017 à 10:56:50  profilanswer
 

Connaissais pas. Ça remet en mémoire des principes simples. Je sens que ça va m'être très utile !

n°2295056
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-01-2017 à 10:57:59  profilanswer
 

C'est un excellent livre, écrit de façon très compréhensible et très progressive.


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 20-01-2017 à 10:57:59  profilanswer
 

n°2295078
Profil sup​primé
Posté le 20-01-2017 à 14:30:28  answer
 

Merci Harkonnen,

n°2295094
MaybeEijOr​Not
but someone at least
Posté le 20-01-2017 à 21:23:58  profilanswer
 

Par contre il y a une question que tu ne t'es pas posée : est-ce que tu vas implémenter l'espace? Parce que pour l'instant ton ordinateur ne connait pas la mètre par exemple. Tu crées donc un objet qui se déplace dans quoi?
De plus la notion de temps que connait ton ordi reste très approximative puisqu'il faudrait la relier à l'espace, l'espace réel puisque ton ordi peut être à différentes positions de l'espace mais aussi l'espace recrée puisque la notion de temps pourra aussi changer en fonction de ton espace redéfinit.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2295104
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 21-01-2017 à 03:48:43  profilanswer
 

il y a un jeu linux qui s'appelle koules :
https://www.youtube.com/watch?v=WtlunA1ClR8
 
normalement il devrait être bien fait, de ce que j'avais joué à l'époque c'était rapide


---------------
vente système facility management http://facilitymanagement.over-blo [...] eraux.html
n°2295175
Profil sup​primé
Posté le 24-01-2017 à 17:58:29  answer
 

MaybeEijOrNot a écrit :

Par contre il y a une question que tu ne t'es pas posée : est-ce que tu vas implémenter l'espace? Parce que pour l'instant ton ordinateur ne connait pas la mètre par exemple. Tu crées donc un objet qui se déplace dans quoi?
De plus la notion de temps que connait ton ordi reste très approximative puisqu'il faudrait la relier à l'espace, l'espace réel puisque ton ordi peut être à différentes positions de l'espace mais aussi l'espace recrée puisque la notion de temps pourra aussi changer en fonction de ton espace redéfinit.


 
la question prend deux sens, d'un point de vue virtuel l'espace est peut-être représenter par quoi ?
 
une quantité d'énergie ?
une somme d'actions ?
le temps qui passe ?
 
D'un point de vue concret, c'szt de l'espace. + j'ajoute d'objet + ma mémoire diminue.
 
Les deux sont il lié ?
 
j'y réfléchie encore.

n°2295306
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 28-01-2017 à 01:34:28  profilanswer
 

il se pose trop de questions visiblement ;)
tu prends un repère en 3d et tu appliques des règles physiques
tu as regardé le code source du jeu koules ?
 
ah oui :

Code :
  1. Par contre il y a une question que tu ne t'es pas posée : est-ce que tu vas implémenter l'espace? Parce que pour l'instant ton ordinateur ne connait pas la mètre par exemple.


le mètre on s'en fout, y compris le pouce, la coudée ou le pixel etc ...
il faut juste une seule chose, c'est définir une unité
on prend n'importe laquelle, on s'y tient, on applique des règles qui fonctionnent et ça fonctionne
ya pas de secret


Message édité par bill_clinton le 28-01-2017 à 01:46:36

---------------
vente système facility management http://facilitymanagement.over-blo [...] eraux.html
n°2295314
MaybeEijOr​Not
but someone at least
Posté le 29-01-2017 à 13:14:59  profilanswer
 

Dès lors où il veut faire de la représentation, on ne s'en fout plus de l'unité. D'ailleurs l'exemple le plus flagrant est celui du temps. Prenons le cas d'un point (un pixel), se déplaçant dans un espace 2D (un écran), doit-on simplement exécuter le code en faisant dépendre le temps du temps de traitement du CPU? Cela implique que le temps devient alors variable par rapport au temps "réel", plus le temps de traitement est long, moins le pixel se déplacera vite de notre point de vue. Mais d'un autre côté cela permet de déformer l'espace-temps tout comme le fait la gravité. Alors qu'on pourrait très bien se baser uniquement sur l'horloge CPU et se retrouver avec un espace-temps uniforme.
 
Mais ces problèmes s'appliquent aussi à l'espace, on parle de pixels, espace défini et discret alors qu'en réalité nos lois physiques s'appliquent sur un espace infini et ? (espace continu ou discret, telle est la question). Alors que fait-on de nos 2,337 pixels? Et de notre trajectoire de 28700 pixels?
 
Tout ça ne sont pas des petites questions anodines, ces questions sont même au cœur de toutes les représentations graphiques informatiques.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2295790
Profil sup​primé
Posté le 04-02-2017 à 14:21:09  answer
 

Bonjour,
 
Non, on s'en fou du pixel. et de l'horloge.
 
 
Nourmalement il existe au moin deux objets trois espace 2 temps.
 
Avec ça je doit donner des masses et des vitesse.
 
 
J'affiche rien rien ne bouges simplement un listing de valeur et de texte.

n°2295800
MaybeEijOr​Not
but someone at least
Posté le 05-02-2017 à 15:21:01  profilanswer
 

Dans ce cas là tu reviens en effet aux premières préoccupations qui sont celles de définir un espace-temps et qui plus est peut être dépendant du nôtre.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2295876
bill_clint​on
nonon j'ai pas de stagiaire ..
Posté le 06-02-2017 à 16:50:00  profilanswer
 

je ne comprend pas pourquoi on devrait définir un espace temps sachant que ce truc n'a jamais été prouvé
 
s'il veut calculer les positions respectives de sphères ou points évoluant les uns autour des autres (ce que je ne sais pas vraiment car il s'exprime un peu difficilement), il y a déjà des équations disponibles où l'on donne la masse des objets
 
il faudrait qu'il se rapproche des cours de 1ère année de fac de physique, ces équations sont dans le programme (équations concernant la gravitation qui sont approximatives mais donnent d'assez bons résultats sur la durée)
 
si je comprends ce qu'il veut faire, c'est tout simplement le problème à n corps où les étudiants doivent calculer les positions de chaque corps avec système à 2 corps, ensuite à 3, ensuite à 4 et ainsi de suite pour s'apercevoir ensuite qu'il n'est pas possible de fonctionner comme ça vu que personne n'a jamais encore été capable de modéliser un système à n corps
 
est-ce qu'il ne demanderait pas de résoudre à sa place un exercice qu'on lui a donné ?
"Avec ça je doit donner des masses et des vitesse. " (il est étonnant de constater que ça correspond effectivement aux équations de gravitation)
 
Et dans ce cas là, il n'y a pas besoin de chercher bien loin, les équations qu'il cherche sont ici :
https://fr.wikipedia.org/wiki/Loi_u [...] ravitation
 
ensuite s'il faut lui expliquer comment les utiliser il n'a qu'à regarder le code source du jeu "koules" disponible sur linux que j'ai déjà cité plus haut

[edit]enfin quoique, koules ne fonctionne pas seulement avec force d'attraction mais aussi avec répulsion, il risque d'être un peu perdu
[re-edit]eh merde, je viens de regarder une nouvelle fois la vidéo du jeu, et koules ne fonctionne pas avec de la gravitation visiblement, donc il ne sert normalement à rien pour lui d'étudier ce code source ;)


Message édité par bill_clinton le 06-02-2017 à 21:43:01

---------------
vente système facility management http://facilitymanagement.over-blo [...] eraux.html

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  système référentiel / masse vitesse et position relative.

 

Sujets relatifs
[DM Code]en fait un système permettant de définir des nombres premiersModéliser notre système de fonctionnnement ou pas.
lisp systeme expert[Ada][cybernetic] intégrer le système : approche neurale du problème.
position blocSystème de commentaire sur liste en PHP/AJAX
simulation d'un systeme d'exploitation en javaXSL position d'un élement
traitement d'un fichier supplementaire 
Plus de sujets relatifs à : système référentiel / masse vitesse et position relative.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR