2016-04-24 19 views
0

so dass im Grunde Ich habe eine überladene Funktion, die Norm zu berechnen:seltsames Verhalten für fuctions

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2)); 
} 

double Szabo::norme(Gaussienne gaussienneA, Gaussienne gaussienneB) 
{ 
    return sqrt(pow(gaussienneA.GetX()-gaussienneB.GetX(),2.0) + pow(gaussienneA.GetY()-gaussienneB.GetY(),2.0) + pow(gaussienneA.GetZ()-gaussienneB.GetZ(),2.0)); 
} 

Gaussienne & Atom (Klasse & Struktur) ist wie folgt definiert:

Atome:

struct Atome 
{ 
    double x; double y; double z; double numeroAtomique; 
}; 

Gaussienne:

#ifndef GaussienneHeader 
class Gaussienne 
{  
    protected: 
     // attributs 
     double alpha; 
     double coordX,coordY,coordZ; 
    public: 
     // methodes: 

      // Constructeurs: 
      Gaussienne(); 
      Gaussienne(double alpha,double x, double y, double z); 

      // Accesseurs: 
      double GetAlpha() const; //return this->alpha 
      double GetX() const; //return this coordX 
      double GetY() const; // return this coordY 
      double GetZ() const; // return this coordZ 

}; 

#define GaussienneHeader 
#endif 

Also jetzt will ich die Norm zwischen dem Zentrum von 2 Gaussi A & B, und das Atom in (0,0,0);

Ich erstelle ein „Platzhalter“ Gaußsche wie dies von der Mitte der Koordinate speichern des prevous zu

Gaussienne gaussienneP(0,(gaussienneA.GetX()+gaussienneB.GetX())/2.0,(gaussienneA.GetY()+gaussienneB.GetY())/2.0,(gaussienneA.GetZ()+gaussienneB.GetZ())/2.0); 

, wenn ich dies nennen:

Szabo::norme(mygaussian,atome) 

Ich habe anderes Ergebnis als beim Aufruf dies:

/* using this constructor: Gaussienne(double alpha,double x, double y, double z) with a dummy alpha = 0; */ 
Szabo::norme(mygaussian,Gaussienne(0,atome.x,atome.y,atome.z) 

Fortunatly kann ich meine Ergebnisse mit einigen "Canon" -Programm vergleichen, so dass ich kn Dass die norme-Funktion mit den beiden Gaussianern die guten Ergebnisse liefert, ist die andere nicht.

Kann jemand mir und Erklärung bezüglich des seltsamen Verhaltens von diesem zur Verfügung stellen? Dank

Antwort

1

Ich denke, der Fehler ist hier:

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetY()-atome.y,2)); 
} 

die y-Komponente zweimal verwendet wird, sollte es sein:

double Szabo::norme(Gaussienne gaussienne, Atome atome) { 
    return sqrt(pow(gaussienne.GetX()-atome.x,2)+pow(gaussienne.GetY()-atome.y,2)+pow(gaussienne.GetZ()-atome.z,2)); 
} 
+0

lmao ich so dumm bin, danke bro. Ich sollte nicht um Mitternacht daran arbeiten;) – Devolution

+0

Gern geschehen :) –

+1

@devo das ist, warum Sie einen 'location' Typ schreiben,' operator-'darauf definieren, und' length_squared' und 'length' und skalar Division/Multiplikation. Testen Sie dann und schreiben Sie nicht mehr in die Mitte der anderen Logik. Weil Fehler einfach sind. – Yakk