亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arithmatic.cpp

?? 學習直線算法DDA與Bresenham算法的源程序
?? CPP
字號:
/*****************************************************
Arithmatic.C --DDA與Bresenham直線算法演示
         四川大學信息學院  許庶 編制  
                    2007.10.01              
******************************************************/
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <math.h>
#include <windows.h>
#include <winuser.h>
#include "resource.h"
#include <vector>

using namespace std;
void WindowInitial(HINSTANCE hInstance,HINSTANCE hPrevInstance);
long FAR PASCAL WndProc(HWND,WORD,WORD,LONG);
LRESULT CALLBACK DialogProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);   

void DrawDDB(vector <int> nx,vector <int> ny,int num);
void ClearDDB();
void CopyDDB();

void DDA(int dx1,int dy1,int dx2,int dy2);
void BRE(int bx1,int by1,int bx2,int by2);
int  Order(int numx,int numy,int p);

void  BRESENHAM(int bx1,int by1,int bx2,int by2,float m);
void  DrawLine(int Lx1,int Ly1,float dx,float dy,int num);
float sign(int a,int b,float m);

char mx1[5]="0";//直線頂點坐標
char my1[5]="0";
char mx2[5]="0";
char my2[5]="0";
   
int       Width,Height;
HWND      Thwnd;
HINSTANCE Thinstance; 
HBITMAP   hBitmap;

char szAppName[]="Arithmatic";

/*****************************************************
 程序函數主入口                               
******************************************************/
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{  Thinstance=hInstance;
   MSG msg;
   Width=400;
   Height=400;
   WindowInitial(hInstance,hPrevInstance);
   while(GetMessage(&msg,NULL,0,0)) 
   {
	  TranslateMessage(&msg);
	  DispatchMessage(&msg);
   }
   return msg.wParam;
}

/*****************************************************
 主窗口初始化                               
******************************************************/
void WindowInitial(HINSTANCE hInstance,
			HINSTANCE hPrevInstance)
{
   HWND     hWnd;
   WNDCLASS wndclass;
   HDC      hdc;
   if (!hPrevInstance) 
   {
	  wndclass.style         = CS_HREDRAW | CS_VREDRAW;
	  wndclass.cbClsExtra    = 0;
	  wndclass.cbWndExtra    = 0;
	  wndclass.hInstance     = hInstance;
	  wndclass.lpfnWndProc   = (WNDPROC)WndProc;
	  wndclass.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
	  wndclass.hCursor       = LoadCursor(NULL,IDC_ARROW);
	  wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
	  wndclass.lpszMenuName  = szAppName;
	  wndclass.lpszClassName = szAppName;

	  RegisterClass(&wndclass);
   }
   
   hdc    =GetDC(NULL);
   Width  =GetDeviceCaps(hdc,HORZRES);
   Height =GetDeviceCaps(hdc,VERTRES)-30;
   ReleaseDC(NULL,hdc);

   hWnd = CreateWindow(szAppName,
				"DDA與Bresenham直線算法演示",
				WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME,
				0,0,
				Width,
                Height, 
				NULL,NULL,hInstance,NULL);
   Thwnd=hWnd;
   ShowWindow(hWnd,SW_MAXIMIZE);
   UpdateWindow(hWnd);
   ClearDDB();
}

/*****************************************************
 對話框消息處理循環                               
******************************************************/
LRESULT CALLBACK DialogProc(HWND hDlg,UINT message,   
                            WPARAM wParam,LPARAM lParam)   
{    
     switch(message)   
     {   
       case WM_INITDIALOG:
		    return TRUE; 
       case WM_COMMAND:   
            if(LOWORD(wParam)==IDOK )     
            { 
				SendDlgItemMessage(hDlg,ID_X1, WM_GETTEXT,5,(LPARAM)mx1);
				SendDlgItemMessage(hDlg,ID_Y1, WM_GETTEXT,5,(LPARAM)my1);
				SendDlgItemMessage(hDlg,ID_X2, WM_GETTEXT,5,(LPARAM)mx2);
				SendDlgItemMessage(hDlg,ID_Y2, WM_GETTEXT,5,(LPARAM)my2);
				
                if(   abs(atoi(mx1))>550 
					||abs(atoi(mx2))>550
					||abs(atoi(my1))>400
					||abs(atoi(my2))>400
				  )
				{   MessageBox(hDlg,"您輸入的數字過大","提示",MB_OK);
					return TRUE;
				}
				EndDialog(hDlg,TRUE);   
                return TRUE;   
            }   
       break;   
	 }   
     return FALSE;     
} 

/*****************************************************
 主窗口消息處理循環                               
******************************************************/
long FAR PASCAL WndProc(HWND hWnd,WORD message,
			WORD wParam,LONG lParam)
{  
	PAINTSTRUCT ps;
	switch(message) 
	{ 
            case WM_DESTROY:
  		         PostQuitMessage(0);
				 if(hBitmap)DeleteObject(hBitmap);
		         break;
			case WM_COMMAND:
                switch(wParam) 
				{
				case ID_DDA:			  
				   DialogBox(Thinstance,MAKEINTRESOURCE(ID_ID),Thwnd,(DLGPROC)DialogProc); 
				   DDA(atoi(mx1),atoi(my1),atoi(mx2),atoi(my2));
				   return 0;
				case ID_Bre:
                   DialogBox(Thinstance,MAKEINTRESOURCE(ID_ID),Thwnd,(DLGPROC)DialogProc);  
				   BRE(atoi(mx1),atoi(my1),atoi(mx2),atoi(my2));
				   return 0;
				case ID_Me:
					MessageBox(hWnd," 四川大學 信息學院 2007 \n\n                許庶","版權信息",MB_OK);
					return 0;
				}
	        case WM_PAINT:
 		        BeginPaint(hWnd,&ps);
				CopyDDB();
                EndPaint(hWnd,&ps);
  		    break;

	}
	  return DefWindowProc(hWnd,message,wParam,lParam);
}

/*****************************************************
 繪制位圖                              
******************************************************/
void DrawDDB(vector <int> nx,vector <int> ny,int num)
{  
	int i;
	HDC hDC,hMDC;
	hDC=GetDC(Thwnd);
    hBitmap=CreateCompatibleBitmap(hDC,Width,Height);
	hMDC =CreateCompatibleDC(NULL);

	SelectObject(hMDC,hBitmap);
    PatBlt(hMDC,0,0,Width,Height,WHITENESS);

	TextOut(hMDC,Width/2+7,0,"Y",1);
	TextOut(hMDC,Width-20,Height/2-18,"X",1);
  
	for( i=0;i<Width;i++)SetPixel(hMDC,i,Height/2,0xff0000);//繪制X軸
	for( i=0;i<Height;i++)SetPixel(hMDC,Width/2,i,0xff0000);//繪制Y軸
    for( i=0;i<num;i++)SetPixel(hMDC,nx[i]+Width/2,Height/2-ny[i],0x0000ff);

    BitBlt(hDC,0,0,Width,Height,hMDC,0,0,SRCCOPY);
    DeleteObject(hMDC);
	DeleteDC(hMDC);
	ReleaseDC(Thwnd,hDC);
}

/*****************************************************
 刷新位圖                              
******************************************************/
void ClearDDB()
{   
	HDC hDC,hMDC;
	hDC=GetDC(Thwnd);

    hBitmap=CreateCompatibleBitmap(hDC,Width,Height);
	hMDC =CreateCompatibleDC(NULL);
	SelectObject(hMDC,hBitmap);
    BitBlt(hDC,0,0,Width,Height,hMDC,0,0,SRCCOPY);
    DeleteObject(hMDC);
	DeleteDC(hMDC);
	ReleaseDC(Thwnd,hDC);
}

/*****************************************************
 復制位圖                              
******************************************************/
void CopyDDB()
{   
	HDC hDC,hMDC;

	hDC=GetDC(Thwnd);
	hMDC =CreateCompatibleDC(NULL);
	SelectObject(hMDC,hBitmap);
    BitBlt(hDC,0,0,Width,Height,hMDC,0,0,SRCCOPY);
    DeleteObject(hMDC);
	DeleteDC(hMDC);
	ReleaseDC(Thwnd,hDC);
}

/*****************************************************
 DDA直線                           
******************************************************/
void DDA(int dx1,int dy1,int dx2,int dy2)
{ 
  float dx,dy;
  int numx,numy,num;
  float m;

  if(dx1!=dx2)m=(float)(dy2-dy1)/(dx2-dx1);
  numx=abs(dx1-dx2);
  numy=abs(dy1-dy2);

  if(dx1==dx2)
  {  
	 num=numy;
     dx=0;
     dy=sign(dy1,dy2,1);
     DrawLine(dx1,dy1,dx,dy,num);  
  }
  else if(dy1==dy2)
  {
	  num=numx;
	  dx=sign(dx1,dx2,1);
	  dy=0;
      DrawLine(dx1,dy1,dx,dy,num);  
  }
  else
  { 
	  if(numx>numy)
	  {
		 num=numx;	 
		 dx=sign(dx1,dx2,1);
		 dy=dx*m;
         DrawLine(dx1,dy1,dx,dy,num);
	  }
	  else
	  {
		 num=numy;	 
		 dy=sign(dy1,dy2,1);
	     dx=dy*(1/m);
         DrawLine(dx1,dy1,dx,dy,num);
	  }
  }
}

void BRE(int bx1,int by1,int bx2,int by2)    //Bresenham直線預處理
{
	if((bx1==bx2)||(by1==by2))DDA(bx1,by1,bx2,by2);
   
	float m;
	int t;
	m=(float)(by1-by2)/(bx1-bx2);
    if((m==1)||(m==(-1)))DDA(bx1,by1,bx2,by2);
	
	if(m>1)
	{
	 t=by1;by1=bx1;bx1=t;
	 t=by2;by2=bx2;bx2=t;
     BRESENHAM(bx1,by1,bx2,by2,m);
	}
    
	if((m<0)&&(m>-1))
	{
	 bx1=-bx1;bx2=-bx2;
     BRESENHAM(bx1,by1,bx2,by2,m);
	}

    if(m<-1)
	{
	 t=by1;by1=-bx1;bx1=t;
	 t=by2;by2=-bx2;bx2=t;
     BRESENHAM(bx1,by1,bx2,by2,m);
	}
    
	if(0<m && m<1)
	{
     BRESENHAM(bx1,by1,bx2,by2,m);
	}
}

/*****************************************************
 Bresenham直線                           
******************************************************/
void BRESENHAM(int bx1,int by1,int bx2,int by2,float m)
{
	int numx,numy,num;
	int p,t;
	int dx,dy;
    vector <int> Lx;
    vector <int> Ly;

	numx=abs(bx1-bx2);
    numy=abs(by1-by2);
	num=numx;
    p=2*numy-numx;
	dx=1;

	if(bx1>bx2)
	{
		t=bx1;bx1=bx2;bx2=t;
	}
    for(t=0;t<num;t++)
	{   
		if(p<0)
		{
		  dy=0;
		}
		else
		{
	      dy=1;
		}
		p=Order(numx,numy,p);
	    Lx.push_back(bx1);
	    Ly.push_back(by1);
	    bx1+=dx;
	    by1+=dy;  
	}

	if(m>1)
	{
     for(t=0;t<num;t++)
	 {
	  p=Ly[t];Ly[t]=Lx[t];Lx[t]=p;
	 }
       DrawDDB(Lx,Ly,num);
	}
    
	if((m<0)&&(m>-1))
	{
     for(t=0;t<num;t++)
	 {
	  Lx[t]=-Lx[t];
	 }
       DrawDDB(Lx,Ly,num);
	}

    if(m<-1)
	{
     for(t=0;t<num;t++)
	 {
	  p=Ly[t];Ly[t]=-Lx[t];Lx[t]=p;
	 }
       DrawDDB(Lx,Ly,num);
	}
    
	if(0<m && m<1)
	{
       DrawDDB(Lx,Ly,num);
	}
}

float sign(int a,int b,float m)
{
    if(a>b)return (-m);//判斷符號
	if(a<b)return m;
	return 0;
}

void DrawLine(int Lx1,int Ly1,float dx,float dy,int num) //繪制DDA直線
{  
	float s,t;          
	int i;
    vector <int> Lx;
    vector <int> Ly;

	s=(float)Lx1;
    t=(float)Ly1;

    for(i=0;i<num;i++)
	{   
	   Lx.push_back(s);
	   Ly.push_back(t);
	   s+=dx;
	   t+=dy;  
	}
    DrawDDB(Lx,Ly,num);
}

int Order(int numx,int numy,int p)
{
	if(p>0)
	{
		p=p+2*numy-2*numx;
	}
	else
	{
		p=p+2*numy;
	}
	return p;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本美女一区二区三区视频| 成人aa视频在线观看| 国产成人精品一区二| 色婷婷久久99综合精品jk白丝| 欧美一区在线视频| 伊人色综合久久天天| 国产剧情一区二区| 91精品中文字幕一区二区三区| 国产精品久久久久久妇女6080| 三级欧美韩日大片在线看| kk眼镜猥琐国模调教系列一区二区| 一本一道久久a久久精品综合蜜臀| 精品精品国产高清a毛片牛牛| 亚洲视频一区二区在线观看| 国产露脸91国语对白| 91精品一区二区三区在线观看| 国产精品美女久久久久久久久| 美腿丝袜亚洲色图| 欧美精品在线视频| 亚洲资源在线观看| 日本韩国精品在线| 成人欧美一区二区三区视频网页 | 成人高清视频在线| 国产亚洲一本大道中文在线| 亚洲国产一区二区在线播放| 91亚洲资源网| 日韩理论在线观看| 成人高清免费观看| 国产网站一区二区三区| 九九久久精品视频| 日韩欧美成人一区| 九九九精品视频| 精品三级在线看| 国产在线不卡一区| 久久香蕉国产线看观看99| 国产乱码精品一品二品| 久久伊99综合婷婷久久伊| 国产一区不卡在线| 国产精品午夜春色av| 成人小视频在线| 日韩理论片中文av| 欧美日韩国产123区| 奇米在线7777在线精品 | 午夜电影久久久| 欧美日韩亚洲另类| 日韩电影在线观看一区| 日韩一区二区视频| 国产高清在线精品| 国产精品水嫩水嫩| 在线观看网站黄不卡| 亚洲成人免费视| 精品久久人人做人人爽| 成人性生交大片免费| 亚洲精品视频在线| 欧美日韩一区三区四区| 精品影院一区二区久久久| 久久午夜电影网| 色系网站成人免费| 日韩中文字幕麻豆| 久久伊人中文字幕| 欧美主播一区二区三区| 蜜臀国产一区二区三区在线播放 | 欧美亚洲丝袜传媒另类| 免费在线视频一区| 国产欧美精品在线观看| 在线观看三级视频欧美| 免费高清视频精品| 中文字幕一区二区不卡| 欧美日韩在线播放一区| 国产精品一区二区在线观看不卡| 亚洲精品视频在线| 欧美精品一区二区三区四区 | 国产成人av电影在线观看| 亚洲嫩草精品久久| 日韩美一区二区三区| 99精品视频免费在线观看| 日韩福利视频网| 国产精品毛片高清在线完整版| 欧美日韩精品一二三区| 成人激情小说乱人伦| 日韩高清一区二区| 亚洲毛片av在线| 国产亚洲人成网站| 在线不卡欧美精品一区二区三区| 丁香桃色午夜亚洲一区二区三区| 天天影视涩香欲综合网| 国产精品美日韩| 精品久久久三级丝袜| 欧美色窝79yyyycom| a4yy欧美一区二区三区| 国产麻豆视频精品| av亚洲精华国产精华精华| 首页国产欧美久久| 亚洲精品菠萝久久久久久久| 久久青草欧美一区二区三区| 欧美精选一区二区| 在线精品观看国产| 99久久精品免费精品国产| 国产一区二区视频在线| 日本成人中文字幕| 亚洲高清免费视频| 亚洲猫色日本管| |精品福利一区二区三区| 2019国产精品| 日韩欧美高清dvd碟片| 欧美日韩你懂的| 在线看日韩精品电影| 91久久精品国产91性色tv| av高清久久久| 99久久精品费精品国产一区二区| 国产精品 欧美精品| 韩国v欧美v日本v亚洲v| 精品一区二区免费在线观看| 蜜臀av亚洲一区中文字幕| 免费成人在线网站| 久久99国产精品久久99| 国内精品免费**视频| 精品一区二区三区香蕉蜜桃| 久久av中文字幕片| 精品一区精品二区高清| 国产伦精品一区二区三区免费| 极品瑜伽女神91| 国产精品正在播放| 国产麻豆欧美日韩一区| 国产成人av电影在线| 99热精品一区二区| 色呦呦国产精品| 欧美三级三级三级| 日韩亚洲电影在线| 久久亚洲私人国产精品va媚药| 国产女人18毛片水真多成人如厕 | 国产精品996| 成人黄色777网| 91麻豆免费观看| 欧美色图片你懂的| 精品久久久久久久一区二区蜜臀| 久久综合久久99| 综合久久久久久| 午夜视频一区二区| 国模套图日韩精品一区二区| 丁香婷婷综合色啪| 欧美亚洲国产怡红院影院| 91精品福利在线一区二区三区| 久久精品人人做人人综合| 亚洲人成7777| 久久激情五月激情| 91在线精品秘密一区二区| 制服丝袜在线91| 亚洲国产成人一区二区三区| 亚洲一区二区三区四区中文字幕| 日韩va亚洲va欧美va久久| 高清日韩电视剧大全免费| 在线看国产一区二区| 日韩精品一区二区三区老鸭窝| 国产欧美日韩精品在线| 婷婷丁香久久五月婷婷| 国产99精品在线观看| 欧美视频日韩视频在线观看| 久久久久国产精品麻豆ai换脸| 一区二区欧美视频| 久久99久久99精品免视看婷婷| 一本色道综合亚洲| 精品国产乱码久久久久久牛牛| 亚洲精品欧美在线| 国产一区二区精品久久| 欧美视频在线播放| 欧美激情一区二区在线| 日韩电影在线观看网站| 97精品国产露脸对白| 国产精品久久久久四虎| 三级欧美在线一区| 91色在线porny| 久久精品一区二区三区四区| 亚洲成人av资源| 99精品黄色片免费大全| 久久久综合视频| 日韩精品久久理论片| 在线观看一区二区视频| 国产色产综合色产在线视频| 麻豆精品久久精品色综合| 欧美午夜精品久久久久久孕妇| 国产精品天美传媒| 国产酒店精品激情| 久久影院午夜论| 久久成人18免费观看| 欧美一区二区免费观在线| 亚洲国产成人porn| 在线视频你懂得一区| 亚洲人成在线播放网站岛国| 国产91色综合久久免费分享| 久久综合久久综合久久| 久久精品国产亚洲5555| 日韩午夜激情电影| 蜜臀精品久久久久久蜜臀| 欧美一区二区三区视频在线观看| 亚洲va国产va欧美va观看| 欧美视频在线一区| 亚洲午夜激情网页| 欧美精品自拍偷拍| 日本美女一区二区三区|