コード例 #1
0
ファイル: bsdf.c プロジェクト: kalyanam-FMTGA/ray-original
/* Convert 1-dimensional random variable to N-dimensional */
void
SDmultiSamp(double t[], int n, double randX)
{
	unsigned	nBits;
	double		scale;
	bitmask_t	ndx, coord[MS_MAXDIM];

	if (n <= 0)			/* check corner cases */
		return;
	if (randX < 0) randX = 0;
	else if (randX >= 1.) randX = 0.999999999999999;
	if (n == 1) {
		t[0] = randX;
		return;
	}
	while (n > MS_MAXDIM)		/* punt for higher dimensions */
		t[--n] = rand()*(1./(RAND_MAX+.5));
	nBits = (8*sizeof(bitmask_t) - 1) / n;
	ndx = randX * (double)((bitmask_t)1 << (nBits*n));
					/* get coordinate on Hilbert curve */
	hilbert_i2c(n, nBits, ndx, coord);
					/* convert back to [0,1) range */
	scale = 1. / (double)((bitmask_t)1 << nBits);
	while (n--)
		t[n] = scale * ((double)coord[n] + rand()*(1./(RAND_MAX+.5)));
}
コード例 #2
0
void compute_PHK_to_Cartesian(int PHK_bit_size, PHK_t key, int *i_x, int *i_y, int *i_z) {
    hikey_t basecoord[3];

    hilbert_i2c(3, (hikey_t)PHK_bit_size, (hikey_t)key, basecoord);
    (*i_x) = (int)basecoord[0];
    (*i_y) = (int)basecoord[1];
    (*i_z) = (int)basecoord[2];
}