我想在这张图片中创建一个“重力网格”:
我在创建此网格时最接近的位置如下图所示:
我只是扭曲与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));
}
}
答案 0 :(得分:5)
这个想法是将每个点朝向行星拉出一个与1 / R成比例的量,其中R是从行星到点的距离。
在你的代码中,currentPoint.x等是绝对位置,但你需要扭曲相对于行星的位置。因此,您的等式应如下所示:
warped.x = currrentPoint.x + (planetPosition.x-currrentPoint.x)/(1000*distance)
+
之后的部分是相对距离的缩放,基本上是你的扭曲,然后你将这个偏差添加到原始的绝对值。您可能也不想使用1000因子,但这只是与您的示例保持一致。另外,请注意,不需要使用>
将其分解为案例,减法的符号应该在适当的方向上进行调整。
(顺便说一句,这种类型的操作是超级常见的......首先你减去一个绝对因子,然后你缩放,然后你重新添加原始因子。这是一个值得记忆的技巧,可用于许多应用程序。 )