当前位置:网站首页>蛮力法求解凸包问题
蛮力法求解凸包问题
2022-08-02 03:29:00 【clarkjs】
1. 问题描述:
问题: 对于平面上n个点,找包围它们的最小凸多边形;
2. 思路:
蛮力算法: 对于每对点 p1和p2 ,判断是否所有其他点都在连接 p1和p2 的直线的同一侧;
思路:两点确定一条直线,如果剩余的其它点都在这条直线的同一侧,则这两个点是凸包上的点,否则就不是。步骤如下:
(1)将点集里面的所有点两两配对,组成 n(n-1)/2 条直线。
(2)对于每条直线,再检查剩余的 (n-2) 个点是否在直线的同一侧。
那么现在出现了一个问题,我们怎样判定一个点在直线的哪一侧呢?方法有两种:
(1)(坐标:p1(x1,y1),p2(x2,y2),p3(x3,y3))行列式求面积 (也就是我们常说的"叉积")
当上式结果为正时,p3在直线 p1p2 的左侧;当结果为负时,p3在直线 p1p2 的右边
(2)将两点构造成直线,将第三点坐标代入,≥0则表示在上方,≤0则表示在下方。
// 算法:蛮力法求解凸包问题
BruteForceConvexHull (P)
// 输入:一个n个(n≥2)的点的列表P,Pi=(Xi,Yi)
// 输出:能够组成凸包的点的列表Qi=(Xi,Yi)
for i 1 to n - 1 do
for j i + 1 to n do
sign1 0; sign2 0;
a = Yj - Yi; b = Xi - Xj; c = Xi * Yi - Yi * Xj;
for k 1 to n do
if k = i || k = j continue;
if a * Xk + b * Yk - c ≥ 0 sign1++;
if a * Xk + b * Yk - c ≤ 0 sign2++;
if sign2 = 2 - n || sign1 = n - 2
record the pole
retutn OK
边栏推荐
- [Arduino connects the clock module to display the time on LCD1602]
- 机器学习相关 概率论重点笔记
- 【科普贴】SD卡接口协议详解
- Vision Transformer(ViT)论文精读和Pytorch实现代码解析
- Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
- 树莓派4B打开文件管理时出现闪退
- 深度学习理论:测试集与验证集的区别及各自用途
- 出差电子流应用实战
- GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片
- 如何快速搭建属于自己的物联网平台?
猜你喜欢
随机推荐
【萌新解题】斐波那契数列
GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片
【Arduino连接时钟模块在LCD1602上显示时间】
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
物联网方案
深度学习理论:model.fit 函数参数详解
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
树莓派4B打开文件管理时出现闪退
阿里云华为云对比分析
ICN6211:MIPI DSI转RGB视频转换芯片方案介绍 看完涨知识了呢
振芯科技GM8285C:功能TTL转LVDS芯片简介
【土壤湿度传感器与 Arduino 测量土壤湿度】
分布式消息队列平滑迁移技术实战
Comparative analysis of mobile cloud IoT pre-research and Alibaba Cloud development
如何快速搭建属于自己的物联网平台?
【Arduino连接GPS 模块 (NEO-6M)读取定位数据】
《scala 编程(第3版)》学习笔记3
关于IIC SDA毛刺的那些事
三相同步发电机的空载短路的simulink仿真
Scala 中的集合(二):集合性能比较








![[DS3231 RTC real-time clock module and Arduino interface to build a digital clock]](/img/47/ac46e99a6a6dd44aa4478dd48f06a0.png)
