15#ifndef DRACO_CORE_VECTOR_D_H_
16#define DRACO_CORE_VECTOR_D_H_
29template <
class ScalarT,
int dimension_t>
59 : v_({{c0, c1, c2}}) {
65 : v_({{c0, c1, c2, c3}}) {
71 : v_({{c0, c1, c2, c3, c4}}) {
77 : v_({{c0, c1, c2, c3, c4, c5}}) {
84 : v_({{c0, c1, c2, c3, c4, c5, c6}}) {
101 template <
class OtherScalarT,
int other_dimension_t>
104 if (i < other_dimension_t) {
105 v_[i] =
Scalar(src_vector[i]);
123 ret[i] = -(*this)[i];
132 ret[i] = (*this)[i] + o[i];
140 ret[i] = (*this)[i] - o[i];
148 ret[i] = (*this)[i] * o[i];
177 ret[i] = (*this)[i] * o;
185 ret[i] = (*this)[i] / o;
193 ret[i] = (*this)[i] + o;
201 ret[i] = (*this)[i] - o;
208 if ((*
this)[i] != o[i]) {
218 for (
int i = 0; i <
dimension - 1; ++i) {
219 if (v_[i] < x.v_[i]) {
222 if (v_[i] > x.v_[i]) {
240 Scalar next_value = std::abs(v_[i]);
241 if (result > std::numeric_limits<Scalar>::max() - next_value) {
243 return std::numeric_limits<Scalar>::max();
245 result += next_value;
253 ret += (*this)[i] * o[i];
260 if (magnitude == 0) {
264 (*this)[i] /= magnitude;
275 return *std::max_element(v_.begin(), v_.end());
279 return *std::min_element(v_.begin(), v_.end());
286 std::array<Scalar, dimension> v_;
290template <
class ScalarT,
int dimension_t>
297template <
class ScalarT,
int dimension_t>
301 ScalarT squared_distance = 0;
304 for (
int i = 0; i < dimension_t; ++i) {
305 if (v1[i] >= v2[i]) {
306 difference = v1[i] - v2[i];
308 difference = v2[i] - v1[i];
310 squared_distance += (difference * difference);
312 return squared_distance;
316template <
class ScalarT>
320 static_assert(std::is_signed<ScalarT>::value,
321 "ScalarT must be a signed type. ");
323 r[0] = (u[1] * v[2]) - (u[2] * v[1]);
324 r[1] = (u[2] * v[0]) - (u[0] * v[2]);
325 r[2] = (u[0] * v[1]) - (u[1] * v[0]);
329template <
class ScalarT,
int dimension_t>
332 for (
int i = 0; i < dimension_t - 1; ++i) {
333 out << vec[i] <<
" ";
335 out << vec[dimension_t - 1];
VectorD(const Self &o)
Definition vector_d.h:88
VectorD()
Definition vector_d.h:40
Self operator+(const Scalar &o) const
Definition vector_d.h:190
Self & operator-=(const Self &o)
Definition vector_d.h:160
const Scalar & MinCoeff() const
Definition vector_d.h:278
Self & operator+=(const Self &o)
Definition vector_d.h:153
VectorD(const Scalar &c0, const Scalar &c1)
Definition vector_d.h:52
Scalar & operator()(int i)
Definition vector_d.h:116
const Scalar & operator()(int i) const
Definition vector_d.h:117
Self operator-(const Self &o) const
Definition vector_d.h:137
VectorD(const Scalar &c0, const Scalar &c1, const Scalar &c2, const Scalar &c3, const Scalar &c4, const Scalar &c5)
Definition vector_d.h:75
Scalar & operator[](int i)
Definition vector_d.h:112
Self operator-() const
Definition vector_d.h:120
bool operator!=(const Self &x) const
Definition vector_d.h:215
VectorD< Scalar, dimension_t > Self
Definition vector_d.h:35
VectorD(const VectorD< OtherScalarT, other_dimension_t > &src_vector)
Definition vector_d.h:102
Scalar AbsSum() const
Definition vector_d.h:237
Self GetNormalized() const
Definition vector_d.h:268
Self & operator*=(const Self &o)
Definition vector_d.h:167
Self operator-(const Scalar &o) const
Definition vector_d.h:198
Self operator*(const Scalar &o) const
Definition vector_d.h:174
Scalar * data()
Definition vector_d.h:282
static constexpr int dimension
Definition vector_d.h:32
bool operator==(const Self &o) const
Definition vector_d.h:206
const Scalar & MaxCoeff() const
Definition vector_d.h:274
Scalar Dot(const Self &o) const
Definition vector_d.h:250
VectorD(const Scalar &c0, const Scalar &c1, const Scalar &c2, const Scalar &c3)
Definition vector_d.h:63
const Scalar * data() const
Definition vector_d.h:283
VectorD(const Scalar &c0, const Scalar &c1, const Scalar &c2, const Scalar &c3, const Scalar &c4)
Definition vector_d.h:69
Scalar SquaredNorm() const
Definition vector_d.h:234
Self operator/(const Scalar &o) const
Definition vector_d.h:182
DataTypeT Scalar
Definition vector_d.h:34
VectorD(const Scalar &c0, const Scalar &c1, const Scalar &c2, const Scalar &c3, const Scalar &c4, const Scalar &c5, const Scalar &c6)
Definition vector_d.h:81
Self operator*(const Self &o) const
Definition vector_d.h:145
void Normalize()
Definition vector_d.h:258
bool operator<(const Self &x) const
Definition vector_d.h:217
DataTypeT CoefficientType
Definition vector_d.h:38
VectorD(const Scalar &c0, const Scalar &c1, const Scalar &c2)
Definition vector_d.h:58
Self operator+(const Self &o) const
Definition vector_d.h:129
const Scalar & operator[](int i) const
Definition vector_d.h:113
#define DRACO_DCHECK_EQ(a, b)
Definition macros.h:81
ret($return)
Definition mesh_login_result.php:5
Definition attribute_octahedron_transform.cc:21
VectorD< ScalarT, dimension_t > operator*(const ScalarT &o, const VectorD< ScalarT, dimension_t > &v)
Definition vector_d.h:291
VectorD< uint32_t, 5 > Vector5ui
Definition vector_d.h:349
VectorD< float, 5 > Vector5f
Definition vector_d.h:342
VectorD< float, 3 > Vector3f
Definition vector_d.h:340
VectorD< float, 2 > Vector2f
Definition vector_d.h:339
VectorD< uint32_t, 7 > Vector7ui
Definition vector_d.h:351
VectorD< float, 7 > Vector7f
Definition vector_d.h:344
VectorD< float, 6 > Vector6f
Definition vector_d.h:343
VectorD< uint32_t, 2 > Vector2ui
Definition vector_d.h:346
VectorD< uint32_t, 6 > Vector6ui
Definition vector_d.h:350
VectorD< uint32_t, 3 > Vector3ui
Definition vector_d.h:347
VectorD< uint32_t, 4 > Vector4ui
Definition vector_d.h:348
ScalarT SquaredDistance(const VectorD< ScalarT, dimension_t > &v1, const VectorD< ScalarT, dimension_t > &v2)
Definition vector_d.h:298
VectorD< ScalarT, 3 > CrossProduct(const VectorD< ScalarT, 3 > &u, const VectorD< ScalarT, 3 > &v)
Definition vector_d.h:317
std::ostream & operator<<(std::ostream &os, IndexType< ValueTypeT, TagT > index)
Definition draco_index_type.h:165
VectorD< float, 4 > Vector4f
Definition vector_d.h:341