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

时间:2017-11-11 11:38:26

标签: java algorithm scale curve 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)按比例缩放"较小" 5%然后看起来像这样。

Output:

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

如果曲线(A)按比例缩放"更大" 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);
    }
}

我读了一些算法,例如&#34;最近邻插值&#34;在缩放点,但我不确定我是否在正确的道路上:(。

我非常需要知道如何做这些人:(提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

  1. 近似/拟合曲线以匹配折线

    如果你得分很多,你应该分段(例如使用4点立方体)。如果您获得了一些原始折线数据,您可以记住原始折线作为任何进一步重新采样的曲线,以避免适合每次调整大小。

    有关详细信息,请参阅How can i produce multi point linear interpolation?

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

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

    如果你使用矢量定义的曲线也将它们相乘...如果你想在每个轴上进行更复杂的变换或重新缩放比你应该在子弹#3 。因为如果在控制点和曲线上进行这些转换会产生不同的结果。

  3. 示例新的折线

    只需通过新的点密度(参数步骤)迭代曲线,并使用生成的点作为新的折线。

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

    如果是带有参数t=<0,1>的分段曲线,则需要从t开始,以获取下一个曲线,其中包含最后一个曲线的值。因此,一旦t越过1.0,您将转移到下一条曲线,并应以t-1.0参数起始值开头。

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

  4. 以下是我所有想法的快速草图:

    sketch