blob: 5cc9c82e6e197ccbc424be22e7dae3760d68b18f [file] [log] [blame]
// 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.
#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