kret:
マシュー・ミラー:
次の操作を行うことができます。代わりに、そのような(0、100)のようないくつかの任意の位置として開始点を考慮しての、原点(0、0)に一時的にそれを翻訳。次いで、その新しい位置に終点を伸ばすために必要なスカラー量を計算します。
まず、我々はそれが仮定して、次の基準点を定義array
非空であるが。
Point start = array[0];
Point end = array[array.Length - 1];
次に、点を伸ばすために必要なスカラーを計算します。
float sx = (scaleToPoint.X - start.X) / (end.X - start.X);
float sy = (scaleToPoint.Y - start.Y) / (end.Y - start.Y);
最後に、ストレッチ実際を行います。
for (int i = 0; i < array.Length; i++)
{
array[i].X = array[i].X + (array[i].X - start.X) * sx;
array[i].Y = array[i].Y + (array[i].Y - start.Y) * sy;
}
あなたは、これがために機能するかどうかを確認することができます:
array[0]
それが最初にあった場所端がバックアップします。array[array.Length - 1]
終わりますscaleToPoint
。- 変換は直線的でした。