| 
  | 
I'm working on matrix transformations using arrays, but nothing goes quite
as planned. The simplest example is transposing a 2d array:
////////////////////////////////////////////////////////////
#macro transp(array1)
     #local a1=dimension_size(array1,1);
     #local a2=dimension_size(array1,2);
     #local i=0;
     #local j=0;
     #declare temp1= array[a2][a1];
     #while (i<=a2-1)
           #while (j<=a1-1)
                  #declare temp1[i][j]=array1[j][i];
                  #local j=j+1;
           #end
           #local i=i+1;
     #end
#end
camera {location -8*z look_at 0}
light_source{<0,10,-10> rgb 1}
#declare ar1=array[3][2] {{1,0},{1,-1},{0,5}};
transp(ar1)
/////////////////////////////////////////////////////////////////
All good till now, I think, but when I try to visualise the result with the
following routine, I only get the first row. If I change the #while's in
the macro, so that i and j start from their highest values and go to 0,
only the last row is rendered. If I add a third dimension in the array,
only the values on a single spine are rendered. Any ideas on what I'm doing
wrong? I have
searched the newsgroup but I haven't seen many examples of nested #while
with arrays, so I'm inclined to think it's something to do with that. Pov
version is 3.61c for Windows.
///////////////////////////////////////////////////////////
#declare i1=0;
#declare j1=0;
union{
#while (i1<=dimension_size(temp1,1)-1)
      #while (j1<=dimension_size(temp1,2)-1)
             text{ttf "timrom.ttf"
                      str(temp1[i1][j1],1,0) 0.1,0 pigment {rgb 1}
              translate <(j1-1)*2,1-(i1-1),0>
              }
        #declare j1=j1+1;
        #end
    #declare i1=i1+1;
#end
}
//////////////////////////////////////////////////////////
 Post a reply to this message 
 | 
  | 
 | 
  | 
"Tim Attwood" <tim### [at] comcast net> wrote:
> You are making the same mistake twice...
> The initial value in your inner nested while loops
> need to be set every time the inner loop executes.
> Like this:
>
> #local A = from#;
> #while (A <= to#)
>    #local B = from#;
>    #while (B <= to#)
>       ... process
>       #local B = B + step#;
>    #end
>    #local A = A + step#;
> #end
Pfft, what a silly mistake! Would you believe I twiddled my code looking for
whatever was messing my code up for over an hour?
Anyway, thanks. It's working as it should now.
 
 Post a reply to this message 
 | 
  | 
 | 
  | 
Warp <war### [at] tag povray org> wrote:
> Grassblade <nomail@nomail> wrote:
> >      #local i=0;
> >      #local j=0;
> >      #declare temp1= array[a2][a1];
> >      #while (i<=a2-1)
> >            #while (j<=a1-1)
>
>   When the execution gets to this point the second time, what do you
> think the value of 'j' is?
>
> --
>                                                           - Warp
Ehm, good point. <_<
 
 Post a reply to this message 
 | 
  |