111 lines
3.1 KiB
C++
111 lines
3.1 KiB
C++
|
/*
|
||
|
* Definitions.h
|
||
|
* RVO2 Library
|
||
|
*
|
||
|
* Copyright 2008 University of North Carolina at Chapel Hill
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
* Please send all bug reports to <geom@cs.unc.edu>.
|
||
|
*
|
||
|
* The authors may be contacted via:
|
||
|
*
|
||
|
* Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha
|
||
|
* Dept. of Computer Science
|
||
|
* 201 S. Columbia St.
|
||
|
* Frederick P. Brooks, Jr. Computer Science Bldg.
|
||
|
* Chapel Hill, N.C. 27599-3175
|
||
|
* United States of America
|
||
|
*
|
||
|
* <http://gamma.cs.unc.edu/RVO2/>
|
||
|
*/
|
||
|
|
||
|
#ifndef RVO2D_DEFINITIONS_H_
|
||
|
#define RVO2D_DEFINITIONS_H_
|
||
|
|
||
|
/**
|
||
|
* \file Definitions.h
|
||
|
* \brief Contains functions and constants used in multiple classes.
|
||
|
*/
|
||
|
|
||
|
#include <algorithm>
|
||
|
#include <cmath>
|
||
|
#include <cstddef>
|
||
|
#include <cstdint>
|
||
|
#include <limits>
|
||
|
#include <vector>
|
||
|
|
||
|
#include "Vector2.h"
|
||
|
|
||
|
/**
|
||
|
* \brief A sufficiently small positive number.
|
||
|
*/
|
||
|
const float RVO_EPSILON = 0.00001f;
|
||
|
|
||
|
namespace RVO2D {
|
||
|
class Agent2D;
|
||
|
class Obstacle2D;
|
||
|
class RVOSimulator2D;
|
||
|
|
||
|
/**
|
||
|
* \brief Computes the squared distance from a line segment with the
|
||
|
* specified endpoints to a specified point.
|
||
|
* \param a The first endpoint of the line segment.
|
||
|
* \param b The second endpoint of the line segment.
|
||
|
* \param c The point to which the squared distance is to
|
||
|
* be calculated.
|
||
|
* \return The squared distance from the line segment to the point.
|
||
|
*/
|
||
|
inline float distSqPointLineSegment(const Vector2 &a, const Vector2 &b,
|
||
|
const Vector2 &c)
|
||
|
{
|
||
|
const float r = ((c - a) * (b - a)) / absSq(b - a);
|
||
|
|
||
|
if (r < 0.0f) {
|
||
|
return absSq(c - a);
|
||
|
}
|
||
|
else if (r > 1.0f) {
|
||
|
return absSq(c - b);
|
||
|
}
|
||
|
else {
|
||
|
return absSq(c - (a + r * (b - a)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* \brief Computes the signed distance from a line connecting the
|
||
|
* specified points to a specified point.
|
||
|
* \param a The first point on the line.
|
||
|
* \param b The second point on the line.
|
||
|
* \param c The point to which the signed distance is to
|
||
|
* be calculated.
|
||
|
* \return Positive when the point c lies to the left of the line ab.
|
||
|
*/
|
||
|
inline float leftOf(const Vector2 &a, const Vector2 &b, const Vector2 &c)
|
||
|
{
|
||
|
return det(a - c, b - a);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* \brief Computes the square of a float.
|
||
|
* \param a The float to be squared.
|
||
|
* \return The square of the float.
|
||
|
*/
|
||
|
inline float sqr(float a)
|
||
|
{
|
||
|
return a * a;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif /* RVO2D_DEFINITIONS_H_ */
|