with(LinearAlgebra): The data files from http://www.davidson.edu/math/chartier/Starwars/ need to be placed in the same directory as the Maple file. Here we read the data and convert the lists to sequences. data := fopen("yoda_low1.txt",READ): polys1 := readdata(data,float,9): fclose(data): polys1 :=seq([polys1[k][1..3],polys1[k][4..6],polys1[k][7..9]],k=1..nops(polys1)): data2 := fopen("yoda_low2.txt",READ): polys2 := readdata(data2,float,12): fclose(data2): polys2 :=seq([polys2[k][1..3],polys2[k][4..6],polys2[k][7..9],polys2[k][10..12]],k=1..nops(polys2)): Let's begin with the smaller file and examine the first element: Matrix(polys1), nops([polys1]); Each data point in polys1 is an array read as 3 rows of [x,y,z] coordinates that form the vertices of 4667 triangles for Yoda, but we want the rotation matrix to act as matrix multiplication. Here we define rotation by theta about the y-axis. Rot:=theta-> Matrix([[cos(theta),0,-sin(theta)],[0,1,0],[sin(theta),0,cos(theta)]]); So we need to Transpose this data so that x,y,z appears as column vectors. Then we can perform the rotation as matrix multiplication. Finally, we must change the rotated data back into rows by a Transpose command so that we can tell Maple to connect the vertices with the Polygons plot command. Another option is to change the order of multiplication, since the transpose of AB is the transpose of B times the transpose of A. Let's use rotation by -Pi/2. TRotPi2:=Transpose(Rot(-Pi/2)): fr := x-> MatrixMatrixMultiply( Matrix(x),TRotPi2): RP := map(fr, [polys1]): Now we plot the original and then the rotated Yoda: PLOT3D(POLYGONS(polys1), TITLE(Yoda), STYLE(PATCH), COLOR(RGB, .76, .87, .78)); PLOT3D(POLYGONS(op(RP)), TITLE(YodaRotated), STYLE(PATCH), COLOR(RGB, .76, .87, .78)); The second file: Matrix(polys2), nops([polys2]); Each data point in polys2 is an array read as 4 rows of [x,y,z] coordinates that form the vertices of 29460 quadrilaterals for Yoda. We repeat the same process as above and display the plots together. RP2 := map(fr, [polys2]): PLOT3D(POLYGONS(polys1,polys2), TITLE(Yoda), STYLE(PATCH), COLOR(RGB, .76, .87, .78)); PLOT3D(POLYGONS(op(RP),op(RP2)), TITLE(YodaRotated), STYLE(PATCH), COLOR(RGB, .76, .87, .78)); You can try Maple's built in rotation ability. Click on the picture and change the angles. Here is the same process repeated with the high resolution data: data := fopen("yoda_high1.txt",READ): polys1 := readdata(data,float,9): fclose(data): polys1 :=seq([polys1[k][1..3],polys1[k][4..6],polys1[k][7..9]],k=1..nops(polys1)): data2 := fopen("yoda_high2.txt",READ): polys2 := readdata(data2,float,12): fclose(data2): polys2 :=seq([polys2[k][1..3],polys2[k][4..6],polys2[k][7..9],polys2[k][10..12]],k=1..nops(polys2)): RP := map(fr, [polys1]): RP2 := map(fr, [polys2]): PLOT3D(POLYGONS(op(RP),op(RP2)), TITLE(YodaRotated), STYLE(PATCH), COLOR(RGB, .76, .87, .78));