首页 > 其他 > 详细

计算几何

时间:2019-03-21 12:06:06      阅读:168      评论:0      收藏:0      [点我收藏+]

直线相关

定义

struct Vec {
    double x, y;
    Vec(double x = 0, double y = 0) : x(x), y(y) {}
    Vec operator - (const Vec & a) const { return Vec(x - a.x, y - a.y); }
    double operator * (const Vec & a) const { return x * a.y - y * a.x; }
};

typedef Vec Pt;

struct Line {
    Pt p; Vec v;
};

点与直线的位置关系

bool online(Pt a, Line b) {
    return fabs((a.p - b.p) * b.v) < eps ? true : false;
}

两直线的位置关系

int check(Line a, Line b) {
    return fabs(a.v * b.v) < eps ? fabs(a.v * (b.p - a.p)) < eps ? 0 : 1 : 2;
}

一些性质

  • 互相垂直的两向量的点积为 \(0\)
  • 在一条直线上的两向量的叉积为 \(0\)
  • 如果 \(\vec{a}\)\(\vec{b}\) 的叉积为正,\(\vec{a}\)\(\vec{c}\) 的叉积为负,则 \(\vec{b}\)\(\vec{c}\) 分别在 \(\vec{a}\) 的两侧。

计算几何

原文:https://www.cnblogs.com/fly-in-milkyway/p/10569895.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!