«September 2019»
1234567
891011121314
15161718192021
22232425262728
2930


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1344441
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】][转]直线生成算法之DDA
既瑜(224499) 发表于 2005-11-25 21:24:24

[图形学]直线生成算法之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以上,出现了些小锯齿.    继续前进!!! Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=531093

阅读全文(8352) | 回复(1) | 编辑 | 精华

回复:[转]直线生成算法之DDA
冰(游客)发表评论于2009-5-14 20:59:03

VC中好像没有“GraphAlgorithm.h”头文件

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144308298 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号