程序设计竞赛中的计算几何——计算几何中的几何量表示

2.1 计算几何中的几何量表示

2.1.1 点的表示

二维平面中 : 横坐标x 和 纵坐标y

struct point{double x , y ;
}

三维中 : x , y , z

2.1.2 向量的表示

struct vec{point start ; point end ;
} // 起始点+终止点表示法
struct vec{double x , y ; 
} // 以(0,0)点为起点,(x,y)表示向量终点 
1. 向量的加减法

e g : c = a + b ∣ c = a − b eg : c = a + b | c = a - b eg:c=a+bc=ab

a : ( x 1 , y 1 ) a : (x1 , y1) a:(x1,y1)
b : ( x 2 , y 2 ) b : (x2 , y2) b:(x2,y2)

向量加法法则 : a + b = ( x 1 + x 2 , y 1 + y 2 ) a + b= (x1 + x2 , y1 + y2) a+b=(x1+x2,y1+y2)
向量减法法则 : a − b = ( x 1 − x 2 , y 1 − y 2 ) a - b= (x1 - x2 , y1 - y2) ab=(x1x2,y1y2)


本文认为使用第二种方式进行向量表示将会更加简单,故本文将以第二种方法为例。

向量的加减法如下:

struct vec{double x , y ; friend vec operator+(vec A ,vec B){vec C ; C.x = A.x + B.x ; C.y = A.y + B.y ; return C ; }friend vec operator-(vec A , vec B){vec C ; C.x = A.x - B.x ; C.y = A.y - B.y ; return C ; }
};
2. 向量的点乘

向量点乘的几何意义主要体现在以下几个方面:

  1. 计算两向量的夹角:向量点乘的结果可以用来表征或计算两个向量之间的夹角并且判断两个向量之间的夹角。

    如果两个向量a和b的点乘结果大于0,表示这两个向量的方向基本相同,夹角在0°到90°之间;

    如果点乘结果等于0,表示这两个向量正交(即垂直),夹角为90°;

    如果点乘结果小于0,表示这两个向量的方向基本相反,夹角在90°到180°之间。

  2. 投影:向量点乘还可以表示一个向量在另一个向量方向上的投影长度。

这是通过计算一个向量在另一个向量上的分量大小来实现的,该分量大小等于第一个向量的模长乘以第二个向量在第一个向量上的投影系数(即夹角的余弦值)。

a ⋅ b = ∣ a ∣ ∣ b ∣ c o s θ a · b = |a||b| cos \theta ab=a∣∣bcosθ

a : ( x 1 , y 1 ) , b : ( x 2 , y 2 ) , a ⋅ b = x 1 x 2 + y 1 y 2 a :(x1,y1) , b : (x2,y2) , a · b = x1x2 + y1y2 a:(x1,y1),b:(x2,y2),ab=x1x2+y1y2


friend long long operator*(vec A , vec B){long long  C ; C = A.x * B.x ; C += A.y * B.y ; return C ; 
} // 放在 struct vec 下 
3. 向量的叉乘

A ⃗ : ( x 1 , y 1 ) , B ⃗ : ( x 2 , y 2 ) A ⃗ × B ⃗ = x 1 ∗ y 2 − x 2 ∗ y 1 \vec A : (x1 , y1 ) , \vec B : (x2 , y2) \quad \quad \vec A × \vec B = x1 * y2 - x2 * y1 A :(x1,y1),B :(x2,y2)A ×B =x1y2x2y1

叉乘有一个非常重要性质,叉乘可以判断两个点的共线情况,

  • 叉乘为0的时候 , A ⃗ , B ⃗ 共线 \vec A , \vec B 共线 A ,B 共线
  • 叉乘 > 0 的时候 , A ⃗ , B ⃗ 的夹角在 0 − 90 度 \vec A , \vec B 的夹角在0 - 90度 A ,B 的夹角在090
  • 叉乘 < 0 的时候 , A ⃗ , B ⃗ 的夹角在 90 − 180 度 \vec A , \vec B 的夹角在90 - 180度 A ,B 的夹角在90180

在算法竞赛中一般只考虑叉乘的值的关系,所以crossProduct 返回一个 long long


long long Crossproduct(vec A , vec B ){long long C ; C = A.x * B.y - A.y * B.x ; return C ; 
}

4.向量模板

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std ;
struct vec{double x , y ; friend vec operator+(vec A ,vec B){vec C ; C.x = A.x + B.x ; C.y = A.y + B.y ; return C ; }// vec1 + vec2 friend vec operator-(vec A , vec B){vec C ; C.x = A.x - B.x ; C.y = A.y - B.y ; return C ; }// vec1 - vec2 friend long long operator*(vec A , vec B){long long  C ; C = A.x * B.x ; C += A.y * B.y ; return C ; }// vec1 * vec2 点乘 long long Crossproduct(vec A , vec B ){long long C ; C = A.x * B.y - A.y * B.x ; return C ; }// 叉乘double val(){return sqrt( x * x + y * y ) ; }// vec1.val 
};
int main (){return 0 ; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…

# [0628] Task04 DQN 算法及进阶

easy-rl PDF版本 笔记整理 P6 - P8 joyrl 比对 补充 P7 - P8 相关 代码 整理 待整理 &#xff01;&#xff01; 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1i…

如何优化Spring Boot应用的性能

如何优化Spring Boot应用的性能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何通过优化技术和最佳实践来提升Spring Boot应用的性能&#x…

第二节:如何使用thymeleaf渲染html(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;今天来学习如何使用thymeleaf渲染html。该模板运用不广泛&#xff0c;所以本节内容了解既可。 第一步&#xff1a;创建html文件。 在模板templates目录下创建一个html文件。 编写代码如下&#xff1a; <!DOCTYPE html> <…

RocketMQ快速入门:事务消息原理及实现(十)

目录 0. 引言1. 原理2. 事务消息的实现2.1 java client实现&#xff08;适用于spring框架&#xff09;2.2 springboot实现 3. 总结 0. 引言 rocketmq 的一大特性就是支持事务性消息&#xff0c;这在诸多场景中有所应用。在之前的文章中我们已经讲解过事务消息的使用&#xff0…

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

c++算法学习,最大区间

给定一个实数序列&#xff0c;设计一个最有效的算法&#xff0c;找到一个总和数最大的区间 #include <iostream> #include <vector> #include <limits>// 结果结构体&#xff0c;用于存储最大子数组的信息 struct Result {int maxSum; // 最大和int start;…

49-5 内网渗透 - 服务注册表权限脆弱提权

一、服务注册表权限脆弱提权介绍 Windows操作系统中的注册表存储了每个系统服务的相关条目。注册表使用访问控制列表(ACL)来管理用户对其条目的访问权限。如果注册表的ACL配置不正确,可能导致低权限用户获得对服务注册表的写入权限。攻击者可以利用这一漏洞修改注册表内容,…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

java周测总结(3)

1、什么是I0流&#xff1f; 是一串流动的字符,从先进先出的方式要求信息的通道。 2、什么是序列化&#xff1f;什么是反序列化&#xff1f; 序例化是将对象的状态存储到特定的存储介质中的过程反序例化是将特定的有合者公质中数据重新构建对象的过程。 3、Java中线程在哪个包下…

Ingress Controller介绍及部署实践

Ingress Controller介绍及部署实践 1. 概念 1.1 Ingress Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 下面是 Ingress 的一个简单示例&#xff0c;可将所有流量都发送到同一 Service&#xff1a; 通过配置&am…

WSL:桌面 UI + 远程连接 RDP + 配置 VScode

参考文献&#xff1a; 在windows10上利用WSL安装Ubuntu&#xff08;带桌面UI&#xff09;WSL2 Ubuntu图形界面安装与远程桌面Linux的桌面环境比较与选择&#xff08;gnome、kde、xfce、lxde&#xff09;Ubuntu 设置国内源&#xff0c;提高下载速度解决 PPA 源太慢Ubuntu 报错&…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…

vue-cli的搭建过程

一、创建一个vue2的项目 二、创建成功后删除这三个文件 三、新建一个App.vue文件 四、在文件中添加这一段话 五、打开命令框输入指令下载router路由 六、新建一个router目录&#xff0c;新建index.js文件 七、导入你的路由&#xff0c;进行配置 打开命令行工具&#xff0c;进入…

【LeetCode】一、数组相关:双指针算法 + 置换

文章目录 1、算法复杂度1.1 时间复杂度1.2 空间复杂度 2、数组3、leetcode485&#xff1a;最大连续1的个数4、leetcode283&#xff1a;移动05、leetcode27&#xff1a;移除元素 1、算法复杂度 1.1 时间复杂度 算法的执行时间与输入值之间的关系&#xff08;看代码实际总行数的…

hive零基础入门

1、hive简介 hive&#xff1a;由facebook开源用于解决海量结构化数据的统计工具。 hive是基于Hadoop的数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供sql查询功能。 2、hive本质 hive的本质是HQL&#xff08;HiveSQL&#xff09;转化成MapR…

java 统计xmind的结点数(测试用例case数)

mac电脑解压出来的xmind的数据主要在content.json上 开头结尾有[],里面是json import org.json.JSONArray; import org.json.JSONObject; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public class XMindLeafCounter2 {public stat…

PlatformIO开发环境

PlatformIO是一个开源的生态系统&#xff0c;用于构建物联网应用&#xff0c;它支持多种微控制器&#xff08;MCU&#xff09;和硬件开发板&#xff0c;并且与各种IDE集成良好&#xff0c;如VSCode, Atom等&#xff0c;使得跨平台的固件开发变得更加简单和高效。 ### 平台介绍…

博客建站1 - 选择博客系统框架

1. 本网站的系统架构2. 选择博客系统框架 2.1. 静态网站 2.1.1. 简介2.1.2. 特点2.1.3. 适用人群2.1.4. 常见框架 2.2. 动态网站 2.2.1. 简介2.2.2. 特点2.2.3. 适用人群2.2.4. 常见框架 3. 选择建议4. 我的博客系统 1. 本网站的系统架构 网站示例&#xff1a; sunlogging.c…