您的位置:首页 > 其它

Round #172 (Div. 2) C. Rectangle Puzzle

2013-03-27 22:02 218 查看
题意:给出一个矩形,绕中心旋转一个角度,得到一个新的矩形,求两个矩形重叠的部分的面积。

用计算几何求线段交点的方法肯定可以做,嫌代码太长,实在懒得写。其实这题可以用纯几何的方式求出公式解出来。首先利用对称性,只考虑旋转角度小于90度,且长大于宽的情况。还有一个简单的情况就是当角度大于2 * atan(h / w)的时候,重叠面积就是一个平行四边形了。对于一般情况,做两条辅助线就很容易求出上方三角形的高了。



from math import atan, sin, tan, cos, pi

w, h, a = map(float, raw_input().split())
if w < h: w, h = h, w
if a > 90.: a = 180. - a
a = a * pi / 180.
if a >= 2. * atan(h / w):
print h * (h / sin(a))
else:
x1 = ((w / 2.) * tan(a) + (h / 2.)) * cos(a) - (h / 2.)
x2 = ((h / 2.) * tan(a) + (w / 2.)) * cos(a) - (w / 2.)
area1 = x1 * (x1 / tan(a) + x1 * tan(a)) if x1 != 0. else 0.
area2 = x2 * (x2 / tan(a) + x2 * tan(a)) if x2 != 0. else 0.
print w * h - area1 - area2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: