作者Leon (Achilles)
站内Prob_Solve
标题Re: [问题] 计算几何 - stabbing line
时间Wed Dec 4 15:35:48 2013
※ 引述《DJWS (...)》之铭言:
: ※ 引述《FRAXIS (喔喔)》之铭言:
: : 我在网路上看到一个问题:
: : 给定n条垂直的线段,设计一个线性的演算法找出是否存在一条直线,
: : 使得此直线与此n条线段都相交。
: : 我的解法是基於二维线性规划,感觉是比较不直接的方法。
: : 有没有比较直接的方法呢?
: : 原文如下:
: : You are given a set of n vertical line segments in the plane.
: : Present an O(n) efficient algorithm to determine whether
: : there exists a line that intersects all of these segments.
: 重发一篇...
: 假设这些垂直线段已经由左到右排列好
: 线段有上端点和下端点
: 所有线段上端点,找往朝下凸包 O(N) (monotone chain)
: 所有线段下端点,找到朝上凸包 O(N)
: 朝下凸包和朝上凸包之间的区域,就是直线可能存在的区域
: 如果两个凸包有内公切线,就存在一条直线穿过所有线段
: 如果两个凸包不相交(交集的面积是零),就有内公切线,就存在一条直线穿过所有线段
: 要判断两个凸包是否相交是O(N)
嗯, 抱歉我看不懂你想说折麽.
你的朝上凹包 是 convex polygen 吗?
朝下凹包是甚麽? concave polygen ?
要是只有三条线, 你永远会找到 convext polygen
你的演算法怎麽办?
--------
well, my intuition is..
Let's define the vertical line as (u, v)
u as the upper point, v as the lower point.
Assuem the lines are sorted from left to right.
Then, we only need to compare two lines:
u_1 - highest v_i
and
u_1 - lowest u_i , i \= 1
--
赵客缦胡缨,吾钩霜雪明。银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。是了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯赢。
三杯吐然诺,五岳倒为轻。眼花耳热後,意气素霓生。
就赵挥金锤,邯郸先震惊。千秋二壮士,烜赫大梁城。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 96.41.13.29
1F:推 ZanFu5566:what if lines are not sorted at start? 12/04 18:50
2F:推 neutrino:我想他说的是 找上端点们的lower hull, 下端点们的upper 12/04 19:17
3F:→ neutrino:hull 12/04 19:17
4F:→ neutrino:如此理解的话, 他的方法好像会对 12/04 19:18
5F:→ DJWS:我的意思如楼上所言 朝下凸包lower hull 朝上凸包upper hull 12/04 19:34
6F:→ DJWS:英翻中翻译的不好请多见谅 12/04 19:36
7F:→ DJWS:再来回覆一楼 如果一开始没排序,那麽我也不知道怎麽做 12/04 19:38
8F:推 FRAXIS:LEON的解法应该不用排序吧 因为可以用O(n)的时间找出u_1 12/04 20:49
9F:→ FRAXIS:不过我有点怀疑正确性.. 为什麽只要判断u_1? 12/04 20:50
10F:推 seanwu:原po应该是假定会过u_1所以这样做吧...不过当然不一定会 12/04 22:00
11F:→ seanwu:再说,就算是要求过u_1的直线也不对,例如 12/04 22:01
12F:→ seanwu:垂直线 (0,2)-(0,5), (1,1)-(1,4), (3,0)-(3,3) 12/04 22:01
13F:→ seanwu:这样只会看到 (0,5)-(3,3) 和 (0,5)-(1,1) 12/04 22:02
14F:→ seanwu:应该要以u_1为中心照角度排,不是y座标 12/04 22:03
15F:嘘 scwg:莫明其妙. DJWS 的做法解释简单明了也被你嫌. 你的做法最左边 12/04 22:26
16F:→ scwg:那条延长到正负无限大才不知道要怎麽办咧 12/04 22:26
17F:推 yoco315:的确是简单明了,不能理解以 Leon 的程度怎麽可能会看不懂 12/06 10:44