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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? contourtracer.cpp

?? 生成等值線的代碼 用VISUAL C++開(kāi)發(fā)
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
		if( ySide[i-1][j] > 0 )
			HandlingAfterNextPointFounded(i-1,j,FALSE);
		else
			HandlingAfterNextPointFounded(i-1,j+1,FALSE);
	}
	else if( ySide[i-1][j] == ySide[i-1][j+1] )
	{
		if( ySide[i-1][j] < 0 /*即ySide[i-1][j] == ySide[i-1][j+1] ==-2*/) 
		{
			HandlingAfterNextPointFounded(i-1,j,TRUE);//下一點(diǎn)在對(duì)面的橫邊上
		}
		else
		{
			
			//注意:這里需要重新計(jì)算xSide[i][j],因?yàn)樵谏弦淮我呀?jīng)被置為-2.0
			float xSideIJ = ( m_valueTracing - m_ppGridData[i][j] ) / ( m_ppGridData[i][j+1] - m_ppGridData[i][j] );
			if(  xSideIJ <= 0.5f )
			{
				HandlingAfterNextPointFounded(i-1,j,FALSE);
			}
			else
			{
				HandlingAfterNextPointFounded(i-1,j+1,FALSE);
			}
		}
	}
	else if( ySide[i-1][j] > ySide[i-1][j+1] )
	{
		if( ySide[i-1][j+1] > 0 )
			HandlingAfterNextPointFounded(i-1,j+1,FALSE);
		else
			HandlingAfterNextPointFounded(i-1,j,FALSE);
	}
	
	
}
		
//由右向左
void CContourTracer::FromRight2LeftTracing()
{
/*   
	                   橫邊(i+1,j-1)
                      xSide[i+1][j-1]
			  (i+1,j-1)    ↓    (i+1,j)
					|-----------|
					|           |
    縱邊(i,j-1)--→ |           ·←----等前等值點(diǎn)(P2)
   ySide[i][j-1]    |           |     
	                |           |
	                |-----------|    
			  (i,j-1)     ↑   (i,j)
						  橫邊(i,j-1)
						 xSide[i][j-1]	   
*/

	ASSERT( CurrentPoint.bHorV == FALSE );
	

	int i = CurrentPoint.i; 
	int j = CurrentPoint.j;	

	if( IsHavingPoint(xSide[i][j-1]) && IsHavingPoint(xSide[i+1][j-1]) )
	{
		
		if( xSide[i][j-1] < xSide[i+1][j-1] )
		{
			HandlingAfterNextPointFounded(i,j-1,TRUE);//在橫邊(i,j-1)上
		}
		else if( xSide[i][j] == xSide[i+1][j-1] )
		{
			//注意:這里需要重新計(jì)算ySide[i][j],因?yàn)樵谏弦淮我呀?jīng)被置為-2.0
			float ySideIJ = ( m_valueTracing - m_ppGridData[i][j]) / ( m_ppGridData[i+1][j] - m_ppGridData[i][j] );
			if( /*ySide[i][j]*/ ySideIJ <= 0.5f )
			{
				HandlingAfterNextPointFounded(i,j-1,TRUE);//在橫邊(i,j-1)上
			}
			else
			{
				HandlingAfterNextPointFounded(i+1,j-1,TRUE);//在橫邊(i+1,j-1)上
			}
			
		}
		else
		{
			HandlingAfterNextPointFounded(i+1,j-1,TRUE);//在橫邊(i+1,j-1)上
		}
		
	}
	else
	{
		if( IsHavingPoint(xSide[i][j-1]) )
		{
			HandlingAfterNextPointFounded(i,j-1,TRUE);//在橫邊(i,j-1)上
		}
		else if( IsHavingPoint(xSide[i+1][j-1]) )
		{
			HandlingAfterNextPointFounded(i+1,j-1,TRUE);//在橫邊(i+1,j-1)上
		}
		else if( IsHavingPoint(ySide[i][j-1]) )
		{//兩橫邊上都沒(méi)有
			HandlingAfterNextPointFounded(i,j-1,FALSE);//在縱邊(i,j-1)上
		}
		else
		{//三邊上都沒(méi)有
			ASSERT(FALSE);
		}
	}
}

//由右向左(第二版本)
void CContourTracer::FromRight2LeftTracingV2()
{/*   
	                   橫邊(i+1,j-1)
                      xSide[i+1][j-1]
			  (i+1,j-1)    ↓    (i+1,j)
					|-----------|
					|           |
    縱邊(i,j-1)--→ |           ·←----等前等值點(diǎn)(P2)
   ySide[i][j-1]    |           |     
	                |           |
	                |-----------|    
			  (i,j-1)     ↑   (i,j)
						  橫邊(i,j-1)
						 xSide[i][j-1]	   
*/
	ASSERT( CurrentPoint.bHorV == FALSE );
	int i = CurrentPoint.i; 
	int j = CurrentPoint.j;	

	if( xSide[i][j-1] < xSide[i+1][j-1] )
	{
		if( xSide[i][j-1] > 0 )
			HandlingAfterNextPointFounded(i,j-1,TRUE);
		else
			HandlingAfterNextPointFounded(i+1,j-1,TRUE);
	}
	else if( xSide[i][j-1] == xSide[i+1][j-1] )
	{
		if( xSide[i][j-1] < 0 /*namely, xSide[i][j-1] == xSide[i+1][j-1] == -2.0f*/ )
		{
			HandlingAfterNextPointFounded(i,j-1,FALSE);
		}
		else
		{
			float ySideIJ = ( m_valueTracing - m_ppGridData[i][j]) / ( m_ppGridData[i+1][j] - m_ppGridData[i][j] );
			if( ySideIJ <= 0.5f )
				HandlingAfterNextPointFounded(i,j-1,TRUE);
			else
				HandlingAfterNextPointFounded(i+1,j-1,TRUE);
		}
	}
	else if( xSide[i][j-1] > xSide[i+1][j-1] )
	{
		if( xSide[i+1][j-1] > 0 )
			HandlingAfterNextPointFounded(i+1,j-1,TRUE);
		else
			HandlingAfterNextPointFounded(i,j-1,TRUE);
		
	}
	

	
}

//追蹤一條開(kāi)等值線
void CContourTracer::TracingOneNonClosedContour()
{
	

	CCurve* pCtrLine = new CCurve;
	m_pCurveList->AddTail(pCtrLine);
	
	m_currentCurveLine = pCtrLine;
	
	//記錄下線頭所在邊的i,j,橫縱邊標(biāo)識(shí)
	int startPt_i = CurrentPoint.i; 
	int startPt_j = CurrentPoint.j;
	BOOL startPt_bHoriz = CurrentPoint.bHorV;
	
	//驗(yàn)證線頭在邊界上
	ASSERT( startPt_i == 0                     ||  /*線頭在底邊界上*/
		startPt_i == m_gridDataInfo.rows-1 ||  /*線頭在上邊界上*/
		startPt_j == 0                     ||  /*線頭在左邊界上*/
		startPt_j == m_gridDataInfo.cols-1     /*線頭在右邊界上*/ 
		);

	CalcAndSaveOnePointCoord(startPt_i,startPt_j,startPt_bHoriz,CurrentPoint.x,CurrentPoint.y); //計(jì)算出線頭的坐標(biāo)并保存

	
	if( startPt_bHoriz )
	{
		xSide[startPt_i][startPt_j] = -2.0f;
	}
	else
	{
		ySide[startPt_i][startPt_j] = -2.0f;
	}
	
	TracingNextPoint(); //追蹤出NextPoint
	
	PreviousPoint = CurrentPoint;
	CurrentPoint = NextPoint;
	
	int cols = m_gridDataInfo.cols;
	int rows = m_gridDataInfo.rows;
	
	
	//遇到網(wǎng)格邊界就結(jié)束追蹤
	
	//------2004/03/09修改------------------
	//為了不讓浮點(diǎn)數(shù)計(jì)算的誤差引起追蹤結(jié)束條件的判斷失誤,
	//我們不能用『CurrentPoint.y <= yMin』來(lái)判斷是否遇到底邊框,
	//  也不能用『CurrentPoint.x <= xMin』來(lái)判斷是否遇到左邊框
	BOOL bIsFinish = (CurrentPoint.i == 0 && CurrentPoint.bHorV == TRUE )  ||  /*遇到底邊界,(注:不能僅僅用CurrentPoint.i == 0判斷)*/
		(CurrentPoint.i == rows-1)                            ||  /*遇到上邊界*/
		(CurrentPoint.j == 0 && CurrentPoint.bHorV == FALSE ) ||  /*遇到左邊界,(注:不能僅僅用CurrentPoint.j == 0判斷)*/
		(CurrentPoint.j == cols-1) ;                              /*遇到右邊界*/
	
	
	
	
	while( !bIsFinish )
	{
		TracingNextPoint();
		
		PreviousPoint = CurrentPoint;
		CurrentPoint = NextPoint;
		
		bIsFinish = (CurrentPoint.i == 0 && CurrentPoint.bHorV == TRUE )  ||
			(CurrentPoint.i == rows-1)                            || 
			(CurrentPoint.j == 0 && CurrentPoint.bHorV == FALSE ) ||
			(CurrentPoint.j == cols-1) ;
		
	}
}

//追蹤開(kāi)曲線
void CContourTracer::TracingNonClosedContour()
{//該函數(shù)的關(guān)鍵是找出開(kāi)曲線的線頭,并設(shè)置好追蹤前進(jìn)的方向的條件
	
	int i,j;
	int cols = m_gridDataInfo.cols;
	int rows = m_gridDataInfo.rows;	

	//1.搜索底邊框	
	for(j=0; j<cols-1; j++)
	{
		if( IsHavingPoint(xSide[0][j]) )
		{
			/*按自下向上的前進(jìn)方向虛設(shè)前一點(diǎn)的i,j*/
			PreviousPoint.i = -1; // 假設(shè)前一點(diǎn)在-1行,這樣下一點(diǎn)到當(dāng)前點(diǎn)的前進(jìn)方向就是自下向上的
			PreviousPoint.j = j;
			PreviousPoint.bHorV = TRUE;

			CurrentPoint.i = 0; //底邊的行號(hào)為0,所以設(shè)置線頭的i為0
			CurrentPoint.j = j;
			CurrentPoint.bHorV = TRUE; //底邊是橫邊

			TracingOneNonClosedContour();	
		}
	}

	//2.搜索左邊框(左邊框在第0列)
	for(i=0; i<rows-1; i++)
	{
		if( IsHavingPoint(ySide[i][0]) )
		{
			/*按由左向右的前進(jìn)方向虛設(shè)前一點(diǎn)的i,j*/
			PreviousPoint.i = i; 
			PreviousPoint.j = -1; //假設(shè)前一點(diǎn)在-1列,使其滿足左-->右的前進(jìn)方向
			PreviousPoint.bHorV = FALSE;
			
			CurrentPoint.i = i; 
			CurrentPoint.j = 0; //左邊框在第0列,所以設(shè)置線頭的j為0
			CurrentPoint.bHorV = FALSE; 
			
			TracingOneNonClosedContour();	
		}
	}

	//3.搜索上邊框

	float deltX = ( m_gridDataInfo.xMax-m_gridDataInfo.xMin ) / ( m_gridDataInfo.cols-1 );
    float curPt_Col_X = m_gridDataInfo.xMin + CurrentPoint.j * deltX; //當(dāng)前等值點(diǎn)所在邊(i,j)的所標(biāo)識(shí)的j列的X坐標(biāo)
	
	for(j=0; j<cols-1; j++)
	{
		if( IsHavingPoint(xSide[rows-1][j]) )
		{
			/*虛設(shè)出由上向下追蹤的條件
			  由上向下追蹤的條件如下: 	 
			  1. Not( CurrentPoint.i > PreviousPoint.i )
			  2. Not( CurrentPoint.j > PreviousPoint.j )
			  3. CurrentPoint.x > m_gridDataInfo.xMin + CurrentPoint.j * deltX; 即:要求在橫邊上
			*/
			PreviousPoint.i = rows-1; 
			PreviousPoint.j = j;
			PreviousPoint.bHorV = TRUE;
			
			CurrentPoint.i = rows-1; //上邊框的行號(hào)為rows-1
			CurrentPoint.j = j;
			CurrentPoint.bHorV = TRUE; //使其符合第三個(gè)條件


			//第三個(gè)條件條件不用虛設(shè),只要邊上存在就會(huì)滿足第三個(gè)條件,因?yàn)樯线吙蚴菣M邊
//			if( CurrentPoint.x < curPt_Col_X )
//			{
//				CurrentPoint.x = curPt_Col_X + 1; //為了保證讓其滿足第3個(gè)條件
//			}
			
			
		 	
			TracingOneNonClosedContour();	
		}
	}

	//4.搜索右邊框(在第cols-1列,注意列號(hào)是從0開(kāi)始計(jì)數(shù)的)

	
	for(i=0; i<rows-1; i++)
	{
		if( IsHavingPoint(ySide[i][cols-1]) )
		{
			/*虛設(shè)出由右向左追蹤的條件
			
			  由右向左追蹤的條件如下: 	 
			  1. Not( CurrentPoint.i > PreviousPoint.i )
			  2. Not( CurrentPoint.j > PreviousPoint.j )
			  3. Not( CurrentPoint.x > m_gridDataInfo.xMin + CurrentPoint.j * deltX ); 要求在縱邊上			
			*/
			PreviousPoint.i = i; 
			PreviousPoint.j = cols-1; 
			PreviousPoint.bHorV = FALSE;
			
			CurrentPoint.i = i; 
			CurrentPoint.j = cols-1; //右邊框在第cols-1列
			CurrentPoint.bHorV = FALSE;  //使其符合第三個(gè)條件

//			//虛設(shè)出第三個(gè)條件
//			CurrentPoint.x = curPt_Col_X - 1;//減去1,使之比curPt_Col_X小
			
			TracingOneNonClosedContour();	
		}
	}
	
}

void CContourTracer::TracingClosedContour()
{
	
	
	int cols = m_gridDataInfo.cols;
	int rows = m_gridDataInfo.rows;

	//搜索所有的除了邊框外的縱邊,從左到右搜索每一列上的縱邊,對(duì)于一列,從下到上搜索
	for(int j=1; j<cols-1; j++) //j從1開(kāi)始
		for(int i=0; i<rows-1; i++) //i從0開(kāi)始
		{
			if( IsHavingPoint(ySide[i][j])) 
			{
				TracingOneClosedContour(i,j);				
			}
			
		}
}

//從縱邊開(kāi)始追蹤一條封閉等值線(注:是從縱邊開(kāi)始搜索)
void CContourTracer::TracingOneClosedContour(int startPt_i, int startPt_j)
{//參數(shù)i,j是該閉曲線的第一個(gè)等值點(diǎn)的i,j

	CCurve* pCtrLine = new CCurve;
	
	m_pCurveList->AddTail(pCtrLine);
	m_currentCurveLine = pCtrLine;
	
	//虛設(shè)前一等值點(diǎn)的i,j,讓其滿足從左向右追蹤的條件
	PreviousPoint.i = startPt_i;
	PreviousPoint.j = 0;
	PreviousPoint.bHorV = FALSE;
	
	CurrentPoint.i = startPt_i;
	CurrentPoint.j = startPt_j;
	CurrentPoint.bHorV = FALSE;   //是FALSE,因?yàn)槭窃诳v邊上
	
	
	
	
	//	float startPt_x;
	//	float startPt_y;
	CalcAndSaveOnePointCoord(startPt_i,startPt_j,FALSE/*線頭在縱邊上*/,CurrentPoint.x,CurrentPoint.y);
	
	TracingNextPoint();
	
	PreviousPoint = CurrentPoint;
	CurrentPoint = NextPoint;
	
	BOOL bColsed = FALSE;
	
	while(!bColsed) 
	{
		TracingNextPoint();
		
		PreviousPoint = CurrentPoint;
		CurrentPoint = NextPoint;
		
		//------2004/03/09修改------------------
		//用等值點(diǎn)所在邊的標(biāo)識(shí)i,j來(lái)判斷曲線是否封閉,不用x、y坐標(biāo)來(lái)比較,因?yàn)楦↑c(diǎn)數(shù)計(jì)算會(huì)出現(xiàn)誤差
		//	bColsed = (CurrentPoint.x == startPt_x) && (CurrentPoint.y == startPt_y);
		bColsed = ( CurrentPoint.i == startPt_i ) && 
			( CurrentPoint.j == startPt_j ) && 
			( CurrentPoint.bHorV == FALSE );
		
		
	}
	
	ySide[startPt_i][startPt_j] = -2.0f; //已經(jīng)追蹤過(guò)
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩国产综合草草| 国产亚洲一区二区三区四区 | 日本一区二区视频在线观看| 久久精品国产亚洲a| 69堂亚洲精品首页| 天天做天天摸天天爽国产一区| 欧美在线视频日韩| 亚洲综合男人的天堂| 91免费观看视频在线| 亚洲精品国产一区二区精华液| 99r国产精品| 日韩美女视频一区| 日本一区二区视频在线| 国产成人av自拍| 欧美极品xxx| 99久久国产综合色|国产精品| 亚洲欧美成人一区二区三区| 日本久久一区二区| 亚洲一区av在线| 欧美疯狂性受xxxxx喷水图片| 日韩二区在线观看| 日韩欧美国产综合在线一区二区三区| 麻豆精品新av中文字幕| 精品久久久久久久久久久院品网| 国内精品视频一区二区三区八戒| 国产偷国产偷亚洲高清人白洁 | 国产乱一区二区| 久久久久国产精品人| 丁香婷婷综合色啪| 亚洲欧洲三级电影| 在线国产电影不卡| 天天色综合成人网| 精品国产制服丝袜高跟| 国产成人aaa| 亚洲婷婷国产精品电影人久久| 91浏览器打开| 亚洲aaa精品| 精品国产91亚洲一区二区三区婷婷 | 亚洲美女免费视频| 欧美日本一区二区在线观看| 美国毛片一区二区| 国产亚洲成av人在线观看导航| 99国产欧美另类久久久精品| 亚洲国产日韩精品| 日韩精品一区二区三区老鸭窝| 国产精品亚洲专一区二区三区 | 久久精品国产精品亚洲红杏| 国产日韩欧美不卡| 在线视频综合导航| 天堂午夜影视日韩欧美一区二区| 精品国产精品网麻豆系列| 成人aaaa免费全部观看| 亚洲国产色一区| 2020国产成人综合网| 91亚洲国产成人精品一区二区三| 日韩中文字幕1| 久久久精品一品道一区| 色婷婷久久久综合中文字幕| 老司机免费视频一区二区三区| 国产精品国产三级国产a| 欧美乱妇15p| 岛国av在线一区| 亚洲成人av在线电影| 国产午夜精品一区二区| 中文无字幕一区二区三区| 欧美视频精品在线| 国产98色在线|日韩| 亚洲国产一区在线观看| 久久久美女毛片| 日本电影亚洲天堂一区| 国产呦精品一区二区三区网站| 一区二区高清视频在线观看| 2023国产一二三区日本精品2022| 欧美亚洲一区二区在线观看| 国产成人夜色高潮福利影视| 天堂av在线一区| 国产精品福利在线播放| 日韩一卡二卡三卡国产欧美| 色噜噜夜夜夜综合网| 国产一区二区精品久久| 偷窥少妇高潮呻吟av久久免费| 国产无一区二区| 91精品国产丝袜白色高跟鞋| 一本一道波多野结衣一区二区| 国产自产v一区二区三区c| 午夜电影久久久| 国产精品乱码久久久久久| 日韩精品一区二| 精品视频在线看| 99久久婷婷国产| 国产乱子轮精品视频| 日韩电影免费在线看| 亚洲激情图片小说视频| 日本一区二区综合亚洲| 精品欧美一区二区久久| 欧美日韩在线观看一区二区| www.日本不卡| 国产精品白丝jk白祙喷水网站| 日韩—二三区免费观看av| 一区二区日韩电影| 国产精品每日更新在线播放网址| 欧美成人a∨高清免费观看| 欧美人牲a欧美精品| 在线亚洲一区观看| www.66久久| 国产精品亚洲人在线观看| 美女视频网站黄色亚洲| 亚洲va欧美va人人爽午夜| 亚洲精品老司机| 国产精品欧美综合在线| 久久综合九色综合欧美亚洲| 日韩片之四级片| 91精品国产欧美日韩| 欧美专区在线观看一区| 91国内精品野花午夜精品| a亚洲天堂av| 久久久久久久国产精品影院| 日韩一区二区三区电影| 制服丝袜中文字幕亚洲| 欧美欧美欧美欧美首页| 欧美日韩成人一区| 欧美亚州韩日在线看免费版国语版| 97精品视频在线观看自产线路二| 国产一区二区三区在线观看精品| 精品无人码麻豆乱码1区2区 | 夜夜爽夜夜爽精品视频| 亚洲欧美日韩国产综合| 亚洲欧美日韩在线不卡| 亚洲精品中文字幕乱码三区| 中文字幕在线不卡国产视频| 日韩一区日韩二区| 中文字幕一区视频| 亚洲欧美日韩在线不卡| 亚洲精品国产一区二区精华液| 一区二区三区四区不卡在线 | 从欧美一区二区三区| 成人中文字幕合集| 成人av电影在线网| 97超碰欧美中文字幕| 一本一本大道香蕉久在线精品| 在线观看日产精品| 欧美日韩国产高清一区二区三区| 欧美精选午夜久久久乱码6080| 欧美一区二区三区在线观看| 欧美电视剧免费全集观看| 久久久久国产成人精品亚洲午夜| 欧美国产精品一区二区三区| 亚洲欧洲精品一区二区三区| 亚洲男人的天堂一区二区| 一区二区三区日韩欧美| 亚洲va中文字幕| 久久精品二区亚洲w码| 国产精品 欧美精品| 99视频超级精品| 一本久道久久综合中文字幕| 欧美人体做爰大胆视频| 精品伦理精品一区| 国产亚洲女人久久久久毛片| 亚洲欧洲成人精品av97| 亚洲一区二区三区中文字幕| 日本不卡一二三区黄网| 国产在线精品一区二区不卡了| 久久精品人人做人人综合| 国产精品卡一卡二| 亚洲第一会所有码转帖| 久久国内精品自在自线400部| 粉嫩久久99精品久久久久久夜| 在线观看日韩高清av| 日韩午夜中文字幕| 中文字幕精品一区二区三区精品| 一区二区在线免费观看| 秋霞影院一区二区| 国产成人午夜视频| 91在线国内视频| 欧美精品一二三| 久久久亚洲国产美女国产盗摄 | 欧美国产成人精品| 亚洲综合另类小说| 久久精品国产秦先生| 91免费小视频| 欧美一二三区在线| 中文字幕乱码久久午夜不卡 | 亚洲国产日产av| 精品亚洲成a人在线观看| 97精品国产露脸对白| 欧美一区欧美二区| 国产精品久久夜| 日本欧美在线观看| 99久久久国产精品| 日韩午夜精品视频| 亚洲少妇屁股交4| 麻豆成人久久精品二区三区红 | 成人av手机在线观看| 日韩一级完整毛片| 亚洲视频在线一区观看| 免费成人在线影院| 色94色欧美sute亚洲13| 久久久久国产成人精品亚洲午夜| 亚洲成a人v欧美综合天堂|