Nombres complexes ( c++, classe )

Soyez le premier à donner votre avis sur cette source.

Vue 13 314 fois - Téléchargée 1 467 fois

Description

Classe Complexe, gestions des nombres complexes. Utile pour le calcul de solutions d'equations, ou en geometrie. Je l'utilise avec Opengl pour gerer des objets dans l espace 3D (voir le fichier ZIP pour l'ensemble du code, seule la declaration de la classe est affichée ci-dessous).

Merci a ThomasC pour les erreurs qui ont été corrigées.

Source / Exemple :


/*******************************************************************************************/
// Nom du fichier : Complexe.h 
// Declaration de la classe : Complexe 
// Description : Nombre complexe
// Date : 15-02-2003
// Auteur : www.nemesys.tv
/*******************************************************************************************/

#ifndef _Complexe_H_ 
#define _Complexe_H_ 

#include <cmath> // cosinus, sinus

#ifndef PI
#define PI 3.141592653
#endif

/*******************************************************************************************/
// Declaration de la classe 
/*******************************************************************************************/

class Complexe
{ 

private:

	float m_Imaginaire;
	float m_Reel;

public:

	void rotation(float angle);

	void translation(float x, float y);
	void translation(Complexe & complexe);

	Complexe &	conjugue();

	float accesAlpha();
	float accesModule();

	inline float accesReel(){return m_Reel;};
	inline float accesImaginaire(){return m_Imaginaire;};

	Complexe & operator =(const Complexe & complexe);
	Complexe & operator +(const Complexe & complexe);
	Complexe & operator -(const Complexe & complexe);
	Complexe & operator *(const Complexe & complexe);
	Complexe & operator /(const Complexe & complexe);

	bool operator ==(const Complexe & complexe);
	bool operator !=(const Complexe & complexe);

    Complexe();
	Complexe(float angle);
    Complexe(const Complexe & complexe);
	Complexe(float reel, float imaginaire);

    virtual ~Complexe();

protected:

	float Radian(float angle);
};

#endif

/*******************************************************************************************/
// Fin du fichier : Complexe.h 
/*******************************************************************************************/

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_ThomasC
Messages postés
5
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
9 juillet 2003
-
J'ai appris plein de chose sur la gestion des classes
par contre la multiplication complexe et la division complexe est fausse.

Un peu de math :
Soit les nombres complexes Z1(a,b) et Z2(c,d)
Z1*Z2=(a+ib)*(c+id)=ac-bd+i(ad+bc)=Z3
Le nombre complexe Z3 est donc Z3(ac-bd, ad+bc)

De meme pour la division
Z1/Z2=(a+ib)/(c+id) l'astuce consiste à *(c-id) en haut et en bas
Z1/Z2=((a+ib)*(c-id)) / ((c+id)*(c-id))
Z1/Z2=((ac+bd) + i(bc-ad)) / (c^2+d^2)=Z3
reel(Z3)=(ac+bd)/(c^2+d^2)
im(Z3)=(bc-ad)/(c^2+d^2)

Ainsi ma contribution au code est :
/*******************************************************************************************/
// Multiplier deux complexes
//***
// A VERIFIER !!!
/*******************************************************************************************/
Complexe & Complexe::operator *(const Complexe & complexe)
{
Complexe * ptComplexe = new Complexe();

(*ptComplexe).m_Imaginaire
= m_Reel * complexe.m_Imaginaire + m_Imaginaire * complexe.m_Reel;

(*ptComplexe).m_Reel
= m_Reel * complexe.m_Reel - m_Imaginaire * complexe.m_Imaginaire ;

return * ptComplexe;
}

/*******************************************************************************************/
// diviser deux complexes
// Operator diviser
// avec (a+ib)(a-ib) = a2-(bi)2 ou i2=-1 => a2+b2
/*******************************************************************************************/
Complexe & Complexe::operator /(const Complexe & complexe)
{
Complexe * ptComplexe = new Complexe();

(*ptComplexe).m_Imaginaire
= -m_Reel * complexe.m_Imaginaire + m_Imaginaire * complexe.m_Reel;

(*ptComplexe).m_Reel
= m_Reel * complexe.m_Reel + m_Imaginaire * complexe.m_Imaginaire ;

float denominateur = complexe.m_Reel * complexe.m_Reel + complexe.m_Imaginaire * complexe.m_Imaginaire;

(*ptComplexe).m_Imaginaire /= denominateur;
(*ptComplexe).m_Reel /= denominateur;

return * ptComplexe;
}
cs_Nemesys
Messages postés
10
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
14 septembre 2005
-
En reponse au message de ThomasC, les fichiers sources ont été modifiés et corrigés.
cs_tobby
Messages postés
17
Date d'inscription
jeudi 16 mai 2002
Statut
Membre
Dernière intervention
9 mars 2010
-
Tres instructif !!

Quelqu'un aurait une idee pour une fonction exponentiel d'un complexe ?
Fabrice971
Messages postés
4
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
11 août 2004
-
Pas mal du tout , enfin un source avec constructeurs qui n'oblige pas à passer par des fonctions ! Quelqu'un aurait-il l'excellente idée de transposer ceci en C# ? (Aïe ! non ! pas la tête !) Enfin , disons surtout l'addition , ce serait le plus simple ... je suis en mesure d'écrire le reste des fonctions du moment qu'on me donne la syntaxe pour créer des opérateurs sur des classes. Le reste je l'ai , puisque j'avais créé un bon petit logiciel de fractales il y a bien dix ans en C et m'était emm...... à TOUT écrire , opération par opération ! jusqu'aux sinus et autres tagentes etc ...
moooody
Messages postés
2
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
27 septembre 2006
-
si je veux envoyer le reel x+iy comment je définis le "i" complexe dans une classe C++ ou tt
simplement dans code en C??
J'aimerai bien rajouter une méthode qui renvoie ce nombre avec la partie réelle et imaginaire!!

Quelq'un aurait une idée??
Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.