| 98 |
|
if (f->nv > 3 && badvert) |
| 99 |
|
objerror(o, WARNING, "non-planar vertex"); |
| 100 |
|
/* find axis */ |
| 101 |
< |
f->ax = fabs(f->norm[0]) > fabs(f->norm[1]) ? 0 : 1; |
| 101 |
> |
f->ax = (fabs(f->norm[0]) > fabs(f->norm[1])); |
| 102 |
|
if (fabs(f->norm[2]) > fabs(f->norm[f->ax])) |
| 103 |
|
f->ax = 2; |
| 104 |
|
|
| 144 |
|
tst = (p0[xi] > x) + (p1[xi] > x); |
| 145 |
|
if (tst == 2) |
| 146 |
|
ncross++; |
| 147 |
< |
else if (tst) |
| 148 |
< |
ncross += (p1[yi] > p0[yi]) ^ |
| 149 |
< |
((p0[yi]-y)*(p1[xi]-x) > |
| 150 |
< |
(p0[xi]-x)*(p1[yi]-y)); |
| 151 |
< |
} |
| 147 |
> |
else if (tst) { |
| 148 |
> |
double prodA = (p0[yi]-y)*(p1[xi]-x); |
| 149 |
> |
double prodB = (p0[xi]-x)*(p1[yi]-y); |
| 150 |
> |
if (FRELEQ(prodA, prodB)) |
| 151 |
> |
return(1); /* edge case #1 */ |
| 152 |
> |
ncross += (p1[yi] > p0[yi]) ^ (prodA > prodB); |
| 153 |
> |
} else if (FRELEQ(p0[xi], x) && FRELEQ(p1[xi], x)) |
| 154 |
> |
return(1); /* edge case #2 */ |
| 155 |
> |
} else if (FRELEQ(p0[yi], y) && FRELEQ(p1[yi], y) && |
| 156 |
> |
(p0[xi] > x) ^ (p1[xi] > x)) |
| 157 |
> |
return(1); /* edge case #3 */ |
| 158 |
|
p0 = p1; |
| 159 |
|
p1 += 3; |
| 160 |
|
} |