bool on_segment(const silly_point& p, const silly_point& q1, const silly_point& q2)
{
return std::min(q1.lgtd, q2.lgtd) <= p.lgtd && p.lgtd <= std::max(q1.lgtd, q2.lgtd) && std::min(q1.lttd, q2.lttd) <= p.lttd && p.lttd <= std::max(q1.lttd, q2.lttd);
}
silly_point line_intersection_wa(const silly_point& p1, const silly_point& p2, const silly_point& q1, const silly_point& q2)
{
// 利用直线方程求解交点
double a1 = p2.lttd - p1.lttd;
double b1 = p1.lgtd - p2.lgtd;
double c1 = a1 * p1.lgtd + b1 * p1.lttd;
double a2 = q2.lttd - q1.lttd;
double b2 = q1.lgtd - q2.lgtd;
double c2 = a2 * q1.lgtd + b2 * q1.lttd;
double determinant = a1 * b2 - a2 * b1;
if (fabs(determinant) < 1e-6)
{
return silly_point(); // 没有交点或线段重叠
}
double x
Sutherland-Hodgman算法裁剪多边形 求矩形和多边形相交
于 2024-09-05 15:16:05 首次发布