本文整理汇总了C++中Point3::dot方法的典型用法代码示例。如果您正苦于以下问题:C++ Point3::dot方法的具体用法?C++ Point3::dot怎么用?C++ Point3::dot使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Point3
的用法示例。
在下文中一共展示了Point3::dot方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ComputeRayAngle
double ComputeRayAngle(Point2 p, Point2 q, const Camera& cam1, const Camera& cam2)
{
const Point3 p3n = cam1.GetIntrinsicMatrix().inverse() * EuclideanToHomogenous(p);
const Point3 q3n = cam2.GetIntrinsicMatrix().inverse() * EuclideanToHomogenous(q);
const Point2 pn = p3n.head<2>() / p3n.z();
const Point2 qn = q3n.head<2>() / q3n.z();
const Point3 p_w = cam1.m_R.transpose() * Point3{pn.x(), pn.y(), -1.0};
const Point3 q_w = cam2.m_R.transpose() * Point3{qn.x(), qn.y(), -1.0};
// Compute the angle between the rays
const double dot = p_w.dot(q_w);
const double mag = p_w.norm() * q_w.norm();
return acos(util::clamp((dot / mag), (-1.0 + 1.0e-8), (1.0 - 1.0e-8)));
}
示例2:
/* ************************************************************************* */
double Unit3::dot(const Unit3& q, OptionalJacobian<1,2> H_p, OptionalJacobian<1,2> H_q) const {
// Get the unit vectors of each, and the derivative.
Matrix32 H_pn_p;
Point3 pn = point3(H_p ? &H_pn_p : 0);
Matrix32 H_qn_q;
Point3 qn = q.point3(H_q ? &H_qn_q : 0);
// Compute the dot product of the Point3s.
Matrix13 H_dot_pn, H_dot_qn;
double d = pn.dot(qn, H_p ? &H_dot_pn : 0, H_q ? &H_dot_qn : 0);
if (H_p) {
(*H_p) << H_dot_pn * H_pn_p;
}
if (H_q) {
(*H_q) = H_dot_qn * H_qn_q;
}
return d;
}
示例3: assign_sample
//.........这里部分代码省略.........
V3 c_w = pt1_w.template cast<POSE_T>(); // c_w is the origin of coordinate g w.r.t. world
POSE_T alpha = acos(nl1_w(0)); // rotation nl1_c to x axis (1,0,0)
V3 axis( 0, nl1_w(2), -nl1_w(1)); //rotation axis between nl1_c to x axis (1,0,0) i.e. cross( nl1_w, x );
axis.normalized();
//verify quaternion and rotation matrix
Quaternion<POSE_T> q_g_f_w(AngleAxis<POSE_T>(alpha, axis));
//cout << q_g_f_w << endl;
ROTATION R_g_f_w(q_g_f_w);
//cout << R_g_f_w << endl;
V3 nl_x = R_g_f_w * nl1_w.template cast<POSE_T>();
axis.normalized();
V3 c_c = pt1_c.template cast<POSE_T>();
POSE_T beta = acos(nl1_c(0)); //rotation nl1_w to x axis (1,0,0)
V3 axis2( 0, nl1_c(2), -nl1_c(1) ); //rotation axis between nl1_m to x axis (1,0,0) i.e. cross( nl1_w, x );
axis2.normalized();
Quaternion<POSE_T> q_gp_f_c(AngleAxis<POSE_T>(beta, axis2));
//cout << q_gp_f_c << endl;
ROTATION R_gp_f_c(q_gp_f_c);
//cout << R_gp_f_c << endl;
//{
// Vector3 nl_x = R_gp_f_c * nl1_c;
// print<T, Vector3>(nl_x);
//}
V3 pt2_g = R_g_f_w * (pt2_w.template cast<POSE_T>() - c_w); pt2_g(0) = POINT_T(0); pt2_g.normalized();
V3 pt2_gp = R_gp_f_c * (pt2_c.template cast<POSE_T>() - c_c); pt2_gp(0) = POINT_T(0); pt2_gp.normalized();
POSE_T gamma = acos(pt2_g.dot(pt2_gp)); //rotate pt2_g to pt2_gp;
V3 axis3(1,0,0);
Quaternion< POSE_T > q_gp_f_g(AngleAxis<POSE_T>(gamma, axis3));
//cout << q_gp_f_g << endl;
ROTATION R_gp_f_g ( q_gp_f_g );
//cout << R_gp_f_g << endl;
ROTATION R_c_f_gp = R_gp_f_c.inverse();
p_solution->so3() = R_c_f_gp * R_gp_f_g * R_g_f_w;
//{
// T3 pt = *R_cfw * (pt2_w - c_w) + c_c;
// cout << norm<T, T3>( pt - pt2_c ) << endl;
//}
//{
// cout << norm<T, T3>(nl1_w) << endl;
// cout << norm<T, T3>(nl1_c) << endl;
// cout << norm<T, T3>(*R_cfw * nl1_w) << endl;
// cout << norm<T, T3>(nl1_c - *R_cfw * nl1_w) << endl;
//}
p_solution->translation() = c_c - p_solution->so3() * c_w;
return;
}
template< typename POSE_T, typename POINT_T > /*Matrix<float,-1,-1,0,-1,-1> = MatrixXf*/
SE3Group<POSE_T> nl_shinji_ls(const Matrix<POINT_T, Dynamic, Dynamic> & Xw_, const Matrix<POINT_T, Dynamic, Dynamic>& Xc_,
const Matrix<POINT_T, Dynamic, Dynamic> & Nw_, const Matrix<POINT_T, Dynamic, Dynamic>& Nc_, const int K) {
typedef SE3Group<POSE_T> RT;
assert(Xw_.rows() == 3);