Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to determine Scale of Line Graph based on Pixels/Height?
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload