标题:[原创]正弦曲线
取消只看楼主
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
 问题点数:0 回复次数:0 
[原创]正弦曲线

一个有关调度类的应用实例补充,该程序在屏幕上绘制一条三个周期的正弦曲线,每个周期的绘制由三个独立的时间片控制,因为每个时间片分配的时间相同,所以每个周期的绘制几乎同步进行,这样提高绘制速度,由于绘图方法不佳,所以图形在形成动画时抖动强烈,希望大家多提解决办法的意见和建议,谢谢。

关于调度类(dispatch.h),请参见以下连接(请将效率错误修正) http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=25726&page=1

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #include <dos.h> #include <bios.h> #include <math.h> #include <graphics.h>

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

搜索更多相关主题的帖子: 正弦曲线 周期 dispbbs 
2005-08-22 21:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-25803-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018151 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved