geometry - 创建任意扭曲的二维网格

标签 geometry 2d computational-geometry distortion plane

我想根据点质量的位置扭曲二维网格。质量的存在应使网格收缩如下:

distortion

但我想用网格上任意数量的粒子来扭曲它。

这样我就可以想象重力对空间的影响:扭曲存在大质量的空间。

到目前为止,我所尝试的是根据单元内部的粒子数量迭代调整单元的边缘。具有许多粒子的单元应该缩小其边缘。

然而,最终的视觉效果令人失望,而且并没有真正呈现出扭曲的 2D 空间。我认为是因为变形应该具有全局影响,而不仅仅是对单个细胞的影响?

我可以使用什么算法来扭曲具有粒子质量的二维空间?

attempt

最佳答案

我创建了一个 fiddle ,其中每个粒子根据重力使用的平方反比规则影响每个网格交叉点。 https://jsfiddle.net/1nrjcsqa/2/

    dx = points[i][0] - x;
    dy = points[i][1] - y;
    d = Math.sqrt(dx * dx + dy * dy);
    f = gravity_force / Math.pow(d, falloff);

由于重力随距离的平方而衰减,因此点仅对距离它们最近的网格产生可见影响。您可以通过减少衰减来使点对网格的影响更远,但这不太像重力。

您可能需要调整gravity_force以使事情看起来适合您。

关于geometry - 创建任意扭曲的二维网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612406/

相关文章:

python - 在opencv2中使用3D感知

graphics - 是否可以在 2D 中获得高质量的图形?

javascript - 为什么我的寻的导弹算法不起作用?

c - 凸包中最大的三角形

algorithm - 以 x,y 位置的形式获取三角形内的位置列表

html - 具有属性位置(相对、绝对)或 float 的 Shape-outside

python - 在python中检测任意形状的内角和外角的最佳算法

algorithm - 在 O(n) 时间内计算星形多边形的凸包

c++ - 从 3d 中的起点和角度计算直线

c# - 在 Unity 中转身时翻转敌方 Sprite