我有一个矩形,必须始终旋转相同的角度。我们将这个角度称为α()。
这个矩形的宽度(w)和高度(h)可能会变化。该矩形必须始终旋转以适合大矩形内部。它必须被缩放以适应灰色矩形内部。
注意:α是w和水平线之间的角度。
因此,有三种类型的矩形:
w > h
w < h or
w = h
请看下图:
- 大矩形的宽度为R,高度为K,两个值都已知;
- w和h未知;
- 矩形总是旋转角度度数;
- 我知道w/h的值。我将其称为“ratioWH”;
- 红色矩形总是水平和垂直居中于灰色矩形上。
- 每个w和h情况下适合灰色矩形的最大w和h值;
- 点P的坐标,假设0,0在灰色矩形的左上角。
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));
}
有什么线索吗?谢谢。