讓說我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