// Copyright 2013 The Flutter 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 FLUTTER_IMPELLER_GEOMETRY_TRIG_H_ #define FLUTTER_IMPELLER_GEOMETRY_TRIG_H_ #include #include #include "flutter/impeller/geometry/point.h" namespace impeller { /// @brief A structure to store the sine and cosine of an angle. struct Trig { /// Construct a Trig object from a given angle in radians. explicit Trig(Radians r) : cos(std::cos(r.radians)), sin(std::sin(r.radians)) {} /// Construct a Trig object from the given cosine and sine values. Trig(double cos, double sin) : cos(cos), sin(sin) {} double cos; double sin; /// @brief Returns the corresponding point on a circle of a given |radius|. Vector2 operator*(double radius) const { return Vector2(static_cast(cos * radius), static_cast(sin * radius)); } /// @brief Returns the corresponding point on an ellipse with the given size. Vector2 operator*(const Size& ellipse_radii) const { return Vector2(static_cast(cos * ellipse_radii.width), static_cast(sin * ellipse_radii.height)); } }; } // namespace impeller #endif // FLUTTER_IMPELLER_GEOMETRY_TRIG_H_