如何缩放由点组成的曲线?

How to Scale a Curve Line made up of points?

缩放由点组成的曲线的最佳算法是什么?例如:

Curve line (A):
o               
 o             
  o            o o   
   o         o     o     o o
    o       o       o   o   o
     o     o         o o     o
       o o

如果曲线 (A) 缩放 "Smaller" 5%,则它看起来像这样。

Output:

o
 o        o o
  o      o    o   o o
   o    o      o o   o
    o o

如果曲线 (A) 缩放 "Bigger" 10%,则它看起来像这样。

o               
 o             
  o                
   o               
    o                o o    
     o             o     o      o o    
      o           o       o   o     o
       o         o         o o       o
        o       o
         o     o
           o o

我只是想知道算法、概念或如何解决它的想法,但为了更清楚这里有一些我想要实现的 java 代码。

class CurveLine
{
    public static ArrayList<float[]> getScaledCurveLine
    (float[][] curveLine, float percentage, bool enlarged)
    {
         ArrayList<float[]> scaledCurveLine = new ArrayList<float[]>();
         /*
               Some Algorithm for Scaling Curve Line
         */
         return scaledCurveLine; //new set of points
    }

    public static void main (string args[])
    {
         float [][] curveLine = new float[20][2]; //set of points
         curveLine[0][0] = 0; //x1
         curveLine[0][1] = 5; //y1
         curveLine[1][0] = 1; //x2
         //and so on..

         ArrayList<float[]> largerCurveLine = getScaledCurveLine(curveLine, 20, true);
         ArrayList<float[]> smallerCurveLine = getScaledCurveLine(curveLine, 20, false);
    }
}

我在缩放点中阅读了一些算法,例如 "Nearest Neighbor Interpolation",但我不确定我是否走在正确的道路上 :(.

伙计们,我非常需要知道怎么做:(提前致谢。

如果我答对了你的问题,你基本上想在不改变点密度的情况下调整折线(曲线)的大小。

  1. approximate/fit 曲线匹配你的折线

    如果你得到的分数比你应该分段计算的多(例如使用 4 点立方)。如果您有一些原始折线数据,您可以将原始折线记住为任何进一步重采样的曲线,以避免在每次调整大小时都适合。

    有关详细信息,请参阅

    所用曲线的多项式次数取决于您需要的连续性。对于基本的图形材料,4 点立方体就足够了。但是如果你需要更高的导数比你需要使用更高的度数更平滑。

  2. 将所有曲线控制点乘以比例

    如果您使用由向量定义的曲线,也将它们相乘...如果您想在每个轴上进行更复杂的转换或以不同方式重新缩放,而不是在项目符号中采样后应用此步骤 # 3。因为如果在控制点和曲线点本身上进行这些转换会产生不同的结果。

  3. 采样新折线

    因此只需按新的点密度(参数步长)迭代曲线,并将生成的点用作新的多段线。

    如果您在此步骤中应用转换 #2,则参数步长也会受到比例的影响。

    对于参数为 t=<0,1> 的分段曲线,您需要从 t 开始下一条曲线,其值为上一条曲线。因此,一旦 t 穿过 1.0,您将移动到下一条曲线,并且应该从 t-1.0 参数起始值开始。

    如果你想要更精确的密度,你需要在曲线上找到与最后一个点的精确距离而不是常数参数增量。

以下是我对这一切的想法的简要说明: