【发布时间】:2017-11-11 11:38:26
【问题描述】:
缩放由点组成的曲线的最佳算法是什么?例如:
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);
}
}
我在缩放点中阅读了一些算法,例如“最近邻插值”,但我不确定我是否走在正确的道路上:(。
我非常需要知道该怎么做,伙计们:(提前谢谢。
【问题讨论】:
-
point *= 0.95或point *= 1.1- 某些语言标签或代码可能会给出真正的答案。 -
感谢@Marco13 的回复 .. 我放了一些java代码让它更清楚。谢谢。
-
在您的示例中,缩小的图包含的点比原始图少,而放大的点多一个。但是您没有为此指定规则(例如,用相同的因子缩放点数,使它们在 x 中保持等距,...?)。如果没有这样的规则,@Marco13 的方法,保留所有点并单独移动它们,是我能想象到的最简单和最准确的解决方案。
-
是的,当它变大时如何添加一些点,当它变小时删除一些点,以及在缩放时根据指定位置移动点的规则是我想知道的。你不认为有一些算法可以解决这个问题,他们已经为此指定了规则吗?在 Microsoft Powerpoint 中,他们已经实现了点曲线的缩放,我很好奇他们是如何做到的,哈哈。
-
关于您的示例代码:这不是曲线。它是一系列(直线)线段。有缩放曲线的解决方案,并最终将它们转换为一系列直线段,其中包含任意数量的点。但首先,这首先需要一条真实曲线(例如三次曲线或贝塞尔曲线),其次,其背后的数学有点过于复杂,无法在答案中总结。 (在下一条评论中继续...)
标签: java algorithm scale curve points