| (1) | _____ | 
A 2D point in Homogeneous coordinates has how many elements? | 
  | 
||
| (2) | _____ | 
A 2D rotation matrix in Cartesian coordinates has how many elements? | 
  | 
\(\bs{T} = \left[ \begin{array}{r r} 0 & -1 \\ 1 & 0\end{array}\right] \)
\(\bs{S} = \left[ \begin{array}{r r r r} 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 1\end{array}\right] \)
\( \bs{R} = \left[ \begin{array}{r r} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] \)
and
\( \bs{S} = \left[ \begin{array}{r r} \alpha & 0 \\ 0 & \beta \end{array}\right] \)drawLine() method in the
    Rasterizer2D class (that uses the classes/structs
    from the programming assignments):
    
void Rasterizer2D::drawLine(const Matrix<2,1>& p, const Matrix<2,1>& q,
                            const Color& color)
{
   double    alpha, m;
   if (q.get(0,0) == p.get(0,0))
       m = INFINITY;
   else
      m = (q.get(1,0)-p.get(1,0))/(q.get(0,0)-p.get(0,0));
   if ((m >= -1.0) && (m <= 1.0))
   {
      double   y;          
      int      xEnd, xStart;
      if (p.get(0,0) <= q.get(0,0))
      {
         xStart = (int)round(p.get(0,0)); 
         xEnd   = (int)round(q.get(0,0)); 
      }
      else
      {
         xStart = (int)round(q.get(0,0)); 
         xEnd   = (int)round(p.get(0,0)); 
      }
      
      
      for (int x=xStart; x<=xEnd; x++)
      {
         if (q.get(0,0) == p.get(0,0))
         {
            y = p.get(1,0);                
         }
         else
         {
            alpha = (x - p.get(0,0))/(q.get(0,0) - p.get(0,0));
            y = p.get(1,0) + alpha * (q.get(1,0) - p.get(1,0));          
         }
         
         fb->setPixel(x, (int)round(y), color);          
      }
   }
   else
   {
      double   x;          
      int      yEnd, yStart;
       
      if (p.get(1,0) <= q.get(1,0))
      {
         yStart = (int)round(p.get(1,0)); 
         yEnd   = (int)round(q.get(1,0)); 
      }
      else
      {
         yStart = (int)round(q.get(1,0)); 
         yEnd   = (int)round(p.get(1,0)); 
      }
          
    
      for (int y=yStart; y<=yEnd; y++)
      {
         if (q.get(1,0) == p.get(1,0))
         {
            x = p.get(0,0);                
         }
         else
         {
            alpha = (y - p.get(1,0))/(q.get(1,0) - p.get(1,0));
            x = p.get(0,0) + alpha * (q.get(0,0) - p.get(0,0));          
         }
             
         fb->setPixel((int)round(x), y, color);          
      }
   }
}
    
show (in the grid below) what will be drawn if this method is called as follows:
    Color       red = {255,0,0};
    Matrix<2,1> p = { 0, 0};
    Matrix<2,1> q = {10, 3};
    rasterizer->drawLine(red, p, q);
    
You must assume that the lower-left pixel is the origin [i.e., (0,0)] and that the coordinates increase from left-to-right and bottom-to-top.
onLine() that is passed
    a double containing the slope of the line,
    a double containing the vertical intercept of the
    line, and a Matrix<2,1> containing
    a point. This function must return true 
    of the point is on the line and false otherwise.
    sameSide() that is passed
    two points defining a line and two test points. The method must
    return true if the two points are on the same side
    of the line and false otherwise.
    sameSide() function above, write a function that
    determines if a given point is inside a convex polygon.
    Copyright 2014