6

pointA(3302.34,9392.32)、pointB(34322.32,11102.03)などのポイントのセットがあります。

これらをスケーリングして、各 x 座標と y 座標が範囲 (0.0 - 1.0) になるようにする必要があります。最初に、データ セット内の最大の x 値 (maximum_x_value) と、セット内の最大の y 値 (minimum_y_value) を見つけて、これを実行しようとしました。次に、次のことを行いました。

pointA.x = (pointA.x - minimum_x_value) / (maximum_x_value - minimum_x_value)
pointA.y = (pointA.y - minimum_y_value) / (maximum_y_value - minimum_y_value)

これにより相対距離(?)が変更されるため、データが役に立たなくなります。相対距離をそのまま維持しながら、これらの座標をスケーリングする方法はありますか?

4

5 に答える 5

10

x値とy値を同じ量だけスケーリングする必要があります。x2 つの範囲のうち大きい方 (または)でスケーリングすることをお勧めしますy。疑似コードでは、次のようなものがあります

scale = max(maximum_x_value - minimum_x_value,
            maximum_y_value - minimum_y_value)

次に、ポイント間のすべての距離は でスケーリングされscaleます。これは、あなたが求めていると私が推測するものです。したがって、ポイントp_1が再スケーリング前のポイントから2倍離れていp_2た場合p_3、再スケーリング後も2倍になります。これは、ピタゴラスの定理を使用して簡単に証明できるはずです。

于 2010-03-15T19:59:25.950 に答える
9

(0.5, 0.5)データセット全体を両方の軸の範囲で中心に置くと仮定すると(0,1)、3 つのステップで必要な全体的な変換を考えるのが最も簡単です。

  1. 原点にデータを配置します。
    P.x -= (maxX + minX) / 2
    P.y -= (maxY + minY) / 2
  2. 2 つの範囲の大きい方が になるように、両方の次元で同じ量だけ縮小します(-0.5, 0.5)
    scale = max(maxX - minX, maxY - minY)
    P.x /= scale
    P.y /= scale
  3. ポイントを翻訳して、(0.5, 0.5)すべてを必要な場所に移動します。
    P.x += 0.5
    P.y += 0.5

このアプローチには、任意の入力データに対して完全に機能し、アスペクト比 (したがって相対距離) を維持しながらできるだけ多くの単位正方形を埋めるという利点があります。

于 2010-03-15T20:16:04.870 に答える
4

ステップ1:原点を再
配置する新しい「原点」を(minimum_x_valueminimum_y_value)とします。minimum_x_valueすべてのx座標から減算し、すべてのy座標から減算することにより、すべてのデータポイントをシフトしますminimum_y_value

手順2:残りのデータを正規化する残りのデータ
を0.0〜1.0のウィンドウに収まるように縮小します。max_coord最大x値または最大y値の大きい方を見つけます。すべてのx座標とy座標を。で割りmax_coordます。

于 2010-03-15T20:26:53.647 に答える
3

縦横比を維持していない場合は、最小境界四角形ではなく、最小境界四角形にスケーリングします。両方の軸に沿って max(dx,dy) になる倍率を選択する必要があります。

于 2010-03-15T19:58:22.223 に答える
3

距離を同じに保つには、同じ係数でそれらをスケーリングする必要があります。

最小値を減算することを忘れて (注: この部分は、ポイントが常に正の場合にのみ当てはまります。これは私の通常の使用例です)、2 つの最大値の最大値で除算するだけです。

maxval = max(max(A.x), max(A.y)) #or however you find these
A.x = A.x/maxval
A.y = A.y/maxval
于 2010-03-15T19:58:49.120 に答える