resorting coordinates after the rotations
- To: mathgroup at smc.vnet.net
- Subject: [mg14027] resorting coordinates after the rotations
- From: Tatyana Polenova <tatyana at chem.columbia.edu>
- Date: Wed, 16 Sep 1998 14:12:06 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Hi, I have the following problem: I generate a 2-dimensional grid of points that represent x,y-cartesian coordinates. Separately I have a list of numbers (z-coordinates that I would later like to use in a contour plot) which will be mapped to the grid of x,y-coordinates. I create a function that rotates the grid matrix by a certain angle. Now I need to display a contour plot of the z-values in terms of the new rotated x,y coordinates. Obviously, after the rotation the new matrix of x,y- coordinates is not sorted anymore. To be able to display the contour plot I need to resort the matrix of the coordinates in a conventional way. WHat would be the best way to do that? Below there is an example of what I wrote so far: _________ Grid11[horiz_, vert_]:=Table[Table[{k,l},{l,1, horiz}], {k,1,vert}]; GridRot[Grid1_,angle_]:= Floor[Table[ Table[Rotate2D[Grid1[[m,n]],N[angle], {1.,1.}], {n,1, Length[Grid1[[1]]]}],{m,1,Length[Grid1]}]]; grida=Grid11[5,5]; In[9]:= gridb=GridRot[grida,3 Pi/4] Out[9]= {{{1,1},{1,0},{2,-1},{3,-2},{3,-2}},{{0,0},{1,-1},{1,-2},{2,-2},{ 3,-3}},{{-1,-1},{0,-2},{1,-2},{1,-3},{2,-4}},{{-2,-2},{-1,-2},{0,-3},{ 1,-4},{1,-4}},{{-2,-2},{-2,-3},{-1,-4},{0,-4},{1,-5}}} Shift[gridd_]:=Block[{}, horizmin= Min[Table[ Table[#[[m,n,2]]&@gridd,{n,Length[gridd[[1]]]}],{m, Length[gridd]}]]; vertmin= Min[Table[ Table[#[[m,n,1]]&@gridd,{n,Length[gridd[[1]]]}],{m, Length[gridd]}]]; Table[Table[{gridd[[m,n,1]]+Abs[vertmin]+1,gridd[[m,n,2]]+Abs[horizmin]+1},{ n,Length[gridd[[1]]]}],{m,Length[gridd]}]] (this will shift the grid in such a way that there won't be negative coordinates) In[12]:= gridc=Shift[gridb] Out[12]= {{{4,7},{4,6},{5,5},{6,4},{6,4}},{{3,6},{4,5},{4,4},{5,4},{6,3}},{{2,5},{3, 4},{4,4},{4,3},{5,2}},{{1,4},{2,4},{3,3},{4,2},{4,2}},{{1,4},{1,3},{2, 2},{3,2},{4,1}}} After this step I will map the z-values into the rotated grid: FTGridCombo= Table[Table[{gridc[[m,n,1]],gridc[[m,n,2]],zvalues[[m,n]]},{n, Length[gridc[[1]]]}],{m,Length[gridc]}]; Now I will have to resort the x,y coordinates in a conventional way, so that it will be a table of the form: {{{1,3},{1,4}},{{2,2},{2,4},{2,5}},{{3,3},{3,4},{3,6}},{{4,1},{4,2},{4, 2},...etc. What would be the best way to do this? There is also a problem that contour plot accepts only rectangular matrices mXn, but obviously after rotation the matrix won't look like this anymore. To bring it back to the conventional form I simply filled the missing parts with zeros: cnt1a:=Block[{}, temp=Table[ Join[Table[ 0,{n,Ceiling[Length[cnt1[[31]]]/2]-Ceiling[Length[cnt1[[j]]]]/2}], cnt1[[j]], Table[0,{n, Ceiling[Length[cnt1[[31]]]/2]-Ceiling[Length[cnt1[[j]]]]/2}]], { j,Length[cnt1]}]; temp1=Table[Length[temp[[n]]], {n, Length[temp]}]; temp2=Max[temp1]; Table[Join[temp[[n]], Table[0,{temp2-Length[temp[[n]]]}]], {n, Length[temp]}]] But it seems to me that this approach is very cumbersome... Would there be a better approach? Is it possible to display non-rectangular matrices using ListContourPlot? sorry for such a long message and thank you very much for your time. Tatyana