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

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

?? contourtracer.cpp

?? 等值線追蹤與繪制(源代碼)(1.0).rar
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		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)在對面的橫邊上
		}
		else
		{
			
			//注意:這里需要重新計算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] )
		{
			//注意:這里需要重新計算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]) )
		{//兩橫邊上都沒有
			HandlingAfterNextPointFounded(i,j-1,FALSE);//在縱邊(i,j-1)上
		}
		else
		{//三邊上都沒有
			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);
		
	}
	

	
}

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

	CCurve* pCtrLine = new CCurve;
	m_pCurveList->AddTail(pCtrLine);
	
	m_currentCurveLine = pCtrLine;
	
	//記錄下線頭所在邊的i,j,橫縱邊標(biāo)識
	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); //計算出線頭的坐標(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ù)計算的誤差引起追蹤結(jié)束條件的判斷失誤,
	//我們不能用『CurrentPoint.y <= yMin』來判斷是否遇到底邊框,
	//  也不能用『CurrentPoint.x <= xMin』來判斷是否遇到左邊框
	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) ;
		
	}
}

//追蹤開曲線
void CContourTracer::TracingNonClosedContour()
{//該函數(shù)的關(guān)鍵是找出開曲線的線頭,并設(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; //底邊的行號為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)識的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; //上邊框的行號為rows-1
			CurrentPoint.j = j;
			CurrentPoint.bHorV = TRUE; //使其符合第三個條件


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

	//4.搜索右邊框(在第cols-1列,注意列號是從0開始計數(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;  //使其符合第三個條件

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

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

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

//從縱邊開始追蹤一條封閉等值線(注:是從縱邊開始搜索)
void CContourTracer::TracingOneClosedContour(int startPt_i, int startPt_j)
{//參數(shù)i,j是該閉曲線的第一個等值點(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)識i,j來判斷曲線是否封閉,不用x、y坐標(biāo)來比較,因?yàn)楦↑c(diǎn)數(shù)計算會出現(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)追蹤過
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一二三不卡| 亚洲一区二区视频在线观看| 在线日韩国产精品| 国产精品综合二区| 亚洲va在线va天堂| 成人欧美一区二区三区1314 | 国产一区二区三区蝌蚪| 亚洲老妇xxxxxx| 国产亚洲成年网址在线观看| 欧美日韩高清一区二区三区| 99热在这里有精品免费| 国内偷窥港台综合视频在线播放| 亚洲成人av福利| 日韩一区有码在线| 国产精品午夜久久| 久久久久国产精品厨房| 91精品在线一区二区| 日本韩国一区二区| 成人黄色免费短视频| 国产真实乱子伦精品视频| 日韩成人一区二区三区在线观看| 亚洲日本丝袜连裤袜办公室| 久久综合资源网| 欧美一区二区三区免费视频| 欧美性生活一区| 在线影视一区二区三区| a4yy欧美一区二区三区| 国产乱一区二区| 国内精品免费**视频| 奇米一区二区三区av| 天堂精品中文字幕在线| 亚洲国产中文字幕| 亚洲成人免费电影| 亚洲成国产人片在线观看| 一区二区三区四区高清精品免费观看| 中文字幕在线播放不卡一区| 国产网红主播福利一区二区| 精品国产一二三区| 精品少妇一区二区三区视频免付费 | 亚洲精品在线网站| 欧美一级淫片007| 欧美日本在线一区| 91精品在线观看入口| 91精品欧美一区二区三区综合在 | 欧美色综合网站| 欧美午夜精品一区二区蜜桃| 欧美日韩一级片在线观看| 精品视频在线免费观看| 欧美年轻男男videosbes| 欧美三级日韩在线| 欧美精品亚洲二区| 欧美一区二区三区影视| 日韩欧美一二三区| 久久夜色精品一区| 中国色在线观看另类| 亚洲视频电影在线| 亚洲成av人片一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 日本精品一区二区三区四区的功能| eeuss国产一区二区三区| 91久久免费观看| 欧美群妇大交群中文字幕| 日韩美女视频在线| 欧美国产日韩一二三区| 亚洲激情图片qvod| 日本不卡视频在线观看| 国产精品正在播放| 色吧成人激情小说| 日韩欧美成人一区| 国产精品久久久久久久久久免费看| 亚洲免费av观看| 日本美女一区二区三区视频| 国产很黄免费观看久久| 色女孩综合影院| 日韩精品中午字幕| 中文字幕制服丝袜成人av| 视频一区二区国产| 成人精品小蝌蚪| 欧美美女bb生活片| 国产亚洲综合在线| 亚洲国产精品久久人人爱| 国产美女久久久久| 欧美在线色视频| 国产清纯白嫩初高生在线观看91 | 日本不卡一区二区| 成人动漫一区二区三区| 欧美精品粉嫩高潮一区二区| 国产午夜精品久久久久久久| 亚洲图片欧美色图| 成人网在线播放| 日韩欧美一区二区免费| 一区二区视频在线| 欧美成人一区二区三区在线观看| 国产精品免费久久| 男男成人高潮片免费网站| 99久久久国产精品| 日韩欧美一级特黄在线播放| 亚洲精品成人少妇| 国产成人aaa| 日韩视频免费直播| 亚洲成人手机在线| 99re66热这里只有精品3直播 | 国产精品一区专区| 欧美日韩在线综合| 国产精品不卡一区二区三区| 久久99国内精品| 欧美日韩一区视频| 亚洲欧美色图小说| 成人精品视频一区二区三区尤物| 欧美一区二区人人喊爽| 亚洲伊人伊色伊影伊综合网| 成人久久18免费网站麻豆| 精品国产sm最大网站| 视频一区欧美精品| 欧美偷拍一区二区| 亚洲免费在线看| av在线这里只有精品| 欧美激情一区二区三区四区| 精品一区二区在线播放| 日韩欧美在线不卡| 日韩二区三区在线观看| 欧美视频日韩视频| 亚洲国产精品久久久男人的天堂 | 久久久国产一区二区三区四区小说| 亚洲va韩国va欧美va| 欧美伊人久久大香线蕉综合69 | 欧美成人精精品一区二区频| 日韩高清国产一区在线| 欧美日韩第一区日日骚| 午夜精品福利久久久| 欧美日韩aaaaa| 亚洲成人动漫av| 欧美猛男gaygay网站| 午夜影视日本亚洲欧洲精品| 欧日韩精品视频| 婷婷综合另类小说色区| 欧美浪妇xxxx高跟鞋交| 日韩av中文字幕一区二区三区| 欧美日韩久久久| 日韩精品欧美精品| 日韩一区二区三区四区| 久久成人免费电影| 久久婷婷综合激情| 春色校园综合激情亚洲| 日本一区二区三区电影| av在线不卡电影| 亚洲视频小说图片| 欧美色老头old∨ideo| 五月天激情综合网| 欧美不卡视频一区| 国产老妇另类xxxxx| 国产精品久久毛片| 色呦呦国产精品| 婷婷久久综合九色综合绿巨人| 正在播放亚洲一区| 国产中文字幕精品| 国产成人在线视频网站| 国产精品乱码一区二区三区软件 | 日韩亚洲欧美成人一区| 久久精品国产一区二区三区免费看| 欧美大片免费久久精品三p| 国产成人精品网址| 亚洲精品伦理在线| 日韩一区二区电影在线| 国产经典欧美精品| 一二三四区精品视频| 日韩午夜精品电影| 成人高清免费在线播放| 亚洲综合偷拍欧美一区色| 欧美一二三区精品| 成人97人人超碰人人99| 亚洲成av人片在www色猫咪| 精品乱码亚洲一区二区不卡| 不卡电影一区二区三区| 亚洲图片一区二区| 国产亚洲一区二区三区四区| 91麻豆国产香蕉久久精品| 男女男精品视频网| 1024国产精品| 日韩无一区二区| 91一区二区三区在线观看| 日本不卡一区二区三区| |精品福利一区二区三区| 欧美一区二区三区在| 99久久99久久免费精品蜜臀| 日韩专区在线视频| 国产精品国产三级国产aⅴ原创 | 国产老妇另类xxxxx| 亚洲成人7777| 国产精品久久毛片av大全日韩| 91麻豆精品久久久久蜜臀| www.欧美.com| 国产主播一区二区三区| 亚洲高清视频的网址| 中文字幕精品一区| 精品国产一区二区三区不卡| 欧美性xxxxxx少妇| 成人精品国产一区二区4080| 日本欧美一区二区在线观看| 亚洲天堂福利av|