From fc06cb624d79788923ab2dedb3cd2ccab53cb2b4 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 19 Mar 2010 13:38:22 -0400 Subject: Make float equality comparisons more relaxed. --- libdimension/dimension/geometry.h | 18 +++++++++++++++++- libdimension/raytrace.c | 13 ------------- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'libdimension') diff --git a/libdimension/dimension/geometry.h b/libdimension/dimension/geometry.h index d44c7db..2276d5b 100644 --- a/libdimension/dimension/geometry.h +++ b/libdimension/dimension/geometry.h @@ -39,7 +39,10 @@ typedef struct { dmnsn_vector n; /* A normal vector; the direction of the line */ } dmnsn_line; -/* Vector constants */ +/* Constants */ + +#define dmnsn_epsilon 1.0e-9 + static const dmnsn_vector dmnsn_zero = { 0.0, 0.0, 0.0 }; static const dmnsn_vector dmnsn_x = { 1.0, 0.0, 0.0 }; static const dmnsn_vector dmnsn_y = { 0.0, 1.0, 0.0 }; @@ -188,6 +191,19 @@ dmnsn_line_point(dmnsn_line l, double t) return dmnsn_vector_add(l.x0, dmnsn_vector_mul(t, l.n)); } +/* Add epsilon*l.n to l.x0, to avoid self-intersections */ +DMNSN_INLINE dmnsn_line +dmnsn_line_add_epsilon(dmnsn_line l) +{ + return dmnsn_new_line( + dmnsn_vector_add( + l.x0, + dmnsn_vector_mul(dmnsn_epsilon, l.n) + ), + l.n + ); +} + /* Solve for the t value such that x0 + t*n = x */ double dmnsn_line_index(dmnsn_line l, dmnsn_vector x); diff --git a/libdimension/raytrace.c b/libdimension/raytrace.c index 9d6397e..61ebd08 100644 --- a/libdimension/raytrace.c +++ b/libdimension/raytrace.c @@ -279,19 +279,6 @@ dmnsn_raytrace_scene_impl(dmnsn_progress *progress, dmnsn_scene *scene, return 0; } -/* Add epsilon*l.n to l.x0, to avoid self-intersections */ -static dmnsn_line -dmnsn_line_add_epsilon(dmnsn_line l) -{ - return dmnsn_new_line( - dmnsn_vector_add( - l.x0, - dmnsn_vector_mul(1.0e-9, l.n) - ), - l.n - ); -} - #define ITEXTURE(state) (state->intersection->texture) #define DTEXTURE(state) (state->scene->default_texture) -- cgit v1.2.3