nuclear@10: /* nuclear@10: libvmath - a vector math library nuclear@10: Copyright (C) 2004-2015 John Tsiombikas nuclear@10: nuclear@10: This program is free software: you can redistribute it and/or modify nuclear@10: it under the terms of the GNU Lesser General Public License as published nuclear@10: by the Free Software Foundation, either version 3 of the License, or nuclear@10: (at your option) any later version. nuclear@10: nuclear@10: This program is distributed in the hope that it will be useful, nuclear@10: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@10: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@10: GNU Lesser General Public License for more details. nuclear@10: nuclear@10: You should have received a copy of the GNU Lesser General Public License nuclear@10: along with this program. If not, see . nuclear@10: */ nuclear@10: #include "sphvec.h" nuclear@10: #include "vector.h" nuclear@10: nuclear@10: /* theta: 0 <= theta <= 2pi, the angle around Y axis. nuclear@10: * phi: 0 <= phi <= pi, the angle from Y axis. nuclear@10: * r: radius. nuclear@10: */ nuclear@10: SphVector::SphVector(scalar_t theta, scalar_t phi, scalar_t r) { nuclear@10: this->theta = theta; nuclear@10: this->phi = phi; nuclear@10: this->r = r; nuclear@10: } nuclear@10: nuclear@10: /* Constructs a spherical coordinate vector from a cartesian vector */ nuclear@10: SphVector::SphVector(const Vector3 &cvec) { nuclear@10: *this = cvec; nuclear@10: } nuclear@10: nuclear@10: /* Assignment operator that converts cartesian to spherical coords */ nuclear@10: SphVector &SphVector::operator =(const Vector3 &cvec) { nuclear@10: r = cvec.length(); nuclear@10: //theta = atan2(cvec.y, cvec.x); nuclear@10: theta = atan2(cvec.z, cvec.x); nuclear@10: //phi = acos(cvec.z / r); nuclear@10: phi = acos(cvec.y / r); nuclear@10: return *this; nuclear@10: }