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

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

?? 航路規劃view.cpp

?? 基于A算法的航路規劃算法源碼
?? CPP
字號:
// 航路規劃View.cpp : implementation of the CMyView class
//

#include "stdafx.h"
#include "航路規劃.h"

#include "航路規劃Doc.h"
#include "航路規劃View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "inputdialog.h"
#include "math.h"
/////////////////////////////////////////////////////////////////////////////
// CMyView

IMPLEMENT_DYNCREATE(CMyView, CView)

BEGIN_MESSAGE_MAP(CMyView, CView)
	//{{AFX_MSG_MAP(CMyView)
	ON_COMMAND(input, Oninput)
	ON_COMMAND(start, Onstart)
	ON_EN_MAXTEXT(IDC_ED, OnMaxtextEd)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyView construction/destruction

CMyView::CMyView()
{
	// TODO: add construction code here

}

CMyView::~CMyView()
{
}

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyView drawing

void CMyView::OnDraw(CDC* pDC)
{

	
	
	
	
	
	CMyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
    
	struct obstaclenode * obp;
    
	struct node * closepointer,*cp1,*cp2,
              *openhead,*op1,*op2,
              *expandinghead,*expandingpointer,*ep1,*ep2,
			  *routepointer;	
           
	int n=0;
    int a,b;
	

if(pDoc->startsearch==1)
{///////////////////////////////////////////////////////////////////////////
//close,open,expanding鏈表初始化

struct node node[7];
    for(int i=0;i<7;i++)
	   {
		     node[i].x=0;
			 node[i].y=0;
			  node[i].docost=0;
			  node[i].undocost=0;
			  node[i].fathernodepointer=NULL;
	   }                              
cp1=&node[0];
cp2=closepointer=&node[1];
cp1->next=cp2;
cp2->next=NULL;


ep1=&node[2];
ep2=&node[3];
ep1->next=ep2;
ep2->next=NULL;


op1=&node[4];
op2=&node[5];
openhead=&node[6];
op1->next=op2;
op2->next=openhead;
	 node[6].x=pDoc->startx;
     node[6].y=pDoc->starty;
	 node[6].undocost=sqrt(500*500+900*900);
	 node[6].fathernodepointer=NULL;
	 node[6].next=NULL;  
    
//循環取open首點進行擴展
  while(openhead!=NULL)
  {                                       
/////////////////////////////////////////////////////////
// open首點移入close鏈表
         closepointer->next=openhead;
		 closepointer=openhead;
         
		 openhead=openhead->next;
		 node[5].next=openhead;

         closepointer->next=NULL;
///////////////////////////////////////////////////////////
//建立expanding鏈表(第一次合法性檢查)
expandingpointer=&node[3];   
		 for (int j=0; j<3; j++)
	     {  
			 switch(j)
	            {
                  case(0):a=closepointer->x+1;b=closepointer->y-1;
		  		          break;
				  case(1):a=closepointer->x+1;b=closepointer->y;
		  		          break;
				  case(2):a=closepointer->x+1;b=closepointer->y+1;
		  		          break;
	             }
		  
		       n=0; 
               obp=(pDoc->obstaclepreviousnode).next;  /*傳入obstacle鏈表頭指針*/                            
			   
			   while(obp!=NULL)
			   {
				   if((obp->x-a)*(obp->x-a)+(obp->y-b)*(obp->y-b)<=obp->r*obp->r)
					  
				   { 
					    n=1;
					   break;
				   }
	               obp=obp->next;
			   }
			 if(n==1)
			 continue;
			  
             if(a>=pDoc->endx+1)
			 goto display1; /*超界檢查*/
			 
			 
			 expandingpointer->next=(struct node*)malloc(sizeof(struct node));  /*分配內存空間*/
             expandingpointer=expandingpointer->next;/*鏈入expanding表*/

               expandingpointer->x=a;/*節點賦值*/
               expandingpointer->y=b;
             switch(j)
			      {    
			         case(0):expandingpointer->docost=closepointer->docost+1.4f;
		           	           break;
		                  case(1):expandingpointer->docost=closepointer->docost+1;   /*可取二維五叉樹,三叉樹或三維搜索*/
		           	          break;
                        case(2):expandingpointer->docost=closepointer->docost+1.4f;
			                   break;
	               }                                       
	          expandingpointer->undocost=fabs(5*a+9*b-5900)/sqrt(106)+
				                         sqrt((pDoc->endx-a)*(pDoc->endx-a)+(pDoc->endy-b)*(pDoc->endy-b)); 
              expandingpointer->fathernodepointer=closepointer;
              expandingpointer->next=NULL;
              
			  if(a==pDoc->endx && b==pDoc->endy)
              {  
                  pDoc->startsearch=0;
			     goto display2;/*搜索結束跳出并顯示*/
			  }
		 }    
/////////////////////////////////////////////////////////
//expanding節點第二次檢查
ep1=&node[2];
ep2=&node[3];

        while(ep2->next!=NULL)
        { 
					ep1=ep1->next;
              loop: ep2=ep1->next;
////////////////////// 
//比較close鏈表
cp1=&node[0];
cp2=&node[1];
                    n=0;
					while(cp2->next!=NULL)
	                {	
			                cp1=cp1->next;
			                 cp2=cp1->next;
		                     if(cp2->x==ep2->x && cp2->y==ep2->y)
							 {    
							   n=1;
							   break;
							 }
					  }

					if(n==1)  
					{		 
				           if(cp2->docost<=ep2->docost)
						   { 
					         	ep1->next=ep2->next;
                               free(ep2);     /*expanding節點刪除*/
                               if(ep1->next!=NULL)  /*校正expanding指針*/
								goto loop; 
							   else  break;
						   }
                           else 
						   {     
		      	    	 		cp1->next=cp2->next;
                               free(cp2);      /*close節點刪除*/
                                continue;
						   }     	 
					}	   

/////////////////////
//比較open鏈表
op1=&node[4];
op2=&node[5];
                    n=0;
                    while(op2->next!=NULL)
	                {	
			               op1=op1->next;
			               op2=op1->next;
		                   if(op2->x==ep2->x && op2->y==ep2->y)
						   {  
							   n=1;
							   break;
						   }
					}
                    
					if(n==1)
					{    
						    if(op2->docost<=ep2->docost)
							{ 
					            ep1->next=ep2->next;
                                free(ep2);    /*expanding節點刪除*/
                               if(ep1->next!=NULL) /*校正expanding指針*/
								goto loop;
							   else  break;
							}                
                            else 
							{  
			            	    op1->next=op2->next;
                                 free(op2);   /*open節點刪除*/
							}
					}
		}
//////////////////////////////////////////////////////
//把expanding節點從小到大插入已有open鏈表中
        while( node[3].next != NULL )
          {	
	                 expandinghead=node[3].next;
		        	 node[3].next=expandinghead->next;
op1=&node[4];
op2=&node[5];	    
         		
                    n=0;
                    while(op2->next!=NULL)
	                {
			               op1=op1->next;
		         	       op2=op1->next;
                            if(0.4*expandinghead->docost+0.6*expandinghead->undocost<=0.4*op2->docost+0.6*op2->undocost)     /*g(n),h(n)選擇設置*/
                           {   
							   n=1;
							   break; 
						   }
					  }
	                if(n==1)
					{
						op1->next=expandinghead;
	                    expandinghead->next=op2;
					}
					else	
					{
			             op2->next=expandinghead;
		                 expandinghead->next=NULL;
					}
			 }
       openhead=node[5].next;
   }
///////////////////////////////////////////////////////////////////
//總循環跳出
display1: pDC->TextOut(400,300,"規劃失敗");   

display2: routepointer=expandingpointer;
		  CPen tPen;
		tPen.CreatePen(PS_SOLID, 1, RGB(0,255,0));
		CPen * tOldPen;
		tOldPen = pDC->SelectObject(&tPen);
         pDC->MoveTo(routepointer->x,routepointer->y);
		 while(routepointer->fathernodepointer!=NULL)
		   {
				 routepointer=routepointer->fathernodepointer;
				 pDC->LineTo(routepointer->x,routepointer->y);
			 }
		pDC->SelectObject(tOldPen);


}
//////////////////////////////////////////////////////////////////////////////////////////////
//if選擇繪路徑結束,開始畫障礙圓

     pDC->SelectStockObject(BLACK_BRUSH);
		   obp=(pDoc->obstaclepreviousnode).next;  /*傳入obstacle鏈表頭指針*/ 
		   while(obp!=NULL)
			 {  
			        pDC->Ellipse(obp->x-obp->r,obp->y-obp->r,obp->x+obp->r,obp->y+obp->r);
					obp=obp->next;
			   }




TRACE ("規劃失敗"規劃失敗"");



} 

/////////////////////////////////////////////////////////////////////////////
// CMyView printing

BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyView diagnostics

#ifdef _DEBUG
void CMyView::AssertValid() const
{
	CView::AssertValid();
}

void CMyView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
	return (CMyDoc*)m_pDocument;
}


#endif //_DEBUG
////////////////////////////////////////////////////////////////////////////////////////
// CMyView message handlers

void CMyView::Oninput() 
{	CMyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your command handler code here
	
	    inputdialog dlg;
		if(dlg.DoModal()==IDOK)
        {   
			  (pDoc->obstaclepointer)->next=(struct obstaclenode*)malloc(sizeof(struct obstaclenode));
		      (pDoc->obstaclepointer)=(pDoc->obstaclepointer)->next;
             
			  (pDoc->obstaclepointer)->x=dlg.x;
              (pDoc->obstaclepointer)->y=dlg.y;
			  (pDoc->obstaclepointer)->r=dlg.r;
			  (pDoc->obstaclepointer)->next=NULL;
		}
			  
     Invalidate(FALSE);
}

void CMyView::Onstart() 
{  	CMyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);  
	// TODO: Add your command handler code here
	
	pDoc->startsearch=1;
    Invalidate(FALSE);
}

void CMyView::OnMaxtextEd() 
{
	// TODO: Add your control notification handler code here
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美sm美女调教| 欧美激情一区二区三区不卡| 激情都市一区二区| 一区二区三区在线观看国产| 欧美tickling挠脚心丨vk| 91首页免费视频| 国产一区二区调教| 天堂一区二区在线免费观看| 国产精品白丝在线| 国产午夜精品久久久久久免费视| 欧美婷婷六月丁香综合色| 粉嫩高潮美女一区二区三区| 日本女人一区二区三区| 一个色在线综合| 国产精品成人一区二区三区夜夜夜 | 捆绑紧缚一区二区三区视频| 悠悠色在线精品| 国产精品女主播在线观看| 欧美tickling挠脚心丨vk| 3751色影院一区二区三区| 在线观看www91| 一本色道久久加勒比精品| 国产成人精品综合在线观看 | 欧美日韩激情一区| 色女孩综合影院| av男人天堂一区| 国产成人鲁色资源国产91色综| 久久国产福利国产秒拍| 丝袜美腿一区二区三区| 污片在线观看一区二区| 亚洲综合免费观看高清完整版| 国产精品卡一卡二卡三| 国产精品毛片久久久久久| 中文字幕精品一区二区精品绿巨人 | 亚洲www啪成人一区二区麻豆| 亚洲精品欧美激情| 亚洲猫色日本管| 亚洲激情自拍偷拍| 亚洲乱码精品一二三四区日韩在线| 国产精品美女久久久久久久久 | 日韩av电影天堂| 免费观看成人鲁鲁鲁鲁鲁视频| 婷婷国产v国产偷v亚洲高清| 婷婷亚洲久悠悠色悠在线播放| 日韩精品一卡二卡三卡四卡无卡| 日本午夜精品视频在线观看| 日本女人一区二区三区| 精品一区在线看| 国产精品中文字幕欧美| 成人三级伦理片| 91啪九色porn原创视频在线观看| 91美女蜜桃在线| 在线免费观看日韩欧美| 在线不卡免费欧美| 久久综合精品国产一区二区三区| 日本一区二区三区四区| 亚洲欧洲日韩综合一区二区| 亚洲综合丝袜美腿| 日韩黄色一级片| 国产资源在线一区| 成人丝袜视频网| 欧美午夜理伦三级在线观看| 7777精品伊人久久久大香线蕉 | 在线亚洲+欧美+日本专区| 欧美精品久久久久久久多人混战 | 国产精品丝袜久久久久久app| 亚洲欧美一区二区三区孕妇| 亚洲电影在线免费观看| 另类中文字幕网| 成人18视频日本| 在线综合+亚洲+欧美中文字幕| 精品对白一区国产伦| 国产精品福利av| 日韩国产在线一| 成人深夜视频在线观看| 欧美日韩国产精品成人| 久久免费的精品国产v∧| 亚洲精品欧美在线| 韩国av一区二区三区四区| 色婷婷av一区二区三区之一色屋| 日韩久久精品一区| 一区二区中文视频| 紧缚捆绑精品一区二区| 色综合一区二区| 久久综合av免费| 亚洲成人在线网站| 成人性生交大片免费看视频在线| 欧美色图片你懂的| 国产欧美一区视频| 蜜臀va亚洲va欧美va天堂| 成人h动漫精品一区二区| 日韩一级完整毛片| 亚洲在线观看免费| 成人综合在线视频| 欧美一二三区精品| 一区二区三区四区视频精品免费| 国内精品伊人久久久久av一坑 | 一区二区三区精品视频| 国产一区二区三区最好精华液| 色婷婷国产精品| 中文字幕乱码亚洲精品一区 | 欧美aaa在线| 欧美午夜理伦三级在线观看| 国产精品网站导航| 国内欧美视频一区二区| 欧美一区二区性放荡片| 亚洲精品伦理在线| 成人爽a毛片一区二区免费| 精品国精品自拍自在线| 肉肉av福利一精品导航| 欧美午夜一区二区三区| 国产精品白丝在线| 成人在线综合网| 欧美激情综合五月色丁香| 久久精品免费观看| 欧美久久久久中文字幕| 亚洲精品免费播放| 色伊人久久综合中文字幕| 国产精品伦理一区二区| 国产成人夜色高潮福利影视| 精品久久人人做人人爰| 麻豆国产精品777777在线| 91精品黄色片免费大全| 五月天亚洲婷婷| 欧美高清你懂得| 亚洲成人777| 欧美三区免费完整视频在线观看| 亚洲女人的天堂| 一本色道亚洲精品aⅴ| 亚洲欧美二区三区| 日本韩国精品在线| 亚洲精品视频免费看| 在线精品亚洲一区二区不卡| 一区二区三区日韩精品视频| 91网上在线视频| 一区二区三区免费看视频| 91国产免费观看| 亚洲地区一二三色| 欧美一级片在线观看| 久久精品999| 国产日韩精品视频一区| 成人动漫在线一区| 亚洲精品美国一| 欧美日韩国产bt| 麻豆极品一区二区三区| 久久亚洲欧美国产精品乐播| 国产成人午夜电影网| 亚洲视频一区二区免费在线观看| 一本久久综合亚洲鲁鲁五月天| 亚洲精品视频在线观看免费| 欧美美女一区二区在线观看| 裸体一区二区三区| 国产视频一区二区在线| av中文一区二区三区| 亚洲一区精品在线| 777午夜精品免费视频| 国产一区二区在线观看免费| 国产精品国模大尺度视频| 欧美做爰猛烈大尺度电影无法无天| 亚洲国产精品嫩草影院| 日韩精品一区二区三区在线播放 | 99国产精品国产精品毛片| 亚洲激情欧美激情| 538prom精品视频线放| 国产丶欧美丶日本不卡视频| 亚洲视频一二区| 欧美一级黄色大片| av在线不卡电影| 日韩中文欧美在线| 欧美激情一区三区| 欧美日韩在线播放三区四区| 韩国一区二区三区| 一区二区三区在线观看欧美| 日韩欧美在线影院| 91影院在线观看| 欧美色图激情小说| 国产很黄免费观看久久| 亚洲一区在线播放| 国产亚洲午夜高清国产拍精品| 一本大道av伊人久久综合| 蜜桃91丨九色丨蝌蚪91桃色| 欧美国产1区2区| 在线播放91灌醉迷j高跟美女| 国产999精品久久久久久绿帽| 亚洲一区电影777| 国产女人aaa级久久久级| 欧美精品 日韩| www.日韩在线| 国产在线麻豆精品观看| 亚洲一区二区三区四区在线 | 成人影视亚洲图片在线| 石原莉奈一区二区三区在线观看| 日本一区二区三区在线不卡| 欧美麻豆精品久久久久久| 99精品久久免费看蜜臀剧情介绍| 九一久久久久久| 亚洲一区二区三区影院| 欧美高清在线一区二区| 精品免费国产一区二区三区四区| 91在线视频观看|