題目描述
平面上有兩個矩形A和B,它們的邊分別平行于x軸和y軸,現在給出這兩個矩形在對角線上的頂點坐標,請計算矩形A和矩形B的公共部分的面積,
輸入
輸入資料的每一行是8個數(正數或負數),按先后順序分別是:x1,y1,x2,y2,x3,y3,x4,y4,其中,(x1,y1)和(x2,y2)是矩形A的對角線頂點坐標;(x3,y3)和(x4,y4)是矩形B的對角線頂點坐標,
輸出
對每組輸入資料,輸出矩形公共部分的面積(小數點后面保留兩位),每個輸出占一行,
樣例輸入
1.00 1.00 3.00 3.00 2.00 2.00 4.00 4.00
13.00 13.00 5.00 5.00 4.00 4.00 12.50 12.50
樣例輸出
1.00
56.25
做題演算法思路
(1)對輸入的橫坐標和縱坐標分別存放進陣列后排序,(升序降序都可,最后結果取絕對值)
(2)排除掉沒有相交的情況:①如果某一個矩形的對角線頂點橫坐標占據了排序過后最小的兩位橫坐標或者是最大的兩位橫坐標,那么兩個矩形沒有相交部分,②如果某一個矩形的對角線頂點縱坐標占據了排序過后最小的兩位縱坐標或者是最大的兩位縱坐標,那么兩個矩形同樣沒有相交部分,
(3)存在相交部分的面積為排序過后( x[1] - x[2] )*( y[1] - y[2] ) (想象圖形即可得出此結果)
參考代碼
#include <stdio.h>
double text(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){
double x[4];//存盤橫坐標排序
double y[4];//存盤縱坐標排序
double temp=0.0,s=0.0;
x[0]=x1;x[1]=x2;x[2]=x3;x[3]=x4;//將橫坐標和縱坐標分別放進x[4]和y[4]陣列中
y[0]=y1;y[1]=y2;y[2]=y3;y[3]=y4;
for (int i = 0; i < 3; i++)
{
for (int j = i+1; j < 4; j++)//這里采用降序排序
{
if (x[i] < x[j])//對橫坐標進行排序
{
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
if (y[i] < y[j])//對縱坐標進行排序
{
temp = y[i];
y[i] = y[j];
y[j] = temp;
}
}
}
if (x1 ==x[0] && x2 == x[1])//橫坐標區間沒有重合部分的情況
s = 0.00;
else if(x2 == x[0] && x1 == x[1])
s = 0.00;
else if (x1 == x[2] && x2 == x[3])
s = 0.00;
else if (x1 == x[3] && x2 == x[2])
s = 0.00;
else if (y1 == y[0] && y2 == y[1])//縱坐標區間沒有重合部分的情況
s = 0.00;
else if (y1 == y[2] && y2 == y[3])
s = 0.00;
else if (y1 == y[3] && y2 == y[2])
s = 0.00;
else
s = (x[1] - x[2])*(y[1] - y[2]);//想象一下圖形即得相交部分面積求法
return s;//回傳結果面積
}
int main()
{
double x1, y1, x2, y2, x3, y3, x4, y4, s, tmp = 0.0;
double area[2];
for(int i=0;i<2;i++)
{
scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);
area[i]=text(x1,y1,x2,y2,x3,y3,x4,y4);
}
for(int i=0;i<2;i++){
printf("%.2f\n",area[i]);
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286590.html
標籤:其他
上一篇:【C++】大綱及疑惑點一
下一篇:python 網路編程面試題
