计算机图形学源程序
河北省对口招生考试计算机专业综合模拟卷含答案

《河北省对口招生考试计算机专业综合模拟卷》一、单项选择题(每题2分,共30分)1.计算机内部采用的数制是()A.十进制B.二进制C.八进制D.十六进制2.在计算机中,存储容量的基本单位是()A.位(bit)B.字节(Byte)C.字(Word)D.双字(Double Word)3.以下属于输入设备的是()A.显示器B.打印机C.键盘D.音箱4.计算机操作系统的主要功能是()A.实现软、硬件转换B.管理系统所有的软、硬件资源C.把源程序转换为目标程序D.进行数据处理5.Windows操作系统中,删除文件或文件夹的快捷键是()A.Ctrl+CB.Ctrl+VC.Ctrl+XD.Delete6.在Word文档编辑中,要设置字体为加粗,可使用的快捷键是()A.Ctrl+AB.Ctrl+BC.Ctrl+ID.Ctrl+U7.在Excel工作表中,若要计算某列数据的平均值,可使用的函数是()A.SUMB.AVERAGEC.MAXD.MIN8.以下关于计算机网络的描述,正确的是()A.计算机网络就是将分散的多台计算机用通信线路连接起来B.计算机网络的主要功能是数据通信和资源共享C.计算机网络中的传输介质只有双绞线和光纤D.计算机网络按覆盖范围可分为局域网、城域网和广域网,其中广域网覆盖范围最小9.IP地址是由()位二进制数组成的。
A.8B.16C.32D.6410.在数据库管理系统中,用于定义和管理数据库结构的语言是()A.数据定义语言(DDL)B.数据操纵语言(DML)C.数据控制语言(DCL)D.以上都不是11.以下哪种编程语言是面向对象的编程语言()A.C语言B.Java语言C.汇编语言D.Fortran语言12.计算机病毒是一种()A.微生物B.程序C.硬件故障D.数据文件13.在多媒体技术中,音频文件的常见格式有()A.JPEGB.MP3C.AVID.PSD14.以下关于算法的描述,正确的是()A.算法就是程序代码B.算法的执行步骤必须是有限的C.算法不需要有明确的输入和输出D.算法的好坏与时间复杂度和空间复杂度无关15.在计算机图形学中,以下哪种图形表示方法是用数学公式来描述图形的()A.矢量图形B.位图图形C.三维图形D.二维图形二、多项选择题(每题3分,共30分)1.计算机硬件系统由以下哪些部分组成()A.运算器B.控制器C.存储器D.输入设备E.输出设备2.以下属于Windows操作系统特点的有()A.多任务处理B.图形用户界面C.虚拟内存管理D.网络支持E.单用户单任务3.在Word文档编辑中,可以进行的操作有()A.文字录入B.段落排版C.插入图片D.制作表格E.设置页眉页脚4.Excel工作表中,常用的数据筛选方式有()A.自动筛选B.高级筛选C.条件筛选D.数值筛选E.文本筛选5.计算机网络的拓扑结构有()A.总线型B.星型C.环型D.树型E.网状型6.数据库系统由以下哪些部分组成()A.数据库B.数据库管理系统C.应用程序D.数据库管理员E.用户7.以下属于面向对象编程语言特点的有()A.封装性B.继承性C.多态性D.过程性E.可视化8.计算机病毒的传播途径主要有()A.网络传播B.移动存储设备传播C.硬件故障传播D.空气传播E.人为传播9.多媒体信息包括以下哪些类型()A.文本B.图像C.音频D.视频E.动画10.以下关于算法设计的基本原则,正确的有()A.正确性B.可读性C.健壮性D.高效性E.复杂性三、填空题(每空1分,共20分)1.计算机的运算器和控制器合称为()。
基本图形元素生成算法

实验一基本图形元素生成算法1. 实验目的:(1)掌握基本图形元素生成算法。
(2 ) 了解高级语言的图形模式的设定和对基本图形类(或函数)的调用方法。
2. 实验内容:选定Bresenham算法,编写生成该基本图形的源程序,并能在计算机上编译运行,画出正确的图形。
3. 实验步骤:Brese nham算法是计算机图形学领域使用最广泛的直线扫描转换方法。
原理:过各行、各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。
此算法的优点在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。
程序流程图如下:程序如下fun ctio n MidBrese nhamli ne( xO, yO, x1,y1) if x0>x1x=x1;x1=x0;x0=x;y=y1;y 1= y0;y0=y;endx=x0;y=y0; dx=x1-x0;dy=y1-y0;d=dx-2*dy;Upl ncre=2*dx-2*dy; Downln cre=-2*dy;while x<=x1 axis([x0 x1 y0 y1]) plot([x],[y], '*');grid onhold onx=x+1;if d<0y=y+1; d=d+Up In cre;elsed=d+Dow nln cre;endpause(0.1);endt=x0:1:x1yy=(y1-yO)./(x1-xO)*t+(y1-((y1-yO)./(x1-xO)*x1));Plot(t,yy)程序运行如下>> MidBresenhamline( 0, 0, 8,5)0 1 2 3 4 5 6 7 8>> MidBresenhamline( 0, 0, 500,750)运行过程中的截图效果4・ s ^1. 通过学习使用中点Bresenham算法画直线,对于斜率大于1的直线段,只需交换x和y之间的规则即可。
计算机图形学文献综述

计算机图形学论文学 号: 11001010123专 业: 信息与计算科学 班 级: 110010101 姓 名: 王俊才 指导教师: 傅由甲一.摘要计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
计算机图形学作为计算机科学与技术学科的一个独立分支已经历了近40年的发展历程。
一方面,作为一个学科,计算机图形学在图形基础算法、图形软件与图形硬件三方面取得了长足的进步,成为当代几乎所有科学和工程技术领域用来加强信息理解和传递的技术和工具。
计算机图形学在我国虽然起步较晚,然而它的发展却十分迅速。
我国的主要高校都开设了多门计算机图形学的课程,并有一批从事图形学基础和应用研究的研究所。
在浙江大学建立的计算机辅助与图形学国家重点实验室,已成为我国从事计算机图形学研究的重要基地之一。
关键词:实现2D/3D 图形的算法,纹理映射,发展简史,发展趋势二、计算机图形学中运用到的技术算法(1)OpenGL 实现2D/3D 图形的算法OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。
OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。
因此,支持OpenGL 的软件具有很好的移植性,可以获得非常广泛的应用。
由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。
但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL 的顶点数组。
shader mul函数

你提到的“mul”函数,可能是指在着色器中执行乘法运算。在着色器中,乘法运算可以是像素级别的乘法,用于调整像素的颜色值,也可以是矩阵与向量的乘法,用于转换或组合3D空间中的坐标。
以下是一个简单的在OpenGL着色器中执行颜色值乘法的示例:
```c++
// OpenGL Shader源代码
//顶点着色器
#version 330 core
layout (location = 0) in vec3 aPos; //位置属性
layout (location = 1) in vec4 aColor; //颜色属性
out vec4 FragColor; //输出的片段颜色值
void main()
{
//将颜色值乘以一个因子,这里我们选择0.5,你可以根据需要进行调整
FragColor = vColor * 0.5;
}
```
这段代码中,顶点着色器将颜色值从顶点数据中获取并传递给片段着色器。在片段着色器中,我们将颜色值乘以0.5,这将导致所有像素的颜色变暗。这个乘法操作可以在各种情况下使用,例如调整光照强度,调整纹理效果等。
out vec4 vColor; //输出到片段着色器的颜色值
void main()
{
gl_Position = vec4(aPos, 1.0);;
vColor = aColor; //将颜色值传递给片段着色器
}
//片段着色器
#vec4 vColor; //从顶点着色器接收的颜色值
计算机图形学实验报告

实验结果与结论
• 在本次实验中,我们成功地实现了复杂场景的渲染,得到了具有较高真实感和视觉效果的图像。通过对比 实验前后的效果,我们发现光线追踪和着色器的运用对于提高渲染质量和效率具有重要作用。同时,我们 也发现场景图的构建和渲染脚本的编写对于实现复杂场景的渲染至关重要。此次实验不仅提高了我们对计 算机图形学原理的理解和实践能力,也为我们后续深入研究渲染引擎的实现提供了宝贵经验。
2. 通过属性设置和变换操作,实现了对图形的定 制和调整,加深了对图形属性的理解。
4. 实验的不足之处:由于时间限制,实验只涉及 了基本图形的绘制和变换,未涉及更复杂的图形 处理算法和技术,如光照、纹理映射等。需要在 后续实验中进一步学习和探索。
02
实验二:实现动画效果
实验目的
掌握动画的基本原 理和实现方法
04
实验四:渲染复杂场景
实验目的
掌握渲染复杂场景的基本流程和方法 理解光线追踪和着色器在渲染过程中的作用
熟悉渲染引擎的实现原理和技巧 提高解决实际问题的能力
实验步骤
• 准备场景文件 • 使用3D建模软件(如Blender)创建或导入场景模型,导出为常用的3D格式(如.obj或.fbx)。 • 导入场景文件 • 在渲染引擎(如Unity或Unreal Engine)中导入准备好的场景文件。 • 构建场景图 • 根据场景的层次结构和光照需求,构建场景图(Scene Graph)。 • 设置光照和材质属性 • 为场景中的物体设置光照和材质属性(如漫反射、镜面反射、透明度等)。 • 编写渲染脚本 • 使用编程语言(如C或JavaScript)编写渲染脚本,控制场景中物体的渲染顺序和逻辑。 • 运行渲染程序 • 运行渲染程序,观察渲染结果。根据效果调整光照、材质和渲染逻辑。 • 导出渲染图像 • 将渲染结果导出为图像文件(如JPEG或PNG),进行后续分析和展示。
计算机图形学第一章基本知识

课程内容
• 第二篇 实用图形编程技术 第八章 基于MFC的图形编程基础 第九章 基于MFC的交互绘图 第十章 OpenGL基础知识和实验框架的建立 第十一章 OpenGL的基本图形 第十二章 OpenGL的组合图形及光照和贴图 第十三章 摄像漫游与OpenGL的坐标变换
1.2 计算机图形学的发展历史
时间 五十年代 特 征 MIT 旋风一号,计算机驱动CRT+照相机, SAGE(交互式图形技术诞生)
六十年代
随机扫描显示器,图形学之父
六十年代至七十年代 存储管显示器,应用的软件包 初 七十年代至八十年代 光栅扫描显示器,新型的图形输入设备,图 初 形语言标准 八十年代至九十年代 图形工作站(Apollo,Sun,Hp) 初 九十年代至今 微机,交叉学科(多媒体等)
计算机图形学 郑州大学信息工程学院
•按工作原理分为:1、阴极射线管(CRT)
1.4.3 显 示 器
控制栅
聚焦系统
荧 光 粉 涂 层
灯丝
阴极 加速系统 偏转系统
计算机图形学 郑州大学信息工程学院
2、 等离子屏幕显示器
• 由一个细小氖泡矩阵组成,由于氖泡有两种状态:开 启(点燃)、关闭(熄灭),且状态可保持。分为 1)前层:垂直导线 2)中层:细小氖泡 3)后层:水平导线
真实图形生成技术的发展
• 逼真地显示出该物体在现实世界中所观察到的 形象,就需要采用适当的光照模型,尽可能准 确地模拟物体在现实世界中受到各种光源照射 时的效果 • 局部光照模型模拟漫反射和镜面反射,而将许 多没有考虑到的因素用一个环境光来表示。 • 光线跟踪方法和辐射度方法为代表的全局光照 模型,使得图像的逼真程度大为提高
计算机图形学练习测试题及参考答案

《计算机图形学》测试题一、名词解释:(每个4分)1.计算机图形学2.图象处理3.模式识别4.计算几何5.凸多边形6.种子填充算法7.窗口8.视区9.光顺性10.拟合11.多项式插值12.小挠度曲线13.图形变换14.齐次坐标系15.凸包16.轮廓线17.等值线18.图形的翼边表示19.ER模型20.图形消隐21.本影22.半影23.用户坐标系24.规范化设备坐标系25.构造26.约束技术27.光线跟踪28、走样29、CRT(Cathode Ray Tube)30、隔行(interlaced)扫描31、输入模式32、取样方式(sample mode)33、区域34、边界表示法35、复合变换36、二维复合平移37.二维复合比例38.二维复合旋转39.视区(Viewport)40、投影变换41、平面几何投影42. 参数图43. 像素图44.人机界面45.地理信息系统46.虚拟现实47.几何造型技术48.扫描转换49. 插值曲线50.逼近曲线51. 用户接口52. 交互技术53. 交互式图形系统的基本交互任务54. 定位任务55. 选择任务56. 拾取任务57 .选择技术58. 菜单技术59. 文字输入任务60. 数值输入任务61.动画62.帧63.场64. 消隐65.物体空间的消隐算法66. 漫反射光67. 环境光68. 镜面反射光二、选择题(每题2分)1、计算机图形学与计算几何之间的关系是( )。
A)学术上的同义词 B)计算机图形学以计算几何为理论基础C)计算几何是计算机图形学的前身D).两门毫不相干的学科2、计算机图形学与计算机图象学的关系是( )。
A)计算机图形学是基础,计算机图象学是其发展B)不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C)同一学科在不同场合的不同称呼而已D)完全不同的学科,两者毫不相干3、触摸屏是( )设备。
A)输入 B)输出 C)输入输出D)既不是输入也不是输出4.计算机绘图设备一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS5.计算机图形显示器一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS6.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( ) A)512KB;B)1MB;C)2MB ;D)3MB7.哪一个不是国际标准化组织(ISO)批准的图形标准?( )A)GKS;B)PHIGS;C)CGM ;D)DXF8.下述绕坐标原点逆时针方向旋转a角的坐标变换矩阵中哪一项是错误的? ( )| A B || C D |A)cos a;B) sin a;C) sin a;D) cos a9、在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的? ( )A)S和P均在可见的一侧,则输出S和P.B)S和P均在不可见的一侧,则输出0个顶点.C)S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点.D)S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.10、在物体的定义中对边的哪条限制不存在? ( )A)边的长度可度量且是有限的B)一条边有且只有两个相邻的面C)一条边有且只有两个端点D)如果一条边是曲线,那么在两个端点之间不允许曲线自相交11.下述哪一条边不是非均匀有理B样条(NURBS)的优点? ( )A) NURBS比均匀B样条能表示更多的曲面B)对于间距不等的数据点,用NURBS拟合的曲线比用均匀B样条拟合的曲线更光滑C) NURBS提供的权控制方法比用控制点更能有效的控制曲线的形状D)使用NURBS可以提高对曲面的显示效率12.下列关于图的存储表示的叙述中,哪一个是不正确的?A) 无向图的相邻矩阵是对称矩阵B) 对于带权的图,其相邻矩阵中值为1的元素,其值可以用边的权来权替C) 用邻接表法存储包括n个结点的图需要保存一个顺序存储的结点表和n个链接存储的边表D) 用邻接表法存储包括n条边的图需要保存一个顺序存储的结点表和n个链接存储的边表13*.在面片的数量非常大的情况下哪一个消隐算法速度最快? ( )A)深度缓存算法(Z-Buffer)B)扫描线消隐算法C)深度排序算法(画家算法)D)不知道14*.下面关于深度缓存消隐算法(Z-Buffer)的论断哪一条不正确? ( )A)深度缓存算法并不需要开辟一个与图像大小相等的深度缓存数组B)深度缓存算法不能用于处理对透明物体的消隐C)深度缓存算法能并行实现D)深度缓存算法中没有对多边形进行排序15.在用射线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确? ( )A)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次B)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次C)当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次D)当射线与多边形的某边重合时,计数1次16*、扫描消隐算法在何处利用了连贯性(相关性Coherence)?(1)计算扫描线与边的交点;(2)计算多边形在其边界上的深度;(3)计算多边形视窗任意点处的深度值;(4)检测点与多边形之间的包含性。
计算机图形学上机实验2-交互实现多边形绘画并填充

(2)软件:windows OS,VC++6.0或以上版本。
试验内容及步骤:(1)在VC++环境下创建MFC应用程序工程(单文档)(2)编辑菜单资源(3)添加菜单命令消息处理函数(4)添加成员函数(5)编写函数内容试验要求(1)试验前自习课本第2章内容,编写相关程序。
建立一VC++单文档工程,在菜单项中建立图形绘图菜单(包括绘制直线、折线、矩形、(椭)圆、多边形)和区域填充菜单项。
(2)实现对(椭)圆和多边形的填充。
(3)试验中调试、完善所编程序,能正确运行出设计要求结果。
(4)书写试验报告上交。
第2页first = true;move = false;添加对应于鼠标消息WM_LBUTTONDDlClK的消息处理函数OnLButtonDblClk();并在其中添加如下代码:CClientDC dc(this);dc.MoveTo(v[index]);dc.LineTo(v[0]);CPen MyPen,*OldPen; // 颜色填充MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));OldPen=dc.SelectObject(&MyPen);CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(0,255,0));OldBrush=dc.SelectObject(&MyBrush);//dc.SelectStockObject(GRAY_BRUSH);dc.Polygon(v,index+1);first = true;第4页move = false;index = 1;添加对应于鼠标消息WM_LBUTTONDOWN的消息处理函数OnLButtonDown();并在其中添加如下代码:CClientDC dc(this);if (first){ v[0] = v[1] = point;first = false; }else{ v[++index] = point;if (index>=30){MessageBox("数组CPoint v[30] 下标越界!\a");return; }dc.MoveTo(v[index-1]);dc.LineTo(v[index]);}第5页添加对应于鼠标消息WM_LBUTTONUP的消息处理函数OnLButtonUp();并在其中添加如下代码:CClientDC dc(this);dc.MoveTo(v[index-1]);dc.LineTo(v[index]);if (!move)first = true;添加对应于鼠标消息WM_ MOUSEMOVE的消息处理函数OnMouseMove ();并在其中添加如下代码:CClientDC dc(this);if (nFlags == MK_LBUTTON){ move = true;dc.SetROP2(R2_NOTXORPEN);dc.MoveTo(v[index-1]);第6页dc.LineTo(v[index]);v[index] = point;dc.MoveTo(v[index-1]);dc.LineTo(v[index]);}添加菜单项ID_ Fillcolor的消息映射函数添加任何代码: CClientDC dc(this); //自动生成多边形并填充CPen MyPen,*OldPen;MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));OldPen=dc.SelectObject(&MyPen);CBrush MyBrush,*OldBrush;MyBrush.CreateSolidBrush(RGB(100,55,150));OldBrush=dc.SelectObject(&MyBrush);CPoint p[4];p[0].x=100;p[0].y=200;p[1].x=250;p[1].y=150;p[2].x=200;p[2].y=300;第7页第8页p[3].x=400;p[3].y=350;dc.Polygon(p,4);6.实验数据和实验结果(用屏幕图形表示,可另加附页):打开Dubug 内lab2.exe 点击菜单栏“多边形绘画及填充”,在工作区绘画多边形,画好后双击左键便完成填充了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中点画线法:
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
void MidPoint_Line(int x0,int y0,int x1,int y1,int color); main()
{
int driver=DETECT,mode;
int x0,y0,x1,y1,color;
initgraph(&driver,&mode,"");
setbkcolor(2);
MidPoint_Line(0,0,200,200,1);
getch();
closegraph();
}
void MidPoint_Line(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{ int a,b,delta1,delta2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
delta1=2*a;
delta2=2*(a+b);
x=x0;
y=y0;
putpixel(x,y,color);
while(x<x1)
{ if(d<0)
{ x++; y++;
d+=delta2;
}
else
{ x++;
d+=delta1;
}
putpixel(x,y,color);
}
}
Bresenham算法:
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
void Bresenham_Line(int x0,int y0,int x1,int y1,int value); main()
{
int driver=DETECT,mode;
int x0,y0,x1,y1,color;
initgraph(&driver,&mode,"");
setbkcolor(2);
Bresenham_Line(0,0,200,200,1);
getch();
closegraph();
}
void Bresenham_Line(int x0,int y0,int x1,int y1,int value) {
int dx=abs(x0-x1),dy=abs(y0-y1);
int d=2*dy-dx;
int twody=2*dy,twodydx=2*(dy-dx);
int x,y,xend;
if (x0>x1)
{x=x1;
y=y1;
xend=x0;
}
else
{x=x0;
y=y0;
xend=x1;
}
putpixel(x,y,value);
while(x<xend)
{
x++;
if(d<0)
d+=twody;
else
{
y++;
d+=twodydx;
}
putpixel(x,y,value);
}
}
分享到:
中点画圆算法(C语言)
#include "stdio.h"
#include "graphics.h"
void circlepoint(int x,int m,int n,int y) {
putpixel(x+m,y+n,4);
putpixel(y+m,x+n,4);
putpixel(y+m,n-x,4);
putpixel(x+m,n-y,4);
putpixel(m-y,n+x,4);
putpixel(m-y,n-x,4);
putpixel(m-x,n-y,4);
putpixel(m-x,y+n,4);
}
void midpointcircle(int m,int n,int r) {int x=0;
int y=r;
int d=1-r;
int d1=3;
int d2=2-r-r;
circlepoint(x,m,n,y);
while(x<y)
{if(d<0)
{d+=d1;
d1+=2;
}
else
{
d+=(d1+d2);
d1+=2;
d2+=2;
y--;
}
x++;
circlepoint(x,m,n,y);
}
}
main()
{int r,x,y;int drive,mode;
drive=DETECT;
initgraph(&drive,&mode,"c:\\turboc2");
printf("intput the int R and the center of the circle:\n"); scanf("%d%d%d",&x,&y,&r);
midpointcircle(x,y,r);
getch();} /*程序不足之处请指教*/
三次bezer曲线
#include"dos.h"
#include"bios.h"
#include"graphics.h"
#include"math.h"
main()
{int driver,mode,n,i, p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y;
float x,y;
double d,d1, f1,f2,f3,f4;
driver=DETECT;
mode=DETECT;
initgraph(&driver,&mode,"d:\\tc3");
p1x=150;p1y=150;
p2x=300;p2y=180;
p3x=400;p3y=160;
p4x=250;p4y=50;
n=200;
d=1.0/n;
d1=d;
line(150,150,300,180);
line(300,180,400,160);
line(400,160,250,50);
moveto(p1x,p1y);
for(i=0;i<=n;i++)
{
f1=(1.0-d1)*(1.0-d1)*(1.0-d1);
f2=3.0*d1*(1.0-d1)*(1.0-d1);
f3=3.0*d1*d1*(1.0-d1);
f4=d1*d1*d1;
x=f1*p1x+f2*p2x+f3*p3x+f4*p4x;
y=f1*p1y+f2*p2y+f3*p3y+f4*p4y;
lineto((int)x,(int)y);
d1+=d;}
getch();
closegraph();
}。