2012-04-08 59 views
2

我想創建一個「重力網格」像這樣的形象:如何創建重力網格?

img

最近我一直在創造這個網格顯示此圖像中:

img2

我只翹曲平行於Y軸的線,直到我可以解決這個問題。但正如你在圖片中看到的那樣,線條似乎正在經過我的「星球」。

這裏是所關心的代碼我現在:

for (each point on a line parallel to the y-axis) { 
    if (planetPosition.x > currrentPoint.x) { 
     warpedXPos = currrentPoint.x + (1/(distance*1000)); 
    } 
    else { 
     warpedXPos = currrentPoint.x - (1/(distance*1000)); 
    } 
} 

回答

5

想法是通過正比於1/R,其中R是從地球到的距離的量,以拉向地球的每一個點重點。

在你的代碼currentPoint.x等,是絕對位置,但你需要的位置相對扭曲,以星球。因此,你的公式應該是這樣的:

warped.x = currrentPoint.x + (planetPosition.x-currrentPoint.x)/(1000*distance) 

的部分+後的相對距離的比例基本上是你的經,然後你這個偏轉添加到原來的絕對值。你可能也不想使用1000因子,但這只是與你的例子保持一致。此外,請注意,沒有必要使用>將其分解爲案例,減法的符號應該在適當的方向進行調整。 (順便說一下,這種類型的操作是超常見的......首先你減去一個絕對因子,然後你縮放,然後你添加原始因子。這是一個值得記憶的技巧,用於許多應用程序)

+0

謝謝,它工作。我試圖找出幾個小時。 – Nathan 2012-04-08 03:15:59

+0

提示,使用1/R^2,因爲這是真正的重力,它看起來更好。 – 2012-04-08 17:32:45

+1

@Stephan:彎曲的空間圖顯示重力勢能,其爲1/R。這個力量與1/R^2是不同的,但它沒有任何意義(我知道無論如何)將力量表現爲空間的扭曲。 http://en.wikipedia.org/wiki/Gravitational_potential – tom10 2012-04-08 20:30:53