ACM 几何基础(6)

2023-05-16

几何基础(6

求多边形面积:

要想计算多边形的面积我们可以转化为求多个三角形的面积之和得到:

在解析几何里, △ABC的面积可以通过如下方法求得: 点坐标=>边长=>海伦公式=>面积 但是问题就出现在这里了,用这种方法做的话,计算量大,精度损失。

这里就利用到叉积了:

叉积的几何意义

  叉积的长度 |a × b| 可以解释成以ab为边的平行四边形的面积。进一步就是说,三重积可以得到以abc为边的平行六面体的体积。

a x b = a*b*sin θ

a = (x1,y1) ,b = (x2,y2) ; a x b = x1y2 - x2y1 ;


所以得到

多边形面积公式:A=sigma(Ai) (i=1…N-2)(凹多边形也适用,如凹四边形,相当于一个大三角形减去一个小三角形,减去的小三角形其实就是加上负的有向面积)

 

代码如下:

double mianji(int n)

{

    double ans=0.0;

    point pt=edge[0];

    for(int i=1;i<n-1;++i)

    {

            ans+=((edge[i]-pt)^(edge[i+1]-pt))/2;

    }

    return fabs(ans);

}

 

 

判断点是否在线段上:

  首先可以先用叉积判定点是否在线段的延长线上,或就在线上r=(p-l.s)^(p-l.e)

r==0说明在l的线上或延长线上,情况如下:

 

后面还要判定是否在线段上,可以用点积判断:

分别用两端点指向p点的向量点积,t=(p-l.s)*(p-l.e)

若在线段外,两向量夹角为0,点积>=0;

否则在线段内,方向相反,两向量夹角180,点积<0

代码如下:

bool online(point p,line l)//判断点是否在线段上

{

    return ((l.s-p)^(l.e-p)==0)&&((p-l.s)(p-l.e)<=0);

}

 

 

判断点是否在凸包或在凸变形内(边上也行)

首先凸边形的点按逆时针已经排序好的情况下才可执行

若点是在凸边形内则按逆时针顺序每次指向两个点,那么它的叉积一定要么都是大于0或都是小于0,至于等于0就直接说明的边上的情况。

下面举例说明:

 

 

 

 

 

 

 

 

 

也可以举例p在凸边形外的情况,画图验证,肯定存在不同符号的情况

 

 

 

代码如下:

//判断点是否在凸包内或说的凸边形内

//点已经按逆时针排序

bool inconvexpoly(point p[],point pt,int n)

{

    for(int i=0;i<n;++i)

    {

        if(((p[(i+1)%n]-pt)^(p[i]-pt))>0)//在凸变形外

            return false;

        if(((p[(i+1)%n]-pt)^(p[i]-pt))==0)//在边上

            return true;

    }

    return true;//在凸边形内

}

 

 

继续更新中……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ACM 几何基础(6) 的相关文章

随机推荐

  • elasticsearch分页查询遇到问题TypeError: index() got an unexpected keyword argument 'scroll'

    问题 xff1a TypeError index got an unexpected keyword argument scroll 我这里是因为python库中elasticsearch版本安装问题 xff0c 我用的是 修改elasti
  • Connection reset by peer的常见原因及解决办法

    参考 xff1a https blog csdn net xc zhou article details 80950753 主要原因是 xff1a 客户端或者服务端自动关闭连接 xff0c 另一端还在发送数据
  • networkx是什么

    networkx简介 xff1a 官方文档 https www osgeo cn networkx reference classes graph html networkx是Python的一个包 xff0c 用于构建和操作复杂的图结构 x
  • cmd窗口ERROR 1366 (HY000): Incorrect string value: ‘\xFE\xFE\xFE\xFE‘ for column ‘adress‘ at row 1

    cmd窗口ERROR 1366 HY000 Incorrect string value xFE xFE xFE xFE for column adress at row 1怎么办 xff1f 1 首先需要弄明白为什么会报错 xff1f x
  • mysql的视图、存储过程、游标、事务、引擎、索引的认识和使用

    视图 一 视图概念 xff1a 视图是虚拟表 xff0c 并不存在真正的表 xff0c 可以重用sql语句 xff0c 利用实际存在的一个或几个表链接查询数据 xff0c 只展示部分数据 xff0c 可以保护数据库中数据 只有部分表的权限
  • win10下mysql5忘记root用户密码如何修改密码并登录

    步骤 xff1a 1 关闭mysql服务 xff1a net stop mysql 2 进入mysql安装目录 xff1a 如 3 此时可以免密登录 xff1a 另外开启cmd命令窗口 xff1a 一定要记住刷新权限 xff0c 否则可能拒
  • 虚拟机中三种网卡模式详细介绍

    虚拟机中三种网卡模式 vmware为我们提供了三种网络工作模式 xff0c 它们分别是 xff1a Bridged xff08 桥接模式 xff09 NAT xff08 网络地址转换模式 xff09 Host Only xff08 仅主机模
  • centos7 xfce轻量桌面环境和vnc安装

    一 centos7安装xfce轻量桌面环境 Linux的桌面环境gnome kde xfce lxde 等等使用比较https www cnblogs com chenmingjun p 8506995 html 1 安装额外yum源 yu
  • R语言学习笔记——空间自相关:全局Moran’I/局部Moran’I /Geary’c/Moran散点图

    data ChinaRD2 span class token operator lt span readRDS span class token punctuation span span class token string 34 gad
  • FIFO深度计算问题

    FIFO深度计算公式 xff1a fifo depth 61 burst length burst length X Y r clk w clk burst length xff1a 突发数据个数 X Y xff1a 读时钟周期里 xff0
  • 【游戏开发】游戏开发书籍汇总

    1 游戏设计的艺术 2 游戏设计的100个原理 3 我在美国学游戏设计 4 游戏新手村 xff1a 从零开始做游戏 5 Directx游戏开发终极指南 6 Windows游戏编程大师技巧 7 快乐之道 xff1a 游戏设计的黄金法则 人类的
  • Java~String类型空字符串和Null的区别以及判断方法

    一 区别 null表示的是一个对象的值 xff0c 而不是一个字符串 如声明一个对象的引用 xff0c String a 61 null 表示的是一个空字符串 xff0c 也就是说它的长度为0 如声明一个字符串String s 61 Str
  • 解读官方Android MediaPlayer API(1)

    public class MediaPlayerextends ObjectMediaPlayer class 能够用来使用来控制vudio video xff08 音频或视频 xff09 文件和流文件的播放 举个例子可以在 a targe
  • ACM 几何基础(1)

    点 point 定义 xff1a struct point double x y 线 line 定义 xff1a Struct line Point s e 精度差 Const double eps 61 1e 8 Int sgn doub
  • ACM 几何基础(2)

    判断两条线段是否相交 xff1a 矢量 如果一条线段的端点是有次序之分的话 xff0c 那么这种线段就称为 有向线段 xff0c 如果有向线段 p1p2 的起点 p1 在坐标的原点 xff0c 则可以把它称为矢量 p2 矢量的加减 设二维矢
  • ACM 几何基础(3)

    几何基础 xff08 3 xff09 求线段交点 xff1a 前面已经讲了如何判断两条线段是否相交 xff0c 现在我们来学下如何求线段的交点坐标 首先先了解下 xff1a 定比分点公式 公式介绍 数学中常用的重要公式之一 xff01 在
  • ACM 几何基础(4)

    几何基础 xff08 4 xff09 点到线段最短距离 xff1a 主要学下矢量的方法求解 xff1a 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别 xff0c 即求点到线段最短距离时需要考虑参考点在沿线段方向的投
  • ACM 几何基础(5)

    几何基础 xff08 5 xff09 凸包 xff1a 在学凸包之前 xff0c 最好把叉积弄熟 xff01 定义 xff1a 对一个简单多边形来说 xff0c 如果给定其边界上或内部的任意两个点 xff0c 连接这两个点的线段上的所有点都
  • 【奇技淫巧】薅公司服务器羊毛,IntelliJ IDEA的远程开发

    前言 作为一个程序员 xff0c 在平时工作的时候 xff0c 你觉得电脑的内存多大才够用 xff0c 8G 16G 32G 其实内存对于程序员来说 xff0c 只能说是多多益善 xff0c 像我平时电脑可能一周重启一次 xff0c 开的东
  • ACM 几何基础(6)

    几何基础 xff08 6 xff09 求多边形面积 xff1a 要想计算多边形的面积我们可以转化为求多个三角形的面积之和得到 在解析几何里 xff0c ABC的面积可以通过如下方法求得 xff1a 点坐标 61 gt 边长 61 gt 海伦