67 |
|
if (distarr == NULL) |
68 |
|
error(SYSTEM, "out of memory in o_face"); |
69 |
|
/* take first edge longer than sqrt(area) */ |
70 |
< |
for (i = 1; i < fa->nv; i++) { |
71 |
< |
for (j = 0; j < 3; j++) |
72 |
< |
u[j] = VERTEX(fa,i)[j] - VERTEX(fa,i-1)[j]; |
73 |
< |
if (DOT(u,u) >= fa->area-FTINY) |
70 |
> |
for (j = fa->nv-1, i = 0; i < fa->nv; j = i++) { |
71 |
> |
u[0] = VERTEX(fa,i)[0] - VERTEX(fa,j)[0]; |
72 |
> |
u[1] = VERTEX(fa,i)[1] - VERTEX(fa,j)[1]; |
73 |
> |
u[2] = VERTEX(fa,i)[2] - VERTEX(fa,j)[2]; |
74 |
> |
if ((r1 = DOT(u,u)) >= fa->area-FTINY) |
75 |
|
break; |
76 |
|
} |
77 |
|
if (i < fa->nv) { /* got one! -- let's align our axes */ |
78 |
< |
normalize(u); |
78 |
> |
r2 = 1.0/sqrt(r1); |
79 |
> |
u[0] *= r2; u[1] *= r2; u[2] *= r2; |
80 |
|
fcross(v, fa->norm, u); |
81 |
|
} else /* oh well, we'll just have to wing it */ |
82 |
|
mkaxes(u, v, fa->norm); |