Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "vector4.h"
00020
00021 #include <cmath>
00022 #include <cstdlib>
00023 #include <cstring>
00024 using namespace std;
00025
00026 namespace vrml {
00027
00028 Vector4::Vector4()
00029 {
00030 memset(_data, 0, 4*sizeof(double));
00031 }
00032
00033 Vector4::~Vector4()
00034 {
00035 }
00036
00037 Vector4::Vector4(const Vector4& other)
00038 {
00039 copy(other);
00040 }
00041
00042 void Vector4::copy(const Vector4& other)
00043 {
00044 memcpy(_data, other._data, 4*sizeof(double));
00045 }
00046
00047 Vector4::Vector4(const double* data)
00048 {
00049 memcpy(_data, data, 4*sizeof(double));
00050 }
00051
00052 Vector4& Vector4::operator=(const Vector4& other)
00053 {
00054 if (this != &other) {
00055 copy(other);
00056 }
00057 return *this;
00058 }
00059
00060 bool Vector4::operator== (const Vector4& other) const
00061 {
00062 if ((fabs(_data[0] - other[0]) < 1e-12) &&
00063 (fabs(_data[1] - other[1]) < 1e-12) &&
00064 (fabs(_data[2] - other[2]) < 1e-12) &&
00065 (fabs(_data[3] - other[3]) < 1e-12))
00066 return true;
00067 return false;
00068 }
00069
00070 bool Vector4::operator!= (const Vector4& other) const
00071 {
00072 return !(*this == other);
00073 }
00074
00075 Vector4 Vector4::operator+ (const Vector4& other) const
00076 {
00077 Vector4 sum(other);
00078 for (unsigned int i = 0; i < 4; ++i)
00079 sum[i] += _data[i];
00080 return sum;
00081 }
00082
00083 Vector4 Vector4::operator- (const Vector4& other) const
00084 {
00085 Vector4 diff(*this);
00086 for (unsigned int i = 0; i < 4; ++i)
00087 diff[i] -= other[i];
00088 return diff;
00089 }
00090
00091 Vector4 Vector4::operator* (double x) const
00092 {
00093 Vector4 prod(*this);
00094 for (unsigned int i = 0; i < 4; ++i)
00095 prod[i] *= x;
00096 return prod;
00097 }
00098
00099 Vector4 Vector4::operator/ (double x) const
00100 {
00101 Vector4 quot(*this);
00102 for (unsigned int i = 0; i < 4; ++i)
00103 quot[i] /= x;
00104 return quot;
00105 }
00106
00107 Vector4 Vector4::operator- () const
00108 {
00109 Vector4 minus(*this);
00110 for (unsigned int i = 0; i < 4; ++i)
00111 minus[i] *= -1.0;
00112 return minus;
00113 }
00114
00115 Vector4& Vector4::operator+= (const Vector4& other)
00116 {
00117 *this = *this + other;
00118 return *this;
00119 }
00120
00121 Vector4& Vector4::operator-= (const Vector4& other)
00122 {
00123 *this = *this - other;
00124 return *this;
00125 }
00126
00127 Vector4& Vector4::operator*= (double x)
00128 {
00129 *this = *this * x;
00130 return *this;
00131 }
00132
00133 Vector4& Vector4::operator/= (double x)
00134 {
00135 *this = *this / x;
00136 return *this;
00137 }
00138
00139 Vector4 operator* (double x, const Vector4& v)
00140 {
00141 return v * x;
00142 }
00143
00144 Vector4 operator/ (double x, const Vector4& v)
00145 {
00146 Vector4 out;
00147 for (unsigned int i = 0; i < 4; ++i)
00148 out[i] = x / v[i];
00149 return out;
00150 }
00151
00152 std::ostream& operator<<(std::ostream& os, const Vector4& v)
00153 {
00154 os << v[0] << " " << v[1] << " " << v[2] << " " << v[3];
00155 return os;
00156 }
00157
00158 Vector4::Vector4(double d1, double d2, double d3, double d4)
00159 {
00160 _data[0] = d1;
00161 _data[1] = d2;
00162 _data[2] = d3;
00163 _data[3] = d4;
00164 }
00165
00166 }