| // 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_TRANSFORMS_ROTATION_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TRANSFORMS_ROTATION_H_ |
| |
| #include "third_party/blink/renderer/platform/geometry/float_point_3d.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& result_axis, |
| double& result_angle_a, |
| double& result_angle_b); |
| |
| // 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 // THIRD_PARTY_BLINK_RENDERER_PLATFORM_TRANSFORMS_ROTATION_H_ |