电子云是物理学中的一项概念。电子在原子核外很小的空间内作高速运动,其运动规律跟一般物体不同,它没有明确的轨道。根据量子力学中的测不准原理,我们不可能同时准确地测定出电子在某一时刻所处的位置和运动速度,也不能描画出它的运动轨迹。因此,人们常用一种能够表示电子在一定时间内在核外空间各处出现机会的模型来描述电子在核外的的运动。在这个模型里,某个点附近的密度表示电子在该处出现的机会的大小。密度大的地方,表明电子在核外空间单位体积内出现的机会多;反之,则表明电子出现的机会少。由于这个模型很像在原子核外有一层疏密不等的“云”,所以,人们形象地称之为“电子云”。
我想我这代码应该算是伪电子云,这里只是生成了一个球谐曲面,然后在曲面内随机生成点集。我之前看过一个生成电子云的算法,只是由于无法理解其具体的参数设定,所以就不想照抄过来。
// 电子云
class ElectronCloud : public FractalEquation
{
public:
ElectronCloud()
{
m_StartX = 0.0f;
m_StartY = 0.0f;
m_StartZ = 0.0f;
m_ParamA = 1.0f;
m_ParamB = 2.0f;
}
void IterateValue(float x, float y, float z, float& outX, float& outY, float& outZ) const
{
int a = (int)fabsf(m_ParamA);
int b = (int)fabsf(m_ParamB);
float u = yf_rand_real(PI*2);
float v = yf_rand_real(PI);
float l = yf_rand_real(1.0f);
float r = sinf(a*v)*cosf(b*u)*l;
outX = r*sinf(v)*sinf(u);
outY = r*cosf(v)*0.5f;
outZ = r*sinf(v)*cosf(u);
}
bool IsValidParamA() const {return true;}
bool IsValidParamB() const {return true;}
bool Is3D() const {return true;}
private:
int m_nIterateCount;
};
关于基类FractalEquation的定义及相关软件见:混沌与分形
生成图形如下: