直线中点Bresenham算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.如果当前点x小于x1,重复步骤4,否则结束。
源程序:
1)// TestView.h
#include "InputDlg.h"//对话框头文件
#define ROUND(a) int(a+0.5)
class CTestView : public CView
{
…..
}
2)//TestView.cpp
}
}
void CTestView::Mbline(double x0, double y0,double x1,double y1) //直线中点Bresenham函数
{
CClientDC dc(this);
COLORREF rgb=RGB(255,0,0); //定义直线颜色为红色
double x,y,d,k;
2.定义直线当前点坐标x,y、定义中点偏差判别式d、定义直线斜率k、定义像素点颜色rgb。
3.x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB(0,0,255)。
4.绘制点(x,y),判断d的符号。若d<0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。
void CTestView::OnMENUMbline()//菜单函数
{
InputDlg dlg;
if(dlg.DoModal()==IDOK)
{
AfxGetMainWnd()->SetWindowText(":直线中点Bresenham算法");
RedrawWindow();
Mbline(dlg.m_x0,dlg.m_y0,dlg.m_x1,dlg.m_y1);
实验一基本图形生Βιβλιοθήκη Baidu算法
实验目的:
掌握中点Bresenham绘制直线的原理
设计中点Bresenham算法
编程实现中点Bresenham算法
实验描述:
使用中点Bresenham算法绘制斜率为0≤k≤1的直线。
算法设计:
直线中点Bresenham算法
1.输入直线的起点坐标P0(x0,y0)和终点坐标P1(x1,y1)。
x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k;
for(x=x0;x<=x1;x++)
{
dc.SetPixel(ROUND(x),ROUND(y),rgb);
if(d<0)
{
y++;
d+=1-k;
}
else
d-=k;
}
}
运行结果:
源程序:
1)// TestView.h
#include "InputDlg.h"//对话框头文件
#define ROUND(a) int(a+0.5)
class CTestView : public CView
{
…..
}
2)//TestView.cpp
}
}
void CTestView::Mbline(double x0, double y0,double x1,double y1) //直线中点Bresenham函数
{
CClientDC dc(this);
COLORREF rgb=RGB(255,0,0); //定义直线颜色为红色
double x,y,d,k;
2.定义直线当前点坐标x,y、定义中点偏差判别式d、定义直线斜率k、定义像素点颜色rgb。
3.x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB(0,0,255)。
4.绘制点(x,y),判断d的符号。若d<0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。
void CTestView::OnMENUMbline()//菜单函数
{
InputDlg dlg;
if(dlg.DoModal()==IDOK)
{
AfxGetMainWnd()->SetWindowText(":直线中点Bresenham算法");
RedrawWindow();
Mbline(dlg.m_x0,dlg.m_y0,dlg.m_x1,dlg.m_y1);
实验一基本图形生Βιβλιοθήκη Baidu算法
实验目的:
掌握中点Bresenham绘制直线的原理
设计中点Bresenham算法
编程实现中点Bresenham算法
实验描述:
使用中点Bresenham算法绘制斜率为0≤k≤1的直线。
算法设计:
直线中点Bresenham算法
1.输入直线的起点坐标P0(x0,y0)和终点坐标P1(x1,y1)。
x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k;
for(x=x0;x<=x1;x++)
{
dc.SetPixel(ROUND(x),ROUND(y),rgb);
if(d<0)
{
y++;
d+=1-k;
}
else
d-=k;
}
}
运行结果: