みましょう私はP0とP4は値が0.0と4.0で固定されている5点を、しまし言う:ポイントを伸ばす方法は?
0 | 1.0 | 2.0 | 3.0 | 4
ポイント途中では変更することができますが、それらは移動後に他の人を伸ばす必要があります。 「右へ」stretch
ためだから、
、それは各ポイント間の比率を保ち、移動点の周りの前の値と移動点と最後の点の間press
次のものをenlarge
必要があります。
私が書きました、元の2.0
x位置から2.5
に3度のポイントを移動し、このcode:私に与える
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
?)
誰も助けてくれますか?あなたが非ゼロ起点について開始値が初期ために線形補間を適用するために、一般的に非ゼロ
であれば、同じ論理が、&過去のポイントに適用されるべきであることを
points[prevPoint] = points[stretchedPoint] + ratio * (points[prevPoint] - prevX)
注忘れ
オム、?ここで0.96はhttp://coliru.stacked-crooked.com/a/f5671e6fbfba8419 – markzzz
私のせいで、私はストレッチポイントのために古い値を使用しました。編集された – MBo
3,25は間違っています!比例は保持されません。 – markzzz