- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验 3 基本图元生成算法
一、实验目的:
1. 掌握使用BCB 进行基本图形绘制的方法
2. 掌握基本图元包括直线、圆(圆弧)、抛物线等基本图形的绘制算法
3. 学习使用C(C++)绘制图形的命令和语法
4. 学习使用像素颜色的设置命令
二、重点难点:
重点:基本图形的生成方法。主要包括直线生成的方法、抛物线的生成方法
难点:抛物线的生成方法。
实验过程:
1. 直线的绘制
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
dda(0,0,200,200);
}
void __fastcall TForm1::dda(int x1, int y1, int x2, int y2)
{
int i,dx,dy,step;
float x,y;
float xinc,yinc;
dx=(x2-x1);
dy=(y2-y1);
if(abs(dx)=abs(dy))
step=dx;
else
step=dy;
xinc=(float)dx/step;
yinc=(float)dy/step;
x=x1;
y=y1;
Image1-Canvas-Pixels[x][y]=clYellow;
for(i=1;istep;i++)
{
x=x+xinc;
y=y+yinc;
x1=x+0.5;
y1=y+0.5;
Image1-Canvas-Pixels[x1][y1]=clRed;
}
}
程序的调试方法:
(1)在Unit1.h 文件中声明:dda(int x1, int y1, int x2, int y2)
(2)在Unit1.h 文件中给出详细的定义。
(3)在Button 中调用函数。
2. Bresenham 直线绘制方法的实现
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
Bresenham(0,0,60,150) ;}
void __fastcall TForm1::Bresenham(int x1, int y1, int x2, int
y2)
{
// setpixel(x1,y1, color);
Image1-Canvas-Pixels[x1][y1]=clBlack;
int dx=abs(x2-x1);
int dy=abs(y2-y1);
if ( dx==0 dy==0) return;
int flag=0;
if (dxdy) //下面将斜率变换至 0≤|k|≤1 区间
{
flag=1;
swap_value(x1, y1);
swap_value(x2, y2);
swap_value(dx, dy);
}
int tx=(x2-x1) 0 ? 1:-1;
int ty=(y2-y1)0 ? 1: -1;
int curx=x1; int cury=y1;
int dS=2*dy; int dT=2*(dy-dx);
int d=dS-dx;
while (curx!=x2)
{
if (d0)
d+=dS;
else
{ cury+=ty; d+=dT; }
if (flag)
//setpixel(cury, curx, color);
Image1-Canvas-Pixels[cury][curx]=clBlack;
else
//setpixel(curx, cury, color);
Image1-Canvas-Pixels[curx][cury]=clBlack;
curx+=tx;
}
}
void __fastcall TForm1::swap_value (int* a, in
文档评论(0)