所以基本上我有一个重载函数来计算标准:
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;
};
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
所以现在,我想计算两个高斯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);
我称之为:
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)
幸运的是,我可以将我的结果与一些"佳能"程序,所以我知道两个高斯的norme函数返回了良好的结果,但另一个不是。
有人可以提供我并解释这个奇怪的行为吗?感谢
答案 0 :(得分:1)
我认为错误就在这里:
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));
}
y组件使用两次,应该是:
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));
}