分享
 
 
 

[图形学]直线生成算法之DDA算法

王朝other·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

[图形学]直线生成算法之DDA

DDA称为数值微分画线算法,是直线生成算法中最简单的一种。原理相当简单,就是最直观的根据斜率的偏移程度,决定是以x为步进方向还是以y为步进方向。然后在相应的步进方向上,步进变量每次增加一个像素,而另一个相关坐标变量则为Yk_1=Yk+m(以x为步进变量为例,m为斜率)

这个程序对于我的意义在于:可以在VC中利用GDI的画点函数--- SetPixel来实现它,终于可以告别C语言绘图还用TC的时代,呵呵~~~

void DDALine(float x1,float y1,float x2,float y2,int color,HDC hdc)

{

float m;

float dx,dy;

float x,y;

x1=(int)(x1+0.5);

y1=(int)(y1+0.5);

x=x1;

y=y1;

dx=x2-x1;

dy=y2-y1;

if(fabs(dx)>=fabs(dy))

m=dy/dx;

else

m=dx/dy;

while(x<=x2)

{

SetPixel(hdc,x,y,color);

if(fabs(dx)>=dy)

{

y=y+m;

x++;

}

else

{

x=x+m;

y++;

}

}

}

VC中的实现:

#include "GraphAlgorithm.h"

#include<windows.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam);

BOOL InitWindowsClass(HINSTANCE hInstance);

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);

HWND hWndMain;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

//program starting.

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

MSG msg;

if(!InitWindowsClass(hInstance))

return FALSE;

if(!InitWindows(hInstance,nCmdShow))

return FALSE;

//Core message looping

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

//main wndProc function: message looping

long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

HDC hDC;

HBRUSH hBrush;

HPEN hPen;

PAINTSTRUCT PtStr;

switch(iMessage)

{

case WM_PAINT:

//First draw,a black line

hDC=BeginPaint(hWnd,&PtStr);

hPen=(HPEN)GetStockObject(NULL_PEN);//get empty brush

SelectObject(hDC,hPen);

hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);

SelectObject(hDC,hBrush);

hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));//create pen

SelectObject(hDC,hPen);

DDALine(0,0,200,200,1,hDC);

DeleteObject(hPen);

DeleteObject(hBrush);

EndPaint(hWnd,&PtStr);

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

default:

return DefWindowProc(hWnd,iMessage,wParam,lParam);

}

}

//Init the Window to show out.

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)

{

HWND hWnd;

hWnd=CreateWindow("WinFill",

"图形绘制算法示例程序",

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

0,

CW_USEDEFAULT,

0,

NULL,

NULL,

hInstance,

NULL

);

if(!hWnd)

return FALSE;

hWndMain=hWnd;

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

return TRUE;

}

//Set wndClass Propertity

BOOL InitWindowsClass(HINSTANCE hInstance)

{

WNDCLASS wndClass;

wndClass.cbClsExtra=0;

wndClass.cbWndExtra=0;

wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);

wndClass.hIcon=LoadIcon(NULL,"END");

wndClass.hInstance=hInstance;

wndClass.lpfnWndProc=WndProc;

wndClass.lpszClassName="WinFill";

wndClass.lpszMenuName=NULL;

wndClass.style=CS_HREDRAW|CS_VREDRAW;

return RegisterClass(&wndClass);

}

通过测试表明,当斜率较大时,如3以上,出现了些小锯齿.

继续前进!!!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有