当前位置:网站首页>蛮力法求解凸包问题
蛮力法求解凸包问题
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
边栏推荐
猜你喜欢
蓝桥杯:国二选手经验贴 附蓝桥杯历年真题
树莓派入门(1)系统镜像烧录
Cadence allegro导出Gerber文件(制板文件)图文操作
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
功率计,物联网,智能插座电路设计【毕业设计】
保证接口数据安全的10种方案
C# 常用方法记录
Two-Stream Convolutional Networks for Action Recognition in Videos双流网络论文精读
Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
深度学习实战(1):花的分类任务
随机推荐
cmd控制台窗体大小设置
Typora use
n皇后问题(回溯法)
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
C#从入门到精通
出差电子流应用实战
日志分析系统:ELK
龙讯LT6911系列C/UXC/UXB/GXC/GXB芯片功能区别阐述
VCA821可变增益放大器
[Arduino connects the clock module to display the time on LCD1602]
《scala 编程(第3版)》学习笔记3
uniCloud通讯录实战
Arduino点亮数码管
中国大陆开源镜像站汇总
PAT甲级:1020 Tree Traversals
USB3.0一致性测试方法
无源域适应(SFDA)方向的领域探究和论文复现(第一部分)
Modify hosts file using batch script
GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片
【Arduino 连接 SD 卡模块实现数据读写】