几何基本函数----Point

//=====================================================================================
//  float型精度(6~7位), 最少为小数点后6位 
//  double型精度(15~16位),   最少为小数点后15位 
//===================================================================================== 
#include<math.h> 

struct Point{
	double x, y;
	Point() {}
	Point(double x = 0, double y = 0):x(x), y(y) {}
}; 

typedef Point P; // 使 P成为Point的别名 

//向量 + 向量 = 向量, 点 + 向量 = 点;
P operator + (P A, P B) {
	return P(A.x + B.x, A.y + B.y);
} 

//点 - 点 = 向量;
P operator - (P A, P B) {
	return P(A.x - B.x, A.y - B.y);
} 

//向量 * 数 = 向量 
P operator * (P A, double d) {
	return P(A.x * d, A.y * d);
}

//向量 / 数 = 向量
P operator / (P A, double d) {
	return P(A.x / d, A.y / d);
} 

//优先比较a、b两点的横坐标, 若相等, 再比较纵坐标 
bool operator < (const P& a, const P& b) {
	return a.x < b.x || (a.x == b.x && a.y < b.y);
} 
//定义浮点误差  1的-10次方 
const double eps = 1e-10;

//用于判断浮点误差 
int dcmp(double x) {
	if(fabs(x) < eps) return 0;  //如果小于定义的浮点误差  (一般就忽略误差)
	if(x < 0) return -1; //如果误差大于定义的浮点误差   再判断该误差是正值还是负值
	else return 1; 
} 

//根据精确度判断点是否为同一个点 
bool operator == (const P& a, const P& b) {  
	return dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y) == 0; 
} 

//二维空间内有两个向量a(x1, y1)和b(x2, y2),定义它们的乘积(又叫内积、点积)为: x1*x2+y1*y2; 
//点积  注意  :  点积就是 两个向量的乘积!! 
double operator * (const P& a, const P& b) {
	return  a.x*b.x + a.y*b.y;
} 


//在二维空间中,叉乘的定义是:V1(x1, y1) * V2(x2, y2) = x1y2 –y1x2
//叉积(也称叉乘) : 用于求两个向量组成的三角形的有向面积的两倍 
double operator ^ (const P& a, const P& b) {
	return  a.x*b.y - b.x*a.y;
}

//两点间的距离
double dist(P a, P b) {
	return sqrt((a-b)*(a-b));
} 

//绕原点旋转角度rad(rad是弧度,不是角度)后得到的新点。 
P tansXY(P A, double rad) {
	double tx = A.x*cos(rad)-A.y*sin(rad);
	double ty = A.x*sin(rad)+A.y*cos(rad); 
	return P(tx, ty);
} 
//======================================================================================== 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值