From e957408cb8cd200696a081b4f5c749c5294110ec Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Wed, 1 Jul 2009 04:44:51 +0000 Subject: Sphere and cube C++ wrappers. --- libdimension/cube.c | 94 ----------------------------------------------------- 1 file changed, 94 deletions(-) (limited to 'libdimension/cube.c') diff --git a/libdimension/cube.c b/libdimension/cube.c index bb71d0b..d8a1236 100644 --- a/libdimension/cube.c +++ b/libdimension/cube.c @@ -21,97 +21,3 @@ #include "dimension.h" #include /* For malloc */ #include /* For sqrt */ - -static dmnsn_array *dmnsn_cube_intersections_fn(const dmnsn_object *cube, - dmnsn_line line); -static int dmnsn_cube_inside_fn(const dmnsn_object *cube, - dmnsn_vector point); - -/* Allocate a new cube object */ -dmnsn_object * -dmnsn_new_cube() -{ - dmnsn_object *cube = dmnsn_new_object(); - if (cube) { - cube->intersections_fn = &dmnsn_cube_intersections_fn; - cube->inside_fn = &dmnsn_cube_inside_fn; - } - return cube; -} - -/* Delete a cube */ -void -dmnsn_delete_cube(dmnsn_object *cube) -{ - dmnsn_delete_object(cube); -} - -/* Intersections callback for a cube */ -static dmnsn_array * -dmnsn_cube_intersections_fn(const dmnsn_object *cube, dmnsn_line line) -{ - double t; - dmnsn_vector p; - dmnsn_array *array = dmnsn_new_array(sizeof(double)); - - /* Six ray-plane intersection tests (x, y, z) = +/- 1.0 */ - - if (line.n.x != 0.0) { - /* x = -1.0 */ - t = (-1.0 - line.x0.x)/line.n.x; - p = dmnsn_line_point(line, t); - if (p.y >= -1.0 && p.y <= 1.0 && p.z >= -1.0 && p.z <= 1.0) { - dmnsn_array_push(array, &t); - } - - /* x = 1.0 */ - t = (1.0 - line.x0.x)/line.n.x; - p = dmnsn_line_point(line, t); - if (p.y >= -1.0 && p.y <= 1.0 && p.z >= -1.0 && p.z <= 1.0) { - dmnsn_array_push(array, &t); - } - } - - if (line.n.y != 0.0) { - /* y = -1.0 */ - t = (-1.0 - line.x0.y)/line.n.y; - p = dmnsn_line_point(line, t); - if (p.x >= -1.0 && p.x <= 1.0 && p.z >= -1.0 && p.z <= 1.0) { - dmnsn_array_push(array, &t); - } - - /* y = 1.0 */ - t = (1.0 - line.x0.y)/line.n.y; - p = dmnsn_line_point(line, t); - if (p.x >= -1.0 && p.x <= 1.0 && p.z >= -1.0 && p.z <= 1.0) { - dmnsn_array_push(array, &t); - } - } - - if (line.n.z != 0.0) { - /* z = -1.0 */ - t = (-1.0 - line.x0.z)/line.n.z; - p = dmnsn_line_point(line, t); - if (p.x >= -1.0 && p.x <= 1.0 && p.y >= -1.0 && p.y <= 1.0) { - dmnsn_array_push(array, &t); - } - - /* z = 1.0 */ - t = (1.0 - line.x0.z)/line.n.z; - p = dmnsn_line_point(line, t); - if (p.x >= -1.0 && p.x <= 1.0 && p.y >= -1.0 && p.y <= 1.0) { - dmnsn_array_push(array, &t); - } - } - - return array; -} - -/* Inside callback for a cube */ -static int -dmnsn_cube_inside_fn(const dmnsn_object *cube, dmnsn_vector point) -{ - return point.x > -1.0 && point.x < 1.0 - && point.y > -1.0 && point.y < 1.0 - && point.z > -1.0 && point.z < 1.0; -} -- cgit v1.2.3