draw a sine wave using c?

Sudhir Sharma picture Sudhir Sharma · Jul 30, 2017 · Viewed 8.4k times · Source
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <dos.h>


int main() {

    int gd = DETECT, gm;

    int angle = 0;

    double x, y;

    initgraph(&gd, &gm, "C:\\TC\\BGI");


    line(0, getmaxy() / 2, getmaxx(), getmaxy() / 2);

    /* generate a sine wave */

    for(x = 0; x < getmaxx(); x+=3) {

        /* calculate y value given x */

        y = 50*sin(angle*3.141/180);

        y = getmaxy()/2 - y;

        /* color a pixel at the given position */

        putpixel(x, y, 15);

        delay(100);

        /* increment angle */

        angle+=5;

    }

    getch();

    /* deallocate memory allocated for graphics screen */

    closegraph();

    return 0;

}

This is the program. Why are we incrementing the angle and how this angle is relevant to graph? I changed the value of angle to 0 and the wave became a straight line. I want to know what is happening with this increment.

Answer

alk picture alk · Jul 30, 2017

Why are we incrementing the angle and how this angle is relevant to graph

The sine function takes an angle as argument, typically in radiant. The program implements the angle in degrees, so it's getting scaled to radiant the moment is gets passed to sin().

The sine function is periodical to (repeats itself after) 2*pi or 360 degrees:

+---------+---------+------------+
|       angle       | sin(angle) |
+---------+---------+            |
| Radiant | Degrees |            |
+---------+---------+------------+
|       0 |       0 |          0 |
+---------+---------+------------+
|  1/2*pi |      90 |          1 |
+---------+---------+------------+
|      pi |     180 |          0 |
+---------+---------+------------+
|  3/2*pi |     270 |         -1 | 
+---------+---------+------------+
|    2*pi |     360 |          0 |
+---------+---------+------------+
|  5/2*pi |     450 |          1 |
+---------+---------+------------+
|    3*pi |     540 |          0 |
+---------+---------+------------+
|  7/2*pi |     630 |         -1 | 
+---------+---------+------------+
|    4*pi |     720 |          0 |
+---------+---------+------------+
|     ... |     ... |        ... |

and so on ...

changed the value of angle to 0 and the wave became a straight line

The result of sin(0) is 0.

For the mathematical derivation you might like to have a look here.