begin process at 2012 02 09 19:17:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > RÉSOLUTION NUMERIQUE

RÉSOLUTION NUMERIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :simulation, physique, numérique, differentielle, 3d Niveau :Débutant Date de création :24/03/2008 Date de mise à jour :27/03/2008 18:21:27 Vu / téléchargé :7 244 / 272

Auteur : skone007

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Il s'agit d'une source permettant de résoudre numériquement les systèmes de type df(x, y, z, t)/dt = g(x, y, z, t)/dt.
Contrairement à d'autre source ici je n'utilise pas tel ou tel méthode d'intégration mais j'ai implémenté plusieurs méthodes et c'est à l'utilisateur de choisir laquelle il veut utiliser.
J'ai implémenté :
Euler Implicite
Euler Explicite
Euler Cauchy Explicite
Adams Boford Molton Explicite t Implicite d'ordre 2, 3 et 4
Gear Implicite d'ordre 2, 3 et 4
Runge Kutta Explicite d'ordre 2, 4 et 6
Runge Kutta implicite d'ordre 3
Euler Ameliorer Explicite
Crank Nicholson Explicite

En gros j'ai fait une interface Integrator et les méthodes sont des enfants de cette interface.

L'image montre un exemple de visualisation avec glut de l'attracteur de Lorentz...

Source

  • #include <iostream>
  • #include <list>
  • #include <GL/gl.h>
  • #include <GL/glu.h>
  • #include <GL/glut.h>
  • #include "Vector3D.h"
  • #include "Integrator.h"
  • #include "NS_Euler_I.h"
  • using namespace std;
  • using namespace eMV;
  • Vector3D<float> Henon(const Vector3D<float> &v, const float t)
  • {
  • return Vector3D<float>( v.y + 1 - 1.4*v.x*v.x,
  • 0.3*v.x,
  • 0);
  • }
  • Vector3D<float> Lorentz(const Vector3D<float> &v, const float t)
  • {
  • return Vector3D<float>( 10*(v.y - v.x),
  • 28*v.x - v.y - v.x*v.z,
  • v.x*v.y - 8/3*v.z);
  • }
  • fIntegrator *euler = new fNS_Euler_I(Lorentz, fVector3D(0.1, 0.1, 0.1), 0, 0.003);
  • list<fVector3D> data;
  • void init(void)
  • {
  • glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
  • glClearDepth(1.0); // Depth Buffer Setup
  • glEnable(GL_DEPTH_TEST); // Enable Depth Buffer
  • glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
  • glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  • }
  • void display(void)
  • {
  • fVector3D v;
  • glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • glColor3f (1.0, 1.0, 1.0);
  • glLoadIdentity (); // clear the matrix
  • // viewing transformation
  • gluLookAt (50.0, 50.0, 50.0, 0.1, 0.1, 20.0, 1.0, 0.0, 0.0);
  • //
  • glBegin(GL_LINES);
  • glColor3ub(255, 0, 0);
  • glVertex3f(0, 0, 0);
  • glVertex3f(1, 0, 0);
  • glColor3ub(0, 255, 0);
  • glVertex3f(0, 0, 0);
  • glVertex3f(0, 1, 0);
  • glColor3ub(0, 0, 255);
  • glVertex3f(0, 0, 0);
  • glVertex3f(0, 0, 1);
  • glEnd();
  • data.push_back(euler->F);
  • euler->next();
  • //cout << euler->F << endl;
  • glBegin(GL_LINE_STRIP);
  • list<fVector3D>::iterator it;
  • for (it = data.begin(); it != data.end(); ++it)
  • {
  • glColor3ub(255, 128, 0);
  • glVertex3f((*it).x, (*it).y, (*it).z);
  • }
  • glEnd();
  • //
  • glFlush ();
  • }
  • void reshape (int w, int h)
  • {
  • glViewport(0, 0, (GLint)w, (GLint)h);
  • glMatrixMode(GL_PROJECTION);
  • glLoadIdentity();
  • gluPerspective(45.0, (float)w/(float)h, 0.1, 100.0);
  • glMatrixMode(GL_MODELVIEW);
  • glLoadIdentity();
  • }
  • void keyboard(unsigned char key, int x, int y)
  • {
  • switch (key)
  • {
  • case 27 :
  • exit(0);
  • break;
  • default :
  • glutPostRedisplay();
  • }
  • }
  • int main(int argc, char **argv)
  • {
  • try
  • {
  • glutInit(&argc, argv);
  • glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  • glutInitWindowSize (500, 500);
  • glutInitWindowPosition (100, 100);
  • glutCreateWindow (argv[0]);
  • init ();
  • glutDisplayFunc(display);
  • glutReshapeFunc(reshape);
  • glutKeyboardFunc(keyboard);
  • glutMainLoop();
  • delete euler;
  • return 0;
  • }
  • catch(std::exception& e)
  • {
  • cout << e.what() << endl;
  • }
  • catch(Error &e)
  • {
  • cout << e.GetMessage() << endl;
  • }
  • return 0;
  • }
#include <iostream>
#include <list>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

#include "Vector3D.h"

#include "Integrator.h"
#include "NS_Euler_I.h"

using namespace std;
using namespace eMV;

Vector3D<float> Henon(const Vector3D<float> &v, const float t)
{
	return Vector3D<float>(	v.y + 1 - 1.4*v.x*v.x,
							0.3*v.x,
							0);
}

Vector3D<float> Lorentz(const Vector3D<float> &v, const float t)
{
	return Vector3D<float>(	10*(v.y - v.x),
							28*v.x - v.y - v.x*v.z,
							v.x*v.y - 8/3*v.z);
}

fIntegrator *euler = new fNS_Euler_I(Lorentz, fVector3D(0.1, 0.1, 0.1), 0, 0.003);
list<fVector3D> data;

void init(void)
{
	glShadeModel(GL_SMOOTH);                 // Enables Smooth Color Shading
	glClearDepth(1.0);                       // Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);                 // Enable Depth Buffer
	glDepthFunc(GL_LESS);		           // The Type Of Depth Test To Do
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

void display(void)
{
	fVector3D v;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glColor3f (1.0, 1.0, 1.0);
	glLoadIdentity (); // clear the matrix
	// viewing transformation
	gluLookAt (50.0, 50.0, 50.0, 0.1, 0.1, 20.0, 1.0, 0.0, 0.0);
	//
	glBegin(GL_LINES);
		glColor3ub(255, 0, 0);
		glVertex3f(0, 0, 0);
		glVertex3f(1, 0, 0);
		glColor3ub(0, 255, 0);
		glVertex3f(0, 0, 0);
		glVertex3f(0, 1, 0);
		glColor3ub(0, 0, 255);
		glVertex3f(0, 0, 0);
		glVertex3f(0, 0, 1);
	glEnd();
	data.push_back(euler->F);
	euler->next();
	//cout << euler->F << endl;
	glBegin(GL_LINE_STRIP);
	list<fVector3D>::iterator it;
	for (it = data.begin(); it != data.end(); ++it)
	{
		glColor3ub(255, 128, 0);
		glVertex3f((*it).x, (*it).y, (*it).z);
	}
	glEnd();
	//
	glFlush ();
}

void reshape (int w, int h)
{
	glViewport(0, 0, (GLint)w, (GLint)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.0, (float)w/(float)h, 0.1, 100.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
	switch (key)
	{
		case 27 :
				exit(0);
			break;
		default :
			glutPostRedisplay();
	}
}

int main(int argc, char **argv)
{
	try
	{
		glutInit(&argc, argv);
		glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
		glutInitWindowSize (500, 500);
		glutInitWindowPosition (100, 100);
		glutCreateWindow (argv[0]);
		init ();
		glutDisplayFunc(display);
		glutReshapeFunc(reshape);
		glutKeyboardFunc(keyboard);
		glutMainLoop();
		delete euler;
		return 0;
	}
	catch(std::exception& e)
	{
		cout << e.what() << endl;
	}
	catch(Error &e)
	{
		cout << e.GetMessage() << endl;
	}
	return 0;
}

 Conclusion

Le but est de crée un moteur physique. Pas un moteur pour les jeux vidéos en temps réel mais un moteur de simulation physique. Ces méthodes de résolution servirons de base à la suite pour la simulation Physique. La prochaine fois j'implémenterais la gestion des corps indéformables déformable et les fluides.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

24 mars 2008 23:19:16 :
ajout de screen
27 mars 2008 18:21:29 :
Ajout d'un exemple utilisant l'API. Attracteur de Lorentz

 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR PHYSIQUE : SOFT BODY (CORPS DEFORMABLE, MASSE-RESSORT...
Source avec Zip Source avec une capture DECALER L'ENCODAGE D'UN BMP
CONVERTIR MINUSCULE EN MAJUSCULE ET INVERSSEMENT SANS "STRIN...
Source avec Zip ALGORITHME DU JEU DE DAME + AI
Source avec Zip MORPION + AI (EXPERT)

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec une capture OPENGL - JEU DE BILLARD EN 3D PAS FINI par acx01b
Source avec Zip MARSCONQUEROR : SIMULATION DE LA TRAJECTOIRE D'UNE SONDE DAN... par CodeStaler
Source avec Zip CONSULTATION (SUITE DE SIMULATION DE LA DIFFRACTION) par titip03

Commentaires et avis

Commentaire de skone007 le 26/03/2008 22:22:21

Ah l'intégration numérique n'intéresse personne... Ah la physique et l'analyse numérique quand tu nous tiens.

Commentaire de Xs le 27/03/2008 15:24:04

Salut,

Ta source a l'air vraiment très bien, et elle m'intéresse beaucoup (comme toi, je suis un mordu de maths et simulation numérique).

Mais pourrais-tu fournir un code (et exe peut-être) utilisant ta librairie ? Genre le code-source de l'exemple dont tu présentes une capture d'écran ? Je t'en serais reconnaissant, et ça me permettrais de mieux voir comment ton code fonctionne.

Encore bravo.

Cordialement

Commentaire de Xs le 27/03/2008 20:24:05

Merci pour l'exemple, je vais tester ton code dès à présent.

Cordialement

Commentaire de hida16 le 08/06/2009 17:12:24

c génial ton code moi j'essaye de le faire avec une seule méthode mais pour lorentz ,hennon et chua ,si tu peut m'aider ce ne sera pas de refu ,tout mes  encouragements ,bravo.
  

Commentaire de skone007 le 08/06/2009 21:05:29

Je veux bien t'aider mais comment ?

Commentaire de hida16 le 09/06/2009 19:33:01

salut,alors tu peut m'aider en me montrons comment je peut modifier ton programme en java !!merci d'avance

Commentaire de skone007 le 10/06/2009 11:14:50

regarde ici http://www.google.fr/search?q=Convertisseur+C%2B%2B+java&ie=utf-8&oe=utf-8

Commentaire de hida16 le 10/06/2009 19:11:38

merciiiiiiiiiiiiiii

Commentaire de hida16 le 23/06/2009 18:35:34

ça ne marche pas malheuresement!!!!

Commentaire de skone007 le 23/06/2009 18:53:36

Il faut réécrire les fonctions d'affichage avec les fonctions JAVA.
Sinon on comprend pas vraiment les choses de cette manière. Si ton but et d'utiliser un solveur numérique il faut utiliser des softs du genre FreeFEM, SicLba, ... Sinon convertir un code n'est pas la bonne méthode pour comprendre.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Création d'un moteur physique pour un avion (3d) | comment calculer certaines forces [ par daneel17fr ] Bonjour,donc je voudrai développer un moteur 3d pour simuler le comportement d'un avion en l'air.il n'est pas (encore) question d'affichage 3d, mais j simulation en 3d avec c/c++ [ par ghanim13 ] slt tt le monde jsui nouveau sur le forum et jvoudrai faire une simulation d'un reseau informatique en 3d avec c/c++ mais surtout il fodrai kil ai une 3d [ par ghanim13 ] slt tt le mond jvoudrai savoir si c possible de faire une simulation en 3d d'un reseau(ordi,routeur,switch,hub...)avec c/c++ et si c possible kmt dois Simulation souris/clavier [ par galax98 ] Bonjour Je cherche à faire un programme pour automatiser des réponses à envoyer à une application extérieure. Je récupere donc le handle de la fenetre affichage d'un graphe en 3D [ par pecanpie ] bonsoir, j'ai actulelement un soucis avec opengl: je ne sais pas comment l'utiliser en 3D, j'ai implémenté un graphe et je voudrais maintenant l'affic simulation des tubes [ par biyiha ] bonjour je voudrais savoir comment je pourrais faire pour écrire un programme permettant de simuler un tube non nommé par des sockets non nommées (c'e Detection d'une main [ par Darkantho ] Bonjour, je cherche à faire du hand tracking avec openCV. Le but est de montrer ma main à la webcam et un mode 3D de main reproduira la position de m application de simulation RCSF [ par isgimiagi ] j'ai un mini projet sur la simulation d'un réseau de capteurs voici l'énoncé: une topologie avec n=16 noeuds. les noeuds d'indice pair sont des noeud simulation d'un bras d'un robot opengl [ par sipmlyme ] salut a tous. si quelqu'un a le code souces de simulation d'un bras d'un robot , je lui serais trés reconnaissante s'il me l'envoit. merci d'avance.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,839 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales