2012-04-08 65 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