边界框(boundingh box)相交+多边形剖分+计算多边形面积
1_1.cpp
所提供的代码计算2D平面上两个多边形的相交面积。
它定义了两个类:顶点和多边形。
顶点表示平面中的一个点,多边形是由一系列顶点组成的闭合形状。
Polygon类有一个构造函数,它获取顶点的向量并将它们存储在内部向量中。
get_vertexs函数返回这个顶点的内部向量。
交叉函数计算给定三个点的两个向量的叉积。
它用于确定两条线段是否相交。
is_interact函数通过计算AB与CD的每个端点的叉积,以及CD与AB的每个端点之间的叉积来检查AB和CD两条线段是否相交。
如果叉积的符号不同,则线段相交。如果任何叉积为零,则线段的一个端点位于另一个线段上,并且它们被认为是相交的。
交集函数计算AB和CD两条线段的交点。
它首先计算AB和CD的斜率和截距,然后求解交点。如果AB和CD的斜率相等,则线段是平行的,并且没有交点。
triangle_area函数使用Heron公式计算给定三个顶点的三角形的面积。
它还检查边的长度是零还是负,如果是,则返回0。
如果三角形的面积是NaN或无穷大,则也返回0。
intersection_area函数计算两个多边形的相交面积。
它首先检查多边形的边界框是否相交,这是它们相交的必要条件。
然后,它使用is_interact函数来确定多边形的哪些线段相交,并计算相交点。
然后,它使用多边形的第一个顶点和交点作为三角形的顶点来对相交多边形进行三角化。
使用triangle_area函数计算每个三角形的面积,并将总面积相加。
返回最后一个区域。
2.cpp
该代码是一个C++程序,用于计算两个多边形之间的相交面积。该程序提示用户输入两个多边形的顶点数量和每个顶点的坐标,使用输入的坐标创建两个多边形对象,然后将它们传递给交集函数以计算重叠面积。
交集函数使用简单的面积求和方法来计算重叠面积。它首先遍历多边形A的所有边,然后遍历多边形B的所有边以检查它们是否相交。如果边相交,函数将计算相交点,并检查它是否位于两条边的边界内。如果是,则函数通过将相交梯形的面积与总面积相加来计算重叠面积。
总的来说,该程序似乎是找到两个多边形之间的相交区域问题的有效实现。然而,还有改进的空间,例如处理多边形不相交、共线或具有重合边的边的情况,或者使用更有效的算法来计算重叠面积。
2_2.cpp
这段代码实现了计算两个多边形的重叠面积,通过输入多边形的顶点坐标来构造多边形对象,并调用对象的overlapArea方法来计算重叠面积。
代码中使用了isInside函数来判断两条线段是否相交,getArea函数来计算三角形的面积。在overlapArea方法中,通过循环遍历多边形A和多边形B的所有线段,判断它们是否相交,若相交则计算两个三角形的面积并累加得到重叠面积。
其中,AREA_UNIT为单位面积,即每个三角形面积的倍数,这里设置为0.5,也可以根据实际情况进行调整。
在main函数中,通过定义A_vertices和B_vertices数组来初始化多边形对象A和B,然后调用A的overlapArea方法计算重叠面积并输出。
6.cpp
您提供的代码用于计算两个凸多边形的相交面积。它获取表示两个多边形顶点的两个点阵列,每个多边形的顶点数,并返回它们的相交面积。
这里使用的算法是扫线算法。其工作原理如下:
在多边形a的所有边上迭代。
对于每条边,计算该边与多边形b的所有边的交点,并将这些点存储在临时阵列中。
遍历临时阵列并识别两个多边形内的点。这些点形成一个新的多边形,即a和b的相交多边形。
计算相交多边形的面积并返回。
该算法使用函数cross()来计算两个向量的叉积,使用函数dcmp()来比较两个二重并返回一个指示它们关系的值。该算法还使用函数PolygonArea()来计算给定顶点的多边形的面积。
请注意,此实现假设输入多边形是凸的。如果输入多边形不是凸的,则算法将无法正常工作。
---
8.cpp
这个代码是用来计算两个凸多边形的重叠面积的。程序首先定义了一个 Polygon 类,它包含了一个多边形的坐标和顶点数,然后定义了一个全局常量 eps,用于表示浮点数的精度,和一个 CreateDoubleDimensionalArray() 函数,用于创建一个二维数组。这个函数会在计算凸多边形的交点时用到。
接下来是一些计算几何的函数。dcmp() 函数用于判断浮点数的大小关系,返回值为 1 表示大于,0 表示等于,-1 表示小于;cross() 函数用于计算向量的叉积,intersectionPoint() 函数用于计算两条线段的交点,PolygonArea() 函数用于计算一个多边形的面积。
最后是主函数。主函数首先读取两个多边形的顶点坐标,并分别创建一个 Polygon 类的实例。然后调用 intersection() 函数计算两个多边形的重叠面积,并输出结果。
intersection() 函数先判断两个多边形是否相交,如果不相交就直接返回重叠面积为 0。如果相交了,就先求出两个多边形的所有交点,然后计算重叠面积。具体做法是把交点和原始多边形的顶点按顺序连接起来,得到一个新的多边形,然后计算这个多边形的面积即可。
它定义了一个Polygon类,该类存储多边形顶点的坐标及其顶点数。交集函数以两个多边形对象为参数,并以浮点形式返回两个多边形的交集区域。
该程序使用Shoelace公式计算多边形的面积,使用线相交法计算两个多边形的相交面积。PolygonArea函数计算多边形的面积,ConvexPolygonIntersectArea函数计算两个凸多边形的相交面积。
dcmp函数用于比较eps公差较小的双精度浮点数。CreateDoubleDimensionalArray和DeleteDoubleDimensional array函数用于创建和销毁双精度的二维数组。
大体上,使用两个凸多边形的坐标创建两个多边形对象。使用这两个对象作为参数调用交集函数,并将交集区域打印到控制台。
没有合适的资源?快使用搜索试试~ 我知道了~
计算两个多边形的重叠面积(C++)
共63个文件
d:13个
o:11个
cmake:8个
需积分: 5 6 下载量 161 浏览量
2023-04-19
16:13:07
上传
评论 2
收藏 153KB ZIP 举报
温馨提示
写一个C++程序,计算两个多边形的重叠面积 多边形class定义如下: class Polygon { public: Polygon(float* polygon, int vertex) : polygon(polygon), vertex(vertex) {}; private: float* polygon; // 坐标形式为 [x, y, x, y, ...., ] int vertex; // 顶点数量 }; 函数定义: float intersection(const Polygon& A, const Polygon& B); 例: float coordsA[8]{ 10, 20, 10, 30, 30, 50, 40, 20 }; float coordsB[8]{ 15, 25, 15, 35, 35, 55, 45, 25 }; Polygon a(coordsA, 8); Polygon b(coordsB, 8); intersection(a, b) 应当返回 366.666
资源推荐
资源详情
资源评论
收起资源包目录
newone.zip (63个子文件)
newone
CMakeLists.txt 310B
.vscode
c_cpp_properties.json 442B
settings.json 2KB
extensions.json 90B
tasks.json 714B
src
7.cpp 8KB
8.cpp 14KB
6.cpp 7KB
build
CMakeFiles
Makefile2 3KB
One.dir
compiler_depend.make 17KB
link.txt 62B
src
FileName.cpp.o 8KB
3.cpp.o 115KB
7.cpp.o.d 8KB
5.cpp.o.d 3KB
多边形相交问题.cpp.o.d 8KB
1_1.cpp.o.d 9KB
三角形.cpp.o 8KB
1.cpp.o.d 9KB
8.cpp.o.d 8KB
2.cpp.o 7KB
1_2.cpp.o.d 8KB
多边形相交问题.cpp.o 16KB
1_1.cpp.o 63KB
3.cpp.o.d 9KB
FileName.cpp.o.d 8KB
6.cpp.o.d 8KB
2_2.cpp.o.d 9KB
2.cpp.o.d 9KB
6.cpp.o 12KB
1.cpp.o 10KB
三角形.cpp.o.d 8KB
8.cpp.o 16KB
7.cpp.o 7KB
2_2.cpp.o 9KB
depend.make 87B
compiler_depend.internal 8KB
flags.make 191B
DependInfo.cmake 541B
compiler_depend.ts 110B
cmake_clean.cmake 264B
build.make 4KB
progress.make 43B
CMakeDirectoryInformation.cmake 640B
cmake.check_cache 85B
CMakeTmp
3.22.1
CompilerIdC
CMakeCCompilerId.c 24KB
tmp
a.out 16KB
CMakeDetermineCompilerABI_CXX.bin 16KB
CMakeCXXCompiler.cmake 5KB
CMakeSystem.cmake 402B
CMakeCCompiler.cmake 2KB
CMakeDetermineCompilerABI_C.bin 16KB
CompilerIdCXX
tmp
CMakeCXXCompilerId.cpp 24KB
a.out 16KB
Makefile.cmake 2KB
progress.marks 2B
CMakeOutput.log 46KB
TargetDirectories.txt 182B
cmake_install.cmake 2KB
Makefile 5KB
CMakeCache.txt 14KB
One 25KB
README.md 6KB
共 63 条
- 1
资源评论
十张哥
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功