正方形中如何安排一些線段,使總長度最短,同時擋住所有經過正方形的直線?

嚴謹的說,就是:在單位正方形(包括邊界)中放置有限條線段,使得平面上任何一條與正方形相交的直線都與這些線段中的至少一條相交,如何放置這些線段,才能使線段總長度最短? 直觀的說,就是在正方形木板上釘一些木條,使得從側面看正方形,視線總會被木條擋住,求木條總長度如何最短。 我能想出的最短做法總長度(根號2+根號6/2)≈2.639 四個頂點順時針依次叫做ABCD,中心是O,三角形ABC的費馬點是P,我的方案是OD AP BP CP 可不可以找到一種最短解法並證明? 註:說是對角線(2.828)、正方形費馬點(2.732)等比我上面說的方法還要長的就不要回答了。


很有意思的問題。應該是Opaque forest

提供個擴展思路

首先能不能證明拆離點之後的斯坦納樹小於原始斯坦納樹
如果可以,就可以拆離點形成小斯坦納樹,直到拆離到三角形出現費馬點。

斯坦納樹的解也是通過多次費馬點的求解,可能Opaque forest也會跟斯坦納樹思路有關係。

下圖模擬了正六邊形的拆離點的三種過程,不知道不同的拆離方法會不會影響到最終Opaque forest的解


剛看了維基百科Opaque forest problem,
應該來說題主給的這個方案仍然是目前所知的最優方案(此處應有掌聲)。

另外wiki也給出一份paper,各位可以去參考一下http://arxiv.org/abs/1311.3323v1。這裡面給出一個下界的估計(我真懷疑是不是有總長是2.00001的方形內Opaque forest)

我本身不是學Computational geometry的,但是對於這種問題,還是非常感興趣。
所以本著數學精神,我還是會去想想還有什麼方案(? ??_??)?

———————————————2016年5月8日更新——————————————
利用空餘時間思考了一下,也看了一下各位答主的解答,我歸納一下相關知識點(先做一回搬運工)和我自己的想法,方便有識之士繼續研究。

三角形費馬點:位於三角形內(包括邊界),且到三個頂點的距離之和是最小的。當這個三角形沒有一個內角大於120°的話,這一點能在三角形內部找到,而且與三頂點連線會構成120°,120°,120°平分圓周角的情況。如果三角形有個大於120°的鈍角。這樣的點只能在邊界上找到。
?傳送門:Fermat point

Steiner tree:給定R2中n個固定的點,要給出這個n個點的生成樹,要求這個樹的長最小(其實就是樹的邊長和最小)。其實別看這遊戲好像挺初等,看了傳送門就知道水挺深。
?傳送門:Steiner tree problem

Opaque forest:這才是題主問的問題,給定一個R2上的凸多邊形,我們要在多邊形內部給出線段,使得每一條與多邊形相交的直線都必定與這些線段相交。並且,要求這些線段長度和最小。這問題水就更深啦,就連題主給的正方形的情況,還有等邊三角形的情況,目前也難以證明人們所找到的解就是最優解。所以他還是一個open problem(有興趣的朋友不妨去研究一下,得出個好的結果可以為世界做出有意義的貢獻)
?傳送門:就是一開始給出的Opaque forest problem

開始的時候,我有點不理解這個明明就是阻擋直線的問題,為何和forest相關。做了兩下就好像有點領悟其中的奧妙了。
我先不說其他的多邊形,就說題主給的正方形的情況。
我要在正方形內部做線段,使得,每一條與正方形相交的曲線都與這線段相交。那麼極端情況是「擦邊球」,也就是像如下這種情況。

直線與把正方形分開兩部分,其中有一個部分面積很小,但也必定得包含我們放置線段的一部分,隨著「擦邊球」直線與正方形頂點的距離越來越近,放置線段也與正方形頂點無限接近。不難觀察到,無論我們怎麼放置線段,他們一定得經過正方形的頂點。這樣就算正方形裡面的線段不連通,也可以知道至少存在4棵樹,那麼就可以只考慮forest(估計forest是這麼來的)

既然正方形的每個頂點都要有線段延伸出去,我們就會想到這樣的情況

如果說這個圖中的黃色區域已經做好了障礙,也就是說每一條經過黃色區域的直線都與黃色區域內部的線段相交,那麼我們也得到了正方形障礙的一種方式(注意這裡的術語「障礙 ——Barrier」,下面會使用得更多)。
換言之我們可以把正方形的Barrier問題轉化為,正方形內部多邊形P的Barrier問題。
Br(Sq)
ightarrow Br(P)
不嚴謹的寫法,但朋友們可以下點功夫嚴格化,上面Br代表Barrier問題的求解。Sq是正方形,P是多邊形。

甚至我們可以發現,最容易想到的三種比較優的解法,都是Br(P)的極限情形。咱們細細說來。

這個裡面是個小的正方形。隨著小正方形不斷縮小,得到的極限情形是我們下面的較優解。

我們姑且把這種情形叫做K4,那麼len (k3)=2sqrt{2}=2.828...
另外K2,K1如下圖的右邊兩個所示

圖片出自A. Dumitrescu的論文
當然題給出的方案就是K1啦。

還有一個K3

圖片出自wiki的Opaque forest的頁面
不難看出,其實這個也是我剛才所說的某個Br(P)的極限情形(中間那條橫線是由一個矩形不斷縮小而成的)。

(休息再寫)


似乎最小作用量原理里看過?先佔坑。。。考完試來細看。。。


題主的結果應該是對的,在想證明。


這個? 不過沒算
(換一張圖)

Several opaque forests for a unit square. Top left: the perimeter of the square, length 4. Top right: The perimeter of the square, less one edge, length 3. Bottom left: theSteiner tree of the vertices, length 1 + √3. Bottom right: the conjectured optimal solution, length √2 + √6/2.

引自Wikipedia: Opaque forest problem


難道不是兩條對角線嗎?
我之前寫的程序判斷線段與矩形是否相交,就是通過對角線做的.

inline bool YcRect::IsIntersectsSegment(const YsVector2 vStart, const YsVector2 vEnd) const
{
if (IsContainsPoint(vStart) || IsContainsPoint(vEnd))
{
return true;
}

YsVector2 vRect[4];
vRect[0].x = left; vRect[0].y = top;
vRect[1].x = right; vRect[1].y = top;
vRect[2].x = right; vRect[2].y = bottom;
vRect[3].x = left; vRect[3].y = bottom;

return (YfVector2SegmentIntersects(vStart, vEnd, vRect[0], vRect[2]) ||
YfVector2SegmentIntersects(vStart, vEnd, vRect[1], vRect[3]));

}


我好像從M67的博客看過類似的問題,有一個實驗解法如下:
油管地址 https://www.youtube.com/watch?v=PI6rAOWu-Og
或者查一下 Steiner Tree


無限個長度為0的線段


窮舉法?

在凸多邊形中想要使經過其的每一條直線至少與一條線段相交,則所有頂點必有線段出發。可將該單位正方形分成切割成任意形狀凸多邊形,盡量使分出的多變形與正方形有公共頂點。

然後計算正方形費馬點、三角形費馬點,比較後得出結論。


提個思路,利用平面上點和直線的對偶來做,轉換成覆蓋的問題。


推薦閱讀:

TAG:數學 | 物理學 | 幾何學 | 組合數學Combinatorics | 平面幾何 |