我知道这可以通过定义泪珠形状并接受落在该区域内的点(来自统一生成器)来完成。
我试图在 C++ 中通过生成两个统一的随机数 x 和 y 来定位点 (x,y),然后检查该点是否在该区域内。
我的代码本身没有问题,但是我的逻辑在这里有缺陷吗?我还没有找到合适的图形方式来检查这是否是真正的正态分布。
这是应该工作的代码:
typedef unsigned long long int Ullong;
typedef double Doub;
struct Normaldev : Ran {
Doub mu,sig;
Normaldev (Doub mmu, Doub ssig, Ullong i)
: Ran (i), mu(mmu), sig(ssig){}
Doub dev() {
Doub u, v, x, y, q;
do {
u=Doub();
v=1.7156*(Doub()-0.5);
x=u-0.449871;
y=abs(v)+0.386595;
q=x*x+y*(0.19600*y-0.25472*x);
} while(q>0.27597 && (q>0.27846 || v*v>-4*log(u)*u*u));
return mu+sig*v/u;
}
};
我用我对 C++ 的基本知识尽可能多地更改了数字食谱书中建议的代码,但 Ran 到底应该是什么?