Example #1
0
void Vector3D::normalize()
{
	auto d = sqrt(scalarMul(*this));

	if (d > 0.0)
	{
		(*this) /= d;
	}
}
Example #2
0
bool getPlanefromLine(XgyLine l, XgyPlane &pl)
{
	XgyPlane floor;
	floor.setPlane(0,0,1,0);

	//计算线段两端点的3维位置
	cv::Point3f wP1;
	if(!(img2world(l.x1,floor,wP1)))
	{
		//cout<<"Can not create plane!"<<endl;
		return false;
	}

	cv::Point3f wP2;
	if(!(img2world(l.x2,floor,wP2)))
	{
		//cout<<"Can not create plane!"<<endl;
		return false;
	}

	XgyVector3D tempNormal;	//平面法向垂直于直线wP1wP2,且平行于z=0
	tempNormal.x=wP1.y-wP2.y;
	tempNormal.y=wP2.x-wP1.x;
	tempNormal.z=0;
	normalizeVector3D(tempNormal);

	XgyVector3D view;
	getcamPose(camPos);
	view=setVector3D(camPos,wP1);
	normalizeVector3D(view);

	XgyVector3D normal;
	if(dotProduct3D(tempNormal,view)>0)	//若法向与视线同向
		scalarMul(-1.0,tempNormal,normal);	//反向
	else
		scalarMul(1.0,tempNormal,normal);

	double d=-1*(normal.x*wP1.x+normal.y*wP1.y+normal.z*wP1.z);
	pl.setPlane(normal.x,normal.y,normal.z,d);

	return true;
}
Example #3
0
void partMul(void) {
  int i;
  for (i = 0; i < colsCount; ++i) 
    presult[startCol + i] = scalarMul(pvec, pcols + matSize * i);
  printf("[%d] partMul done\n", commRank);
}