Warning, /include/Geant4/tools/lina/vec4f is written in an unsupported language. File is not indexed.
0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003
0004 #ifndef tools_vec4f
0005 #define tools_vec4f
0006
0007 #include "vec4"
0008 #include "../S_STRING"
0009 #include <cmath>
0010
0011 namespace tools {
0012
0013 class vec4f : public vec4<float> {
0014 typedef vec4<float> parent;
0015 public:
0016 TOOLS_SCLASS(tools::vec4f) //for stype()
0017 public:
0018 vec4f():parent() {}
0019 vec4f(const float a_vec[4]):parent(a_vec) {}
0020 vec4f(const float& a0,const float& a1,const float& a2,const float& a3):parent(a0,a1,a2,a3){}
0021 virtual ~vec4f() {}
0022 public:
0023 vec4f(const vec4f& a_from):parent(a_from){}
0024 vec4f& operator=(const vec4f& a_from){
0025 parent::operator=(a_from);
0026 return *this;
0027 }
0028 public: //operators
0029 vec4f operator*(float a_v) const {
0030 return vec4f(m_data[0]*a_v,
0031 m_data[1]*a_v,
0032 m_data[2]*a_v,
0033 m_data[3]*a_v);
0034 }
0035 vec4f operator+(const vec4f& a_v) const {
0036 return vec4f(m_data[0]+a_v.m_data[0],
0037 m_data[1]+a_v.m_data[1],
0038 m_data[2]+a_v.m_data[2],
0039 m_data[3]+a_v.m_data[3]);
0040 }
0041 vec4f operator-(const vec4f& a_v) const {
0042 return vec4f(m_data[0]-a_v.m_data[0],
0043 m_data[1]-a_v.m_data[1],
0044 m_data[2]-a_v.m_data[2],
0045 m_data[3]-a_v.m_data[3]);
0046 }
0047 vec4f& operator+=(const vec4f& a_v) {
0048 m_data[0] += a_v.m_data[0];
0049 m_data[1] += a_v.m_data[1];
0050 m_data[2] += a_v.m_data[2];
0051 m_data[3] += a_v.m_data[3];
0052 return *this;
0053 }
0054 vec4f& operator*=(float a_v) {
0055 m_data[0] *= a_v;
0056 m_data[1] *= a_v;
0057 m_data[2] *= a_v;
0058 m_data[3] *= a_v;
0059 return *this;
0060 }
0061 vec4f operator-() const {
0062 return vec4f(-m_data[0],-m_data[1],-m_data[2],-m_data[3]);
0063 }
0064 public:
0065 float length() const {
0066 return float(::sqrt(m_data[0]*m_data[0]+m_data[1]*m_data[1]+m_data[2]*m_data[2]+m_data[3]*m_data[3]));
0067 }
0068 float normalize() {
0069 float norme = length();
0070 if(!norme) return 0;
0071 divide(norme);
0072 return norme;
0073 }
0074 };
0075
0076 }
0077
0078 #include <vector>
0079
0080 namespace tools {
0081
0082 #ifndef SWIG
0083 //for sf, mf :
0084 inline bool set_from_vec(vec4f& a_v,const std::vector<float>& a_sv) {
0085 if(a_sv.size()!=4) return false;
0086 a_v[0] = a_sv[0];
0087 a_v[1] = a_sv[1];
0088 a_v[2] = a_sv[2];
0089 a_v[3] = a_sv[3];
0090 return true;
0091 }
0092 #endif
0093
0094 }
0095
0096 #endif