#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,波形变为直线。我想知道这个增量发生了什么。
答案 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;