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

Comparing ray/src/util/rmatrix.c (file contents):
Revision 2.1 by greg, Sat May 31 05:02:37 2014 UTC vs.
Revision 2.2 by greg, Sat May 31 19:21:21 2014 UTC

# Line 382 | Line 382 | rmx_copy(const RMATRIX *rm)
382          return(dnew);
383   }
384  
385 < /* Swap rows and columns in the given matrix in situ */
386 < int
387 < rmx_transpose(RMATRIX *rm)
385 > /* Allocate and assign transposed matrix */
386 > RMATRIX *
387 > rmx_transpose(const RMATRIX *rm)
388   {
389 <        RMATRIX dswap;
389 >        RMATRIX *dnew;
390          int     i, j, k;
391  
392          if (rm == NULL)
393                  return(0);
394 <        dswap.nrows = rm->ncols;
395 <        dswap.ncols = rm->nrows;
396 <        dswap.ncomp = rm->ncomp;
397 <        for (i = 1; i < rm->nrows; i++)
398 <            for (j = 0; j < i; j++)
399 <                for (k = rm->ncomp; k--; ) {
400 <                        double  *opp = rm->mtx + rmx_indx(&dswap,j,i,k);
401 <                        double  d = *opp;
402 <                        *opp = rmx_lval(rm,i,j,k);
403 <                        rmx_lval(rm,i,j,k) = d;
404 <                }
405 <        rm->nrows = dswap.nrows;
406 <        rm->ncols = dswap.ncols;
407 <        return(1);
394 >        dnew = rmx_alloc(rm->ncols, rm->nrows, rm->ncomp);
395 >        if (dnew == NULL)
396 >                return(NULL);
397 >        for (i = dnew->nrows; i--; )
398 >            for (j = dnew->ncols; j--; )
399 >                for (k = dnew->ncomp; k--; )
400 >                        rmx_lval(dnew,i,j,k) = rmx_lval(rm,j,i,k);
401 >        return(dnew);
402   }
403  
404   /* Multiply (concatenate) two matrices and allocate the result */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines