#include <dos.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include "main.h"
Rect win;
char pr_fm[80],str[80],KBinput[80];
int dir[2]={0,1};
int MaxX,MaxY;
char *par_name[parS]={"F","omiga","k1","k3","damp","ICx1","ICx2","upper value of CP","step of CP"};
char *set_name[SettingS]={"sin0cos1","transient cycles","steady cycles","wave cycles","Poincare cycles","Bifur Ampl","segments per cycle","control parameter"};
/* GRAPH.C */
/* NO.5 function */
clear_rec(int l,int t,int r,int b)
{
struct viewporttype v;/*定义的结构变量viewport*/
getviewsettings(&v);/*获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport*/
setviewport(l,t,r,b,0);/*设置图形视口函数
设定一个以(l,t)象元点为左上角, (r,b)象元为右下角的图形窗口, 其中l,t,r,b是相对于整个屏幕的坐标。图形窗口以外可以接触。不做裁剪 窗口调用 */
clearviewport();/* 清除现行图形窗口的内容。*/
setviewport(v.left,v.top,v.right,v.bottom,v.clip);/*viewporttype的结构*/
}
/* NO.6 function 在屏幕上指定位置以指定格式输出一个浮点数*/
print_value(int x,int y,DATA v,char *format)
{
int w,h;
char str[80];/*定义一个字符数组*/
struct textsettingstype ty;
gettextsettings(&ty);/*将当前字体、显示方向、字符大小和水平垂直方向文本排齐方式等设置值填入textsettingstype型结构里,从而可从中获取文本信息。*/
sprintf(str,format,v); /*将数字转化为字符串 format是调用Pr_Fm(*s) sprintf(pr_fm,"%s%s",s,PR_FM); */
w=textwidth(str);/*计算出字符串宽度的像素数,1个字符占8个像素数*/
h=textheight(str);/*计算出字符串高度的像素数,占8个像素数*/
y+=h;
if (ty.direction==HORIZ_DIR) /*判断字符串输出是否从左到右*/
clear_rec(x,y,x+w,y+h);
else clear_rec(x-h,y,x,y+w);
outtextxy(x,y,str);/*在(x,y)输出str字符串*/
}
/* NO.7 function 在屏幕上指定位置输出一个字符串 */
print_str(int x,int y,char *str)
{ int w,h;
struct textsettingstype ty;
gettextsettings(&ty);/*将当前字体、显示方向、字符大小和水平垂直方向文本排齐方式等设置值填入textsettingstype型结构里,从而可从中获取文本信息。*/
w=textwidth(str);
h=textheight(str);
y+=h;
if (ty.direction==HORIZ_DIR)
clear_rec(x,y,x+w,y+h);
else clear_rec(x-h,y,x,y+w);
outtextxy(x,y,str);/*在(x,y)输出str字符串*/
}
/* NO.8 function */
axis_name(Rect *rec,char *name,int axis,int dir,int w1_c0)/*在指定窗口边缘显示或擦除坐标轴名称,w1_c0为1显示,0擦除*/
{ int x,y,w;
if (!w1_c0) /*w1_c0=0或1 判断真假*/
setcolor(0); else setcolor(15);
if (!name) sprintf(pr_fm,"x%d",axis+1); /*name字符串,值为t(s),str,NULL,par_name[par]*/
else strcpy(pr_fm,name);/*字符串复制*/
w=textwidth(pr_fm);
settextstyle(0,dir,1);/*设置图形文本当前字体8*8点阵字型、文本显示方向(水平显示或垂直显示)以及字符大小。dir取0,1 0从做到右 1从底向上*/
if (dir) { x=rec->l-10; y=rec->cy-w/2; clear_rec(x-10,y,x,y+w);}
else if (rec->r-rec->l<100)
{ y=rec->b+4;
x=rec->cx-w/2;
clear_rec(x-2,y-2,x+w,y+8);}
else {y=rec->b+10;
x=rec->cx-w/2;
clear_rec(x-2,y-2,x+w,y+8);}
outtextxy(x,y,pr_fm);
if (dir) settextstyle(0,0,1);
if (!w1_c0) setcolor(15);
}
/* NO.9 function */
Init_rect(Rect *win) /*计算矩形窗口win的中心点图形坐标*/
{
win->cx=(win->l+win->r)/2;
win->cy=(win->t+win->b)/2;
}
/* NO.10 function */
char *Pr_Fm(char *s)
{
sprintf(pr_fm,"%s%s",s,PR_FM); /*输出字符串*/
return pr_fm;
}
/* ******NO.11 function */
int lever(DATA f)/*判断浮点数的浮点级*/
{
int i=0;
DATA a=1.0;
if (ABS(f)<1.0)
{
while(1.-ABS(f/a)>1.e-1)
{
i--;
a/=10.0;
}
}
else
{
while(ABS(f/a)-1.0>1.e-14)
{
i++;
a*=10.0;
}
}
return (i);
}
/* NO.12 function */
massage(char *str,int dx,int flag,int w1_c0)/*字符串信息str显示或擦除.flag=0,1分别在屏幕底部倒数第一,第二行显示.w1_c0赋1为显示 0为擦除 */
{
if (w1_c0)/*判断真值*/
{
if (flag<0) print_str(2+dx,win.b+8,str);
else if (!flag)
print_str(2+dx,win.b+18,str);
else print_str(2+dx,win.b+28,str);/*在(2+dx,win.b+8)输出str*/
}
else if (str)/*字符串str显示*/
{
setcolor(0);
if (flag<0)
print_str(2+dx,win.b+8,str);
else if (!flag)
print_str(2+dx,win.b+18,str);
else print_str(2+dx,win.b+28,str);/*在(2+dx,win.b+8)输出str*/
setcolor(7);
}
else
{
if (flag<0)
clear_rec(2+dx,win.b+16,MaxX-1,win.b+24);
else if (!flag)
clear_rec(2+dx,win.b+26,MaxX-1,win.b+34);
else clear_rec(2+dx,win.b+36,MaxX-1,win.b+44);
}
}
/* NO.13 function */
massage_value(DATA d,char *fm,int dx,int flag,int w1_c0)/*浮点信息d显示或擦除.flag=0,1分别在屏幕底部倒数第一,第二显示.we_c0赋1为显示,0为擦除*/
{
if (w1_c0)
{
if (!flag)
print_value(2+dx,win.b+18,d,Pr_Fm(fm));
else
print_value(2+dx,win.b+28,d,Pr_Fm(fm));
}
else if (fm)
{
setcolor(0);
if (!flag)
print_value(2+dx,win.b+18,d,Pr_Fm(fm));
else
print_value(2+dx,win.b+28,d,Pr_Fm(fm));
setcolor(7);
}
else
{
if (!flag)
clear_rec(2+dx,win.b+17,MaxX-1,win.b+27);
else clear_rec(2+dx,win.b+27,MaxX-1,win.b+37);
}
}
/* ******NO.14 function */
getstr(int K,int lim)/*从键盘获取字符并顺次存入KBinput中.K为字符ASCAII码,lim为最多输入的字符数*/
{ static int i=0; int j;
if (K>=14&&K<=126)
{ KBinput[i]=K;
if (i>lim)
{ massage("The buffer is full!",win.l+50,1,1);i--;}
i++; KBinput[i]=0;
massage( KBinput,win.l+50,1,1);
}
switch (K)
{ case 8:massage( KBinput,win.l+50,1,0);
if (--i<0)
{i=0;break;}
KBinput[i]=0; massage( KBinput,win.l+50,1,1); break;
case 13:case F1:case F2:
if(i&&i<lim)
massage(NULL,0,1,0);
else if (!i)
KBinput[0]=0;
i=0;
break;
}
}
/* ******NO.15 function */
Getstring(char *str)/*调用函数gestr()从键盘获取字符串于KBinput中 str为提示信息*/
{
int K;
putch(7);
massage(NULL,0,0,0);
massage(str,0,0,1);
do
{
if (kbhit())
{
K=getch();
if (!K)
K=getch()+256;
getstr(K,20);
}
if (K==ENT||K==F1||K==F2)
break;/*F1 F2 ENT停止*/
}
while(1);
}
/* NO.16 function */
Init_fig(DATA xL,DATA xU,DATA yL,DATA yU,Rect *wv,int flag)
/*初始化图形显示窗口wv xL,xU,yL,yU,分别为水平,铅锤轴所代表*/
/*物理量的上,下限.flag选择窗口:flag=0为波形窗口1;flag=1为波形*/
/*窗口2;flag>1为分岔图窗口.*/
{
*wv=win;
if (!flag)
wv->b=wv->t+(wv->b-wv->t)/2-15;
else if (flag==1)
wv->t=wv->t+(wv->b-wv->t)/2+15;
else
{
wv->l=70;
wv->t=flag;
}
Init_rect(wv);
wv->region[0][0]=xL;
wv->region[0][1]=xU;
wv->region[1][0]=yL;
wv->region[1][1]=yU;
wv->factor[0]=(wv->r-wv->l)/(wv->region[0][1]-wv->region[0][0]);
wv->factor[1]=(wv->b-wv->t)/(wv->region[1][1]-wv->region[1][0]);
}
/* NO.17 function */
int plot_point(DATA *x,Rect *win,int p)/*在win窗口所代表的相空间(dir[0],dir[1])平面上以颜色p画由状态向量x定义的相点.p=0为擦除点,p=15画小十字,p<0画小圆圈*/
{ int xg,yg; p=p%16;
xg=win->l+(x[dir[0]]-win->region[dir[0]][0])*win->factor[dir[0]];
yg=win->b-(x[dir[1]]-win->region[dir[1]][0])*win->factor[dir[1]];
if (xg<win->l)xg=win->l+1; if (xg>win->r)xg=win->r-1;
if (yg<win->t)yg=win->t+1; if (yg>win->b)yg=win->b-1;
if (p>=0)
{ putpixel(xg,yg,p);
if (p==15) /*画小十字*/
{ putpixel(xg-1,yg,10); putpixel(xg+1,yg,10);
putpixel(xg,yg-1,10); putpixel(xg,yg+1,10); }
}
else if (p<0)/*画小圆圈*/
{ int d=0.1*MIN(win->factor[dir[0]],win->factor[dir[1]])/2;
setcolor(9+p);
circle(xg,y
hundun.rar_混沌_混沌映射_混沌系统特性
版权申诉
80 浏览量
2022-09-24
12:35:35
上传
评论
收藏 8KB RAR 举报
林当时
- 粉丝: 100
- 资源: 1万+
最新资源
- 基于HTML的旅游网页制作源码设计.zip
- 基于HTML的旅游网页制作源码设计.zip
- 大数据实战Demo系统-MaxCompute数据仓库数据转换实践(PDF格式).rar
- 六一儿童节代码祝福六一儿童节代码祝福六一儿童节代码祝福.txt
- sql语句sql语句sql语句sql语句.txt
- ubuntu20.04安装教程ubuntu20.04安装教程.txt
- imgcache.0
- 高分项目基于faster-rcnn知识蒸馏的目标检测模型增量深度学习方法源码.zip
- 基于python和图数据库neo4j构建电影应用(高分毕设项目)
- 基于yolov5+SAHI模块完成超分辨率以及小目标检测演示源码+运行说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈