## Computing a Picture

### The Equation of a Line

How to draw a line that is not horizontal is obviously the next question. To accomplish that, we need to apply some simple mathematics. One of the math lessons says that a line can be described by one linear function:

*f*(*x*) =*ax*+*b*

It is common to use horizontal axis of a graph for values of variable *x*, and
to use vertical axis for values of function *f(x)*.
But, since coordinates in computer graphics are commonly labeled
by names *x* and *y*,
we can rewrite the equation above as:

*y*=*ax*+*b*

In this equation, *x* and *y* are coordinates, or more
precisely, the mathematical variable *x* represents
the number of a column, and mathematical variable *y* represents
the number of a row. The mathematical variable *b* represents
the y-intercept, and the mathematical variable *a* represents the slope of the line.

We need to pick some values for *a* and *b* to draw a particular
line. Let us choose the value of 0.3 for the slope *a* and the value 0 for the
y-intercept *b*. The equation is then:

*y*= 0.3*x*+ 0

Let us draw a piece of the line that is determined by the equation above. Our piece will be a part of the line lying between columns numbered 50 and 500:

for (int x=50; x<500; x++) { int y = 0.3*x + 0; putpixel(surface, x, y, makecol(0,0,255) ); }

The complete program is given below:

#include <allegro.h> int main() { if (allegro_init()!=0) return 1; set_color_depth(32); if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0)!=0) return 2; BITMAP* surface = create_bitmap(SCREEN_W, SCREEN_H); install_keyboard(); clear_to_color(surface, makecol(255,255,255) ); for (int x=50; x<500; x++) { int y = 0.3*x; putpixel(surface, x, y, makecol(0,0,255) ); } blit(surface, screen, 0,0,0,0,SCREEN_W,SCREEN_H); while (!keypressed()) rest(20); return 0; } END_OF_MAIN()

The program produces the image on the right.

However, since the y-intercept *b* equals 0, should not the line
be directed towards the origin in the lower left corner of the image?
Also, the slope *a* is positive, so it would be expected that the line is rising up
instead of falling down. In short, this is not quite a line that would be
expected given the equation used.

How to explain this strange discrepancy?