0
ための奇妙な挙動ので、基本的に、私はノルムを計算するためにオーバーロード機能を有する:函数
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 & Atome(クラス&構造)は次のように定義される:
Atome:
struct Atome
{
double x; double y; double z; double numeroAtomique;
};
ガウシアン:
#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
ここで、2ガウスの中心A & Bと(0,0,0)にある原子の間のノルムを計算したいと思います。
私はこの電話の際
Gaussienne gaussienneP(0,(gaussienneA.GetX()+gaussienneB.GetX())/2.0,(gaussienneA.GetY()+gaussienneB.GetY())/2.0,(gaussienneA.GetZ()+gaussienneB.GetZ())/2.0);
にprevousの中心の座標を格納するために、このような「プレースホルダ」ガウスを作成します。
Szabo::norme(mygaussian,atome)
を私が呼び出すときとは異なる結果を得ましたこの:
/* 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私はいくつかの「キヤノン」プログラムに私の結果を比較することができますので、私はKN 2つのガウス関数のノルム関数は良い結果を返しますが、他のものはそうではありません。
誰も私にこのことの奇妙な動作に関する説明を提供できますか?おかげ
私は愚かな、おかげで仲間だLMAO。 ) – Devolution
あなたは大歓迎です:) –
@devoこれは 'location'型を記述し、その上に' operator-'を定義し、' length_squared'と 'length'とスカラ除算/乗算。その後、他のロジックの途中でcoord固有のものをテストして停止します。エラーは簡単ですから。 – Yakk