假设我有 5 个点,其中 p0 和 p4 的值固定为 0.0 和 4.0:
0 | 1.0 | 2.0 | 3.0 | 4
中间的点可以改变,但是一旦移动就必须拉伸其他点。
所以对于stretch
“向右”,它必须enlarge
是移动点周围的上一个值以及press
移动点和最后一个点之间的下一个值,保持每个点之间的比例。
我编写了这段代码,将 3° 点2.5
从其原始2.0
x 位置移动到:
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];
这给了我正确的 prev 点结果:
0 | 1.25 | 2.5 | 0.76 | 4
但是当我尝试对下一个点应用“same-wrapped-math”时,我得到一个非比例缩放,这会产生奇怪的结果(4
?)
谁能帮我?