Vector2i.hh
00001 /*
00002  * Copyright 2011 Nate Koenig & Andrew Howard
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUint WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  *
00016 */
00017 /* Desc: Two dimensional vector
00018  * Author: Nate Koenig
00019  * Date: 3 Apr 2007
00020  */
00021 
00022 #ifndef VECTOR2I_HH
00023 #define VECTOR2I_HH
00024 
00025 #include <iostream>
00026 #include <math.h>
00027 #include <fstream>
00028 
00029 namespace gazebo
00030 {
00031     namespace math
00032   {
00035     
00037     class Vector2i
00038     {
00040       public: Vector2i();
00041     
00043       public: Vector2i( const int &x, const int &y );
00044     
00046       public: Vector2i( const Vector2i &pt );
00047     
00049       public: virtual ~Vector2i();
00050     
00052       public: int Distance( const Vector2i &pt ) const;
00053     
00055       public: void Normalize();
00056     
00058       public: void Set(int x, int y);
00059     
00061       public: Vector2i GetCrossProd(const Vector2i &pt) const;
00062     
00064       public: const Vector2i &operator=( const Vector2i &pt );
00065     
00067       public: const Vector2i &operator=( int value );
00068     
00070       public: Vector2i operator+( const Vector2i &pt ) const;
00071     
00073       public: const Vector2i &operator+=( const Vector2i &pt );
00074     
00076       public: Vector2i operator-( const Vector2i &pt ) const;
00077     
00079       public: const Vector2i &operator-=( const Vector2i &pt );
00080     
00082       public: const Vector2i operator/( const Vector2i &pt ) const;
00083     
00085       public: const Vector2i &operator/=( const Vector2i &pt );
00086     
00088       public: const Vector2i operator/( int v ) const;
00089     
00091       public: const Vector2i &operator/=( int v );
00092     
00094       public: const Vector2i operator*( const Vector2i &pt ) const;
00095     
00097       public: const Vector2i &operator*=( const Vector2i &pt );
00098     
00100       public: const Vector2i operator*( int v ) const;
00101     
00103       public: const Vector2i &operator*=( int v );
00104     
00106       public: bool operator==( const Vector2i &pt ) const;
00107     
00109       public: bool operator!=( const Vector2i &pt ) const;
00110     
00112       public: bool IsFinite() const;
00113     
00115       public: int operator[](unsigned int index) const;
00116     
00118       public: int x;
00119   
00121       public: int y;
00122     
00127       public: friend std::ostream &operator<<( std::ostream &out, const gazebo::math::Vector2i &pt )
00128       {
00129         out << pt.x << " " << pt.y;
00130         return out;
00131       }
00132   
00137       public: friend std::istream &operator>>( std::istream &in, gazebo::math::Vector2i &pt )
00138       {
00139         // Skip white spaces
00140         in.setf( std::ios_base::skipws );
00141         in >> pt.x >> pt.y;
00142         return in;
00143       }
00144     };
00145     
00147   }
00148 }
00149 #endif