Round #172 (Div. 2) C. Rectangle Puzzle
2013-03-27 22:02
218 查看
题意:给出一个矩形,绕中心旋转一个角度,得到一个新的矩形,求两个矩形重叠的部分的面积。
用计算几何求线段交点的方法肯定可以做,嫌代码太长,实在懒得写。其实这题可以用纯几何的方式求出公式解出来。首先利用对称性,只考虑旋转角度小于90度,且长大于宽的情况。还有一个简单的情况就是当角度大于2 * atan(h / w)的时候,重叠面积就是一个平行四边形了。对于一般情况,做两条辅助线就很容易求出上方三角形的高了。
用计算几何求线段交点的方法肯定可以做,嫌代码太长,实在懒得写。其实这题可以用纯几何的方式求出公式解出来。首先利用对称性,只考虑旋转角度小于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
相关文章推荐
- Round #172 (Div. 1) C. Game on Tree——概率
- Codeforces #172 div2的B题
- Codeforces Round #172 (Div. 1) BMaximum Xor Secondary 单调栈
- Codeforce172 Div2
- Codeforces Round #172 (Div. 2) D. Maximum Xor Secondary 单调栈应用
- Codeforces Round #172 (Div. 2)
- Round #173(Div2) C. XOR and OR——整体性方法
- codeforces 280,281(Round #172)题解
- NKOJ-2134“最大”异或“次大”【Codeforces Round #172 (Div. 1)】
- Codeforces Round #172 (Div. 2) B. Nearest Fraction
- Codeforces Round #172 (Div. 2) A题
- Codeforces Round #172 (Div. 2) B. Nearest Fraction 二分
- Codeforces Round #172 (Div. 2)总结
- Round #172 (Div. 2) D. Maximum Xor Secondary——栈的高级应用消除冗余操作
- codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)
- Round #203 (Div. 2) A------TL
- Codeforces Round #172 (Div. 2)
- Codeforces Round #172 (Div. 2) C. Rectangle Puzzle 数学题几何
- Codeforces Round #172 (Div. 2) C.Rectangle Puzzle(几何)
- Codeforces Round #172 (Div. 2)---D. Maximum Xor Secondary(RMQ + 二分)