#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
const double EPS=1e-8;
const double PI=acos(-1.0);
int dcmp(double x){
if (fabs(x)<EPS) return 0;
return x>0?1:-1;
}
struct point{
double x,y;
point(){}
point(double _x,double _y):x(_x),y(_y){}
/**运算操作**/
bool operator==(point a)const{
return dcmp(a.x-x)==0&&dcmp(a.y-y)==0;
}
bool operator<(point a)const{
return dcmp(x-a.x)==0?dcmp(y-a.y)<0:dcmp(x-a.x)<0;
}
friend point operator+(point a,point b){
return point(a.x+b.x,a.y+b.y);
}//向量+向量=向量
friend point operator-(point a,point b){
return point(a.x-b.x,a.y-b.y);
}//点-点=向量
friend point operator*(point a,double p){
return point(a.x*p,a.y*p);
}//向量*数=向量
friend point operator/(point a,double p){
return point(a.x/p,a.y/p);
}//向量/数=向量
/**基本信息计算**/
double len(){
return hypot(x,y);
}
double len2(){
return x*x+y*y;
}
double distance(point p){
return hypot(x-p.x,y-p.y);
}
/**向量变换**/
point rotate(double rad){
return point(x*cos(rad)-y*sin(rad),x*sin(rad)+y*cos(rad));
}//绕起点逆时针旋转rad
point rotate(point p,double angle)//绕点p逆时针旋转angle角度
{
point v=(*this)-p;
double c=cos(angle),s=sin(angle);
return point(p.x+v.x*c-v.y*s,p.y+v.x*s+v.y*c);
}
point rotleft(){
return point(-y,x);
}//逆时针转90度
point rotright(){
return point(y,-x);
}//顺时针转90度
point normal(){
double L=len();
return point(-y/L,x/L);
}//单位法线即左转90度长度归一
point trunc(double r){
double l=len();
if (!dcmp(l)) return *this;
r/=l;
return point(x*r,y*r);
}//长度变为r
/**读入与输出**/
void input(){
scanf("%lf%lf",&x,&y);
}
void output(){
printf("%0.2f %0.2f\n",x,y);
}
};
typedef point vect;
double dot(point a,point b){
return a.x*b.x+a.y*b.y;
}
double cross(point a,point b){
return a.x*b.y-a.y*b.x;
}
double area3p(point a,point b,point c){
return cross(b-a,c-a)/2;
}//三角形abc的面积
double angle(vect a,vect b){
return acos(dot(a,b)/a.len()/b.len());
}
point GetLineIntersection(point P,vect v,point Q,vect w){
vect u=P-Q;
double t=cross(w,u)/cross(v,w);
return P+v*t;
}//直线交点
double ConvexPolygonArea(point *p,int n){
double area=0;
for (int i=1;i<n-1;i++) area+=cross(p[i]-p[0],p[i+1]-p[0]);
return area/2;
}//多边形面积
struct line{
point a,b;
line(){}
line(point _a,point _b){a=_a;b=_b;}
line(point p,double angle){
a=p;
if (dcmp(angle-PI/2)==0) b=a+point(0,1);
else b=a+point(1,tan(angle));
}//倾斜角angle
line (double _a,double _b,double _c){
if (dcmp(_a)==0){
a=point(0,-_c/_b);
b=point(1,-_c/_b);
}else if (dcmp(_b)==0){
a=point(-_c/_a,0);
b=point(-_c/_a,1);
}else{
a=point(0,-_c/_b);
b=point(1,(-_c-_a)/_b);
}
}//ax+by+c=0
void adjust(){
if (b<a) swap(a,b);
}//两点校准
/**运算操作**/
bool operator==(line v){
return (a==v.a)&&(b==v.b);
}
/**基本信息计算**/
double length(){
return a.distance(b);
}
double angle(){
double k=atan2(b.y-a.y,b.x-a.x);
if (dcmp(k)<0) k+=PI;
if (dcmp(k-PI)==0) k-=PI;
return k;
}
/**线段相关**/
int relation(point p){
int c=dcmp(cross(p-a,b-a));
if (c<0) return 1;//点在逆时针
if (c>0) return 2;//点在顺时针
return 3;//平行
}
bool pointonseg(point p){
return dcmp(cross(p-a,b-a))==0&&dcmp(cross(p-a,p-b))<=0;
}//点p在线段上?
bool parallel(line v){
return dcmp(cross(b-a,v.b-v.a))==0;
}//与线段v平行?
int segcrossseg(line v){
int d1=dcmp(cross(b-a,v.a-a));
int d2=dcmp(cross(b-a,v.b-a));
int d3=dcmp(cross(v.b-v.a,a-v.a));
int d4=dcmp(cross(v.b-v.a,b-v.a));
if ((d1^d2)==-2&&(d3^d4)==-2)return 2;
return ((d1==0&&dcmp(dot(v.a-a,v.a-b)<=0))||
(d2==0&&dcmp(dot(v.b-a,v.b-b)<=0))||
(d3==0&&dcmp(dot(a-v.a,a-v.b)<=0))||
(d4==0&&dcmp(dot(b-v.a,b-v.b)<=0)));
}//线段相交 0-不相交 1-非规范相交 2-规范相交
/**直线相关**/
int linecrosseg(line v){//直线v
int d1=dcmp(cross(b-a,v.a-a));
int d2=dcmp(cross(b-a,v.b-a));
if ((d1^d2)==-2) return 2;
return (d1==0||d2==0);
}//0-平行 1-重合 2-相交
int linecrossline(line v){
if ((*this).parallel(v)) return v.relation(a)==3;
return 2;
}//0-平行 1-重合 2-相交
point crosspoint(line v){
double a1=cross(v.b-v.a,a-v.a);
double a2=cross(v.b-v.a,b-v.a);
return point((a.x*a2-b.x*a1)/(a2-a1),(a.y*a2-b.y*a1)/(a2-a1));
}//交点
double dispointtoline(point p){
return fabs(cross(p-a,b-a))/length();
}//点到线的距离
double dispointtoseg(point p){
if (dcmp(cross(p-b,a-b))<0||dcmp(cross(p-a,b-a))<0) return min(p.distance(a),p.distance(b));
return dispointtoline(p);
}
/**输入输出**/
void input(){
a.input();
b.input();
}
void output(){
a.output();
b.output();
}
};
相关推荐
LightningChart使用教程:创建 JS 散点图
这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..
基于几何特征的模板匹配
基于几何特征(边缘特征)的模板匹配 基于几何特征的模板匹配通过计算模板图像与目标图像特征信息,来判断目标图像中是否有与模板图像相近或相同的图像。匹配流程如下: 1.制作一个模板,并使模板图像以一定角度旋转,得到0∘∼360∘0^\circ\sim360^\circ0∘∼360∘的各个分析的模板; 2.模板图像T从目标图像的原点处开始每次移动一个像素,直到匹配分数达到要求找到目标物体。 基于边缘特征的模板创建 首先从模板图像的边缘创建一个数据集(模板模型),然后到目标图像中搜索相近或相同的图像。 图像边缘的
告别底噪与失真:手把手教你调校WM8988音频Codec的输入输出增益链
本文详细介绍了如何调校WM8988音频Codec的输入输出增益链,解决底噪与失真问题。从模拟输入增益、数字转换增益到输出放大增益,提供了具体的寄存器配置和调试策略,帮助开发者优化音频信号处理链,提升音质表现。
计算几何的模板(大神整理)
计算几何模板 目录: 1.计算几何 2 1.1 注意 2 1.2几何公式 2 1.3 多边形 4 1.4多边形切割 7 1.5 浮点函数 8 1.6 面积 14 1.7球面 15 1.8三角形 18 1.9三维几何 21 1.10 凸包 29 水平序 29 极角序 30 卷包裹法 31 1.11 网格 33 1.12 圆 34 1.13 矢量运算求几何模板
CDR学习笔记——02
这篇写一些高级CDR的架构原理。
华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南
在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在
计算几何模板
// // main.cpp #include <iostream> #include <cmath> /* * Liuctic 的计算几何库 * p-Lpoint ln,l - Lline ls - Llineseglr - Lrad * 求平面上两点之间的距离 p2pdis * 返回(P1-P0)*(P2-P0)的叉积 ...
UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析
摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。
几何模板—kuangbin
// 计算几何模板 //二维平面 using namespace std; const double eps = 1e-8; const double inf = 1e20; const double pi = acos(-1.0); const int maxp = 1010; //Compares a double to zero int sgn(double x){ if(fabs...
CMOS传输门(互补开关)实战指南 | 设计优化 + 常见问题解析
本文深入解析CMOS传输门(互补开关)的设计优化与常见问题,涵盖导通特性、版图设计、高频应用及混合信号设计等关键领域。通过实测数据和优化技巧,帮助工程师解决衬底连接、信号完整性等实际问题,提升数字和模拟混合信号设计的效率与可靠性。
MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)
SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。
halcon之几何模板匹配
【代码】halcon之几何模板匹配。
华为OD机试真题2025双机位A卷 C语言 实现【采购订单】
在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。
计算几何(模板总结)
极为舒服的 计算几何终极模板+总结 小知识点 //#pragma comment(linker, "/STACK:102400000,102400000") #include "bits/stdc++.h" #define pb push_back #define ls l,m,now<<1 #define rs m+1,r,now<<1|1 #define hhh pr...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
ACM 计算几何基础模板
在ACM计算几何中,我们常常重复用到许多方法,例如求点距,求直线方程,等等。不妨利用模板总结之。这些模板为我从网上学习后加入自己的理解糅合得来qwq,看了很多的博客,查了很多书籍,其中印象最深的是林夕林夕关于计算几何模板的总结,大家也可以去参考他的应该比我的更详细qwq(不过大佬最近好像出没比较少了) 所以我这个主要还是留着自己参考吧,能帮到他人再好不过了 为了不产生歧义,方便理解,本模板使用笛卡尔坐标系,封装的多是数学中常见的函数。 前置知识:高中数学 文章目录基础声明点向量直线 基础声明 首先,打acm
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
计算几何经典模板
/** * 二维ACM计算几何模板 * 注意变量类型更改和EPS * #include * #include * By OWenT */ const double eps = 1e-8; const double pi = std::acos(-1.0); //点 class point { public: double x, y;
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
【计算几何】【计算几何模板】【持续更新】
必须学计算几何了…… muba
二维几何——模板汇总:
就是从点类开始。。。 但是都没有正式用题目测试过,也不知道对错。。。 #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<cmath>...
Halcon之几何模板制作
【代码】Halcon之几何模板制作。
kuangbin计算几何模板转载
二维几何 // `计算几何模板` const double eps = 1e-8; const double inf = 1e20; const double pi = acos(-1.0); const int maxp = 1010; //`Compares a double to zero` int sgn(double x){ if(fabs(x) < eps)re...
Halcon轮廓几何模板制作
【代码】Halcon轮廓几何模板制作。
1370



被折叠的 条评论
为什么被折叠?



