有四根木棍,長度分別為 a b c d ,求著四根木棍組成四邊形的最大面積。
輸入格式
第一行包含乙個整數 ca ( ca ≤ 10000 ) ,表示有 ca 組測試資料,對於每組測試資料:
輸入包含一行,該行包含四個整數 a b c d ( 1 ≤ a , b , c , d ≤ 1000 ) 。
輸出格式
對於每組測試資料,輸出 "case c: ans" ,其中 c 表示測試資料編號, ans 表示最大的面積,小數點後保留六位,如果不能組成四邊形,則 ans 處輸出 -1 。
樣例輸入
3
1 2 4 8
2 3 4 5
6 3 2 5
樣例輸出
case 1: -1
case 2: 10.954451
case 3: 13.416408
#include using namespace std;
bool judge(double a,double b,double c,double d)
int main()
else
printf("case %d: -1\n",i);
} return 0;
}
推導:
(1)可以得到:s=
absina+cdsinc
(2)由餘弦定理可得:bd^2 = a^2+b^2-2abcosa = c^2+d^2-2cdcosc;
即: a^2+b^2-c^2-d^2 = 2abcosa-2cdcosc
(1)和(2)平方後相加(需要稍微的處理一丟丟)得:
4s^2+(a^2+b^2-c^2-d^2 )^2 /4 = (absina+cdsinc)^2+(abcosa-cdcosc)^2;
4s^2+(a^2+b^2-c^2-d^2 )^2 /4 = (ab)^2+(cd)^2-2abcd(cos(a+c));
當a+c = 180°時即cos(a+c) = -1 面積s最小(看出來了吧)
則:s^2 = ( (ab)^2+(cd)^2 +2*abcd )/4 - (a^2+b^2-c^2-d^2 )^2 /16;
s^2 = ( (2ab+2cd)^2- (a^2+b^2-c^2-d^2 )^2 ) / 16;
平方差公式後:
s^2 = ( (a+b)^2 - (c+d)^2)((c+d)^2 - (a+b)^2 )/16
平方差公式後:
s^2 =(a+b+c-d)(a+b+d-c)(a+c+d-b)(b+c+d-a);
s =其中s為半周長:
四邊形優化
匆匆忙忙搞了一下四邊形優化,也就是做了幾道入門題而已 四邊形不等式詳解 反正我就記住這句話 判斷w是否為凸即判斷 w i,j 1 w i,j 的值隨著i的增加是否遞減 hdu 2829 include include include using namespace std define maxn 1...
四邊形填充
四邊形填充算,除了比較笨的洪流法外,就是掃瞄線法了 基本演算法是 1 求交,計算掃瞄線與多邊形的交點 2 交點排序,對第2步得到的交點按照x值從小到大進行排序 3 顏色填充,對排序後的交點兩兩組成乙個水平線段,以畫線段的方式進行顏色填充 4 是否完成多邊形掃瞄?如果是就結束演算法,如果不是就改變掃瞄...
定義四邊形 圓的內接四邊形
1 圓內接多邊形定義 多邊形的所有頂點都在同乙個圓上,這個多邊形叫圓內接多邊形,這個圓叫這個多邊形的外接圓。2 圓內接四邊形定義 四邊形的所有頂點都在同乙個圓上,這個四邊形叫圓內接四邊形,這個圓叫這個四邊形的外接圓。3 判定定理 如果乙個四邊形的對角互補,那麼它的四個頂點在同乙個圓上 簡稱四點共圓 ...