mirror of https://github.com/ArduPilot/ardupilot
AP_Math: add vector2f::offset_bearing
This commit is contained in:
parent
2ece0ac15c
commit
5837b253da
|
@ -285,6 +285,14 @@ Vector2<T> Vector2<T>::projected(const Vector2<T> &v)
|
||||||
return v * (*this * v)/(v*v);
|
return v * (*this * v)/(v*v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extrapolate position given bearing (in degrees) and distance
|
||||||
|
template <typename T>
|
||||||
|
void Vector2<T>::offset_bearing(float bearing, float distance)
|
||||||
|
{
|
||||||
|
x += cosf(radians(bearing)) * distance;
|
||||||
|
y += sinf(radians(bearing)) * distance;
|
||||||
|
}
|
||||||
|
|
||||||
// given a position pos_delta and a velocity v1 produce a vector
|
// given a position pos_delta and a velocity v1 produce a vector
|
||||||
// perpendicular to v1 maximising distance from p1
|
// perpendicular to v1 maximising distance from p1
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -435,6 +443,7 @@ template bool Vector2<float>::is_nan(void) const;
|
||||||
template bool Vector2<float>::is_inf(void) const;
|
template bool Vector2<float>::is_inf(void) const;
|
||||||
template float Vector2<float>::angle(const Vector2<float> &v) const;
|
template float Vector2<float>::angle(const Vector2<float> &v) const;
|
||||||
template float Vector2<float>::angle(void) const;
|
template float Vector2<float>::angle(void) const;
|
||||||
|
template void Vector2<float>::offset_bearing(float bearing, float distance);
|
||||||
template bool Vector2<float>::segment_intersection(const Vector2<float>& seg1_start, const Vector2<float>& seg1_end, const Vector2<float>& seg2_start, const Vector2<float>& seg2_end, Vector2<float>& intersection);
|
template bool Vector2<float>::segment_intersection(const Vector2<float>& seg1_start, const Vector2<float>& seg1_end, const Vector2<float>& seg2_start, const Vector2<float>& seg2_end, Vector2<float>& intersection);
|
||||||
template bool Vector2<float>::circle_segment_intersection(const Vector2<float>& seg_start, const Vector2<float>& seg_end, const Vector2<float>& circle_center, float radius, Vector2<float>& intersection);
|
template bool Vector2<float>::circle_segment_intersection(const Vector2<float>& seg_start, const Vector2<float>& seg_end, const Vector2<float>& circle_center, float radius, Vector2<float>& intersection);
|
||||||
template Vector2<float> Vector2<float>::perpendicular(const Vector2<float> &pos_delta, const Vector2<float> &v1);
|
template Vector2<float> Vector2<float>::perpendicular(const Vector2<float> &pos_delta, const Vector2<float> &v1);
|
||||||
|
|
|
@ -155,6 +155,9 @@ struct Vector2
|
||||||
// returns this vector projected onto v
|
// returns this vector projected onto v
|
||||||
Vector2<T> projected(const Vector2<T> &v);
|
Vector2<T> projected(const Vector2<T> &v);
|
||||||
|
|
||||||
|
// adjust position by a given bearing (in degrees) and distance
|
||||||
|
void offset_bearing(float bearing, float distance);
|
||||||
|
|
||||||
// given a position p1 and a velocity v1 produce a vector
|
// given a position p1 and a velocity v1 produce a vector
|
||||||
// perpendicular to v1 maximising distance from p1
|
// perpendicular to v1 maximising distance from p1
|
||||||
static Vector2<T> perpendicular(const Vector2<T> &pos_delta, const Vector2<T> &v1);
|
static Vector2<T> perpendicular(const Vector2<T> &pos_delta, const Vector2<T> &v1);
|
||||||
|
|
Loading…
Reference in New Issue