- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有任何算法/方法可以在一组点(x,y)周围找到最小的正六边形。
最小的意思是最小的面积。
我目前的想法是找到包围点的最小圆,然后从那里创建一个六边形并检查所有点是否都在里面,但这听起来像是一个永无止境的问题。
最佳答案
需求
首先,让我们将六边形定义为四边形 [x0, y0, t0, s]
,其中 (x0, y0)
, t0
和 s
分别是它的中心、旋转和边长。
接下来,我们需要找到任意点是否在六边形内。以下函数执行此操作:
function getHexAlpha(t, hex)
t = t - hex.t0;
t = t - 2*pi * floor(t / (2*pi));
return pi/2 - abs(rem(t, pi/3) - (pi/6));
end
function getHexRadious( P, hex )
x = P.x - hex.x0;
y = P.y - hex.y0;
t = atan2(y, x);
return hex.s * cos(pi/6) / sin(getHexAlpha(t, hex));
end
function isInHex(P, hex)
r = getHexRadious(P, hex);
d = sqrt((P.x - hex.x0)^2 + (P.y - hex.y0)^2);
return r >= d;
end
getHexRadious
函数以极坐标形式表示六边形,并返回从六边形中心到每个角度的边界的距离。阅读
this post更多详情
getHexRadious
和
getHexRadious
职能。这是一组随机点和任意六边形的工作方式:
s
覆盖所有点
x0, y0, t0
和调
s
涵盖所有要点:
function getHexSide( P, hex )
x = P.x - hex.x0;
y = P.y - hex.y0;
r = sqrt(x^2 + y^2);
t = atan2(y, x);
return r / (cos(pi/6) / sin(getHexAlpha(t, hex)));
end
function findMinSide( P[], hex )
for all P[i] in P
S[i] = getHexSide(P, hex);
end
return max(S[]);
end
getHexSide
功能与
getHexRadious
相反.它返回六边形所需的最小边长
x0, y0, t0
覆盖点
P
.这是之前测试用例的结果:
function guessHex( P[] )
D[,] = pairwiseDistance(P[]);
[i, j] = indexOf(max(max(D[,])));
[~, j] = max(D(i, :));
hex.x0 = (P[i].x + P[j].x) / 2;
hex.y0 = (P[i].y + P[j].y) / 2;
hex.s = D[i, j]/2;
hex.t0 = atan2(P.y(i)-hex.y0, P.x(i)-hex.x0);
return hex;
end
s
变量)的面积。我不知道它是否有解析解,SO 不是讨论它的合适场所。但是任何优化算法都可以用来提供更好的初始猜测。我用 GA 用
findMinSide
解决了这个问题作为其成本函数。事实上,GA 对
x0
产生了很多猜测。 ,
y0
, 和
t0
最好的一个将被选中。它会找到更好的结果,但更耗时。仍然不能保证找到最佳的!
关于algorithm - 最小的封闭正六边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61189818/
从the documentation, 13.5.5: When the last parameter of a method is a closure, you can place the clos
Bjarne Stroustrup 写道: “友元类必须事先在封闭范围内声明或在非类范围内定义,立即封闭声明它为友元的类” 语句的第一部分不是多余的,因为“立即包含类的非类范围”包括“先前在封闭范围中
我有一个网格(如下例),其中包含外墙(标记为 W)、环境 block (E)、开放空间 (o) 和事件点 (A)。目前,此网格存储在 [,] 中,其中包含与给定点关联的所有数据。我试图确定是否包含一个
我正在尝试使用 this blogpost's approach to higher-kinded data without dangling Identity functors for the tr
在下面的代码中: package main import ( "fmt" "time" ) func asChan(vs ...int) <-chan int { c := m
我在传递和评估闭包列表时遇到困难。经过大量简化,该程序显示出与我正在尝试编写的程序相同的错误: use std::vec::flat_map; #[main] fn main() { let li
我正在努力成为一名好公民,并尽可能远离全局范围。有没有办法访问不在全局范围内的 setTimeout 变量? 因此,在此示例中,某人将如何取消“计时器”? myObject.timedAction =
考虑这个例子: def A(): b = 1 def B(): # I can access 'b' from here. print(b)
val listPlans: List = newPlans.mapTry { it.data.map { Plan(it.id, it.nam
我目前正在尝试使用SinonJS对我的 angular.service 进行单元测试,但是遇到了一个问题,希望有人可以阐明为什么会发生这种情况。我已经重构了当前的项目以说明当前的问题。 我还提供了DE
我正在使用 Go channel ,我想知道关闭 channel 和将其设置为 nil 之间有什么区别? 编辑: 在此example ,我想通过关闭 channel 或设置为零来断开发送者和接收者的连
我的应用程序有一个奇怪的行为,我不知道它来自哪里。我已经为 TextView 内容实现了 NSScanner,效果非常好。扫描器与文本存储结合使用,通过 TextView 委托(delegate)方法
我不知道如何让 MyBatis 生成封闭的 or 语句: WHERE x.token = ? AND ( (x.scene = 'A' OR x.scene = 'B')) 这是一个令人惊讶的简单
我不希望这是一个摄像头检测程序。这是一个程序,可以检测应用程序屏幕上颜色的传递。 我想要做的是检测大于 5x5 像素的黑色何时穿过屏幕上定义的空间区域。我想过用一个大区域来拉伸(stretch)整个宽
我一直在使用 RDFLib 来解析数据并将其插入到三元组中。我遇到的一个常见问题是,从关联数据存储库解析时,没有尖括号括起 URL。 要上传数据,我必须手动添加 并使用 URIRef重新创建 URL。
我已经阅读了很多有关此问题的帖子,但我仍然不确定我是否完全理解这些定义。 以下是我认为不同术语的示例。我是否走在正确的轨道上,或者我仍然不理解这些概念。谢谢 Array - unbound and o
我为我的 Android 应用设置了 GooglePlay 内部和封闭式 Alpha 测试设置。 它非常适合允许测试人员加入计划并安装应用程序,但是当我从测试人员电子邮件列表中删除测试人员时,他们仍然
我是一名优秀的程序员,十分优秀!