You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
#include <cmath>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <iomanip>
|
|
#include "Dense"
|
|
|
|
struct AgentState {
|
|
double x;
|
|
double y;
|
|
double head;
|
|
AgentState(double init_x=0.0, double init_y=0.0, double init_head=0.0):
|
|
x(init_x), y(init_y), head(init_head){}
|
|
AgentState(): x(0.0), y(0.0), head(0.0){};
|
|
};
|
|
|
|
struct AgentDynamicData{
|
|
double linear_velocity;
|
|
double angular_velocity;
|
|
AgentDynamicData(double linear_velocity_init, double angular_velocity_init):
|
|
linear_velocity(linear_velocity_init), angular_velocity(angular_velocity_init){}
|
|
AgentDynamicData(): linear_velocity(0.0), angular_velocity(0.0){}
|
|
};
|
|
|
|
struct AgentConstraint{
|
|
double linear;
|
|
double angularL;
|
|
double angularR;
|
|
};
|
|
|
|
struct Point {
|
|
double x;
|
|
double y;
|
|
Point(double x_init, double y_init): x(x_init), y(y_init){}
|
|
Point():x(0.0), y(0.0){}
|
|
|
|
//范数
|
|
double norm(){
|
|
return sqrt(x*x + y*y);
|
|
}
|
|
|
|
Eigen::Vector2d toVector(){
|
|
return Eigen::Vector2d(x, y);
|
|
}
|
|
|
|
/*定义一些操作运算*/
|
|
Point operator+(const Point& other) const{
|
|
return Point(x+other.x, y+other.y);
|
|
}
|
|
|
|
Point operator-(const Point& other) const{
|
|
return Point(x-other.x, y-other.y);
|
|
}
|
|
|
|
Point& operator+=(const Point& other){
|
|
x = x + other.x;
|
|
y = y + other.y;
|
|
return *this;
|
|
}
|
|
|
|
Point& operator-=(const Point& other){
|
|
x = x - other.x;
|
|
y = y - other.y;
|
|
return *this;
|
|
}
|
|
|
|
bool operator==(const Point& other) const {
|
|
return (x == other.x) && (y == other.y);
|
|
}
|
|
|
|
bool operator!=(const Point& other) const {
|
|
return !(*this == other);
|
|
}
|
|
};
|
|
|
|
double cross(Point p1, Point p2);
|
|
double dot(Point p1, Point p2);
|
|
Eigen::Vector2d GetVecFromHead(double head);
|
|
double GetDist2Bound(AgentState self_state, AgentState neighbor_state, double blind_angle);
|
|
bool isLeft(AgentState agent, Point p);
|
|
bool isRight(AgentState agent, Point p);
|
|
std::string vec2str(std::vector<std::vector<int>>);
|
|
std::string vec2str(std::vector<AgentState>);
|