Clementine
Vector3.h
1 // Copyright 2021 SMS
2 // License(Apache-2.0)
3 
4 #pragma once
5 
6 #include <cfloat>
7 #include <cmath>
8 
17 class Vector3
18 {
19 public:
20  float x = 0.0f;
21  float y = 0.0f;
22  float z = 0.0f;
23 
27  Vector3() = default;
28 
36  Vector3(float x, float y, float z);
37 
43  float size() const;
44 
50  float sizeSquared() const;
51 
59  float distance(const Vector3& point) const;
60 
68  float distanceSquared(const Vector3& point) const;
69 
73  Vector3& normalize();
74 
81  float dot(const Vector3& v) const;
82 
88  float angle() const;
89 
96  void rotate(const Vector3& point, float angle);
97 
101  Vector3 getMidPoint(const Vector3& p) const;
102 
103  float& operator[](size_t index);
104  bool operator==(const Vector3& v) const;
105  bool operator!=(const Vector3& v) const;
106  Vector3 operator*(float n) const;
107  Vector3 operator/(float n) const;
108  Vector3 operator+(const Vector3& v) const;
109  Vector3 operator-(const Vector3& v) const;
110  Vector3 operator-() const;
111  Vector3& operator+=(const Vector3& v);
112  Vector3& operator-=(const Vector3& v);
113  Vector3& operator*=(float n);
114  Vector3& operator/=(float n);
115 
116  static const Vector3 unit; // (1, 1, 1)
117  static const Vector3 zero; // (0, 0, 0)
118 
119  static const Vector3 up; // (0, 1, 0)
120  static const Vector3 down; // (0, -1, 0)
121  static const Vector3 right; // (-1, 0, 0)
122  static const Vector3 left; // (1, 0, 0)
123  static const Vector3 front; // (0, 0, -1)
124  static const Vector3 back; // (0, 0, 1)
125 };
126 
127 using Point3 = Vector3; // TODO: 使用齐次坐标时, w 不等于 0 时, 点的坐标为 (x/w, y/w, z/w).
128 using Vec3 = Vector3;
129 
void rotate(const Vector3 &point, float angle)
围绕指定点旋转指定弧度.
Definition: Vector3.cpp:61
float distanceSquared(const Vector3 &point) const
获取到另一个点的距离的平方.
Definition: Vector3.cpp:40
Vector3 & normalize()
标准化成单位向量.
Definition: Vector3.cpp:48
Vector3 getMidPoint(const Vector3 &p) const
获取与另一个点之间的中点.
Definition: Vector3.cpp:82
Vector3()=default
默认构造函数.
float dot(const Vector3 &v) const
计算向量点积.
Definition: Vector3.cpp:56
float sizeSquared() const
获取长度平方.
Definition: Vector3.cpp:30
Definition: particles.c:58
float distance(const Vector3 &point) const
获取到另一个点的距离.
Definition: Vector3.cpp:35
float size() const
获取长度.
Definition: Vector3.cpp:25
三维向量, 单精度浮点数.
Definition: Vector3.h:17
float angle() const
获取角度.