電子雲是物理學中的一項概念。電子在原子核外很小的空間內作高速運動,其運動規律跟一般物體不同,它沒有明確的軌道。根據量子力學中的測不准原理,我們不可能同時准確地測定出電子在某一時刻所處的位置和運動速度,也不能描畫出它的運動軌跡。因此,人們常用一種能夠表示電子在一定時間內在核外空間各處出現機會的模型來描述電子在核外的的運動。在這個模型里,某個點附近的密度表示電子在該處出現的機會的大小。密度大的地方,表明電子在核外空間單位體積內出現的機會多;反之,則表明電子出現的機會少。由於這個模型很像在原子核外有一層疏密不等的“雲”,所以,人們形象地稱之為“電子雲”。
我想我這代碼應該算是偽電子雲,這里只是生成了一個球諧曲面,然后在曲面內隨機生成點集。我之前看過一個生成電子雲的算法,只是由於無法理解其具體的參數設定,所以就不想照抄過來。
// 電子雲
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的定義及相關軟件見:混沌與分形
生成圖形如下: