Exemplo n.º 1
0
float Noise3D::get(float x, float y, float z) const
{
	Vec3f origins[8];
	Vec3f grads[8];

	get_gradients(origins, grads, x, y, z);
	float vals[] = {
		Gradient(origins[0], grads[0], {x, y, z}),
		Gradient(origins[1], grads[1], {x, y, z}),
		Gradient(origins[2], grads[2], {x, y, z}),
		Gradient(origins[3], grads[3], {x, y, z}),
		Gradient(origins[4], grads[4], {x, y, z}),
		Gradient(origins[5], grads[5], {x, y, z}),
		Gradient(origins[6], grads[6], {x, y, z}),
		Gradient(origins[7], grads[7], {x, y, z}),
	};

	float fz = Smooth(z - origins[0].z);
	float vz0 = lerp(vals[0], vals[1], fz);
	float vz1 = lerp(vals[2], vals[3], fz);
	float vz2 = lerp(vals[4], vals[5], fz);
	float vz3 = lerp(vals[6], vals[7], fz);

	float fy = Smooth(y - origins[0].y);
	float vy0 = lerp(vz0, vz1, fy);
	float vy1 = lerp(vz2, vz3, fy);

	float fx = Smooth(x - origins[0].x);
	return lerp(vy0, vy1, fx);
}
Exemplo n.º 2
0
float Noise2D::get(float x, float y) const
{
	Vec2f origins[4];
	Vec2f grads[4];

	get_gradients(origins, grads, x, y);
	float vals[] = {
		Gradient(origins[0], grads[0], {x, y}),
		Gradient(origins[1], grads[1], {x, y}),
		Gradient(origins[2], grads[2], {x, y}),
		Gradient(origins[3], grads[3], {x, y}),
	};

	float fx = Smooth(x - origins[0].x);
	float vx0 = lerp(vals[0], vals[1], fx);
	float vx1 = lerp(vals[2], vals[3], fx);
	float fy = Smooth(y - origins[0].y);
	return lerp(vx0, vx1, fy);
}
Exemplo n.º 3
0
// Set the objective function and gradients for GSL minimizer
void set_functions(const gsl_vector *x, void *params, double *f, gsl_vector *g)
{
    *f = objective_function(x, params);
    get_gradients(x, params, g);
}