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); }
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); }
//physicsfuncs------------------------ void apply_forces(vect currentspeed, double mass, vect forces){ mult_vect(mass, forces); add_vect(forces, currentspeed); }
void friction_power(vect dst, vect currentspeed){ add_vect(currentspeed, dst); mult_vect(-1, dst); }