首页 > 其他分享 >计算几何の板子

计算几何の板子

时间:2023-08-08 16:24:08浏览次数:125  
标签:p1 return Point double Cross 板子 il 计算 几何

一 精度处理

\(eps\)和\(sgn\)

const double eps=1e-8;
int sgn(double x){//判断大小
    if(fabs(x)<eps)return 0;    
    else return x<0?-1:1;
}

二 点

1 点的初始化

向量的表示形式上与点完全相同
重载点运算符,支持向量的四种运算

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);}
};
2 两点间距离
inline double getdis(Point a,Point b){
    return hypot(a.x-b.x,a.y-b.y);
}

三 向量的点积,叉积

证明略
点积:

il double Dot(Point a,Point b){
    return a.x*b.x+a.y*b.y;
}

叉积:

il double Cross(Point a,Point b){
    return a.x*b.y-a.y*b.x;
}

四 线,线段

1 线段的初始化

①.直接用两个点表示线/线段

struct Line{Point p1,p2;};

②.其他nb的写法,咕~

2 两直线位置关系
il int Line_relation(Line v1,Line v2){
    if(sgn(Cross(v1.p2-v1.p1,v2.p2-v2.p1))==0){
        return 0;
    }
    return 1;
}//0:共线 /平行   1:相交 
3 两线段是否相交
il bool Cross_segment(Point a,Point b,Point c,Point d){
    double c1=Cross(b-a,c-a),c2=Cross(b-a,d-a);
    double d1=Cross(d-c,a-c),d2=Cross(d-c,b-c);
    return sgn(c1)*sgn(c2)<=0 && sgn(d1)*sgn(d2)<=0;
}
4 求两线段的交点
il Point Cross_point(Point a,Point b,Point c,Point d){
    double s1=Cross(b-a,c-a);
    double s2=Cross(b-a,d-a);
    return Point(c.x*s2-d.x*s1,c.y*s2-d.y*s1)/(s2-s1);
}
5 已知横坐标求纵坐标
il double get_y(Line v,double x){
    double k=(v.p1.y-v.p2.y)/(v.p1.x-v.p2.x);
    double b=v.p1.y-k*v.p1.x;
    return k*x+b;
}
6 已知纵坐标求横坐标
il double get_x(Line v,double y){
    double k=(v.p1.y-v.p2.y)/(v.p1.x-v.p2.x);
    double b=v.p1.y-k*v.p1.x;
    return (y-b)/k;
}

标签:p1,return,Point,double,Cross,板子,il,计算,几何
From: https://www.cnblogs.com/cccomfy/p/17614673.html

相关文章

  • 凸优化9——强对偶条件、几何解释、影子价格
    中科大-凸优化笔记(lec31)-Lagrange对偶(三)_及时行樂_的博客-CSDN博客中科大-凸优化笔记(lec32)-几种解释_及时行樂_的博客-CSDN博客关于Slater条件的证明有点难,我觉得暂时先记住就好此外我关注了一下影子价格这个东西什么是影子价格?——线性规划的对偶解,及拉格朗日乘数-知乎(......
  • 复习笔记|《计算机组成原理》
    参考教材:《计算机组成原理》蒋本珊➢前2类题看书中和课件中的有关概念。➢第3、4、5类题请注意平时的作业。如:❑扩展操作码设计❑有效地址的计算❑定点数乘、除运算❑存储器设计❑Cache计算❑微指令操作控制字段的设计第一章➢存储程序概念计算机硬件的组成,存储器控......
  • sql 递减计算
    CREATETABLE#temp(qtyINT,qty1INT,qty2INT);INSERTINTO#temp(qty,qty1,qty2)VALUES(7000,0,0),(6000,0,0),(5000,0,0),(4000,0,0);DECLARE@pINT=15000;UPDAT......
  • php中计算二维数组中某一元素之和
    [0] => array(5){    ["id"] => string(2) "11"    ["name"] => string(5) "1.jpg"    ["suffix"] => string(3) "jpg"    ["url"] => string(29) "./Uploads/1/5292f55d208e......
  • python获取Excel文件中单元格公式的计算结果
    importopenpyxl#打开Excel文件wb=openpyxl.loadworkbook('data.xlsx',data_only=True)#获取WorkSheetws=wb.worksheets[0]forrowinws.rows:print(row[0].value)注意:使用openpyxl读取公式计算结果时,如果无法得到正确结果时会读出None,此时需要打开对应的excel......
  • [系统设计] 计算机系统设计思想:缓存/局部性原理(转载)【待完善】
    1缓存概述缓存思想是计算机系统设计中极为重要的解决手段,其本质原则是————局部性原理在资源有限的情况下,将热点资源、最重要的资源部署到离请求方最近的地方去,以达到性能预期。1.1什么是缓存,为什么要用缓存?缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据......
  • JavaOpenCV相似度计算基础教程
    JavaOpenCV相似度计算基础教程JavaOpenCV是一个基于开放源代码的计算机视觉库,它可以实现许多计算机视觉任务,如图像处理、物体识别和图像相似度计算等。本教程旨在向您介绍JavaOpenCV中的相似度计算基础,帮助您理解如何使用该库计算图像之间的相似度。JavaOpenCV相似度计算基础教程图......
  • 14云计算
    云计算:集合了大量的计算设备和资源,对用户屏蔽了底层差异的分布式处理架构,其用户与提供实际服务的计算资源是相分离的、 优点:超大规模,虚拟化、高可靠性、高可伸缩性、按需服务、成本低(前期投入低、综合使用成本低) 分类:按服务类型分类SaaS软件既服务:基于多租户技术实现、直......
  • 计算机专业词汇
    computedvalue通过计算得到的值。如C#的属性,一种是通过读取字段得到值的属性,另外一种是通过计算得到值的属性,可以称之为computedproperty。MySQL8.0支持计算列,计算列计算其他字段得到一个值,预先存储下来作为物理列,占用了更多内存但是查询时SQL不用写计算表达式,直接读取计算......
  • 计算机基础
    计算机硬件五大单元:输入单元、输出单元、CPU内部控制单元、算数逻辑单元、内存。计算机分类:超级计算机、大型计算机、迷你计算机、工作站、微电脑。计算机常用计算单位:文件大小采用二进制方式,速度单位常用十进制.1Byte=8bit1KB=1024B1M=1024KB1G=1024M1T=1024G1P=1024T个人计......