二维下计算几何程序头 (模板)

 
  
#include < iostream >
#include
< cmath >
using namespace std;
const double epoints = 1e - 9 ;
int sgn( double a) {
return (a > epoints) - (a < - epoints);
}
const double pointi = acos( - 1.0 );
struct point{
double x, y;
point(
double xx = 0 , double yy = 0 ){
x
= xx; y = yy;
}
bool operator == ( const point & a) const {
return sgn(x - a.x) == 0 && sgn(y - a.y) == 0 ;
}
bool operator != ( const point & a) const {
return sgn(x - a.x) != 0 || sgn(y - a.y) != 0 ;
}
bool operator < ( const point & a) const {
return sgn(y - a.y) < 0 || sgn(y - a.y) == 0 && sgn(x - a.x) < 0 ;
}

point
operator + ( const point & a) const {
return point(x + a.x, y + a.y);
}
point
operator - ( const point & a) const {
return point(x - a.x, y - a.y);
}
point
operator ^ ( const double & a) const {
return point(x * a, y * a);
}
double operator ^ ( const point & a) const { // 点积
return x * a.x + y * a.y;
}
double operator * ( const point & a) const { // 叉积
return x * a.y - y * a.x;
}

point trunlen(
double a) const {
a
/= sqrt(x * x + y * y);
return point(x * a, y * a);
}
point turn_left()
const {
return point( - y, x);
}
point turn_right()
const {
return point(y, - x);
}
double cross( const point & a, const point & b) const { // 以this为起点两向量叉积
return (a.x - x) * (b.y - y) - (a.y - y) * (b.x - x);
}
double dot( const point & a, const point & b) const { // 以this为起点两向量点积
return (a.x - x) * (b.x - x) + (a.y - y) * (b.y - y);
}

double len2(){
return x * x + y * y;
}
double len()
{
return sqrt (len2());
}

void input() {
scanf(
" %lf %lf " , & x, & y);
}
void output() const {
printf(
" %lf %lf\n " , x, y);
}
};
int main()
{
return 0 ;
}

 

 

参考ACM武汉大学wiki之算法介绍

转载于:https://www.cnblogs.com/DreamUp/archive/2010/08/28/1811164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值