[英]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)的“小”比例缩放为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);
}
}
我在缩放点上读取了一些算法,例如“最近邻插值”,但不确定是否在正确的路径上:(.。
我非常需要知道该怎么做的家伙:(预先感谢。
如果我的问题正确,那么您基本上希望在不改变点密度的情况下调整折线(曲线)的大小。
近似/拟合曲线以匹配您的折线
如果您得到的分数超过了您应该分段进行的分数(例如,使用4个立方点)。 如果您获得了一些原始折线数据,则可以将原始折线记为曲线,以便进行任何进一步的重采样,以避免每次调整大小时都拟合。
有关更多信息,请参见如何产生多点线性插值?
所用曲线的多项式度取决于所需的连续性。 对于基本图形对象,仅需4点立方即可。 但是,如果您还需要比使用更高的度数更高的导数,那么它们的平滑度就更高。
将所有曲线控制点乘以比例
如果您使用的是向量定义的曲线,也可以将它们相乘...如果您想进行更复杂的变换或在每个轴上以不同的方式缩放比例,则比在第3点采样后应执行的步骤要多。 因为如果在控制点和曲线点本身上进行转换,这些转换将产生不同的结果。
采样新折线
因此,只需通过新的点密度(参数步长)遍历曲线,然后将产生的点用作新的折线即可。
如果在此步骤中应用转换#2 ,则参数步骤也将受缩放比例影响。
如果参数为t=<0,1>
的分段曲线,则需要从下一条曲线开始直到最后一条曲线的t
开始。 因此,一旦t
跨过1.0
您将移至下一条曲线,并应从t-1.0
参数起始值开始。
如果您想要更精确的密度,而不是需要在曲线上找到与最后一个点的精确距离而不是恒定的参数增量的点。
这是我对所有这些想法的简要概述:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.