パスが指定されたエンドポイントに一致するように、点の配列を変換/スケーリングする必要

kret:

私は点の配列を持っています。私は、パスの終点が、私が与えるエンドポイントと一致しますので、全体のパスを変換/スケールへの道を探していますが、ポイントの配列の形状を保っています。

    void translate(Point[] array, Point scaleToPoint)

私が説明した内容ない任意のアルゴリズムはありますか?事前にありがとうございます、任意のヘルプは本当に感謝です!

私が探しているものの画像例 ここでは、画像の説明を入力します。

マシュー・ミラー:

次の操作を行うことができます。代わりに、そのような(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
  • 変換は直線的でした。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=363564&siteId=1