第二节 计算几何线类
  • db dis_pt_seg(const pt p, const pt s, const pt t)
    求点 p 到线段 st 的距离
  • pt pt_projline(const pt p, const pt s, const pt t)
    求点 p 到线段 st 的垂足
  • bool pt_on_seg(pt p, pt s, pt t)
    判断点 p 是否在线段 st 上(包括端点)
  • bool parallel(line a, line b)
    判断直线 ab 是否平行
  • bool iscross_seg(pt a, pt b, pt c, pt d)
    判断线段 ab 和线段 cd 是否相交
  • bool line_make_pt(line a, line b, pt &res)
    判断直线 ab 是否有交点,有则保存在 res
  • line move_d(line a, const db &len)
    将直线 a 沿法向量平移 len
namespace Line {
    struct line {
        pt a, b;
        line() {}
        line(pt x, pt y) : a(x), b(y) {}
        void input() {
            a.input(); b.input();
        }
    };

    db dis_pt_seg(const pt p, const pt s, const pt t) {
        if (cmp(dot(p - s, t - s)) < 0) return (p - s).norm();
        if (cmp(dot(p - t, s - t)) < 0) return (p - t).norm();
        return fabs(det(s - p, t - p) / dist(s, t));
    }

    pt pt_projline(const pt p, const pt s, const pt t) {
        db r = dot(t - s, p - s) / dot(t - s, t - s);
        return s + r * (t - s);
    }

    bool pt_on_seg(pt p, pt s, pt t) {
        return !cmp(det(p - s, t - s)) && cmp(dot(p - s, p - t)) <= 0;
    }

    bool parallel(line a, line b) {
        return !cmp(det(a.a - a.b, b.a - b.b));
    }

    bool iscross_seg(pt a, pt b, pt c, pt d) {
        return min(a.x, b.x) <= max(c.x, d.x) &&
            max(a.x, b.x) >= min(c.x, d.x) &&
            min(a.y, b.y) <= max(c.y, d.y) &&
            max(a.y, b.y) >= min(c.y, d.y) &&
            det(a - c, d - c) * det(d - c, b - c) >= 0 &&
            det(c - a, b - a) * det(b - a, d - a) >= 0;
    }

    bool line_make_pt(line a, line b, pt &res) {
        if (parallel(a, b)) return false;
        db s1 = det(a.a - b.a, b.b - b.a), s2 = det(a.b - b.a, b.b - b.a);
        res = (s1 * a.b - s2 * a.a) / (s1 - s2);
        return true;
    }
    line move_d(line a, const db &len) {
        pt d = a.b - a.a;
        d = d / d.norm();
        d = rotate_point(d, pi/2);
        return line(a.a + d * len, a.b + d * len);
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇