Revision: 56016
http://sourceforge.net/p/brlcad/code/56016
Author: r_weiss
Date: 2013-07-11 22:25:29 +0000 (Thu, 11 Jul 2013)
Log Message:
-----------
Fix special case errors when ray tracing the tgc/rec primitive. Needs more
testing. Such as sample model "havoc.g" primitive "rt_s.ecov6" with ray
r_pt=(12320.0005 -1168 2134) r_dir=(1 0 0).
Modified Paths:
--------------
brlcad/trunk/src/librt/primitives/rec/rec.c
Modified: brlcad/trunk/src/librt/primitives/rec/rec.c
===================================================================
--- brlcad/trunk/src/librt/primitives/rec/rec.c 2013-07-11 21:42:00 UTC (rev
56015)
+++ brlcad/trunk/src/librt/primitives/rec/rec.c 2013-07-11 22:25:29 UTC (rev
56016)
@@ -467,9 +467,11 @@
b = 2 * (dprime[X]*pprime[X] + dprime[Y]*pprime[Y]) *
(dx2dy2 = 1 / (dprime[X]*dprime[X] + dprime[Y]*dprime[Y]));
- if ((root = b*b - 4 * dx2dy2 *
- (pprime[X]*pprime[X] + pprime[Y]*pprime[Y] - 1)) <= 0)
+ root = b*b - 4 * dx2dy2 * (pprime[X]*pprime[X] + pprime[Y]*pprime[Y] -
1);
+
+ if (root < SMALL_FASTF || root > 1.0e10) {
goto check_plates;
+ }
root = sqrt(root);
k1 = (root-b) * 0.5;
@@ -481,7 +483,7 @@
* See if they fall in range.
*/
VJOIN1(hitp->hit_vpriv, pprime, k1, dprime); /* hit' */
- if (hitp->hit_vpriv[Z] >= 0.0 && hitp->hit_vpriv[Z] <= 1.0) {
+ if (hitp->hit_vpriv[Z] > -SMALL_FASTF && hitp->hit_vpriv[Z] < (1.0 +
SMALL_FASTF)) {
hitp->hit_magic = RT_HIT_MAGIC;
hitp->hit_dist = k1;
hitp->hit_surfno = REC_NORM_BODY; /* compute N */
@@ -489,7 +491,7 @@
}
VJOIN1(hitp->hit_vpriv, pprime, k2, dprime); /* hit' */
- if (hitp->hit_vpriv[Z] >= 0.0 && hitp->hit_vpriv[Z] <= 1.0) {
+ if (hitp->hit_vpriv[Z] > -SMALL_FASTF && hitp->hit_vpriv[Z] < (1.0 +
SMALL_FASTF)) {
hitp->hit_magic = RT_HIT_MAGIC;
hitp->hit_dist = k2;
hitp->hit_surfno = REC_NORM_BODY; /* compute N */
@@ -507,7 +509,7 @@
VJOIN1(hitp->hit_vpriv, pprime, k1, dprime); /* hit' */
if (hitp->hit_vpriv[X] * hitp->hit_vpriv[X] +
- hitp->hit_vpriv[Y] * hitp->hit_vpriv[Y] <= 1.0) {
+ hitp->hit_vpriv[Y] * hitp->hit_vpriv[Y] < (1.0 + SMALL_FASTF)) {
hitp->hit_magic = RT_HIT_MAGIC;
hitp->hit_dist = k1;
hitp->hit_surfno = REC_NORM_BOT; /* -H */
@@ -516,7 +518,7 @@
VJOIN1(hitp->hit_vpriv, pprime, k2, dprime); /* hit' */
if (hitp->hit_vpriv[X] * hitp->hit_vpriv[X] +
- hitp->hit_vpriv[Y] * hitp->hit_vpriv[Y] <= 1.0) {
+ hitp->hit_vpriv[Y] * hitp->hit_vpriv[Y] < (1.0 + SMALL_FASTF)) {
hitp->hit_magic = RT_HIT_MAGIC;
hitp->hit_dist = k2;
hitp->hit_surfno = REC_NORM_TOP; /* +H */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits