常に同じ角度で回転する必要がある長方形があります。この角度をアルファ()と呼びましょう。
この長方形の幅(w)と高さ(h)はさまざまです。長方形は常に大きな長方形の内側に回転して収まる必要があります。灰色の長方形の内側に収まるように拡大または縮小する必要があります。
注:アルファは、wと水平線の間の角度です。
つまり、3種類の長方形があります
w > h
w < h or
w = h
下の写真を参照してください。
私が知っていること:
- 大きな長方形の幅はR、高さはKで、両方の値を知っています。
- wとhは不明です。
- 長方形は常に度回転します。
- 私はw/hの値を知っています。私はこれを「ratioWH」と呼んでいます。
- 赤い長方形は常に灰色の長方形の水平方向と垂直方向の中央に配置されます
私が知る必要があること:
- wとhの各ケースの灰色の長方形に適合するwとhの最大値。
- 0,0が灰色の長方形の左上にあると仮定した場合の点Pの座標。
これは私がこれまでに行ったことですが、これは正しい値を与えていません:
CGPoint P = CGPointZero;
if (ratioWH > 0) { // means w > h
maxH = R / (ratioWH * fabsf(cosf(theta)) + fabsf(sinf(theta)));
maxW = maxH * ratioWH;
// P.x = 0.0f; // P.x is already zero
CGFloat marginY = (K - maxW * fabsf(sinf(theta)) - maxH * fabsf(cosf(theta))) / 2.0f;
P.y = marginY + maxW * fabsf(sinf(theta));
} else { // w <= h
maxW = K / (fabsf(cosf(theta) / ratioImagemXY) + fabsf(sinf(theta)));
maxH = maxW / ratioWH;
P.x = (R - maxW * fabsf(cosf(theta)) - maxH * fabsf(sinf(theta))) / 2.0f;
P.y = maxW * fabsf(sinf(theta));
}
手がかりはありますか?ありがとう。