📄 testline.cpp
字号:
// TestLine.cpp : implementation file
//
#include "stdafx.h"
#include "draw.h"
#include "TestLine.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestLine dialog
CTestLine::CTestLine(CWnd* pParent /*=NULL*/)
: CDialog(CTestLine::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestLine)
m_startpoint_y = 0;
m_endpoint_x = 0;
m_endpoint_y = 0;
m_bujin = _T("");
m_jiaodu = _T("");
m_startpoint_x = 0;
//}}AFX_DATA_INIT
/*
m_lib[2][2][1]="00";
m_lib[2][2][2]="10";
m_lib[3][3][1]="000";
m_lib[3][3][2]="011";
m_lib[3][3][3]="111";
m_lib[4][4][1]="0000";
m_lib[4][4][2]="0011";
m_lib[4][4][3]="0100";
m_lib[4][4][4]="0111";*/
}
void CTestLine::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestLine)
DDX_Control(pDX, IDC_COMBO2, m_F);
DDX_Control(pDX, IDC_COMBO1, m_N);
DDX_Text(pDX, IDC_EDIT3, m_startpoint_y);
DDX_Text(pDX, IDC_EDIT4, m_endpoint_x);
DDX_Text(pDX, IDC_EDIT5, m_endpoint_y);
DDX_CBString(pDX, IDC_COMBO1, m_bujin);
DDX_CBString(pDX, IDC_COMBO2, m_jiaodu);
DDX_Text(pDX, IDC_EDIT2, m_startpoint_x);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestLine, CDialog)
//{{AFX_MSG_MAP(CTestLine)
ON_WM_PAINT()
ON_WM_CANCELMODE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestLine message handlers
void CTestLine::OnOK()
{
this->UpdateData(true);
if(m_startpoint_x==m_endpoint_x) return;
CPaintDC dc(this);
float k;
int Xa,Ya,Xb,Yb;
float x,y;
int me;
int a,b,c;
float t;
//此为DDA算法实现
Xa=30+m_startpoint_x;
Ya=40+m_startpoint_y;
Xb=30+m_endpoint_x;
Yb=40+m_endpoint_y;
k=(float)(Yb-Ya)/(float)(Xb-Xa);
x=(float)Xa;
y=(float)Ya;
long t11=GetTickCount();
for(int i=0;i<200;i++)
{
if(abs(k)<1)
{
for(x=Xa;x<=Xb;x++)
{
dc.SetPixel(x,int(y+0.5),RGB(255,0,0));
y+=k;
}
}
if(abs(k)>=1)
{
for(y=Ya;y<=Yb;y++)
{
dc.SetPixel(int(x+0.5),y,RGB(255,0,0));
x+=1/k;
}
}
}
long t12=GetTickCount();
//此为加参数后算法实现 这里只测步进为4,角度划分为4。
Xa=420+m_startpoint_x;
Ya=40+m_startpoint_y;
Xb=420+m_endpoint_x;
Yb=40+m_endpoint_y;
k=(float)(Yb-Ya)/(float)(Xb-Xa);
t=k;
if(k>=1)
k=1/k;
if(k>=0&&k<0.25)
{
a=0,b=0,c=0;
}
if(k>=0.25&&k<0.5)
{
a=0,b=1,c=2;
}
if(k>=0.5&&k<0.75)
{
a=1,b=2,c=2;
}
if(k>=0.75&&k<=1)
{
a=1,b=2,c=3;
}
x=(float)Xa;
y=(float)Ya;
float dd=k*4;
long t21=GetTickCount();
for(int j=0;j<200;j++)
{
if(abs(t)<1)
{
for(x=Xa;x<=Xb;x+=4)
{
me=int(y+0.5);
dc.SetPixel(x,me,RGB(255,0,0));
dc.SetPixel(x+1,me+a,RGB(255,0,0));
dc.SetPixel(x+2,me+b,RGB(255,0,0));
dc.SetPixel(x+3,me+c,RGB(255,0,0));
y+=dd;
}
}
if(abs(t)>=1)
{
for(y=Ya;y<=Yb;y+=4)
{
me=int(x+0.5);
dc.SetPixel(me,y,RGB(255,0,0));
dc.SetPixel(me+a,y+1,RGB(255,0,0));
dc.SetPixel(me+b,y+2,RGB(255,0,0));
dc.SetPixel(me+c,y+3,RGB(255,0,0));
x+=dd;
}
}
}
long t22=GetTickCount();
long dt1,dt2;
dt1=t12-t11;
dt2=t22-t21;
CString str;
str.Format("DDA算法时间为:%dms\n加参算法时间为:%dms",dt1/200,dt2/200);//
MessageBox(str);
RedrawWindow();
}
void CTestLine::OnPaint()
{
m_N.SelectString(0,"4");
m_N.RedrawWindow();
m_F.SelectString(0,"4");
m_F.RedrawWindow();
// TODO: Add your message handler code here
this->UpdateData(true);
if(m_startpoint_x==m_endpoint_x) return;
CPaintDC dc(this);
float k;
int Xa,Ya,Xb,Yb;
float x,y;
int me;
int a,b,c;
float t;
//此为DDA算法实现
Xa=30+m_startpoint_x;
Ya=40+m_startpoint_y;
Xb=30+m_endpoint_x;
Yb=40+m_endpoint_y;
k=(float)(Yb-Ya)/(float)(Xb-Xa);
x=(float)Xa;
y=(float)Ya;
if(abs(k)<1)
{
for(x=Xa;x<=Xb;x++)
{
dc.SetPixel(x,int(y+0.5),RGB(255,0,0));
y+=k;
}
}
if(abs(k)>=1)
{
for(y=Ya;y<=Yb;y++)
{
dc.SetPixel(int(x+0.5),y,RGB(255,0,0));
x+=1/k;
}
}
//此为加参数后算法实现 这里只测步进为4,角度划分为4。
Xa=420+m_startpoint_x;
Ya=40+m_startpoint_y;
Xb=420+m_endpoint_x;
Yb=40+m_endpoint_y;
k=(float)(Yb-Ya)/(float)(Xb-Xa);
t=k;
if(k>=1)
k=1/k;
if(k>=0&&k<0.25)
{
a=0,b=0,c=0;
}
if(k>=0.25&&k<0.5)
{
a=0,b=1,c=2;
}
if(k>=0.5&&k<0.75)
{
a=1,b=2,c=2;
}
if(k>=0.75&&k<=1)
{
a=1,b=2,c=3;
}
x=(float)Xa;
y=(float)Ya;
if(abs(t)<1)
{
for(x=Xa;x<=Xb;x+=4)
{
me=int(y+0.5);
dc.SetPixel(x,me,RGB(255,0,0));
dc.SetPixel(x+1,me+a,RGB(255,0,0));
dc.SetPixel(x+2,me+b,RGB(255,0,0));
dc.SetPixel(x+3,me+c,RGB(255,0,0));
y+=k*4;
}
}
if(abs(t)>=1)
{
for(y=Ya;y<=Yb;y+=4)
{
me=int(x+0.5);
dc.SetPixel(me,y,RGB(255,0,0));
dc.SetPixel(me+a,y+1,RGB(255,0,0));
dc.SetPixel(me+b,y+2,RGB(255,0,0));
dc.SetPixel(me+c,y+3,RGB(255,0,0));
x+=4*k;
}
}
// Do not call CDialog::OnPaint() for painting messages
}
void CTestLine::OnCancelMode()
{
CDialog::OnCancelMode();
CPaintDC dc(this);
// TODO: Add your message handler code here
}
BOOL CTestLine::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::Create(IDD, pParentWnd);
}
void CTestLine::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
// m_lib
CDialog::CalcWindowRect(lpClientRect, nAdjustType);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -