[原创]正弦曲线
一个有关调度类的应用实例补充,该程序在屏幕上绘制一条三个周期的正弦曲线,每个周期的绘制由三个独立的时间片控制,因为每个时间片分配的时间相同,所以每个周期的绘制几乎同步进行,这样提高绘制速度,由于绘图方法不佳,所以图形在形成动画时抖动强烈,希望大家多提解决办法的意见和建议,谢谢。
#include
#include
#include
#include
#include
#include
#include
#include
#include "dispatch.h"
#define PI 3.14159265
#define inc(T) T/100.0
#define K 240
#define T_COUNT 3
static int x=1,y,A=120,flag=0;
static int color=WHITE;
class MyDispatch : public Dispatch {
public:
MyDispatch();
clock_msg OnClockSliceExecute(unsigned int id,msg_data *d);
};
MyDispatch::MyDispatch() {
register int i;
for(i=0;i
// Adjust delay time to update or get down the drawing speed
AddSlice(50);
}
clock_msg MyDispatch::OnClockSliceExecute(unsigned int id,msg_data *d) {
register float i;
if(bioskey(1)) {
int key=bioskey(0);
if(key==0x11b)
return msgTurnOff;
}
switch(id) {
case 1:
case 2:
case 3:
for(i=-PI;i<=PI;i+=inc(T_COUNT)) {
y=A*sin(i)+K;
putpixel(x,y,color);
x++;
}
if(id==T_COUNT) {
if(color==WHITE) {
color=BLACK;
x=1;
}
else {
color=WHITE;
if(flag==0){
if(A>-120) A-=2;
else flag=1;
}
else if(flag==1) {
if(A<120)
A+=2;
else flag=0;
}
x=1;
}
}
break;
}
return msgUser;
}
int main() {
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");
MyDispatch md;
md.StartDispatch();
closegraph();
printf("Sin wave, programmed by yuki\n");
printf("Have a nice day, bye bye!\n");
getch();
return 0;
}