一个位图,长宽分别是m和n,试计算旋转x角度之后位图的面积。给出理论上旋转之后的最大面积,并求出此时的旋转角度,给出公式。

xiaoxiaofei 2005-09-14 08:56:56
如题。
...全文
167 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2005-09-16
  • 打赏
  • 举报
回复
对于公式
4*l*l*cos(beta+alpha)*sin(beta)

4*l*l* cos(beta)*sin(beta+alpha)
的极值
通过求导
导数均为
4*l*l( cos(beta)cos(alpha+beta)-sin(beta)*sin(alpha+beta)
= 4*l*l cos (alpha + 2*beta)
极值必然发生在 2*beta + alpha = Pi/2的情况下

beta = (Pi/2 - alpha)/2
也就是中轴线在45度的情况下

和gxqcn的答案是一致的

此时,最大面积是:

4*l*l*cos((Pi/2 + alpha)/2)*sin((Pi/2 - alpha)/2)
= 4*l*l*cos(Pi/4+alpha/4)^2 = 2 * l * l * (cos (Pi-alpha/2) + 1)
= 2*l*l*(sin(alpha/2)+1) sin(alpha/2)=n/2l
= 2*l*l*( n/2l + 1)

m =12, n =1 l = sqrt(145)/2
s =145/2 * ( 1/sqrt(145) + 1 ) = 78.52

你假定m=12, n=0
此时的面积就是72,近似的
xiaoxiaofei 2005-09-15
  • 打赏
  • 举报
回复
晕。。。替我解释一下那个宽12、高1的线的例子。。。。。。
那个最大值才。。。带入之后远远大于啊。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
唉,还是好事做到底,给你推导一下吧。

为方便讨论,限定 0 <= x < Pi/2,则

w < m*cos(x) + n*sin(x) + 1.0
h < m*sin(x) + n*cos(x) + 1.0

S = w * h
< 1 + m*n + (m^2+n^2)*sin(2x)/2 + (m+n)*(sin(x)+cos(x)
= 1 + m*n + (m^2+n^2)*sin(2x)/2 + √2*(m+n)*cos(x-Pi/4)

当 x = Pi/4 时,sin(2x)、cos(x-Pi/4)均同时达到极大值1,
∴ 当 x=Pi/4 左右时,S取得最大值 Smax < t^2/2 + √2*t + 1,其中 t=m+n.
寻开心 2005-09-14
  • 打赏
  • 举报
回复
把问题换一个方式描述:

以矩形中心为坐标系原点, 假定对角线的一半长度是l,两个对角线之间的夹角(锐角)是alpha
假定初始状态,矩形的一条对角线和x坐标轴齐平,然后旋转beta角度,beta从0到360度

那么这个时候,四个角点的坐标分别是
l*cos(beta), l*sin(beta) = x1, y1
l*cos(beta+alpha), l*sin(beta+alpha) = x2, y2
-l*cos(beta), -l*sin(beta) = -x1, -y1
-l*cos(beta+alpha), -l*sin(beta) = -x2, -y2
面积就等于 4* max(fabs(x1), fabs(x2)) * max(fabs(y1)*fabs(y2))

显然l对于结果的影响是可以作为因子提取出来的
而且根据对称性旋转360度的情况可以用90度以内的情况替代
问题实际上就是在x方向比较: cos(beta)和cos(beta+alpha)的情况
在y方向比较sin(beta)和sin(beta+alpha)的情况

在0到 90 - alpha/2 的范围内, |cos(beta)| > |cos(beta+alpha)|
|sin(beta)| < |sin(beta+alpha)|
而在 90-alpha/2范围内, |cos(beta)| < |cos(beta+alpha)|
|sin(beta)| > |sin(beta+alpha)|
所以,在 0到90-alpha/2的范围内:
面积是: 4*l*l* cos(beta)*sin(beta+alpha)
在在 90-alpha/2到90的范围内
面积是: 4*l*l*cos(beta+alpha)*sin(beta)
各自算极值吧
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
其实这是一个很简单的问题(我的工作就是做图像处理算法的),结论也很明了。
也正因为如此,我在一个打印纸的边缘进行的推导,结果接连犯了些低级错误:(

楼上所用公式是不方便进行极值分析的,而不仅仅是一个“高中的知识忘了”的问题。
xiaoxiaofei 2005-09-14
  • 打赏
  • 举报
回复
参考我得上上个回复中的例子,你的好像大概也许可能还是错的喔,呵呵
xiaoxiaofei 2005-09-14
  • 打赏
  • 举报
回复
我算的x=m*cosx + n*sinx
y=sqrt(m^2+n^2)*cos[arctg(m/n)-x];
面积就是s = x*y,可是不知道怎么化简,晕,高中的知识忘了。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
对不起,还是写错了(看来今天真的不适合推导公式了),应为:

S = w * h = m*n + (m^2+n^2)*abs(sin(2*x))/2
∴当且仅当 x=(k±1/4)*Pi(k∈Z)时,S取得最大值 Smax = (m+n)^2 / 2.

如果考虑到 w、h 需向上取整,上式仅需作相应的变换即可。
xiaoxiaofei 2005-09-14
  • 打赏
  • 举报
回复
。。。。。。这个也是错的啊。
还拿那条长12,高1的‘线’为例,很明显它旋转45度的时候面积最大,此时长宽各为6*sqrt(2),面积是72,如果带入你的公式,仅仅一个12的平方就有144了啊。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
对不起,又写错了(看来今天头脑有点不清醒,不适合推导公式),应为:

S = w * h = m*n + (m^2+n^2)*abs(sin(2*x))
∴当且仅当 x=(k±1/4)*Pi(k∈Z)时,S取得最大值 Smax = m^2 + m*n + n^2.

如果考虑到 w、h 需向上取整,上式仅需作相应的变换即可。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
第一个回帖有误,应为:

S = w * h = m^2 + n^2 + m*n*abs(sin(2*x))
∴当且仅当 x=(k±1/4)*Pi(k∈Z)时,S取得最大值 Smax = m^2 + m*n + n^2.

如果考虑到 w、h 需向上取整,上式仅需作相应的变换即可。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
我知道了,由于是位图,w、h 需向上取整,即修订为:

w = ceil( m*abs(cos(x)) + n*abs(sin(x)))
h = ceil( m*abs(sin(x)) + n*abs(cos(x)))

余下的你自己推导好了,不会很难的。
xiaoxiaofei 2005-09-14
  • 打赏
  • 举报
回复
楼上的错了,是位图,注意啊
简单来说::一个高1,长12的‘线’,转60度,变成长6,高6*sqrt(3)了,此时面积就是36*sqrt(3),是原来的三倍还多。。。。。。
gxqcn 2005-09-14
  • 打赏
  • 举报
回复
w = m*|cos(x)| + n*|sin(x)|
h = m*|sin(x)| + n*|cos(x)|

S = w * h = m*n*(1+abs(sin(2x))
∴当且仅当 x=(k±1/4)*Pi(k∈Z)时,S取得最大值 Smax = 2*m*n.

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧