2

我想创建一个“重力网格”,如下图所示:

图像

这张图片显示了我在创建此网格时最接近的一次:

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));
    }
}
4

1 回答 1

5

这个想法是将每个点拉向行星的量与 1/R 成比例,其中 R 是行星到该点的距离。

在您的代码中,您 currentPoint.x 等是绝对位置,但您需要扭曲相对于行星的位置。因此,您的方程式应如下所示:

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

之后的部分+是相对距离的缩放,基本上是你的扭曲,然后你将这个偏转添加到原始绝对值。您可能也不想使用 1000 因子,但这只是与您的示例保持一致。另外,请注意,无需使用 将其分解为不同的情况>,减法的符号应在适当的方向上进行调整。

(顺便说一句,这种类型的操作非常常见……首先减去一个绝对因子,然后缩放,然后再添加原始因子。这是一个值得在很多应用程序中使用的技巧。)

于 2012-04-08T02:59:51.210 回答