| | |
| | | return fabs(point.X*line.Y1 + point.Y*line.X2 + line.X1*line.Y2 - line.X2*line.Y1 - line.X1*point.Y - point.X*line.Y2) / c; |
| | | } |
| | | |
| | | /********************************************************* |
| | | * p2----------->p1 线端和Y轴的夹角 |
| | | * @param p1 |
| | | * @param p2 |
| | | * @return yaw |
| | | */ |
| | | double YawOf(PointF p1, PointF p2) |
| | | { |
| | | double deg = 0.0; |
| | | |
| | | if (fabs(p1.Y - p2.Y) <= GLB_EPSILON) { |
| | | if (p1.X > p2.X) { |
| | | deg = 90; |
| | | } else { |
| | | deg = 270; |
| | | } |
| | | } else if (fabs(p1.X - p2.X) <= GLB_EPSILON) { |
| | | if (p1.Y > p2.Y) { |
| | | deg = 0; |
| | | } else { |
| | | deg = 180; |
| | | } |
| | | } else { |
| | | deg = atan(fabs(p1.X - p2.X) / |
| | | fabs(p1.Y - p2.Y)); |
| | | |
| | | deg = toDegree(deg); |
| | | |
| | | if (p1.X > p2.X && |
| | | p1.Y > p2.Y) { |
| | | |
| | | } else if (p1.X < p2.X && |
| | | p1.Y > p2.Y) { |
| | | deg = 360 - deg; |
| | | } else if (p1.X < p2.X && |
| | | p1.Y < p2.Y) { |
| | | deg = 180 + deg; |
| | | } else if (p1.X > p2.X && |
| | | p1.Y < p2.Y) { |
| | | deg = 180 - deg; |
| | | } |
| | | } |
| | | |
| | | return deg; |
| | | } |
| | | |
| | | /********************************************************** |
| | | * base 和 dest的第二点重合时形成的夹角 |
| | | * @param base |
| | |
| | | } |
| | | |
| | | /*************************************************************** |
| | | * @brief p3位于由p1->p2构成的射线,左侧还是右侧,同向,反向 |
| | | * @brief p3位于由p1--------->p2构成的射线,左侧还是右侧,同向,反向 |
| | | * @param p1 |
| | | * @param p2 |
| | | * @param p3 |