ボックス(w、h)に曲線を描くために使用する2D座標の配列があります。ここで、x または y またはその両方が w と h より小さいボックス (x,y) に座標をスケーリングします。トリックの部分は、アスペクト比を維持する必要があることです。どんな助けでも大歓迎です。
3 に答える
質問が正しいかどうかはわかりませんが、もしそうなら、それはかなり簡単なはずです:
1. 新しい面 (x
またはy
) のサイズが小さいことを確認します。
x/w
2. (if x<y
) またはy/h
(if )で除算してスケールの比率を取得しy<x
ます。
3.比率がわかったら、その値でパスを比例的にスケーリングします。
最後のステップを実行する方法は、配列を保持/描画する方法によって異なります。単純なポイント バッファの場合は、マトリックス スケーリングを使用できます。また、質問の範囲を超えていますが、非常に高速に実行する必要がある場合 (パスに多くのポイントがある場合) 、行列/ベクトル乗算のための Apple のAccelerate フレームワークを確認してください。
比率を維持する必要がある場合は、アスペクト フィットまたはアスペクト フィルが必要です。いずれにせよ、x と y の両方の変換に対して 1 つの倍率を見つける必要があります。
最初に、X と Y の両方の個々のサクリング ファクターを計算します。
(w1, h1) -> (w2, h2) (assuming all floats)
float xScaleFactor = w2 / w1;
float yScaleFactor = h2 / h1;
小さくしているので、アスペクト フィットの最小倍率またはアスペクト フィルの最大倍率のいずれかを使用します。
float scaleFactor = MIN(xScaleFactor, yScaleFactor); // Assuming aspect fit
次に、各ポイントの x および y コンポーネントに倍率を掛けるだけです。
2 つの x 座標と y 座標のそれぞれの差を取得します。どちらがパーセンテージの差が大きいかを判断し、曲線の描画に使用した座標にそのパーセンテージを掛けます。結果は、小さい方のボックスにちょうど収まるサイズの曲線になります。
曲線をボックス内に正しく配置するには、曲線の座標にオフセットを追加する必要がある場合があります。
必要に応じて、これを手動で行うよりも、描画 API を探すほうがよい場合があります。ユーザーがピンチ スケールできるようにするなど、無料 (または安価) の機能を利用できる場合があります。