如何根据移动的点和最近的点得到抛物线形状

How to get a parabola shape according to a moved point and nearest points

数学不是很好,我的项目有问题。

objective 是 3D 文件的边界校正。

在我的应用程序中,用户在 X 轴上移动一个 3D 点以校正或修改对象的边界。

我想以相同的方向但递减地移动最近的边界点。我的意思是,任何一点都不应超过要点。最近的点移动最多,最远的点移动较少。

图中,红点代表点的初始状态。用户在 x 方向上拉动 P0。其他要点紧随其后。积分的最后状态由紫色圆点表示。

这是我试过的。

        //On point moved event

        //Get nearest boundary Points (Uses Geometry3D to get boundary points).
        (var clothDMesh, _) = Utilities3D.BuildDMesh(baseMesh);
        CreateClothModel(clothDMesh);

        var boundryVertices = nodes.Where(ro => ro.Value.isBorder).Select(ro => ro.Value.vertex).ToList();

        var refPoint = CustomPoint.FromPoint3D(movedPoint);

        //Gets the delta X.
        var deltaX = p.X - initialX;
        
       //Gets nearest country points, so 15 points above and 15 points below to move only a given number of points (I know maybe this should be calculated according to delta).
       var nearestPoints = refPoint.GetNearesPoints(boundryVertices, 30);

        foreach (var item in nearestPoints)
        {
           //This is only one of what I tried as a function. None of them worked correctly.
           item.X += deltaX - (deltaX * 1/ Math.Pow(item.Distance, 2));
        }

我们将不胜感激。

提前致谢。

这是数学部分: 我称“a”为“deltaX”。 我们还需要第二个参数:“b”,红点的最大高度。我假设它是对称的,“-b”将是红点的最小高度。

因此,如果您根据点的坐标 Y 查找值 X,水平移动:

X = a - a * Y * Y / (b * b);

您可以验证对于 Y = 0,您获得 X = a,对于 Y = b(或 -b),您获得 X = 0。 你有你的抛物线(X 是 Y^2 的函数)。