| // 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 ASH_LASER_LASER_SEGMENT_UTILS_H_ |

| #define ASH_LASER_LASER_SEGMENT_UTILS_H_ |

| |

| #include <vector> |

| |

| #include "ash/ash_export.h" |

| |

| namespace gfx { |

| class PointF; |

| class Vector2dF; |

| } |

| |

| namespace ash { |

| |

| // Compute the angle in radians of |point|, with |origin| as the origin and |

| // |direction| as the x-axis. In other words, computes the angle in radians |

| // between |direction| and |point| - |origin|. |

| float ASH_EXPORT AngleOfPointInNewCoordinates(const gfx::PointF& origin, |

| const gfx::Vector2dF& direction, |

| const gfx::PointF& point); |

| |

| // Compute the variables for the equation of the lines normal to the line |

| // segment formed by |start_point| and |end_point|, and which run through the |

| // endpoints of that line segment. The outputs will be returned as NaN if the |

| // line segment is parallel to the x-axis (undefined normal lines). |

| void ASH_EXPORT ComputeNormalLineVariables(const gfx::PointF& start_point, |

| const gfx::PointF& end_point, |

| float* normal_slope, |

| float* start_y_intercept, |

| float* end_y_intercept); |

| |

| // Compute the two the projections of |point| along the line defined by |

| // |line_slope| and |line_y_intercept|. The distance of each projection is |

| // |projection_distance| from |point|. |

| void ASH_EXPORT ComputeProjectedPoints(const gfx::PointF& point, |

| float line_slope, |

| float line_y_intercept, |

| float projection_distance, |

| gfx::PointF* first_projection, |

| gfx::PointF* second_projection); |

| |

| // Checks if the angle of |first_point| is smaller than the angle of |

| // |second_point|. These angles are computed relative to the coordinate system |

| // defined by the midpoint of |start_point| and |end_point|, with the x-axis |

| // as |end_point| - |start_point|. |

| bool ASH_EXPORT IsFirstPointSmallerAngle(const gfx::PointF& start_point, |

| const gfx::PointF& end_point, |

| const gfx::PointF& first_point, |

| const gfx::PointF& second_point); |

| |

| } // namespace ash |

| |

| #endif // ASH_LASER_LASER_SEGMENT_UTILS_H_ |