Add Chromium-only Blender WebEngine parity work
This commit is contained in:
103
blender-5.2.0/extern/mantaflow/helper/util/quaternion.h
vendored
Normal file
103
blender-5.2.0/extern/mantaflow/helper/util/quaternion.h
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* MantaFlow fluid solver framework
|
||||
* Copyright 2011 Tobias Pfaff, Nils Thuerey
|
||||
*
|
||||
* This program is free software, distributed under the terms of the
|
||||
* Apache License, Version 2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Basic quaternion class
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef _QUATERNION_H
|
||||
#define _QUATERNION_H
|
||||
|
||||
#include "vectorbase.h"
|
||||
|
||||
namespace Manta {
|
||||
|
||||
//! Very basic quaternion class
|
||||
class Quaternion {
|
||||
public:
|
||||
//! default constructor
|
||||
Quaternion() : x(0), y(0), z(0), w(0)
|
||||
{
|
||||
}
|
||||
|
||||
//! copy constructor
|
||||
Quaternion(const Quaternion &q) : x(q.x), y(q.y), z(q.z), w(q.w)
|
||||
{
|
||||
}
|
||||
|
||||
//! construct a quaternion from members
|
||||
Quaternion(Real _x, Real _y, Real _z, Real _w) : x(_x), y(_y), z(_z), w(_w)
|
||||
{
|
||||
}
|
||||
|
||||
//! construct a quaternion from imag/real parts
|
||||
Quaternion(Vec3 i, Real r) : x(i.x), y(i.y), z(i.z), w(r)
|
||||
{
|
||||
}
|
||||
|
||||
//! Assign operator
|
||||
inline Quaternion &operator=(const Quaternion &q)
|
||||
{
|
||||
x = q.x;
|
||||
y = q.y;
|
||||
z = q.z;
|
||||
w = q.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! Assign multiplication operator
|
||||
inline Quaternion &operator*=(const Real a)
|
||||
{
|
||||
x *= a;
|
||||
y *= a;
|
||||
z *= a;
|
||||
w *= a;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! return inverse quaternion
|
||||
inline Quaternion inverse() const
|
||||
{
|
||||
Real mag = 1.0 / (x * x + y * y + z * z + w * w);
|
||||
return Quaternion(-x * mag, -y * mag, -z * mag, w * mag);
|
||||
}
|
||||
|
||||
//! imaginary part accessor
|
||||
inline Vec3 imag()
|
||||
{
|
||||
return Vec3(x, y, z);
|
||||
}
|
||||
|
||||
// imaginary part
|
||||
Real x;
|
||||
Real y;
|
||||
Real z;
|
||||
|
||||
// real part
|
||||
Real w;
|
||||
};
|
||||
|
||||
//! Multiplication operator
|
||||
inline Quaternion operator*(const Quaternion &q1, const Quaternion &q2)
|
||||
{
|
||||
return Quaternion(q2.w * q1.x + q2.x * q1.w + q2.y * q1.z - q2.z * q1.y,
|
||||
q2.w * q1.y + q2.y * q1.w + q2.z * q1.x - q2.x * q1.z,
|
||||
q2.w * q1.z + q2.z * q1.w + q2.x * q1.y - q2.y * q1.x,
|
||||
q2.w * q1.w - q2.x * q1.x - q2.y * q1.y - q2.z * q1.z);
|
||||
}
|
||||
|
||||
//! Multiplication operator
|
||||
inline Quaternion operator*(const Quaternion &q, const Real a)
|
||||
{
|
||||
return Quaternion(q.x * a, q.y * a, q.z * a, q.w * a);
|
||||
}
|
||||
|
||||
} // namespace Manta
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user