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