| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef Rotation_h |
| #define Rotation_h |
| |
| #include "platform/geometry/FloatPoint3D.h" |
| |
| namespace blink { |
| |
| struct PLATFORM_EXPORT Rotation { |
| Rotation() : axis(0, 0, 0), angle(0) {} |
| |
| Rotation(const FloatPoint3D& axis, double angle) : axis(axis), angle(angle) {} |
| |
| // If either rotation is effectively "zero" or both rotations share the same |
| // normalized axes this function returns true and the "non-zero" axis is |
| // returned as resultAxis and the effective angles are returned as |
| // resultAngleA and resultAngleB. Otherwise false is returned. |
| static bool getCommonAxis(const Rotation& /*a*/, |
| const Rotation& /*b*/, |
| FloatPoint3D& resultAxis, |
| double& resultAngleA, |
| double& resultAngleB); |
| |
| // A progress of 0 corresponds to "from" and a progress of 1 corresponds to |
| // "to". |
| static Rotation slerp(const Rotation& from, |
| const Rotation& to, |
| double progress); |
| |
| // Returns a rotation whose effect is equivalent to applying a followed by b. |
| static Rotation add(const Rotation& /*a*/, const Rotation& /*b*/); |
| |
| // No restrictions on the axis vector. |
| FloatPoint3D axis; |
| |
| // Measured in degrees. |
| double angle; |
| }; |
| |
| } // namespace blink |
| |
| #endif // Rotation_h |