在过去的几天里,我试图解决这个问题。我什至有解决方案,但我无法弄清楚。有人能帮我吗?
这里的问题:
给定平面上的两个矩形。两个矩形的中心都位于坐标原点(即矩形对称中心)。第一个矩形的边平行于坐标轴:平行于 Ox 轴的边长等于 w,平行于 Oy 轴的边长等于 h。第二个矩形可以通过将第一个矩形相对于坐标原点旋转角度α来获得。
示例:http: //i.imgur.com/qi1WQVq.png
你的任务是找到属于两个给定矩形的区域面积。该区域在图片中带有阴影。
输入 第一行包含三个整数 w, h, α (1 ≤ w, h ≤ 106; 0 ≤ α ≤ 180)。角度 α 以度为单位。
输出 在一行中打印一个实数 - 属于两个给定矩形的区域的面积。
如果其相对或绝对误差不超过 10 - 6,则该答案将被视为正确。
样本测试
输入 1 1 45 输出 0.828427125
输入 6 4 30 输出 19.668384925
这是一个可能的实现:
<?php
list($w, $h, $alphaInt) = explode(' ', '34989 23482 180');
if ($alphaInt == 0 || $alphaInt == 180) {
$res = $h * $w;
}
else if ($alphaInt == 90) {
$res = $h * $h;
}
else {
if ($alphaInt > 90) $alphaInt = 180 - $alphaInt;
$alpha = $alphaInt / 180.0 * M_PI;
//echo '$alpha:' . $alpha . "\n";
$cos = cos($alpha);
$sin = sin($alpha);
//echo '$cos: ' . $cos . "\n";
//echo '$sin: ' . $sin . "\n";
$c = $w / 2 * $cos + $h / 2 * $sin - $w / 2;
//echo '$c: ' . $c . "\n";
$r1 = $c / $cos;
$r2 = $c / $sin;
//echo '$r1: ' . $r1 . "\n";
//echo '$r2: ' . $r2 . "\n";
$c = $w / 2 * $sin + $h / 2 * $cos - $h / 2;
//echo '$c: ' . $c . "\n";
$r3 = $c / $cos;
$r4 = $c / $sin;
//echo '$r3: ' . $r3 . "\n";
//echo '$r4: ' . $r4 . "\n";
if ($r1 < 0 || $r2 < 0 || $r3 < 0 || $r4 < 0) {
$res = $h * $h / $sin; //$res = $w * $w / $cos;
}
else {
$res = $h * $w - $r1 * $r2 - $r3 * $r4;
}
}
echo '$res: ' . $res . "\n";