| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * @file  Point3.cpp | 
					
						
							|  |  |  |  * @brief 3D Point | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/geometry/Point3.h>
 | 
					
						
							|  |  |  | #include <gtsam/base/Lie-inl.h>
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-10 07:15:06 +08:00
										 |  |  |   /** Explicit instantiation of base class to export members */ | 
					
						
							| 
									
										
										
										
											2010-01-16 09:16:59 +08:00
										 |  |  |   INSTANTIATE_LIE(Point3); | 
					
						
							| 
									
										
										
										
											2009-10-27 03:26:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  |   bool Point3::equals(const Point3 & q, double tol) const { | 
					
						
							|  |  |  |     return (fabs(x_ - q.x()) < tol && fabs(y_ - q.y()) < tol && fabs(z_ - q.z()) < tol); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-20 04:03:06 +08:00
										 |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   void Point3::print(const std::string& s) const { | 
					
						
							|  |  |  |     std::cout << s << "(" << x_ << ", " << y_ <<  ", " << z_ << ")" << std::endl; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   bool Point3::operator== (const Point3& q) const { | 
					
						
							|  |  |  |     return x_ == q.x_ && y_ == q.y_ && z_ == q.z_; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  |   Point3 Point3::operator+(const Point3& q) const { | 
					
						
							|  |  |  |     return Point3( x_ + q.x_, y_ + q.y_, z_ + q.z_ ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  |   Point3 Point3::operator- (const Point3& q) const { | 
					
						
							|  |  |  |     return Point3( x_ - q.x_, y_ - q.y_, z_ - q.z_ ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  |   Point3 Point3::operator*(double s) const { | 
					
						
							|  |  |  |     return Point3(x_ * s, y_ * s, z_ * s); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							|  |  |  |   Point3 Point3::operator/(double s) const { | 
					
						
							|  |  |  |     return Point3(x_ / s, y_ / s, z_ / s); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  |   Point3 Point3::add(const Point3 &q, | 
					
						
							|  |  |  | 	      boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) const { | 
					
						
							| 
									
										
										
										
											2010-08-20 23:17:13 +08:00
										 |  |  | 	  if (H1) *H1 = eye(3,3); | 
					
						
							|  |  |  | 	  if (H2) *H2 = eye(3,3); | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  | 	  return *this + q; | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  |   Point3 Point3::sub(const Point3 &q, | 
					
						
							|  |  |  | 	      boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) const { | 
					
						
							| 
									
										
										
										
											2010-08-20 23:17:13 +08:00
										 |  |  | 	  if (H1) *H1 = eye(3,3); | 
					
						
							|  |  |  | 	  if (H2) *H2 = -eye(3,3); | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  | 	  return *this - q; | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  |   Point3 Point3::cross(const Point3 &q) const { | 
					
						
							|  |  |  |     return Point3( y_*q.z_ - z_*q.y_, | 
					
						
							|  |  |  |         z_*q.x_ - x_*q.z_, | 
					
						
							|  |  |  |         x_*q.y_ - y_*q.x_ ); | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  |   double Point3::dot(const Point3 &q) const { | 
					
						
							|  |  |  |     return ( x_*q.x_ + y_*q.y_ + z_*q.z_ ); | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-08-23 05:45:53 +08:00
										 |  |  |   double Point3::norm() const { | 
					
						
							|  |  |  |     return sqrt( x_*x_ + y_*y_ + z_*z_ ); | 
					
						
							| 
									
										
										
										
											2010-01-08 08:40:17 +08:00
										 |  |  |   } | 
					
						
							|  |  |  |   /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | } // namespace gtsam
 |