Esempio n. 1
0
void KHalfEdgeMeshPrivate::connectEdges(KHalfEdgeMeshPrivate::HalfEdge *edge)
{
  HalfEdge *prev = twin(cwBounds(edge));
  do
  {
    prev->next = index(edge);
    edge = prev;
    prev = twin(cwBounds(edge));
  } while (prev->next == 0);
}
Esempio n. 2
0
int main(int argc, char **argv){
	if(argc<2){
		std::cout<<"Need to specify the calibration file"<<std::endl;
		return 1;
	}
	Mat img1,img2;
	TwinCamera twin(0,1);
	twin.getDoubleImages(img1,img2);
	twin.loadCameraParameters(argv[1], img1, img2);
	Screen image1("Image1");
	Screen image2("Image2");
	Screen disp("Disparity");
	StereoDepth stereoDepth;
	char c = 0;
	while(c!=27){
		switch(c){
			case '1':
				image1.putImage(img1);
				image2.putImage(img2);
				break;
			case '3':
				twin.getDoubleImages(img1,img2);
				twin.rectifyForStereo(img1, img2);
				stereoDepth.setImage1(img1);
				stereoDepth.setImage2(img2);
				if(stereoDepth.doDepth()){
					disp.putImage(stereoDepth.getDisparity());
				}break;
		}
		
		
		c = waitKey(10);
	}
}
Esempio n. 3
0
inline KHalfEdgeMeshPrivate::HalfEdgeIndex KHalfEdgeMeshPrivate::cwBoundsIndex(HalfEdgeIndex idx) const
{
  while (twin(idx)->face != 0)
  {
    idx = cwSwivelIndex(idx);
  }
  return idx;
}
Esempio n. 4
0
inline KHalfEdgeMeshPrivate::HalfEdgeIndex KHalfEdgeMeshPrivate::cwSwivelIndex(HalfEdgeIndex const &idx) const
{
  return twin(idx)->next;
}
Esempio n. 5
0
inline KVector3D KHalfEdgeMeshPrivate::edgeVector(HalfEdge const *he) const
{
  return vertex(he->to)->position - vertex(twin(he)->to)->position;
}
Esempio n. 6
0
int main(){

	int i,j,k,l,c;
	
//	freopen("in.txt","r",stdin);
	scanf("%d",&n);

	for(i=0;i<=2*n+60;i++) pre[i]=i;

	while(scanf("%d %d %d",&c,&k,&l)==3){

		if(!c&&!k&&!l) break;

		k++; l++;
		k*=2; l*=2;

		if(c==1){			
			if(find(twin(k))==find(l)||find(twin(l))==find(k)) printf("-1\n");
			else {
				Union(find(twin(k)),find(twin(l))); Union(find(l),find(k));
			}
		}
		else if(c==2){
			if(find(k)==find(l)||find(twin(l))==find(twin(k))) printf("-1\n");
			else {
				Union(find(twin(k)),find(l)); Union(find(twin(l)),find(k));
			}
		}
		else if(c==3){
			if(find(k)==find(l)||find(twin(l))==find(twin(k))) printf("1\n");
			else printf("0\n");
		}
		else if(c==4){
			if(find(twin(k))==find(l)||find(twin(l))==find(k)) printf("1\n");
			else printf("0\n");		
		}

	}


	return 0;
}
int main(int argc, char **argv){
	if(argc<3){
		std::cout<<"Need to specify the calibration and plane files"<<std::endl;
		return 1;
	}
	//reating the disparity map for the empty truck
	cv::Mat img1,img2, disparity;
	TwinCamera twin(0,1);
	if(argc!=5){
		twin.getDoubleImages(img1,img2);
	}else{
		img1 = cv::imread(argv[3]);
		img2 = cv::imread(argv[4]);
	}
	twin.loadCameraParameters(argv[1], img1, img2);
	StereoDepth stereoDepth;
	twin.rectifyForStereo(img1, img2);
	stereoDepth.setImage1(img1);
	stereoDepth.setImage2(img2);
	if(stereoDepth.doDepth()){
		disparity = stereoDepth.getDisparity();
		imwrite("left.png",img1);
		imwrite("right.png",img2);
		imwrite("diparity.png", disparity);
	}else{
		std::cout<<"Error when computing the stereo image."<<std::endl;
		return 1;
	}
	//creating the computePlanes object with 5 planes to calculate
	pclGetPlanes computePlanes(5);
	pclView viewtest;
	pcl::PointCloud<pcl::PointXYZ>::Ptr points(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr points_full;
	cv::Mat Q;
	cv::FileStorage fs(argv[1], cv::FileStorage::READ);
	fs["Q"] >> Q;
	fs.release();

	cv::FileStorage fs2(argv[2], cv::FileStorage::READ);
	std::vector<double> left_plane;
	std::vector<double> right_plane;
	std::vector<double> top_plane;
	std::vector<double> bottom_plane;
	std::vector<double> back_plane;

	for(int i=0; i<4;i++){
		double val;
		char c = (i+'a');
		fs2[std::string("left_plane_").append(1u,c)] >> val;
		left_plane.push_back(val);
		fs2[std::string("right_plane_").append(1u,c)] >> val;
		right_plane.push_back(val);
		fs2[std::string("top_plane_").append(1u,c)] >> val;
		top_plane.push_back(val);
		fs2[std::string("bottom_plane_").append(1u,c)] >> val;
		bottom_plane.push_back(val);
		fs2[std::string("back_plane_").append(1u,c)] >> val;
		back_plane.push_back(val);
	}
	try{
		computePlanes.setCoeficientsForIndex(left_plane, pclGetPlanes::LEFT_CUT);
		computePlanes.setCoeficientsForIndex(right_plane, pclGetPlanes::RIGHT_CUT);
		computePlanes.setCoeficientsForIndex(top_plane, pclGetPlanes::TOP_CUT);
		computePlanes.setCoeficientsForIndex(bottom_plane, pclGetPlanes::BOTTOM_CUT);
		computePlanes.setCoeficientsForIndex(back_plane, pclGetPlanes::BACK_CUT);
	}catch(std::runtime_error &exp){
		std::cerr<<exp.what()<<std::endl;
		return 0;
	}

	points_full = viewtest.convertToPointCloudNoColor(disparity, Q);
	for(int i=0; i<points_full->points.size(); i++){
		if(	(computePlanes.isOnPlane(points_full->points[i], pclGetPlanes::LEFT_CUT)) ||
			(computePlanes.isOnPlane(points_full->points[i], pclGetPlanes::RIGHT_CUT)) ||
			(computePlanes.isOnPlane(points_full->points[i], pclGetPlanes::TOP_CUT)) ||
			(computePlanes.isOnPlane(points_full->points[i], pclGetPlanes::BACK_CUT)) ||
			(computePlanes.isOnPlane(points_full->points[i], pclGetPlanes::BOTTOM_CUT))) {

			continue;
		}
		points->points.push_back(points_full->points[i]);
	}
	if(points->points.size() == 0){
		std::cout<<"Percentage: 0.0%"<<std::endl;
	}
	std::cout<<"Valid points: "<<points->points.size()<<std::endl;
	double total_occupied_volume = 0.0;
	pcl::PointXYZ origin;
	origin.x=origin.y=origin.z=0;
	double back_plane_distance = computePlanes.distanceFromPlane(origin, pclGetPlanes::BACK_CUT);
	for(int i=0; i<points->points.size(); i++){
		total_occupied_volume += computePlanes.distanceFromPlane(points->points[i], pclGetPlanes::BACK_CUT)/back_plane_distance;
	}
	std::cout<<"Total occupied volume(voxels): "<<total_occupied_volume <<std::endl;
	std::cout<<"Total occupied volume(cm^3): "<<(430*total_occupied_volume) <<std::endl;
	std::cout<<"Percentage: "<<(total_occupied_volume/(640*480) *100)<<"%"<<std::endl;
	return 0;
}
Esempio n. 8
0
	TTFD_TYPE		= 0x19,
	RC_TYPE			= 0x1A,
	TEMP_TYPE		= 0x1B,
	DRVOBJ_TYPE		= 0x1C,
	DCIOBJ_TYPE		= 0x1D,
	SPOOL_TYPE		= 0x1E,

	EMF_TYPE		= 0x21,
	PEN_TYPE		= 0x30,
	EXTPEN_TYPE		= 0x50
}	GdiObjectType;
	

const DicItem Dic_GdiObjectType[] =
{
	twin(DEF_TYPE),
	item(DC_TYPE,		"HDC"),
	twin(DD_DRAW_TYPE),
	twin(DD_SURF_TYPE),
	item(RGN_TYPE,		"HRGN"),
	item(SURF_TYPE,		"HBITMAP"),
	twin(CLIOBJ_TYPE),
	item(PATH_TYPE,		"HPATH"),

	item(PAL_TYPE,		"HPALETTE"),
	twin(ICMCS_TYPE),
	item(LFONT_TYPE,	"HFONT"),
	twin(RFONT_TYPE),
	twin(PFE_TYPE),
	twin(PFT_TYPE),
	twin(ICMCXT_TYPE),
Esempio n. 9
0
 // Returns true if the edge is curved (parabolic arc).
 // Returns false if the edge is linear (segment, ray, line).
 bool is_curved() const {
   if (!is_primary())
     return false;
   return (cell()->contains_segment() ^ twin()->cell()->contains_segment());
 }
Esempio n. 10
0
 // Returns true if the edge is linear (segment, ray, line).
 // Returns false if the edge is curved (parabolic arc).
 bool is_linear() const {
   if (!is_primary())
     return true;
   return !(cell()->contains_segment() ^ twin()->cell()->contains_segment());
 }