用c画一个正弦波?

时间:2017-07-30 16:41:45

标签: c graphics bgi

#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;

}

这是该计划。为什么我们增加角度以及该角度与图形的关系如何?我将角度值更改为0,波形变为直线。我想知道这个增量发生了什么。

2 个答案:

答案 0 :(得分:2)

  

为什么我们增加角度以及此角度与图形的关系

sine function采用角度作为参数,通常是辐射。该程序以度为单位实现角度,因此当它被传递到+---------+---------+------------+ | 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 ... 时,它会被缩放到辐射状态。

正弦函数是周期性的(在2 * pi或360度之后重复):

sin(0)
  

将角度值更改为0,波形变为直线

0的结果是{{1}}。

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

答案 1 :(得分:-1)

正弦函数是y = sin(x),其中x是你的角度。如果你不改变角度,y的值保持不变,你得到一条直线。 在你给出的代码中,变量x是无用的。你的可变角度是工作人员。此外,我很确定你不需要将你的角度转换为辐射,因为sin(x)会给你一个介于-1和1之间的实数。所以你可以写一下

double y,x = 0; ... y = sin(x); x+= 0.1;