/* * Agent2d.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 . * * 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 * * */ #ifndef RVO2D_AGENT_H_ #define RVO2D_AGENT_H_ /** * \file Agent2d.h * \brief Contains the Agent class. */ #include "Definitions.h" #include "RVOSimulator2d.h" namespace RVO2D { /** * \brief Defines an agent in the simulation. */ class Agent2D { public: /** * \brief Constructs an agent instance. * \param sim The simulator instance. */ explicit Agent2D(); /** * \brief Computes the neighbors of this agent. */ void computeNeighbors(RVOSimulator2D *sim_); /** * \brief Computes the new velocity of this agent. */ void computeNewVelocity(RVOSimulator2D *sim_); /** * \brief Inserts an agent neighbor into the set of neighbors of * this agent. * \param agent A pointer to the agent to be inserted. * \param rangeSq The squared range around this agent. */ void insertAgentNeighbor(const Agent2D *agent, float &rangeSq); /** * \brief Inserts a static obstacle neighbor into the set of neighbors * of this agent. * \param obstacle The number of the static obstacle to be * inserted. * \param rangeSq The squared range around this agent. */ void insertObstacleNeighbor(const Obstacle2D *obstacle, float rangeSq); /** * \brief Updates the two-dimensional position and two-dimensional * velocity of this agent. */ void update(RVOSimulator2D *sim_); std::vector > agentNeighbors_; size_t maxNeighbors_; float maxSpeed_; float neighborDist_; Vector2 newVelocity_; std::vector > obstacleNeighbors_; std::vector orcaLines_; Vector2 position_; Vector2 prefVelocity_; float radius_; float timeHorizon_; float timeHorizonObst_; Vector2 velocity_; float height_ = 0.0; float elevation_ = 0.0; uint32_t avoidance_layers_ = 1; uint32_t avoidance_mask_ = 1; float avoidance_priority_ = 1.0; size_t id_; friend class KdTree2D; friend class RVOSimulator2D; }; /** * \relates Agent * \brief Solves a one-dimensional linear program on a specified line * subject to linear constraints defined by lines and a circular * constraint. * \param lines Lines defining the linear constraints. * \param lineNo The specified line constraint. * \param radius The radius of the circular constraint. * \param optVelocity The optimization velocity. * \param directionOpt True if the direction should be optimized. * \param result A reference to the result of the linear program. * \return True if successful. */ bool linearProgram1(const std::vector &lines, size_t lineNo, float radius, const Vector2 &optVelocity, bool directionOpt, Vector2 &result); /** * \relates Agent * \brief Solves a two-dimensional linear program subject to linear * constraints defined by lines and a circular constraint. * \param lines Lines defining the linear constraints. * \param radius The radius of the circular constraint. * \param optVelocity The optimization velocity. * \param directionOpt True if the direction should be optimized. * \param result A reference to the result of the linear program. * \return The number of the line it fails on, and the number of lines if successful. */ size_t linearProgram2(const std::vector &lines, float radius, const Vector2 &optVelocity, bool directionOpt, Vector2 &result); /** * \relates Agent * \brief Solves a two-dimensional linear program subject to linear * constraints defined by lines and a circular constraint. * \param lines Lines defining the linear constraints. * \param numObstLines Count of obstacle lines. * \param beginLine The line on which the 2-d linear program failed. * \param radius The radius of the circular constraint. * \param result A reference to the result of the linear program. */ void linearProgram3(const std::vector &lines, size_t numObstLines, size_t beginLine, float radius, Vector2 &result); } #endif /* RVO2D_AGENT_H_ */