浙江大学软件学院《嵌入式软件设计与开发》高分实验报告-实验6:利用布兰森汉姆算法及中点算法实现图形描画
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《嵌入式软件设计与开发》课程实验报告
课程实验 6:利用布兰森汉姆算法及中点算法实现图形描画
姓名 包子·陳 任课教师 赵志愚
院系 软件学院 指导教师
实验地点 实验课表现
S207 出勤、表现得分 10% 操作结果得分 50%
实验时间 实验报告 得分 40%
实验目的:
利用布兰森汉姆算法及中点算法实现图形描画
学号 2145xxxx 赵志愚 2015 年 1 月 9 日星期五
实验总分
实验内容:
利用布兰森汉姆算法及中点算法实现图形描画
实验预习:(对实验内容、原理的理解)(5 分) 1、 预习嵌入式 GUI 及应用程序设计;
得分:
2、 预习在嵌入式 GUI 图形绘制相关知识;
3、 预习如何设计并实现嵌入式 GUI 图形绘制算法。
circlePlotPoints(xCenter, yCenter, x, y); while (x < y) {
x++; if (f < 0){
f += 2*x+1; } else {
y--; f += 2*(x-y)+1; } circlePlotPoints(xCenter, yCenter, x, y); } }
2、主函数的设计与实现 /*============================================================
* 函数名: void main() * 返回值: * 参数说明: * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 主函数的设计与实现 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void main() {
* 功能说明 :
* 在该文件中实现字符自定义算法、几何算法布兰森汉姆算法、
* 中点算法、DDA 等 GUI 绘图算法的设计与实现
* -----------------------------------------------------------
* 变更履历 :
* 001 2015-01-09 包子·陳 Beta 测试版
============================================================*/
#include "LCD12864Drv.h"
#include "display.h"
/*============================================================
WriteByteToScrn(y+cnt,x+cnt1,bitmap->pBitMap[cnt*bitmap->ucw+cnt1]); }
}
}
/*============================================================ * 函数名: void LineDrawJihe(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点做坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 几何算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
void circlePlotPoints(int xCenter, int yCenter, int x, int y) {
SetPixel (xCenter + x,yCenter + y); SetPixel (xCenter - x, yCenter + y); SetPixel (xCenter + x, yCenter - y); SetPixel (xCenter -x, yCenter - y); SetPixel (xCenter + y, yCenter + x); SetPixel (xCenter -y, yCenter + x); SetPixel (xCenter + y, yCenter -x); SetPixel (xCenter -y, yCenter-x); } void CircleDraw(int xCenter, int yCenter, int radius) { int x = 0; int y = radius; int f = 1-radius;
实验代码(c 语言):(10 分) 1、 GUI 绘图算法的设计与实现
得分:
/*============================================================
* 布兰森汉姆算法、中点算法、DDA 等 GUI 绘图算法的实现
*
* 作者 : 浙江大学_包子·陳
* 日期 : 2015-01-09
LCD12864_Init(); //液晶初始化 CleanScreen(); //清屏 }
/*============================================================ * 函数名: void DrawBitmap(BitMap_t *bitmap, INT8U x, INT8U y) * 返回值: * 参数说明:起点坐标(x,y);要显示字符:*bitmap * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 自定义字符显示函数 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
DisplayInit();//液晶显示初始化
DrawBitmap(&bitmapBao, 0, 0); //显示 32*32 的宋体“包”字 DrawBitmap(&bitmapZi, 32, 0); //显示 32*32 的宋体“子”字 DrawBitmap(&bitmapDian, 64, 0);//显示 32*32 的宋体“·”字 DrawBitmap(&bitmapChen2, 96, 0);//反显-显示 32*32 的宋体“陳”字
void LineDrawDDA(int ax, int ay, int bx, int by) {
double m =(double)(by-ay)/(bx-ax); double y = ay; double temp; int iy,x; for( x=ax;x<=bx;x++) {
temp=y+0.5; iy=(int)temp; SetPixel(x,iy); y+=m;
}
} /*============================================================
* 函数名:void LineDrawBresenham(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 增量算法—布兰森汉姆 算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void LineDrawBresenham(int ax, int ay, int bx, int by) {
int h = by-ay; int w = bx-ax; int F=2*h-w; int x=ax,y=ay; for (x=ax; x<=bx; x++){
SetPixel(x,y); if(F<0)
F+=2*h; else{
F+=2*(h-w); y++; } }
}
/*============================================================ * 函数名:void CircleDraw(int xCenter, int yCenter, int radius) * 返回值: * 参数说明:圆心坐标(xCenter,yCenter);半径:radius * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : GUI 基础图形函数设计---- 圆的描画 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
y=m*x+c; y=y+0.5; iy=(int)y; SetPixel(x,iy);
}
}
/*============================================================ * 函数名: void LineDrawDDA(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : DDA 算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
void LineDrawJihe(int ax, int ay, int bx, int by) {
// 请完成该函数 //几何算法 double m =(double)(by-ay)/(bx-ax); double c = ay-m*ax; double y; int iy,x; for( x=ax;x<=bx;x++) {
* 函数名: void DisplayInit() * 返回值: * 参数说明: * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 12864 液晶的初始化操作 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void DisplayInit() {
void DrawBitmap(BitMap_t *bitmap, INT8U x, INT8U y) {
INT8U cnt, cnt1;
if(0 == bitmap) {
return; }
for(cnt = 0; cnt < bitmap->uch; cnt++) {
for(cnt1 = 0; cnt1 < bitmap->ucwBiblioteka Baidu cnt1++) {
课程实验 6:利用布兰森汉姆算法及中点算法实现图形描画
姓名 包子·陳 任课教师 赵志愚
院系 软件学院 指导教师
实验地点 实验课表现
S207 出勤、表现得分 10% 操作结果得分 50%
实验时间 实验报告 得分 40%
实验目的:
利用布兰森汉姆算法及中点算法实现图形描画
学号 2145xxxx 赵志愚 2015 年 1 月 9 日星期五
实验总分
实验内容:
利用布兰森汉姆算法及中点算法实现图形描画
实验预习:(对实验内容、原理的理解)(5 分) 1、 预习嵌入式 GUI 及应用程序设计;
得分:
2、 预习在嵌入式 GUI 图形绘制相关知识;
3、 预习如何设计并实现嵌入式 GUI 图形绘制算法。
circlePlotPoints(xCenter, yCenter, x, y); while (x < y) {
x++; if (f < 0){
f += 2*x+1; } else {
y--; f += 2*(x-y)+1; } circlePlotPoints(xCenter, yCenter, x, y); } }
2、主函数的设计与实现 /*============================================================
* 函数名: void main() * 返回值: * 参数说明: * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 主函数的设计与实现 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void main() {
* 功能说明 :
* 在该文件中实现字符自定义算法、几何算法布兰森汉姆算法、
* 中点算法、DDA 等 GUI 绘图算法的设计与实现
* -----------------------------------------------------------
* 变更履历 :
* 001 2015-01-09 包子·陳 Beta 测试版
============================================================*/
#include "LCD12864Drv.h"
#include "display.h"
/*============================================================
WriteByteToScrn(y+cnt,x+cnt1,bitmap->pBitMap[cnt*bitmap->ucw+cnt1]); }
}
}
/*============================================================ * 函数名: void LineDrawJihe(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点做坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 几何算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
void circlePlotPoints(int xCenter, int yCenter, int x, int y) {
SetPixel (xCenter + x,yCenter + y); SetPixel (xCenter - x, yCenter + y); SetPixel (xCenter + x, yCenter - y); SetPixel (xCenter -x, yCenter - y); SetPixel (xCenter + y, yCenter + x); SetPixel (xCenter -y, yCenter + x); SetPixel (xCenter + y, yCenter -x); SetPixel (xCenter -y, yCenter-x); } void CircleDraw(int xCenter, int yCenter, int radius) { int x = 0; int y = radius; int f = 1-radius;
实验代码(c 语言):(10 分) 1、 GUI 绘图算法的设计与实现
得分:
/*============================================================
* 布兰森汉姆算法、中点算法、DDA 等 GUI 绘图算法的实现
*
* 作者 : 浙江大学_包子·陳
* 日期 : 2015-01-09
LCD12864_Init(); //液晶初始化 CleanScreen(); //清屏 }
/*============================================================ * 函数名: void DrawBitmap(BitMap_t *bitmap, INT8U x, INT8U y) * 返回值: * 参数说明:起点坐标(x,y);要显示字符:*bitmap * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 自定义字符显示函数 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
DisplayInit();//液晶显示初始化
DrawBitmap(&bitmapBao, 0, 0); //显示 32*32 的宋体“包”字 DrawBitmap(&bitmapZi, 32, 0); //显示 32*32 的宋体“子”字 DrawBitmap(&bitmapDian, 64, 0);//显示 32*32 的宋体“·”字 DrawBitmap(&bitmapChen2, 96, 0);//反显-显示 32*32 的宋体“陳”字
void LineDrawDDA(int ax, int ay, int bx, int by) {
double m =(double)(by-ay)/(bx-ax); double y = ay; double temp; int iy,x; for( x=ax;x<=bx;x++) {
temp=y+0.5; iy=(int)temp; SetPixel(x,iy); y+=m;
}
} /*============================================================
* 函数名:void LineDrawBresenham(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 增量算法—布兰森汉姆 算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void LineDrawBresenham(int ax, int ay, int bx, int by) {
int h = by-ay; int w = bx-ax; int F=2*h-w; int x=ax,y=ay; for (x=ax; x<=bx; x++){
SetPixel(x,y); if(F<0)
F+=2*h; else{
F+=2*(h-w); y++; } }
}
/*============================================================ * 函数名:void CircleDraw(int xCenter, int yCenter, int radius) * 返回值: * 参数说明:圆心坐标(xCenter,yCenter);半径:radius * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : GUI 基础图形函数设计---- 圆的描画 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
y=m*x+c; y=y+0.5; iy=(int)y; SetPixel(x,iy);
}
}
/*============================================================ * 函数名: void LineDrawDDA(int ax, int ay, int bx, int by) * 返回值: * 参数说明:起点坐标(ax,ay);终点坐标(bx,by); * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : DDA 算法画直线 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/
void LineDrawJihe(int ax, int ay, int bx, int by) {
// 请完成该函数 //几何算法 double m =(double)(by-ay)/(bx-ax); double c = ay-m*ax; double y; int iy,x; for( x=ax;x<=bx;x++) {
* 函数名: void DisplayInit() * 返回值: * 参数说明: * 作者 : 浙江大学_包子·陳 * 日期 : 2015-01-09 * 功能说明 : 12864 液晶的初始化操作 * ----------------------------------------------------------* 变更履历 : * 001 2015-01-09 包子·陳 Beta 测试版 ============================================================*/ void DisplayInit() {
void DrawBitmap(BitMap_t *bitmap, INT8U x, INT8U y) {
INT8U cnt, cnt1;
if(0 == bitmap) {
return; }
for(cnt = 0; cnt < bitmap->uch; cnt++) {
for(cnt1 = 0; cnt1 < bitmap->ucwBiblioteka Baidu cnt1++) {