void test_cast_ray(void){ struct sphere s[2]; struct color c1 = create_color(1,0,.3); s[0] = create_sphere(create_point(1.4,2.6,0), 2, c1); s[1] = create_sphere(create_point(4.5, 5, 0), 1,c1); struct ray r = create_ray(create_point(0,0,0), create_vector(1.4,2.6,0)); struct ray r2 = create_ray(create_point(-123.2,-4,-.3), create_vector(1.3,-2.9,-.3)); struct ray r3 = create_ray(create_point(-4.5,-4.3,0), create_vector(-23,-100,-100)); checkit_int(cast_ray(r,s,2).r, 1); checkit_int(cast_ray(r,s,2).g, 0); checkit_int(cast_ray(r,s,2).b, .3); checkit_int(cast_ray(r2,s,2).r, 1); checkit_int(cast_ray(r2,s,2).g, 1); checkit_int(cast_ray(r2,s,2).b, 1); checkit_int(cast_ray(r3,s,2).r, 1); checkit_int(cast_ray(r3,s,2).g, 1); checkit_int(cast_ray(r3,s,2).b, 1); }
void test_sphere_intersection_point(void){ struct ray r = create_ray(create_point(0,0,0),create_vector(1.3,0,0)); struct sphere s = create_sphere(create_point(2.5,0,0),1.2); struct maybe_point test = sphere_intersection_point(r,s); checkit_double(test.p.x,1.3); checkit_double(test.p.y,0); checkit_double(test.p.z,0); checkit_int(test.isPoint,1); struct ray r2 = create_ray(create_point(-2.4,-2.9,-4.4),create_vector(-1,0,0)); struct sphere s2 = create_sphere(create_point(2.3,5.7,8.2),1); struct maybe_point test2 = sphere_intersection_point(r2,s2); checkit_int(test2.isPoint,0); struct ray r3 = create_ray(create_point(-4.3,0,4.7),create_vector(3.5,0,0)); struct sphere s3 = create_sphere(create_point(2.1,0,0),4.7); struct maybe_point test3 = sphere_intersection_point(r3,s3); checkit_int(test3.isPoint,1); struct ray r4 = create_ray(create_point(1.2,-5.4,4.2),create_vector(1.1,1.2,1.3)); struct sphere s4 = create_sphere(create_point(4.7,6.4,2.2),13.5); struct maybe_point test4 = sphere_intersection_point(r4,s4); checkit_double(test4.p.x,9.871860); checkit_double(test4.p.y,4.060210); checkit_double(test4.p.z,14.448561); checkit_int(test4.isPoint,1); }
void test_find_intersection_points(void){ struct sphere s1 = create_sphere(create_point(4.2,0,0),1.3); struct sphere s2 = create_sphere(create_point(2.6,0,0),5.4); struct ray r = create_ray(create_point(-23.2,0,0),create_vector(.2,0,0)); struct sphere spheres[2] = {s1,s2}; struct sphere hit[2]; struct point pts[2]; checkit_int(find_intersection_points(spheres,2,r,hit,pts),2); checkit_double(pts[0].x, 2.9); checkit_double(pts[0].y, 0); checkit_double(pts[0].z, 0); checkit_double(pts[1].x, -2.8); checkit_double(pts[1].y, 0); checkit_double(pts[1].z, 0); checkit_double(hit[0].center.x, 4.2); checkit_double(hit[0].center.y, 0); checkit_double(hit[0].center.z, 0); checkit_double(hit[0].radius, 1.3); checkit_double(hit[1].center.x, 2.6); checkit_double(hit[1].center.y, 0); checkit_double(hit[1].center.z, 0); checkit_double(hit[1].radius, 5.4); struct sphere s3 = create_sphere(create_point(4.5,1.4,3.2),1.8); struct sphere s4 = create_sphere(create_point(2,4.3,5.4),3.2); struct sphere s5 = create_sphere(create_point(2.9,3.4,2.1),2.3); struct ray r2 = create_ray(create_point(1,1.3,.5),create_vector(1.3,1.4,1.8)); struct sphere spheres2[3] = {s3,s4,s5}; struct sphere hit2[3]; struct point pts2[3]; checkit_int(find_intersection_points(spheres2,3,r2,hit2,pts2),2); checkit_double(pts2[0].x, 2.489528); checkit_double(pts2[0].y, 2.904107); checkit_double(pts2[0].z, 2.562423); checkit_double(pts2[1].x, 1.492227); checkit_double(pts2[1].y, 1.830091); checkit_double(pts2[1].z, 1.181545); checkit_double(hit2[0].center.x, 2); checkit_double(hit2[0].center.y, 4.3); checkit_double(hit2[0].center.z, 5.4); checkit_double(hit2[0].radius, 3.2); checkit_double(hit2[1].center.x, 2.9); checkit_double(hit2[1].center.y, 3.4); checkit_double(hit2[1].center.z, 2.1); checkit_double(hit2[1].radius, 2.3); }
void test_create_ray(void){ struct ray r = create_ray(create_point(2.3,4.3,2.1),create_vector(2.5,3.5,4.5)); checkit_double(r.p.x, 2.3); checkit_double(r.p.y, 4.3); checkit_double(r.p.z, 2.1); checkit_double(r.dir.x,2.5); checkit_double(r.dir.y,3.5); checkit_double(r.dir.z,4.5); struct ray r2 = create_ray(create_point(3.4,4.5,2.5),create_vector(1.1,4.1,5.1)); checkit_double(r2.p.x, 3.4); checkit_double(r2.p.y, 4.5); checkit_double(r2.p.z, 2.5); checkit_double(r2.dir.x,1.1); checkit_double(r2.dir.y,4.1); checkit_double(r2.dir.z,5.1); }
int button_pess(int button, int x, int y, t_env *e) { t_vect ray; (void)button; e->test = 1; create_ray(e, &ray, x, y); cast_ray(e, &ray, x, y); e->test = 0; return (1); }