3

ボックス(w、h)に曲線を描くために使用する2D座標の配列があります。ここで、x または y またはその両方が w と h より小さいボックス (x,y) に座標をスケーリングします。トリックの部分は、アスペクト比を維持する必要があることです。どんな助けでも大歓迎です。

4

3 に答える 3

3

質問が正しいかどうかはわかりませんが、もしそうなら、それはかなり簡単なはずです:

1. 新しい面 (xまたはy) のサイズが小さいことを確認します。

x/w2. (if x<y) またはy/h(if )で除算してスケールの比率を取得しy<xます。

3.比率がわかったら、その値でパスを比例的にスケーリングします。

最後のステップを実行する方法は、配列を保持/描画する方法によって異なります。単純なポイント バッファの場合は、マトリックス スケーリングを使用できます。また、質問の範囲を超えていますが、非常に高速に実行する必要がある場合 (パスに多くのポイントがある場合) 、行列/ベクトル乗算のための Apple のAccelerate フレームワークを確認してください。

于 2013-01-08T16:44:29.627 に答える
2

比率を維持する必要がある場合は、アスペクト フィットまたはアスペクト フィルが必要です。いずれにせよ、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 コンポーネントに倍率を掛けるだけです。

于 2013-01-08T16:42:48.593 に答える
0

2 つの x 座標と y 座標のそれぞれの差を取得します。どちらがパーセンテージの差が大きいかを判断し、曲線の描画に使用した座標にそのパーセンテージを掛けます。結果は、小さい方のボックスにちょうど収まるサイズの曲線になります。

曲線をボックス内に正しく配置するには、曲線の座標にオフセットを追加する必要がある場合があります。

必要に応じて、これを手動で行うよりも、描画 API を探すほうがよい場合があります。ユーザーがピンチ スケールできるようにするなど、無料 (または安価) の機能を利用できる場合があります。

于 2013-01-08T16:46:10.343 に答える