added a "constants" header file

Currently it contains the Google calculator values for pi, sqrt(3), and
sqrt(2), the latter two of which are common things in the unit circle.
changed vector2D and matrix2D for translation

Previously, I could not perform translation on a vector with matrix
transformation.  Now I can.

Tests were implemented, new matrix operator* was stubbed out, all tests
failed, then changes were made to the implementation to make them pass.
renamed entries in matrix2D to be generic

Previously, I tried to have the names of each entry in the matrix be
intuitive, like x0, x1, x_translate, y0, y1, and y_translate, but the
third row was just sitting there and didn't have any intuitive name to
go with it.

Additionally, the intuitive names made matrix multiplication a really
big pain in the neck.

So I renamed them to row0_col0, row0_col1, ... row_2_col2.  I had to
remake my moc file because I did a text search and change in the entire
solution, and there were some hex values in the moc file that began with
x0, which the search picked up.  The moc file isn't part of this commit
though because I remade it so it appeared unchanged.

But now my rotations are all off.

I think that it is because the size of the vector changed.
fixed vertex declarations and attrib pointer

I still had the number of items per vertex hardcoded as 2 in
glVertexAttribPointer(...).  The vector is now 3 floats, so I changed
the hardcoded value to 3.  I'll make it a variable later when I start
encapsulating my model data into its own structure.

I also changed the last argument in my vertex declarations so that they
could be translated (default is 0 - "no translation").
integrated transformation matrix into render step

Previously, the transformation of the ship's vertices was performed by
applying the rotation matrix and then adding the ship position vector.

Now I create a rotation and translation matrix, multiply the translation
by the rotation (NOT the other way around, which will effectively
translate the ship, then rotate it around the origin) to create a
transformation matrix, then multiply the matrix by each vertex.

Woot!  It works too!
added matrix dimension for non-origin rotation

The names of the row_col variables were starting to get unweildy, so I
renamed them to a(row_num)(col_num).

Ex: Row 0, col 2 is a02.

This is a little terminology I picked up when looking online at matrix
multiplication.  It's simple enough.

Now I need to add the ability to rotate a non-origin axis and rewrite
the vector2D with the new dimension to enable non-origin rotation and
all the matrix and vector tests.  Ugh!
started adding something, but need to stop

I started adding a fourth dimension to the vertex and matrix to allow
for a displacement vector that accounted for a non-origin rotation, but
I forgot that the GL Shading Language expects a square 3x3 matrix for 2D
and a 4x4 matrix for 3D.  It does not allow for a 5x5 matrix, which I
would require if I were to adapt this to 3D.

Instead, I will switch back (not revert in my repo, but rather manually
make the changes because there is a lot of stuff that I still want to
keep) to a 3x3 matrix and add a function that gives me the non-origin
rotation displacement vector.
vector now has x, y, t, is simplified

I removed the extra constructors so now it only has one constructor with
default values, and I renamed the "enable translate" field to simply
"t".

The "enable non-origin rotation" value is now removed as well.

All tests were refactored, all functions except length(), which only
works on the unchanged x and y values, were redone, and everything has
passed the new vector tests.

Now to tackle the matrix.
revamped the matrix and added displacement

The matrix2D is now back in it's 3x3 state, I refactored and retested it
and it all passes, and I implemented and tested a function that returns
a vector2D that contains the displacement for any vector that wants to
be considered as rotating around some point that is not the origin.
I can now rotate around a non-origin point

I incorporated my non-origin rotation vector displacement, learned that,
once set, it should not be moved unless you want the rotation point on
the craft move, and now I have a little triangle ship that rotates
around it's geometric center (or any other point that I want) instead of
around the origin.
changed vector's last entry to "w"

I had been calling the vector2D's last value "t" because it enabled
translation, but I had forgotten that there is graphical programming
tradition that this value is called "w".  So I changed it to "w".

This "w" value is also supposed to not be restricted to 1.0f and 0.0f
only.  It has some usefulness in matrices in scaling the vector,
although it has little use to the vector itself.  The vector treats it
as any other entry, adding, subtracting, and scaling it.  It is ok to do
this because point ("w" = 1) and direction vectors ("w" = 0) may be
added, and direction and direction vectors may be added, but point and
point vectors will always remain 1 or 0 throughout vector manipulation
other than scaling or funky transforms.

Also, I changed the default "w" value from 1 to 0.
changed vertex declarations to enable translate

Before the last commit, the "w" (that is, "enable translate") value
defaulted to 1.  When I changed the way that "w" behaved so that it was
just like any other vector component, I changed it's default value to
("disable translate") as well, so I had to change the ship's vertex
declarations to explicitly enable translation as well.
started writing my profiler in the wrong branch

Committing, then switching to branch "profiler".
first branch commit

I made a trivial change of deleting two lines just so I could make this
commit.
stubbed out  profiler and set up the profiler tests
built data recording and file input-output

I differed from Jamie King's tutorial, in which he spent a decent amount
of effort trying to force a particular approach with careful index
control, but I chose to make a few loops and be done with it.
cleaned up profiler and tests a bit

I changed the three discrete string literals for "Category1",
"Category2", and "Category3" into an array of string literals, and I
adjusted the rest of the test to match.

I also changed up some variable names to better convey intent.

After debugging it, the profiler as is works as expected, and its tests
pass again.
fixed a frame index end condition

Previously, the profiler would not write the current frame index's data
to the output file.  Now it does, even if there is no data (that is, all
data is still the default value of 0).
added profile test for an incomplete frame

I added a test that checked that, if a new frame was added, then that
data, even if some or all of it was 0, will be written to the file.

I also refactored the tests a little bit by moving the "fine and dandy"
profile writing to a single function and having both my tests call it.
removed an unused field from internal struct