summaryrefslogtreecommitdiffstats
path: root/libdimension/cube.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/cube.c')
-rw-r--r--libdimension/cube.c94
1 files changed, 0 insertions, 94 deletions
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 <stdlib.h> /* For malloc */
#include <math.h> /* 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;
-}