示例#1
0
文件: object_2.c 项目: vlize/RTv2
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));
}
示例#2
0
文件: PHYS.c 项目: cjxgm/frinx
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);
}