diff -urN rt_v59/rt.c rt_v60/rt.c --- rt_v59/rt.c 2018-06-11 22:28:29.000000000 +0900 +++ rt_v60/rt.c 2018-07-11 20:37:30.000000000 +0900 @@ -159,7 +159,7 @@ } } -void +int reflact_v(struct rtd *rtd, double *nv, double *eyev, double ang_nv_eyev, double *ret_v) { double density = rtd->density; @@ -168,7 +168,7 @@ if(density == 1 || fabs(ang_nv_eyev) == 1 || ang_nv_eyev == 0){ v_set(ret_v, eyev); - return; + return 1; } v_mul(nv, ang_nv_eyev, cos_v); v_sub(eyev, cos_v, sin_v); @@ -178,11 +178,14 @@ v_mul(sin_v, density, r_sin_v); sin_len2 = dot( r_sin_v, r_sin_v ); - sin_len2 = sin_len2 < 1 ? sin_len2 : 1; + if(sin_len2 > 1){ + return 0; + } cos_len = sqrt( 1 - sin_len2 ); v_mul(cos_v, cos_len / len1( cos_v ), r_cos_v); v_add(r_sin_v, r_cos_v, ret_v); unit(ret_v, ret_v); + return 1; } void @@ -200,7 +203,9 @@ if(reflact == 0){ return; } - reflact_v(rtd, nv, eyev, ang_nv_eyev, ref_v); + if(reflact_v(rtd, nv, eyev, ang_nv_eyev, ref_v) == 0){ + return; + } line_new(&ref_l, crsp, ref_v); get_col(&ref_l, sec, nest_rate * reflact, idx, col); diff -urN rt_v59/ut.c rt_v60/ut.c --- rt_v59/ut.c 2018-06-15 21:58:23.000000000 +0900 +++ rt_v60/ut.c 2018-07-11 20:36:46.000000000 +0900 @@ -235,4 +235,6 @@ } } +int dbg_enable = 0; + /* EOF */ diff -urN rt_v59/ut.h rt_v60/ut.h --- rt_v59/ut.h 2018-06-15 21:58:23.000000000 +0900 +++ rt_v60/ut.h 2018-07-11 20:36:46.000000000 +0900 @@ -59,4 +59,7 @@ int ut_itbl_get_v(struct ut_itbl *t, int i); void ut_itbl_free(struct ut_itbl *t); +extern int dbg_enable; +#define DBG(...) do{ if(dbg_enable) fprintf(stderr, __VA_ARGS__); }while(0) + #endif