double Vector::length() { if (this->v.count() != 4) { throw VectorSizeError(); } IArray<double> viterator(this->v); double x = viterator[0].value(); double y = viterator[1].value(); double z = viterator[2].value(); return sqrt(x*x + y*y + z*z); }
Vector Vector::normalize() { if ((*this).v.count() != 4) throw VectorSizeError(); double norm = 1 / (*this).length(); IArray<double> viterator(this->v); for (int i = 0; i < 3; i++) { double nv = viterator.value() * norm; viterator.update(nv); viterator.next(); } return (*this); }
void MemVertexstream::calcMinmax(math::Vector3f& minxyz,math::Vector3f& maxxyz) { Vertexiterator viterator(*this); minxyz=maxxyz=(viterator.position()); for (ion_uint32 v=0;v<capacity();++v) { const math::Vector3f &vec=viterator.position(); if (minxyz.x()>vec.x()) minxyz.x()=vec.x(); if (minxyz.y()>vec.y()) minxyz.y()=vec.y(); if (minxyz.z()>vec.z()) minxyz.z()=vec.z(); if (maxxyz.x()<vec.x()) maxxyz.x()=vec.x(); if (maxxyz.x()<vec.y()) maxxyz.y()=vec.y(); if (maxxyz.x()<vec.z()) maxxyz.z()=vec.z(); ++viterator; } }
double Vector::getX() const { IArrayConst<double> viterator(this->v); viterator.getByCount(0); return viterator.value(); }
void Vector::setL(double L) { IArray<double> viterator(this->v); viterator.getByCount(3); viterator.update(L); }
void Vector::setZ(double Z) { IArray<double> viterator(this->v); viterator.getByCount(2); viterator.update(Z); }
void Vector::setY(double Y) { IArray<double> viterator(this->v); viterator.getByCount(1); viterator.update(Y); }
void Vector::setX(double X) { IArray<double> viterator(this->v); viterator.getByCount(0); viterator.update(X); }
double Vector::operator[](int index) { IArrayConst<double> viterator(this->v); viterator.getByCount(index); return viterator.value(); }