title: How to determine Scale of Line Graph based on Pixels/Height?
body: <p>I have a problem due to my terrible math abilities, that I cannot figure out how to scale a graph based on the maximum and minimum values so that the whole graph will fit onto the graph-area (400x420) without parts of it being off the screen (based on a given equation by user).</p>
  
  <p>Let's say I have this code, and it automatically draws squares and then the line graph based on these values. What is the formula (what do I multiply) to scale it so that it fits into the small graphing area?</p>
  
  <pre><code>vector&lt;int&gt; m_x;
  vector&lt;int&gt; m_y; // gets automatically filled by user equation or values
  
  int HeightInPixels = 420;// Graphing area size!!
  int WidthInPixels = 400;
  int best_max_y = GetMaxOfVector(m_y);
  int best_min_y = GetMinOfVector(m_y);
  m_row = 0;
  m_col = 0;
  
  y_magnitude = (HeightInPixels/(best_max_y+best_min_y)); // probably won't work
  x_magnitude = (WidthInPixels/(int)m_x.size());
  m_col = m_row = best_max_y; // number of vertical/horizontal lines to draw
  
  ////x_magnitude = (WidthInPixels/(int)m_x.size())/2; Doesn't work well
  ////y_magnitude = (HeightInPixels/(int)m_y.size())/2; Doesn't work well
  
  ready = true; // we have values, graph it
  Invalidate(); // uses WM_PAINT
  
  ////////////////////////////////////////////
  /// Construction of Graph layout on WM_PAINT, before painting line graph
  ///////////////////////////////////////////
  CPen pSilver(PS_SOLID, 1, RGB(150, 150, 150) ); // silver
      CPen pDarkSilver(PS_SOLID, 2, RGB(120, 120, 120) ); // dark silver
      dc.SelectObject( pSilver ); // silver color
      CPoint pt( 620, 620 ); // origin
      int left_side = 310;
      int top_side = 30;
      int bottom_side = 450;
      int right_side = 710; // create a rectangle border
      dc.Rectangle(left_side,top_side,right_side,bottom_side);
      int origin = 310;
      int xshift = 30;
      int yshift = 30;
      // draw scaled rows and columns
      for(int r = 1; r &lt;= colrow; r++){ // draw rows
          pt.x = left_side;
          pt.y = (ymagnitude)*r+top_side;
          dc.MoveTo( pt );
          pt.x = right_side;
          dc.LineTo( pt );
          for(int c = 1; c &lt;= colrow; c++){
              pt.x = left_side+c*(magnitude);
              pt.y = top_side;
              dc.MoveTo(pt);
              pt.y = bottom_side;
              dc.LineTo(pt);
          } // draw columns
      }
      // grab the center of the graph on x and y dimension
      int top_center = ((right_side-left_side)/2)+left_side;
      int bottom_center = ((bottom_side-top_side)/2)+top_side;
  </code></pre>