int cone(t_obj *obj, t_ray *ray, double *k) { t_vector3 pt0; t_vector3 vec; double deg[3]; double tmp[2]; vec_cpy(&vec, ray->vec); vector_rotation(&vec, obj, 1); set_vec(&pt0, obj->crd, ray->crd); vector_rotation(&pt0, obj, 1); tmp[0] = fabs(tan(obj->r * RADIAN)); tmp[1] = pt0.x * pt0.x + pt0.y * pt0.y; deg[0] = tmp[0] * tmp[0]; deg[2] = vec.x * vec.x + vec.y * vec.y - vec.z * vec.z * deg[0]; deg[1] = 2 * (vec.x * pt0.x + vec.y * pt0.y - vec.z * pt0.z * deg[0]); deg[0] = tmp[1] - pt0.z * pt0.z * deg[1]; if (!quadratic_roots(deg, k)) return (0); if (sqrt(tmp[1]) / fabs(pt0.z) > tmp[0]) return (1); if (k[0] == k[1]) return (cone_1_inter(pt0.z, vec.z, k)); return (cone_2_inter(k)); }
void PHYS_verlet_apply(float pos[3], float oldpos[3], float force[3]) { float t[3]; float fs[3]; float fr[3]; vec_cpy(t, pos); vec_mul(fs, force, KE_spf*KE_spf); vec_sub(fr, pos, oldpos); vec_mulv(fr, -0.1); vec_addv(fs, fr); vec_addv(pos, pos); vec_subv(pos, oldpos); vec_addv(pos, fs); vec_cpy(oldpos, t); }