让说我5点,其中P0和P4是固定值0.0和4.0:如何拉伸点?
0 | 1.0 | 2.0 | 3.0 | 4
中间的点可以改变,但必须一次拉伸等运动。
所以对于一个stretch
“向右”,它必须enlarge
围绕移动点press
移动点和最后点之间的下一者的上一个值,并且保持每个点之间的比例。
我已经写这code其中3°点从原来的2.0
x位置移动到2.5
:
const int numPoints = 5;
double points[numPoints] = { 0.0, 1.0, 2.0, 3.0, 4.0 };
int stretchedPoint = 2;
double prevX = points[stretchedPoint];
points[stretchedPoint] = 2.5;
std::cout<< points[0];
for (int prevPoint = 1; prevPoint < numPoints - 1; prevPoint++) {
// prev points
if (prevPoint < stretchedPoint) {
double ratio = points[stretchedPoint]/prevX;
points[prevPoint] *= ratio;
// next points
} else if (prevPoint > stretchedPoint) {
double ratio = (points[numPoints - 1] - prevX)/(points[numPoints - 1] - points[stretchedPoint]);
points[prevPoint] *= ratio;
}
std::cout << " | " << points[prevPoint];
}
std::cout << " | " << points[numPoints - 1];
它给我正确的结果为上一个点:
0 | 1.25 | 2.5 | 0.76 | 4
但是当我尝试为下一个点应用“相同包裹的数学”时,我得到了一个不成比例的缩放,这给出了奇怪的结果(4
?)
任何人都可以帮助我吗?
嗯,你使用的比例是多少?现在0.96现在http://coliru.stacked-crooked.com/a/f5671e6fbfba8419 – markzzz
我的错,我用过去的价值观为伸展点。无论如何编辑 – MBo
3,25是错的!比例不被保留。 – markzzz