Пример #1
0
float			inter_cylindre(t_obj *object, t_ray *ray, t_inter *inter)
{
	t_cylindre	*cylindre;
	float		tmp;
	t_vect		pos;

	cylindre = (t_cylindre*)object->obj;
	tmp = calc_poly(cylindre, ray);
	if (tmp != -1)
	{
		pos = add_vect(ray->o, mult_float(ray->dir, tmp));
		tmp = magnitude(sub_vect(pos, ray->o));
		if (inter->dist == -1 || tmp < inter->dist)
		{
			inter->pos = pos;
			inter->normal = calc_normal(cylindre, pos);
			inter->dist = tmp;
			inter->obj = object;
		}
	}
	return (tmp);
}
Пример #2
0
float	inter_sphere(t_obj *object, t_ray *ray, t_inter *inter)
{
	t_sphere	*sphere;
	t_vect		pos;
	float		tmp;

	sphere = (t_sphere*)(object->obj);

	tmp = calc_polynomial(sphere, ray);
	if (tmp != -1)
	{
		pos = add_vect(ray->o, mult_float(ray->dir, tmp));
		tmp = magnitude(sub_vect(pos, ray->o));
		if (inter->dist == -1 || tmp < inter->dist)
		{
			inter->pos = pos;
			inter->normal = div_float(sub_vect(inter->pos, sphere->c),
											sphere->r);
			inter->dist = tmp;
			inter->obj = object;
		}
	}
	return (tmp);
}
Пример #3
0
//physicsfuncs------------------------
void apply_forces(vect currentspeed, double mass, vect forces){
 mult_vect(mass, forces);
 add_vect(forces, currentspeed);
}
Пример #4
0
void friction_power(vect dst, vect currentspeed){
 add_vect(currentspeed, dst);
 mult_vect(-1, dst);
}