c++能绘制函数图吗?
谁能帮我编两个用c++绘制函数图的程序,要带坐标轴和坐标刻度的:1、Y=1.10455+0.1755X*X(X的平方)2、Y=1.10455/X+0.1755X...
谁能帮我编两个用c++绘制函数图的程序,要带坐标轴和坐标刻度的:
1、Y=1.10455+0.1755X*X(X的平方)
2、Y=1.10455/X+0.1755X 展开
1、Y=1.10455+0.1755X*X(X的平方)
2、Y=1.10455/X+0.1755X 展开
2013-09-16
展开全部
2.2 完善我们的画点函数
就我们上小节提到的几个问题,其实可以帮助我们从现在开始建立比较宏观的概念在架构层面来考虑事情。虽然目前我们做的例子很简单,但他也充分展现了我们应该以何种方式和思维来安排设计我们的程序。(我并不是架构方面的高手,我很想自己有质的提高可我也在努力中)
由于要考虑我们的Dot()函数能自行排除输入坐标无效的功能,我们必须再返回到第一章的内容,对我们前面的代码稍做改动。
1. 我们要纪录下当前分辨率,以便在需要的时候使用他们
2.增添必要的图形包初始化,和结束函数使其在架构上趋向完整
代码:查看Chap02-2
INT16 COLS, ROWS; /* 记录当前图形模式分辨率 */
INT16 OldSMode; /* 纪录原始模式 */
Void InitSVGA(); /* 图形初始化 */
void InitSVGA()
{
OldSMode = GetSVGAMode();
}
Void ExitSVGA(); /* 回到原来模式 */
Void ExitSVGA()
{
SetSVGAMode(OldSMode);
}
OK,有了以上改动,我们再来初步改造我们的Dot()函数,使其更能贴近实用。
代码:查看Chap02-2
void Dot(INT16 x, INT16 y, UINT8 color); /* 画点函数 */
void Dot(INT16 x, INT16 y, UINT8 color)
{
if (x > -1 && x < COLS && y > -1 && y < ROWS)
VideoBuffer[y* COLS +x] = color;
}
写到这里,我们的Dot()函数初步改造完毕。您可以将2.1中的Chap02-main2中写一个在定义范围之外的坐标,你肯定可以发现点画乱了。而你再实验一下以上的Chap02-2-main1发现他完美无缺,不会超出我们分辨率范围也不会导致画屏幕。呵呵,小小的成就感犹然而生。
代码:查看Chap02-2-main1
#include "GrTry.c"
int main()
{
INT16 i;
InitSVGA(); /* 图形初始化开始 */
SetSVGAMode(TRY320X200X256); /* 实现图形模式 */
for (i = 0; i < 256; i++) /* 调用Dot函数画点 */
Dot(i, i, i);
getch();
ExitSVGA(); /* 恢复原始的模式 */
}
效果如图2.3:
图2.3 修改后的画点函数效果
接下来我们要做一点更具挑战性的实验。我们不是还不确定我们在其他高一点的分辨率下我们的函数是否会奏效?下面我们就来尝试一下,我们就先试验640X480 - 256色(8位色深)模式。
代码:查看Chap02-2-main2
#include "GrTry.c"
int main()
{
INT16 i;
InitSVGA(); /* 图形初始化开始 */
SetSVGAMode(TRY640X480X256); /* 实现图形模式 */
for (i = 0; i < 256; i++) /* 调用Dot函数画点 */
Dot(i, i, i);
getch();
ExitSVGA(); /* 恢复原始的模式 */
}
效果如图2.4:
图2.4 高分辨率效果
这下惨了吧,出错了。按我们程序的代码,程序应该打印一条256个像素的斜线,也就是说上图中右边两段按道理应该接在最左边线段之下成一条直线的。
原来我们的机器在显示构造上是分页的。什么意思呢?就是说,我们在对VideoBuffer写数据的时候还要考虑当前坐标在哪个页上,还要设置页面才能保证显示的正确。因为在实模式下,CPU的寻扯能力只有1M,也就是不管你有多少物理内存,它仅仅只能使用最开始的那1M(我们管这1M内存叫常规内存)。而且这1M也不是从头到尾能顺顺当当的访问,还要通过所谓的段地址+偏移地址机制才能够访问完全,而一个段的段限是64KB这也是在TC下一个数组最大只能有65535个字节的原因,超过这个数编译器便报错——这些东西在微机原理课本和汇编语言课本里是有的,我就不展开来说了。而像1024X768这样的高分辨率,8位色深时整个屏幕在显存中会占到768KB那么大,16位色深下则翻一番达到1.5MB,32位更是达到了3MB。这也是一般图形操作系统对显存的最低要求是4M的原因,否则根本不能支持高分辨率了。那这样一来,16位实模式下岂不是不能对显存访问了,CPU的寻址能力才1M而已,段限则更只有64KB,刚刚说的显存都已经好几MB了,怎么办呢?VESA的VBE标准里就订制了两种寻址模式,一种是应用于16位实模式的,叫页面映射模式(也就是我们常说的换页),这个很像EMS扩充内存的概念,既然CPU只能访问1M,每个数据段只能是64KB,那我们就将1M之外更多的内存映射到1M之内的这块空间来嘛,一般就以64KB为单位,你换到第0页,我就将显存的最开始那64KB映射到内存的0xA000:0000(这个地址在常规的1M内存之内,
文章出处:http://www.diybl.com/course/3_program/c++/cppsl/2008628/128892.html
你自己代上数字啦
就我们上小节提到的几个问题,其实可以帮助我们从现在开始建立比较宏观的概念在架构层面来考虑事情。虽然目前我们做的例子很简单,但他也充分展现了我们应该以何种方式和思维来安排设计我们的程序。(我并不是架构方面的高手,我很想自己有质的提高可我也在努力中)
由于要考虑我们的Dot()函数能自行排除输入坐标无效的功能,我们必须再返回到第一章的内容,对我们前面的代码稍做改动。
1. 我们要纪录下当前分辨率,以便在需要的时候使用他们
2.增添必要的图形包初始化,和结束函数使其在架构上趋向完整
代码:查看Chap02-2
INT16 COLS, ROWS; /* 记录当前图形模式分辨率 */
INT16 OldSMode; /* 纪录原始模式 */
Void InitSVGA(); /* 图形初始化 */
void InitSVGA()
{
OldSMode = GetSVGAMode();
}
Void ExitSVGA(); /* 回到原来模式 */
Void ExitSVGA()
{
SetSVGAMode(OldSMode);
}
OK,有了以上改动,我们再来初步改造我们的Dot()函数,使其更能贴近实用。
代码:查看Chap02-2
void Dot(INT16 x, INT16 y, UINT8 color); /* 画点函数 */
void Dot(INT16 x, INT16 y, UINT8 color)
{
if (x > -1 && x < COLS && y > -1 && y < ROWS)
VideoBuffer[y* COLS +x] = color;
}
写到这里,我们的Dot()函数初步改造完毕。您可以将2.1中的Chap02-main2中写一个在定义范围之外的坐标,你肯定可以发现点画乱了。而你再实验一下以上的Chap02-2-main1发现他完美无缺,不会超出我们分辨率范围也不会导致画屏幕。呵呵,小小的成就感犹然而生。
代码:查看Chap02-2-main1
#include "GrTry.c"
int main()
{
INT16 i;
InitSVGA(); /* 图形初始化开始 */
SetSVGAMode(TRY320X200X256); /* 实现图形模式 */
for (i = 0; i < 256; i++) /* 调用Dot函数画点 */
Dot(i, i, i);
getch();
ExitSVGA(); /* 恢复原始的模式 */
}
效果如图2.3:
图2.3 修改后的画点函数效果
接下来我们要做一点更具挑战性的实验。我们不是还不确定我们在其他高一点的分辨率下我们的函数是否会奏效?下面我们就来尝试一下,我们就先试验640X480 - 256色(8位色深)模式。
代码:查看Chap02-2-main2
#include "GrTry.c"
int main()
{
INT16 i;
InitSVGA(); /* 图形初始化开始 */
SetSVGAMode(TRY640X480X256); /* 实现图形模式 */
for (i = 0; i < 256; i++) /* 调用Dot函数画点 */
Dot(i, i, i);
getch();
ExitSVGA(); /* 恢复原始的模式 */
}
效果如图2.4:
图2.4 高分辨率效果
这下惨了吧,出错了。按我们程序的代码,程序应该打印一条256个像素的斜线,也就是说上图中右边两段按道理应该接在最左边线段之下成一条直线的。
原来我们的机器在显示构造上是分页的。什么意思呢?就是说,我们在对VideoBuffer写数据的时候还要考虑当前坐标在哪个页上,还要设置页面才能保证显示的正确。因为在实模式下,CPU的寻扯能力只有1M,也就是不管你有多少物理内存,它仅仅只能使用最开始的那1M(我们管这1M内存叫常规内存)。而且这1M也不是从头到尾能顺顺当当的访问,还要通过所谓的段地址+偏移地址机制才能够访问完全,而一个段的段限是64KB这也是在TC下一个数组最大只能有65535个字节的原因,超过这个数编译器便报错——这些东西在微机原理课本和汇编语言课本里是有的,我就不展开来说了。而像1024X768这样的高分辨率,8位色深时整个屏幕在显存中会占到768KB那么大,16位色深下则翻一番达到1.5MB,32位更是达到了3MB。这也是一般图形操作系统对显存的最低要求是4M的原因,否则根本不能支持高分辨率了。那这样一来,16位实模式下岂不是不能对显存访问了,CPU的寻址能力才1M而已,段限则更只有64KB,刚刚说的显存都已经好几MB了,怎么办呢?VESA的VBE标准里就订制了两种寻址模式,一种是应用于16位实模式的,叫页面映射模式(也就是我们常说的换页),这个很像EMS扩充内存的概念,既然CPU只能访问1M,每个数据段只能是64KB,那我们就将1M之外更多的内存映射到1M之内的这块空间来嘛,一般就以64KB为单位,你换到第0页,我就将显存的最开始那64KB映射到内存的0xA000:0000(这个地址在常规的1M内存之内,
文章出处:http://www.diybl.com/course/3_program/c++/cppsl/2008628/128892.html
你自己代上数字啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询