当前位置:网站首页>蛮力法求解凸包问题
蛮力法求解凸包问题
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
边栏推荐
猜你喜欢
01背包问题(动态规划)
【nRF24L01 connects with Arduino to realize wireless communication】
联阳IT66121FN提供SDI转HDMI方案分享
n皇后问题(回溯法)
[Arduino connected to GP2Y1014AU0F dust sensor]
【Arduino使用旋转编码器模块】
【Popular Science Post】Detailed explanation of MDIO interface
How to quickly build your own IoT platform?
电子密码锁_毕设‘指导’
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
随机推荐
[Popular Science Post] I2C Communication Protocol Detailed Explanation - Partial Software Analysis and Logic Analyzer Example Analysis
C# 常用方法记录
ArrayList LinkList效率对比
【Arduino connects DHT11 humidity and temperature sensor】
Acwing:哈夫曼树(详解)
龙讯LT6911系列C/UXC/UXB/GXC/GXB芯片功能区别阐述
TQP3M9009电路设计
sacalatest AnyFunSuite:no implicits found for parameter pos
Scala,Spark依赖jar包冲突解决方法
【科普贴】I2C接口详解——偏硬件解析
Typora use
C语言上机题(基础)
n皇后问题(回溯法)
zsh: command not found: xxx 解决方法
PCB设计思路
【树莓派入门(2)树莓派的远程控制】
保证接口数据安全的10种方案
如何在 Scala 中科学地操作 collection(一):集合类型与操作
Arduino点亮数码管
C# Form按ESC关闭窗体