558 |
|
|
559 |
|
if (ptp == NULL) { /* need to triangulate */ |
560 |
|
ptp = (POLYTRIS *)malloc(sizeof(POLYTRIS) + |
561 |
< |
sizeof(struct ptri)*(sp->nfargs/3 - 1)); |
561 |
> |
sizeof(struct ptri)*(sp->nfargs/3 - 3)); |
562 |
|
if (ptp == NULL) |
563 |
|
goto memerr; |
564 |
|
if (sp->nfargs == 3) { /* simple case */ |
602 |
|
sp->priv = (void *)ptp; |
603 |
|
} |
604 |
|
/* pick triangle by partial area */ |
605 |
< |
for (i = 0; i < ptp->ntris && x > ptp->tri[i].afrac; i++) |
605 |
> |
for (i = 0; i < ptp->ntris-1 && x > ptp->tri[i].afrac; i++) |
606 |
|
x -= ptp->tri[i].afrac; |
607 |
|
SDmultiSamp(samp2, 2, x/ptp->tri[i].afrac); |
608 |
|
samp2[0] *= samp2[1] = sqrt(samp2[1]); |