void CPlainTextEditor::SelectRight(void)
{
	BeginSelection();
	miEditPos = FindRight(miEditPos);
	EndSelection();
	ResetUpDown();
}
Пример #2
0
int main(){
	while(scanf("%d",&Gophere)!=EOF){
		scanf("%d%d%d",&Hole,&Time,&V);
		double maxDistance_pow2 = Time * V * Time * V;
		for(int i = 0;i < Gophere;++i){
			scanf("%lf%lf",&gophere[i].x,&gophere[i].y);
		}
		for(int i = 0;i < Hole;++i){
			scanf("%lf%lf",&hole[i].x,&hole[i].y);
		}
		for(int i = 0;i < Gophere;++i){
			for(int j = 0;j < Hole;++j){
				if( pow(hole[j].x - gophere[i].x,2) + pow(hole[j].y - gophere[i].y,2) <= maxDistance_pow2 )
					edge[i][j] = 1;
				else
					edge[i][j] = 0;
			}
		}
		int result = Gophere;
		memset(hLink,-1,sizeof(hLink));
		memset(&No,-1,sizeof(No));
		for(int i = 0;i < Gophere;++i){
			memset(pass,0,sizeof(pass));
			if(FindRight(i)) --result;
		}
		printf("%d\n",result);
	}
	return 0;
}
Пример #3
0
bool FindRight(int Left){
	for(int r = 0;r < Hole;++r){
		if( edge[Left][r] && !pass[r] ){
			pass[r] = 1;
			if(hLink[r] == No || FindRight(hLink[r])){
				hLink[r] = Left;
				return true;
			}
		}
	}
	return false;
}
Пример #4
0
void BlockLocalizer::Run()
{
	FindUp();
	if (uppoints.size() < 5)
	{
		return;
	}
#ifdef BL_OUTPUT_DEBUG_INFO
	FindLeft();
	FindRight();
#else
	thread t1 = thread(std::mem_fn(&BlockLocalizer::FindLeft), this);
	thread t2 = thread(std::mem_fn(&BlockLocalizer::FindRight), this);
	t1.join();
	t2.join();
#endif
	if (leftpoints.size() < 5 || rightpoints.size() < 5)
	{
		return;
	}
	FindDown();
	if (downpoints.size() < 5)
	{
		return;
	}
	NotFoundBlockFlag = false;

	Judgement();
	p_block->Lines2ABCD();

#ifdef BL_OUTPUT_DEBUG_INFO
	cv::line(drowDebugResult, cv::Point(0, (*p_block).UpLine.k * (0 - (*p_block).UpLine.x0) + (*p_block).UpLine.y0), cv::Point(drowDebugResult.cols, (*p_block).UpLine.k * (drowDebugResult.cols - (*p_block).UpLine.x0) + (*p_block).UpLine.y0), cv::Scalar(0, 0, 255), 1);
	cv::line(drowDebugResult, cv::Point(0, (*p_block).DownLine.k * (0 - (*p_block).DownLine.x0) + (*p_block).DownLine.y0), cv::Point(drowDebugResult.cols, (*p_block).DownLine.k * (drowDebugResult.cols - (*p_block).DownLine.x0) + (*p_block).DownLine.y0), cv::Scalar(0, 255, 255), 1);
	cv::line(drowDebugResult, cv::Point((drowDebugResult.rows - (*p_block).LeftLine.y0) / (*p_block).LeftLine.k + (*p_block).LeftLine.x0, drowDebugResult.rows), cv::Point((0 - (*p_block).LeftLine.y0) / (*p_block).LeftLine.k + (*p_block).LeftLine.x0, 0), cv::Scalar(0, 255, 0), 1);
	cv::line(drowDebugResult, cv::Point((drowDebugResult.rows - (*p_block).RightLine.y0) / (*p_block).RightLine.k + (*p_block).RightLine.x0, drowDebugResult.rows), cv::Point((0 - (*p_block).RightLine.y0) / (*p_block).RightLine.k + (*p_block).RightLine.x0, 0), cv::Scalar(255, 0, 0), 1);

	if (p_faults->BrokenEdges.size() > 0)
	{
		for (int i = 0; i < p_faults->BrokenEdges.size(); i++)
		{
			cv::circle(drowDebugResult, p_faults->BrokenEdges[i].position, p_faults->BrokenEdges[i].length / 2, cv::Scalar(0, 0, 255), 10);
		}
	}
#endif
}
void CPlainTextEditor::Right(void)
{
	ClearSelection();
	miEditPos = FindRight(miEditPos);
	ResetUpDown();
}