ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/face.c
(Generate patch)

Comparing ray/src/common/face.c (file contents):
Revision 2.16 by greg, Tue Feb 16 16:48:11 2021 UTC vs.
Revision 2.18 by greg, Mon Sep 9 02:48:03 2024 UTC

# Line 117 | Line 117 | freeface(                      /* free memory associated with face */
117          o->os = NULL;
118   }
119  
120
120   int
121   inface(                         /* determine if point is in face */
122          FVECT  p,
# Line 140 | Line 139 | inface(                                /* determine if point is in face */
139          ncross = 0;
140                                          /* positive x axis cross test */
141          while (n--) {
142 +                if (FABSEQ(p0[yi], y) && FABSEQ(p1[yi], y) &&
143 +                                (p0[xi] > x) ^ (p1[xi] > x))
144 +                        return(1);                      /* edge case #1 */
145                  if ((p0[yi] > y) ^ (p1[yi] > y)) {
146                          tst = (p0[xi] > x) + (p1[xi] > x);
147                          if (tst == 2)
# Line 147 | Line 149 | inface(                                /* determine if point is in face */
149                          else if (tst) {
150                                  double  prodA = (p0[yi]-y)*(p1[xi]-x);
151                                  double  prodB = (p0[xi]-x)*(p1[yi]-y);
152 <                                if (FRELEQ(prodA, prodB))
153 <                                        return(1);      /* edge case #1 */
152 >                                if (FABSEQ(prodA, prodB))
153 >                                        return(1);      /* edge case #2 */
154                                  ncross += (p1[yi] > p0[yi]) ^ (prodA > prodB);
155 <                        } else if (FRELEQ(p0[xi], x) && FRELEQ(p1[xi], x))
156 <                                return(1);              /* edge case #2 */
157 <                } else if (FRELEQ(p0[yi], y) && FRELEQ(p1[yi], y) &&
156 <                                (p0[xi] > x) ^ (p1[xi] > x))
157 <                        return(1);                      /* edge case #3 */
155 >                        } else if (FABSEQ(p0[xi], x) && FABSEQ(p1[xi], x))
156 >                                return(1);              /* edge case #3 */
157 >                }
158                  p0 = p1;
159                  p1 += 3;
160          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines