Oversea_Job 板


LINE

※ 引述《peter26194 (啦啦哼哈)》之铭言: : ※ 引述《FRAXIS (喔喔)》之铭言: : : 我被问过一个问题:在三维空间中有两个相同大小的圆盘位於不同位置 : : (朝向也可能不同),求这两圆盘间的最短距离。除了暴力法我还真想 : : 不出来怎麽作.. : 最近也在面试,看到那道题目,试着想了一下解法: : 给定两圆c1, c2 : 找出两圆各自所在的平面p1, p2 : 把两圆圆心连线得到L线段 : 将L投影到p1上,得到L1线段 : L1的一端点是c1圆心, : 1)另一端点如果在圆c1之内,那麽此端点就设为a1; : 2)另一端点如果在圆c1之外,那麽则把a1定为L1和c1的交点 : 用同样方法,将L投影到p2上,得到L2线段,再找出a2 : 则a1, a2连线就是最短距离 : 灵感是从「平面上的两圆,要找最短距离,要找圆心连线和两圆的交点」而来的, : 我也不太确定这是对的,大家觉得呢? : (虽然在这里讨论怪怪的,不过应该是可以的吧?) 先厘清一下问题的定义, 确定大家讨论的是同一个问题. 圆盘的定义是在某平面上距离圆心小於某半径的点集合对吧? 如果是两个圆周找最近点的话问题就简单得多. 首先先简化问题. 由於对空间进行旋转跟平移不影响问题的答案(证明留给读者), 所以先假设两圆盘的半径为 1, 其中一个圆盘位於 XY 平面上, (i.e. 即圆心为原点 {0, 0, 0} , 法向量平行 Z 轴 {0, 0, 1}), 另一个圆盘圆心向量 C, 法向量 N. 於是这个问题可以写成求 argmin[A,B](|A - B|), A · {0, 0, 1} = 0 (1. A 点位於 XY 平面) |A × {0, 0, 1}| <= 1 (2. A 点限制在半径 1 的 Z 轴圆柱) B · N = C · N (3. B 点与 C 共平面, 法向量 N) |(B - C) × N| <= 1 (4. B 点限制在半径 1 的 CN 圆柱) 由於条件 1 跟 3 可以简化一维的自由度, 即已知 Az = 0 Bz = (C · N - BxNx - ByNy) / Nz 问题可简化为四元二次的 optimization with boundary condition. 当然这样还是太复杂, 我们必须进一步简化问题. 一个观察是, 当两个圆盘的法向量平行的时候这个问题有 degenerate solution, 可以直接将两个圆盘投影到任意一个平行平面上, 若有重叠则重叠范围内的任一对点皆是最短距离. 若无重叠则可选圆心投影连线与两个圆周的交点. 现在考虑两个圆盘法向量不平行的情形, 可以证明两点至少有一个点位於圆周上. 利用归谬法, 假设两点皆非位於圆周, 则两点连线必然与其中一个圆盘的法向量不平行, 因此可以移动该圆盘上的点往连线方向移动而使得连线缩短. 在此我们将问题再次简化成空间中一圆盘与一圆周求最近两点. (三元二次最佳化问题.) 现在我们再考虑简化问题, 求空间中一点与圆盘间最短距离. 这个问题可以写成简单函数. 我们再次经由空间变换把圆盘换到以原点为圆心, 法向量平行 Z 轴, 半径 1, 输入点为 P. 若 P 点在 XY 平面的投影落在圆内, 则答案为 Pz. 不然则取投影点与圆心连线在圆周上的交点, 即 hypot(hypot(Px, Py)-1, Pz). Lemma 1: 空间中一点 P 与单位圆盘的最短距离为 f(P) = if hypot(Px, Py) < 1, Pz else, hypot(hypot(Px, Py)-1, Pz) 回到原问题, 求空间中一圆周与单位圆盘之最短距离, 可以改写为 argmin[P](f(P)) P · N = C · N |(P - C) × N| = 1 由於 P 点的自由度只有一维, 其实可以视为一元最佳化问题, 可以经由微分 f 来求极值. -- その乾いた哀愁の瞳に去来するものは何か? 失ったもの 得たもの そして广大なネットの狭间で彼が见たものとは? 虚像と实存と记号の中に彼は今、何を想うのか? <バトルプログラマーシラセ> --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 54.68.90.183
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Oversea_Job/M.1461801749.A.F86.html
1F:推 FRAXIS: f 好像会有几个不可微点? 04/28 09:55
2F:推 peter26194: 我以为面试题只会用到高中程度数学,我太天真了... 04/28 10:31
3F:推 FRAXIS: http://goo.gl/xWSkN6 解法应该是这个 04/28 10:38
4F:推 choulu: .... 04/28 11:31
5F:→ FRAXIS: 抱歉 f 应该是没有不可微点 但是微分 f 求极值 还要考虑 04/29 10:35
6F:→ FRAXIS: 限制式 有简单的方法可以作吗? 04/29 10:35
7F:推 DJWS: 穷举圆周上每一点 然後算f(P) 05/01 09:08
8F:→ DJWS: 因为f(P)是单峰函数 所以穷举可以改为ternary search 05/01 09:09
9F:推 FRAXIS: 那这样就变成 iterative method 了 05/01 09:13
10F:推 DJWS: 是的 05/01 09:35
11F:推 FRAXIS: 我当时的回答是用 convex programming 05/01 09:41
12F:→ FRAXIS: 但是我想应该可以用几何学得到解析法 所以才上网找了论文 05/01 09:42
13F:→ FRAXIS: 毕竟对这麽特定的问题 用 convex programming 或是 05/01 09:42
14F:→ FRAXIS: iterative method 好像有点 overkill 05/01 09:43
15F:→ FRAXIS: 不过我也不清楚面试官心理的答案是什麽就是了.. 05/01 09:44
16F:推 DJWS: P延着圆周跑的时候 f(P) 是 convex function 吗? 05/01 09:53
17F:推 FRAXIS: 应该可以把 P mapping 到一个线段 这样就是 convex 了吧 05/01 22:46
18F:推 FRAXIS: 哈,我想了想 单峰是很明显的 convex 我就不知道了 05/01 22:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP