计算几何基础

1.1数学基础知识

1.点和向量的定义

 /*二维点定义*/
 struct point{
    double x;
    double y;
 };
 
 /*二维向量定义*/
 struct Vector{
    point s;  //向量的起点
    point t;  //向量的终点
 };

2.多边形的定义

/*多边形定义*/
 struct Polygon{
    int n;  //多边形的顶点数目
    point P[N];  //多边形顶点的集合,按照逆时针或顺时针排列,N
 };

3.圆的定义

/*圆的定义*/
 struct circle{
    double r;  //半径
    point o;   //圆心
 };

2.2向量的基本向量

 1.向量运算的实现

struct point{
    double x,y;
    point(){}
    point(double _x,double _y):x(_x),y(_y){}
    point operator + (point a){  //向量加法
        return point(x+a.x,y+a.y);
    }
    
    double operator - (point a){  //向量减法
        return point(x-a.x,y-a.y);
    }
    
    double operator * (point a){  //向量叉积
        return x*a.y-a.x*y;
    }
    
    double operator ^ (point a){  //向量点积
        return x*a.x+y*a.y;
    }
    
    point operator * (double a){  //向量乘以实数
        return point(a*x,a*y);
    }
    
    double len2(){   //向量模的平方
         return x*x+y*y;
    }
 };

2.向量点积、向量叉积

1)向量点积

公式:a * b = |a| * |b| * cosθ ( θ为ab的夹角 )

如果a,b是用坐标表示,即a(x1,y1),b(x2,y2),则a*b=x1*x2+y1*y2。

 

2)向量叉积

例题1.TOYS

#include<iostream>
#include<cstring>
using namespace std;
#define N 5010

struct point{
     x,y;
    point(){}
    point(double _x,double _y):x(_x),y(_y){}

    double operator - (point a){  //向量减法
        return point(x-a.x,y-a.y);
    }

    double operator * (point a){  //向量叉乘
        return x*a.y-y*a.x;
    }
 };

 

——摘自ACM/ICPC算法基础训练教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值