- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码片段取自 here 。就是这个问题HDU 2823的解决方案。
#define eps 1e-9
double rc(point pp[],point qq[],int n,int m)
{
int q=0;
int p=0;
for(int i=0;i<n;i++)
if(pp[i].y-pp[p].y<-eps)
p=i;
for(int i=0;i<m;i++)
if(qq[i].y-qq[q].y>eps)
q=i;
pp[n]=pp[0];
qq[m]=qq[0];
double tmp,ans=1e99;
for(int i=0;i<n;i++)
{
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps)
q=(q+1)%m;
if(tmp<-eps)
ans=min(ans,dist_p_to_seg(qq[q],pp[p],pp[p+1]));
else
ans=min(ans,dist_seg_to_seg(pp[p],pp[p+1],qq[q],qq[q+1]));
p=(p+1)%n;
}
return ans;
}
pp[]
和qq[]
是两个不同的凸包。 p
是pp
凸包的最高点,q
是qq
凸包的最低点。
我似乎无法理解这一行:
while((tmp=cross(pp[p+1],qq[q+1],pp[p])-cross(pp[p+1],qq[q],pp[p]))>eps)
q=(q+1)%m;
他想达到什么目的?
最佳答案
函数 cross(a, b, c) 正在寻找以下矩阵的行列式,
| a.x a.y 1 |
| b.x b.x 1 | = 2 * A
| c.x c.y 1 |
其中 A 是三角形 a、b、c 的signed 面积。行列式的符号也告诉我们 3 个点是顺时针还是逆时针。 see here for an explanation
让我们这样重写,
triA ← cross(pp[p+1],qq[q+1],pp[p])
triB ← cross(pp[p+1],qq[q],pp[p])
// This is equivalent to,
// just to make it a bit clearer
triA ← cross(pp[p], pp[p+1], qq[q+1])
triB ← cross(pp[p], pp[p+1], qq[q])
因此它检查由船体 pp 的一侧形成的三角形是否具有 qq
上的最低点小于由qq的同边和下一个最高点组成的三角形。
如果是,则选择qq中的下一个点为q
并继续。 -IE。选择 q
使得 q
的垂直距离从侧面<p, p+1>
被最小化。
一旦对给定的边进行了局部最小化 <p, p+1>
,对 pp
的所有边重复此操作.在每一步都保持当前边之间的最小距离。
这是一种寻找两个凸包之间最小间隔的不稳定方法。直觉是正确的——正确的是它易于理解(想法,不是有问题的代码),对于凸多边形非常通用,并且对各种问题都非常有用(请参阅引用资料以下);但是,我觉得可以用一种更有效、更易于理解的方式来编写。
这篇论文很好地说明了这些想法背后的直觉 "Solving Geometric Problems with the Rotating Calipers"-- 图森特 G.
关于c++ - 看不懂HDU 2823的解决办法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38676898/
所以我今天在学习c。我编写了一些代码以使用 getchar() 获取输入并将其保存在变量中以了解整数输入的工作原理。 因此,如果用我的键盘输入“1”,然后按回车键,我会返回 4910 的值。我预计 4
我是一个非常沮丧的新手!我真的不知道从哪里开始。我有一个基于傻瓜书中的应用程序的应用程序。成功了。然后尝试将其转换为使用 WIMMOne 对话框来显示时间和日期。经过一系列错误的启动后,我加载了他们的
我们刚刚使用 bitbucket 建立了一个项目。我们将“生产”[P] 代码放在一个存储库中,然后我创建了它的一个分支 [m],然后我的同事 [C] 也创建了一个分支。 [P] /
我不明白我看到的错误,也不明白我应该在我的 ESLint 配置中更改什么来修复它,在深入研究了一段时间之后。 我有一段使用 ECMA 版本 6 (ES6) 的 JS 代码,如下所示: const la
我的代码有很多问题。编译时出现以下错误: “Ecommerce.DataHelpers.ProductNodeLoader”未实现接口(interface)成员“System.Collections.
我不明白这个语法是如何工作的,也找不到关于它的文档: word = '123xyz567' s = ''.join (c if c.isdigit() else ' 'for c in word) 第
不知道怎么解释,是在IE7中出现的,右边的DIV向右浮动,取消设置它的宽度,左边 float 的子DIV会变成和父DIV一样宽。 http://jsfiddle.net/dyvar/1/ IE 7 最
$newUser.addClass(newTweet.user).attr('data-user', newTweet.user).text('@' + newTweet.user + ': ');
我有一个带有输入框的 tkinter GUI,我只想允许数字。有人可以向我解释验证中每个命令/代码行的作用。我不明白 vcmd 变量和所有 '%i' '%s' 的东西。谢谢:) 更新:我有一个不同的应
我正在尝试使用 Richard Dawkin 的 Weasel Program 的 Python 版本这演示了随机选择与累积选择之间的差异,并且我的变异算法存在一些问题。我想也许我不明白如何使用Pyt
我正在学习嵌套,我的任务是让每一行都以缩进开头。这是我的代码,但它不起作用 $nestingDepth = 0 def logger description, &block puts "Beg
我正在编译 gcc 并阅读来自 https://gcc.gnu.org/install/configure.html 的手册 具体说明 --with-local-prefix=dirname Spec
我是一名优秀的程序员,十分优秀!