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