Day15(计算几何)

本文详细介绍了计算机科学中基础的数学概念,如高精度圆周率、浮点数比较、点和向量的表示及运算。讨论了点积和叉积的定义、几何意义及其在判断向量夹角、求模长和面积等方面的应用。此外,还涵盖了点与线、线段的关系,包括点在线上的投影、对称点计算以及多边形内的点检测和面积计算等核心知识点。
摘要由CSDN通过智能技术生成

基础部分

高精度圆周率
const double pi = acos(-1.0);
偏差值
const double eps = 1e-8;
sgn
int sgn(double x) {
    // 判断x是否等于0
   if (fabs(x) < eps)
      return 0;
   else
      return x < 0 ? -1 : 1;
}
dcmp
int dcmp(double x, double y) {
    // 比较两个浮点数,0为相等,-1为小于,1为大于
   if (fabs(x - y) < eps)
      return 0; 
   else
      return x < y ? -1 : 1; 
}

点和向量

struct Point {
    
    double x, y; 
    Point() {
   } 
    Point(double x, double y) : x(x), y(y) {
   } 
};
两点间距离
double Dist(Point A, Point B) {
   
    // 1: return hypot(A.x - B.x, A.y - B.y); 
    // 2: return sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y)); 
}
向量
typedef Point Vector;
向量的运算
struct Point {
   
     double x, y; 
     Point() {
   } 
     Point(double x, double y) : x(x), y(y) {
   } Point operator+(Point B) {
    return Point(x + B.x, y + B.y); } 
 // 加
     Point operator-(Point B) {
    return Point(x - B.x, y - B.y); } 
 // 减
     Point operator*(double k) {
    return Point(x * k, y * k); } 
 // 乘
     Point operator/(double k) {
    return Point(x / k, y / k); } 
 // 除
     bool operator==(Point B) {
    return sgn(x - B.x) == 0 && sgn(y - B.y) == 0; } 
 // 等于 
};

点积

定义:A·B=|A||B|cosθ
几何意义

θ:表示向量b与向量a的夹角
向量b在向量a上的投影长度乘以向量a的模长

double Dot(Vector A, Vector B) {
   
    return A.x * B.x + A.y * B.y; 
}
应用
  1. 判断向量 与向量 的夹角是钝角还是锐角
    若 Dot(A,B) > 0,说明向量 与向量 的夹角是锐角
    若 Dot(A,B) == 0,说明向量 与向量 的夹角是直角
    若 Dot(A,B) < 0,说明向量 与向量 的夹角是钝角
  2. 求向量A的模长
double Len(Vector A) {
   
    return sqrt(Dot(A, A));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值