用户ID: 密码: 验证:

登 录

注 册 取回密码

中山教育

中山国际网

中国教育在线

时代财富科技公司 FortuneAge Technology Co., Ltd. 校园博客客服网站(新)

我的资料

midpoint

博客信息

积分:2028
等级:4级 lv 4
日志总数:479
发表评论总数:24 ( 查看)
获得评论总数:39
发表留言总数:0
所属学校:三鑫
收藏本站:

最新公告

最新相册

我的日历

最新评论

最新留言

[全部留言] [发表留言]
SOGO学术论文网(http://www.sogoart....
马老师,你的博客,两个字,很好,我,一个字,顶!我常上你这...
中 国 教 育 学 会 函 件 ...
马老师,您好! 您的博客内容很丰富、知识性也很...
--书宏
马老师,谢谢您关于电脑学习的推荐!望不吝指教噢

RSS


首页 -> 信息学竞赛->用pascal绘图
用pascal绘图

既然小杨游客提到这个问题,就专门说一下:
TP7的BGI作图,最基本要有两个外部文件:
Egavga.bgi
Graph.tpu
最好把这两个文件复制在当前目录(当前目录是指你用主菜单file----Change dir... 看到的目录),这样可能保证能够启动图形系统,不会出错。
同时,最好能和CRT单元一起用,CRT单元有很多有用的函数。

基本形式如下:

Program Myprog;
uses Graph;
var
  gd,gm,ecode: Integer;
begin
     gd := Detect;
     InitGraph(gd, gm,' ');              {初始化图形系统}
     ecode:=GraphResult;
     if ecode<>grOK then
          begin
             Writeln('Graphics error:', GraphErrorMsg(ecode));
             exit;
          end;

     {绘图函数及计算部分}
    readln;
     closegraph;                {关闭作图系统}
end.

InitGraph(gd, gm,' '); 启动作图系统时,如果出错,上面有编打出错的原因。比如:它当前目录下,找不到Egavga.bgi这个文件。
当然,你也可以指定路径给它,比如:InitGraph(gd, gm,' d:\tp7\bgi');如果指定作图模式是Detect(自动探测,一般返回640*480*16色模式)
最后readln也很重要。不然,图形一闪,程序就结束了,看不清楚。

作图函数有很多,我只能介绍几个,其余的你看TP7的联机帮助。

ClearDevice    清屏
PutPixel(X, Y: Integer; Pixel: Word);      描点。x,y是坐标,piexl是颜色,颜色都可以用整形代号 0-15
Line(x1, y1, x2, y2: Integer);            画 (x1,y1)到(x2,y2)的直线
Circle(X,Y: Integer; Radius: Word);    画圆,圆心 (x,y) ,半径 Radius
Ellipse(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius:Word);
画椭圆,中心(x,y), 起始角度StAngle, 终止角EndAngle,长短轴半径XRadius, YRadius
Sector(x, y: Integer; StAngle,EndAngle, XRadius, YRadius: Word);  扇形,类Ellipse
SetFillStyle(Pattern: Word; Color: Word);设填充模式,及填充的颜色。
SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word); 设定线条型的样子,粗细
OutTextXY(X,Y: Integer; TextString: string);   在(x,y)输出文本。 (作图下不要用write)
SetBkColor(c),SetColor(c)   设定背景和前景颜色。
RestoreCrtMode;  切换到我们常用的文本模式。
SetGraphMode(GetGraphMode); 切换到作图方式, 不能在closegraph关闭图形之后用。

没办法再打,你自己看看帮助吧。下面是简单的例子:
(注意:因为我用的是fp,没装tp,就在fp下面测试一下吧,一定要先设置一下图像单元所在的位置:选择 options-->Directories,在units下面输入graph.ppu所在的路径,如:D:\FPC\2.0.4\units\i386-win32\graph\,这样运行的时候就不会提示找不到图形库单元了)

Program Myprog;
uses Graph;
var
  gd,gm,ecode: Integer;
begin
     gd := Detect;
     InitGraph(gd, gm,' ');
     ecode:=GraphResult;
     if ecode<>grOK then
          begin
             Writeln('Graphics error:', GraphErrorMsg(ecode));
             exit;
          end;
     setcolor(3);
     outtextxy(10,450,'Press Enter..');
     setcolor(6);
     SetLineStyle(0,0,1); circle(320,240,100);  readln;
     line(0,0,639,479); readln;
     SetFillStyle(1,1);
     sector(300,200,0,90,90,80);
     readln;
     closegraph;
end.
 
 
 
 
下面有个比较完整的教程可以看一下:
 Turbo Pascal图形编程教程
  Pascal是一款有很强图形功能的开发工具,它可以编制各种图形窗口,并且听说还支持鼠标.但是时过境迁,

在vb,vc一统天下的今天,关于Pascal图形操作的书已经像古董一样难于寻找了,我现在将Tp 7.0的Help文件

中的一些有关图形操作的过程与函数整理了一下,并自己写了一些例子,加入了一些自己的看法,便得到了这篇

教程.其中如有错误,望各位不吝赐教。阅读之前希望大家做好准备,比如:找一些食品放在跟前,因为你可能

因为钻研一个函数而耗费大量的时间,还有你可能因为初始化无法完成而大动肝火。

第一章 使用Pascal进行图形操作前的准备
  
  在 Turbo Pascal 中有一个 CRT 单元及一个 GRAPH 单元,简单的说 crt 单元是为了实现

字符的显示与处理,另外的那个称为 GRAPH 单元是专门用来处理图形的。我们看到的有关图形的

程序往往都要用到。所以若是要在 Turbo Pascal 中实现图形操作,就必须要调用 CRT 单元及

GRAPH 单元。那么怎么样来调用 CRT 及 GRAPH 单元呢?现在线来介绍一下单元调用语句:USES
USES的语法:
USES 单元表识符,……,单元表识符;
说明:
扩展名为*.TPW是Windows下的单元文件,*.TPU是DOS下的单元文件。
位置:变量说明var之前。

讲到这里,我还是要顺便提一下什么是单元?是这样的:我们在编程序的时候,要用到 procedure

或者 function ,中文名称一个是过程另一个是函数。做不同的程序时,往往要用到一些相同的过程

或者相同的函数。如果统统放到程序中,程序会硕大无比,比例与调试与编译,并且在过去

“惜kb如金”的年代里,这样的程序也很浪费。于是,简单的讲,人们把它们做成“包”--我

们称之为单元。一来,免去很多重复的痛苦,大家共享代码也很简单,另外,很多不愿意让别人看

到源程序的人也很乐于如此----这只是我的杜撰。生产 pascal 语言的公司也提供一些做好的

单元,放在安装盘上方便实用。 crt ,graph 即使如此,还有 dos ,system 等等。

第二章 Pascal图形模式的初始化及退出

1.初始化

Pascal的图形操作在使用之前必须先进行初始化。如果说你编写图形程序中出现问题,是有八九十卡

在这里了。 这也是非常令我头疼的问题。 用过程 initgraph(GraphDriver,GraphMode,PathToDriver)

其中 GraphDriver , GraphMode 为整形变量, PathToDriver为字符串变量, GraphDriver为图形驱动器,

GraphMode为图形模式 , PathToDriver指定的路径名中建筑图形驱动程序(以.BGI为后缀)。initgraph使

用方法见下例:

program t001 (input,output);

uses crt,graph;

var

gd:gm:integer; {定义GraphDriver,GraphMode变量}

begin

gd:=detect;

initgraph(gd,gm,''); {调用initgraph过程,PathToDriver缺省则表示在当前目录中寻找

《-------这个很重要,一般也可以写成 initgraph(gd,gm,'c:\tp\bgi'); 当然

如果你是如此安装的话。}

bar(100,100,200,200); {画一个以(100,100),(200,200)为顶点的矩形,这是一个标准过程,

你在后面还会看到一个名为bar3d的东东,那个是画立体矩形的}

delay(1000); {将此图形保留一秒,10000就是10秒,依此类推}

end.

2.退出

Closegraph过程
功能:退出图形模式.

在图形模式下如果使用 write 等等文本输出可能会出问题---比如无法看到等等。好像还可能引

起显示上的问题,反正养成一个好习惯也没什么不好的。这里有一个技巧,当你发现无论如何调整都无

法显示图形时,你可以调用自带的例子,用来测试,看看是否是程序本身的问题。

注意,这里有一个不属于图形的,但是非常容易遇到的问题。前面我们说过,在图形编程使用 graph 单

元的时候,我们也常常会使用crt单元,这就有一个问题:crt 单元在主频高的机器上无法正常运行。会出

现 200 号错误!!!请下载补丁,在我们的网站上就有。还有一种情况,就是出了问题没有提示!表现是

运行程序什么反应也没有。如果你出现这种情况,首先检查程序,如果没有问题,非常有可能使这种情况,

也请下载补丁!据报告奔腾180以上的机器具都不同程度存在这种问题!

第三章 基本几何图形的绘制

画直线:
1.Line过程
描述:procedure Line(x1, y1, x2, y2: Integer);两点确定一直线.够简单吧!
2.Lineto过程
描述:procedure LineTo(X, Y: Integer);从当前点项目标点(x,y)作直线.

画圆:
1.Circle过程
功能:以(X,Y)为圆心、Radius为半画一圆。
描述:procedure Circle(X,Y:Integer;Radius:Word);
示例:Circle(100,100,200) {画一个以(100,100)为圆心,200为半径的圆}

画椭圆:
1. Ellipse过程
功能:画一个以(X,Y)为中心,XRadius和YRadius为半轴,StAngle和EndAngle为始角和终角的椭圆弧。
描述:procedure Ellipse(X,Y:Integer;StAngle,EndAngle:Word;XRadius,YRadius:Word);
说明:角度沿逆时针方向,单位是度。0度指向东。

画圆弧:
1.Arc过程
功能: 画一个以(X,Y)为中心,Radius为半径,StAngle和EndAngle为始角和终角 的圆弧。
描述: procedure Arc(X,Y : Integer; StAngle,EndAngle,Radius:Word);
说明: 角度沿逆时针方向,单位是度。0度指向东。
示例: Arc(100,100,0,90,50) {画出第一卦限1/4圆,半径50,圆心(100,100)}

画矩形:
1.Bar过程
功能:画一个以(x1,y1),(x2,y2)为两个对角顶点的矩形。
描述:procedure Bar(x1,y1,x2,y2:integer);
示例:Bar(100,100,200,200) {画一个以(100,100),(200,200)为对角顶点的矩形}

2.Bar3d过程
功能:画一个长方体.
描述:procedure Bar3d(x1,y1,x2,y2:integer,depth:word,top:boolean); {x1,x2,y1,y2同上,为长方体的厚度 ,top为是否画出顶面.}
线形,颜色,及填充设置

线形设置:
1.setlinestyle过程
功能:设置线形,及线宽.
描述:procedure SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);
说明:linestyle(线形)一共有三种.代号0,1,2;线形如下图:
Thichness(线宽)有两种.代号1,3.1为普通线.3为宽线.



2.GetLineSettings过程
功能:返回当前设置的线型设置信息.
描述:procedure GetLineSettings(var LineInfo: LineSettingsType);{参见LineSettingsType类型}

3.LineSettingsType类型
描述:LineSettingsType = record
    LineStyle : Word; {线形}
    Pattern : Word; {模式}
    Thickness : Word; {线宽}
   end;
此类型记录了一种线形的信息.
线形,颜色及线形设置

颜色设置:
在pascal中共有16种颜色可以使用.

1.setcolor过程
描述: procedure SetColor(Color: Word);
设置线的颜色.颜色代码如上图.

2.GetColor函数
功能:返回最后一次作图时的颜色值
描述:function GetColor:word
示例:color:=GetColor; {color:word}

3.GetMaxColor函数
功能:返回系统可用的最大颜色数.
描述:num:=GetMaxColor; {将最大颜色数存到num变量中}
填充设置:

1.SetFillStyle过程
功能 设置填充模式和颜色。
描述 procedure SetFillStyle(Pattern:Word;Color:Word);
说明 设置用于Bar,Bar3D的填充模式和颜色。可生系列填充模式。缺省模式是实心点,缺省模式
是实心点,缺省颜色是调色板中最大颜色序号值。如果传递给SetFillStyle的输入参数无效,
GraphResult将返回值grError,且当前填充参数不改变。

填充设置如下图:


2.FillSettingsType 类型
描述:FillSettingsType=record
Pattern:word;
Color :word;
end;
此类型记录了一种填充模式的信息.

这些知识都很简单,更多的可以在编辑环境中按下f1观看帮助文档。

网友评论

共 0 页,0 条记录  

用户名:
密码:
您的评论:
正在载入编辑器...
请输入验证码:


发 表 评 论

马军-中山教师家园