35 #ifndef CORE_GEOMETRY_VECTOR_H
36 #define CORE_GEOMETRY_VECTOR_H
50 inline const T&
Min(
const T& t1,
const T& t2,
const T& t3)
52 return std::min(std::min(t1,t2), t3);
56 inline const T&
Max(
const T& t1,
const T& t2,
const T& t3)
58 return std::max(std::max(t1,t2), t3);
70 { d_[0] =
x; d_[1] =
y; d_[2] =
z; }
74 { d_[0] = init; d_[1] = init; d_[2] = init; }
75 inline double length()
const;
115 inline void x(
double);
116 inline double x()
const;
117 inline void y(
double);
118 inline double y()
const;
119 inline void z(
double);
120 inline double z()
const;
122 inline void u(
double);
123 inline double u()
const;
124 inline void v(
double);
125 inline double v()
const;
126 inline void w(
double);
127 inline double w()
const;
145 inline void Set(
double x,
double y,
double z);
221 return Vector(std::min(v1.
x(), v2.
x()),
222 std::min(v1.
y(), v2.
y()),
223 std::min(v1.
z(), v2.
z()));
228 return Vector(std::max(v1.
x(), v2.
x()),
229 std::max(v1.
y(), v2.
y()),
230 std::max(v1.
z(), v2.
z()));
238 double l = std::sqrt(d_[0]*d_[0] + d_[1]*d_[1] + d_[2]*d_[2]);
250 return d_[0]*d_[0]+d_[1]*d_[1]+d_[2]*d_[2];
256 return Min(d_[0], d_[1], d_[2]);
261 return Max(d_[0], d_[1], d_[2]);
266 return Vector(d_[0]/d, d_[1]/d, d_[2]/d);
271 return Vector(d_[0]/v2.d_[0], d_[1]/v2.d_[1], d_[2]/v2.d_[2]);
276 return Vector(d_[0]+v2.d_[0], d_[1]+v2.d_[1], d_[2]+v2.d_[2]);
281 return Vector(d_[0]*v2.d_[0], d_[1]*v2.d_[1], d_[2]*v2.d_[2]);
286 return Vector(d_[0]-v2.d_[0], d_[1]-v2.d_[1], d_[2]-v2.d_[2]);
300 d_[0] =
static_cast<double>(d);
301 d_[1] =
static_cast<double>(d);
302 d_[2] =
static_cast<double>(d);
330 return Vector(d_[0]*s, d_[1]*s, d_[2]*s);
362 return Vector(-d_[0],-d_[1],-d_[2]);
367 return sqrt(d_[0]*d_[0]+d_[1]*d_[1]+d_[2]*d_[2]);
372 double x=v.d_[0]<0?-v.d_[0]:v.d_[0];
373 double y=v.d_[1]<0?-v.d_[1]:v.d_[1];
374 double z=v.d_[2]<0?-v.d_[2]:v.d_[2];
380 return Vector(v1.d_[1]*v2.d_[2]-v1.d_[2]*v2.d_[1],
381 v1.d_[2]*v2.d_[0]-v1.d_[0]*v2.d_[2],
382 v1.d_[0]*v2.d_[1]-v1.d_[1]*v2.d_[0]);
388 double weight1=1.0-weight;
389 return Vector(v2.d_[0]*weight+v1.d_[0]*weight1,
390 v2.d_[1]*weight+v1.d_[1]*weight1,
391 v2.d_[2]*weight+v1.d_[2]*weight1);
439 double l=sqrt(d_[0]*d_[0] + d_[1]*d_[1] + d_[2]*d_[2]);
454 return reinterpret_cast<const Point &
>(*this);
459 return reinterpret_cast<Point &
>(
const_cast<Vector &
>(*this));
bool operator<=(Tensor t1, Tensor t2)
Definition: Tensor.h:141
Vector()
Definition: Vector.h:153
Vector & operator/=(const double)
Definition: Vector.h:396
Point Min(const Point &p1, const Point &p2)
Definition: Point.h:194
Vector operator-() const
Definition: Vector.h:360
SCISHARE const TypeDescription * get_type_description(Tensor *)
Definition: Tensor.cc:405
Vector operator*(const double) const
Definition: Vector.h:328
Definition: Persistent.h:89
const std::string & Vector_get_h_file_path()
Definition: Vector.cc:190
SCISHARE Vector safe_normal() const
Vector & operator=(const Vector &)
Definition: Vector.h:167
double y() const
Definition: Vector.h:190
Definition: TypeDescription.h:45
#define SCISHARE
Definition: share.h:39
SCISHARE std::string get_string() const
friend Vector Interpolate(const Vector &, const Vector &, double)
Definition: Vector.h:385
Point & asPoint() const
Definition: Vector.h:457
void Set(double x, double y, double z)
Definition: Vector.h:464
Vector operator+(const Vector &) const
Definition: Vector.h:274
SCISHARE std::istream & operator>>(std::istream &os, Point &p)
Definition: Point.cc:105
double u() const
Definition: Vector.h:409
double & operator[](int idx)
Definition: Vector.h:85
Vector(double init)
Definition: Vector.h:73
double length2() const
Definition: Vector.h:248
double maxComponent() const
Definition: Vector.h:259
SCISHARE std::ostream & operator<<(std::ostream &os, const Point &p)
Definition: Point.cc:99
Vector & operator-=(const Vector &)
Definition: Vector.h:352
Vector Cross(const Vector &v1, const Vector &v2)
Definition: Vector.h:378
double minComponent() const
Definition: Vector.h:254
SCISHARE void find_orthogonal(Vector &, Vector &) const
Definition: Vector.cc:59
bool operator>=(Tensor t1, Tensor t2)
Definition: Tensor.h:151
Vector(double x, double y, double z)
Definition: Vector.h:69
Point Interpolate(const Point &v1, const Point &v2, double weight)
Definition: PointVectorOperators.h:156
double x() const
Definition: Vector.h:180
void x(double)
Definition: Vector.h:175
SCISHARE bool check_find_orthogonal(Vector &, Vector &) const
double operator[](int idx) const
Definition: Vector.h:91
v
Definition: readAllFields.py:42
double normalize()
Definition: Vector.h:437
SCISHARE bool operator!=(const Point &p1, const Point &p2)
Definition: Point.cc:49
void y(double)
Definition: Vector.h:185
double safe_normalize()
Definition: Vector.h:236
Point Max(const Point &p1, const Point &p2)
Definition: Point.h:202
double w() const
Definition: Vector.h:429
Vector operator/(const double) const
Definition: Vector.h:264
double length() const
Definition: Vector.h:365
double z() const
Definition: Vector.h:200
bool operator>(Tensor t1, Tensor t2)
Definition: Tensor.h:146
SCISHARE Vector normal() const
double v() const
Definition: Vector.h:419
Vector Abs(const Vector &v)
Definition: Vector.h:370
Vector & operator+=(const Vector &)
Definition: Vector.h:344
SCISHARE bool operator==(const Point &p1, const Point &p2)
Definition: Point.cc:44
Vector & operator*=(const double)
Definition: Vector.h:205
Point operator*(double d, const Point &p)
Definition: Point.h:182
SCISHARE void rotz90(const int)
void z(double)
Definition: Vector.h:195
const Point & point() const
Definition: Vector.h:452
bool operator<(Tensor t1, Tensor t2)
Definition: Tensor.h:136
friend Vector Cross(const Vector &, const Vector &)
Definition: Vector.h:378
SCISHARE void Pio(Piostream &, BBox &)
Definition: BBox.cc:134
friend Vector Abs(const Vector &)
Definition: Vector.h:370
friend double Dot(const Vector &, const Vector &)
Definition: PointVectorOperators.h:89