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

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

关于调度类(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
aic1228
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-12-11
得分:0 
2005-12-11 23:13
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 

版主你看看这个:
/*WIN-TC BGI 图形编程模板 正弦函数图 */
____________________________________________________________________________________________________________________
程序清单:
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
#include "math.h"
#include "stdio.h"
void initgr(void) /* BGI初始化 */
{int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd,&gm,"");
}
void main()
{int i,x,y;
initgr(); /* BGI初始化 */
cleardevice();
setcolor(2);
rectangle(0,0,460,200);
getch();
setcolor(BLUE);
line(0,100,460,100);
line(100,0,100,200);
for(i=100;i<460;i+=30)
putpixel(i,99,15);
for(i=100;i>=0;i-=30)
putpixel(i,99,15);
for(i=100;i<200;i+=30)
putpixel(99,i,15);
for(i=100;i>=0;i-=30)
putpixel(99,i,15);
getch();
setcolor(6);
circle(100,100,100);
getch();
for(i-=90;i<360;i++)
{x=i-1+100;
y=-100*sin((i-1)*(3.1415926/180))+100;
putpixel(x,y,14);
}
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
}


♂ 死后定当长眠,生前何须久睡。♀
2005-12-12 02:37
tdcwolf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-12-20
得分:0 
如果先用SIN/COS计算出各个点的坐标,再用PUTPIXEL()画点,再用LINETO()函数连结相邻的两个点,只要点的个数够多,图形的质量也就会越好,不妨试试!

2005-12-20 14:54
gree
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2005-11-2
得分:0 
3楼的怎么WINTC看只看到一个绿色方框呀?

2005-12-20 15:11



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




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

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