2016-03-05 78 views
3

我有在兩個維度上產生空間填充Hilbert曲線基於龜圖形算法希爾伯特曲線。它是遞歸和是這樣的:生成3D空間填充使用龜圖形

媧要繪製的順序n一條曲線,在方向x(其中x ∈ {L, R}),並讓y是相反x方向。我們做如下:

  • 轉彎的方向y
  • 繪製的順序n-1希爾伯特曲線,方向y
  • 一步步向
  • 轉彎的方向x
  • 畫希爾伯特的順序n-1曲線,方向x
  • 移動一步向前
  • 的方向繪製的順序n-1希爾伯特曲線,方向x
  • 轉彎x
  • 移動一步向前
  • 畫出的順序n-1希爾伯特曲線,方向y

我明白這一點,並能夠實施一個工作解決方案。但是,我現在試圖將其「升級」到3D,這裏是我基本上碰壁的地方;在3D中,當我們到達頂點時,我們可以不是兩個,而是四個方向(直行或備份顯然不是一個選項,因此是四個而不是六個)。直覺上,我想我應該存儲在哪個龜是「行走」的平面和在世界上的大方向,由enum六個值表示:

  • 最多
  • 在(從攝像機的角度來看,它會「內部」的世界)
  • 輸出(同上,外)

在2D烏龜,等,具有包含上面列出的信息的狀態,並且當它達到作爲頂點(其可以被認爲是一個「交叉」)具有做出決定下一步去哪裏,基於該州。而在兩個維度上,這是相當簡單的,三個,我很難過。

  1. 我的方法是否正確? (即,這是我應該存儲在烏龜的狀態?)
  2. 如果是這樣,我該如何使用該信息來決定下一步該去哪裏?

因爲有三維空間填充希爾伯特曲線許多變種,我應該指定這是我用什麼作爲參考和幫助我的想象:

enter image description here

我知道一個similar question已經被問到,但接受的答案鏈接到一個網站有這個問題是解決使用不同的方法(即不龜圖形)。

+0

一般情況下,在方向'z'轉,然後繪製方向'z'的曲線。但在步驟8中,您轉向'x',並在步驟10中,您正在朝'y'方向繪圖。這是一個錯字嗎? – Teepeemm

+0

的可能的複製[算法用於產生在Python三維希爾伯特空間填充曲線(http://stackoverflow.com/questions/14519267/algorithm-for-generating-a-3d-hilbert-space-filling-curve-in -蟒蛇) – Cimbali

回答

2

你的2D算法可以概括爲「LRFL」或「RLFR」(與「F」是「前進」)。每個字母的意思是「轉向那個方向,在那個方向畫一個(n-1)曲線,然後向前邁進一步」。 (假設步驟8中的x應該是y。)

在3d中,您可以將算法總結爲7個輪次,您需要沿着參考進行總結。這將取決於你如何形象化烏龜的開始。如果它從空圈開始,面向實心圓並且正面朝上(背面朝上),那麼您的引用將是「DLLUULL」。