Box2d::HasOverlap()
在笛卡尔坐标系下,检查两个box是否重叠
dx1~dx4, dy1~dy4, 以及部分判断条件如图(以车身坐标系为例,部分几何判断过程略过)
判断条件1:
std::abs(shift_x * cos_heading_ + shift_y * sin_heading_) <=
std::abs(dx3 * cos_heading_ + dy3 * sin_heading_) +
std::abs(dx4 * cos_heading_ + dy4 * sin_heading_) +
half_length_ &&
std::abs(shift_x * sin_heading_ - shift_y * cos_heading_) <=
std::abs(dx3 * sin_heading_ - dy3 * cos_heading_) +
std::abs(dx4 * sin_heading_ - dy4 * cos_heading_) +
half_width_
即vehicle任意一点不在obstacle对应的橙色虚线框内。
判断条件2:
std::abs(shift_x * box.cos_heading() + shift_y * box.sin_heading()) <=
std::abs(dx1 * box.cos_heading() + dy1 * box.sin_heading())