For problem 1: you really should only have to add three lines of code to transformations.cxx in order to get it to do this problem: one declaration of a matrix Frob (where it says "declare and initialize your transform mtx here"), one call to drawTransformedPolygon a few lines later, and one resetting of coordinates somewhere in the main display loop.

For problem 2: here is a solution to the first two problems of PS6, in case you didn't get your keyboard control working then.

For problem 3: I have tried the the canvas.h modifications suggested in the text, and they are (mirabile dictu) bug-free.

The coordinate system stuff, however, is a little confusing. If your code isn't doing what you think it should, look carefully at the second part of the boxed text on page 246 and the text around equation 5.37 and consider whether the order in which you are doing things might well be reversed....

The way in which transformations cascade can be confusing in another way. If you write a loop that does something like for(int i = 0; i < 36; i++) cvs.rotate2D(i*10); drawPolygon(numVertices, vertices);, you will get strange results: a rotation that appears to grow, step by step. If you intended to show an object rotating by nice 10 degree steps, you should push the CT before rotate2D and pop it after drawPolygon...