计算几何入门模板(持续更新)

Posted AC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算几何入门模板(持续更新)相关的知识,希望对你有一定的参考价值。

我也算是刚入门计算几何吧,想写一篇入门的模板,让那些和我一样刚入门的人都能看懂就好。

首先要有一些理论知识,这可以百度,我就不多说了,通过百度,你要知道:

①叉积可以判断3个点共线,还可以判断2个点构成直线,第3个点在直线的左边还是右边。

②判断两条线段相交要有2个条件,一个是矩形的什么定理(名字太长,忘了)另一个就是4个点的叉积相乘小于0(也就是异号)

之后就可以看下我收集的简单的模板了。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const int INF=0x3f3f3f3f;
typedef long long ll;
#define prN printf("\n")
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d%d",&(N),&(M))
#define SIII(N,M,K) scanf("%d%d%d",&(N),&(M),&(K))
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
const double eps = 1e-8;
//判断doubule型的正负或0
int sgn(double x)
{
    if(fabs(x) < eps)return 0;
    if(x < 0) return -1;
    else return 1;
}
//构建点,且重载运算符
struct Point
{
    double x,y;
    Point(){}
    Point(double _x,double _y)
    {
        x = _x;y = _y;
    }
    //重载减号 因为在求两个点相减构成一个向量时候会用到
    Point operator -(const Point &b)const
    {
        return Point(x - b.x,y - b.y);
    }
    //这是叉积运算,很重要,不多说
    double operator ^(const Point &b)const
    {
        return x*b.y - y*b.x;
    }
    double operator *(const Point &b)const
    {
        return x*b.x + y*b.y;
    }
};
//构建线, struct Line { Point s,e; Line(){} Line(Point _s,Point _e) { s = _s;e = _e; } }; //判断线段相交 bool inter(Line l1,Line l2) { return //这是2个矩形是否相交 max(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) && max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) && max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) && max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) && //这是判断叉积异号 sgn((l2.s-l1.s)^(l1.e-l1.s))*sgn((l2.e-l1.s)^(l1.e-l1.s)) <= 0 && sgn((l1.s-l2.s)^(l2.e-l2.s))*sgn((l1.e-l2.s)^(l2.e-l2.s)) <= 0; } //求距离 double dist(Point a,Point b) { return sqrt((b-a)*(b-a)); } int main() { //主函数调用就好了 return 0; }

现在我入门也就用了这些,做出了十几道题,等再刷刷题,我就更。

以上是关于计算几何入门模板(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

计算几何板子(待更新)

计算光栅化片段的数量

回归 | js实用代码片段的封装与总结(持续更新中...)

小程序各种功能代码片段整理---持续更新

C++入门指南(持续更新)

机器学习初入门04 – Seaborn(持续更新)