文章目录
- 一、Problem Discription
- 二、Sample Input and Sample Output
- 三、数学分析与推导计算
- 四、编码计算求解
一、Problem Discription
二、Sample Input and Sample Output
三、数学分析与推导计算
1. 根据抛物线顶点坐标 P 1 ( x 1 , y 1 ) P_1(x_1, y_1) P1(x1,y1)以及另一个点的坐标 P 2 ( x 2 , y 2 ) P_2(x_2, y_2) P2(x2,y2),求出抛物线方程
顶点坐标为(b, c)的顶点式抛物线方程式如下
y
=
a
(
x
−
b
)
2
+
c
y=a(x-b)^2+c
y=a(x−b)2+c
此处顶点坐标为
P
1
(
x
1
,
y
1
)
P_1(x_1, y_1)
P1(x1,y1),可得
b
=
x
1
b=x_1
b=x1,
c
=
y
1
c=y_1
c=y1.
因此
y
=
a
(
x
−
x
1
)
2
+
y
1
y=a(x-x_1)^2+y_1
y=a(x−x1)2+y1
再代入
P
2
(
x
2
,
y
2
)
P_2(x_2, y_2)
P2(x2,y2),得到
a
=
(
y
2
−
y
1
)
(
x
2
−
x
1
)
2
a=\frac {(y_2 - y_1)} {(x_2 - x_1)^2}
a=(x2−x1)2(y2−y1)
2. 根据直线上两点坐标 P 2 ( x 2 , y 2 ) P_2(x_2, y_2) P2(x2,y2)、 P 3 ( x 3 , y 3 ) P_3(x_3, y_3) P3(x3,y3),求出直线方程(直线的斜率和截距方程)
k
=
y
3
−
y
2
x
3
−
x
2
k=\frac{y_3 - y_2}{x_3 - x_2}
k=x3−x2y3−y2
因此
y
=
k
x
+
d
y=kx+d
y=kx+d
再代入
P
2
(
x
2
,
y
2
)
P_2(x_2, y_2)
P2(x2,y2),得到
d
=
y
2
−
k
x
2
d=y_2 - kx_2
d=y2−kx2
3. 根据求出的直线方程和抛物线方程,以及直线和抛物线交点坐标,用积分求阴影部分的面积
以
(
a
(
x
−
b
)
2
+
c
−
(
k
x
+
d
)
)
d
x
( a(x-b)^2+c - (kx+d))dx
(a(x−b)2+c−(kx+d))dx为被积表达式,在闭区间
[
x
2
,
x
3
]
[x_2,x_3]
[x2,x3]上作定积分,便可得所求阴影部分的面积。
A
=
∫
x
2
x
3
(
a
(
x
−
b
)
2
+
c
−
(
k
x
+
d
)
)
d
x
A=\int_{x_2}^{x_3} ( a(x-b)^2+c - (kx+d))dx
A=∫x2x3(a(x−b)2+c−(kx+d))dx
A
=
[
1
3
a
x
3
−
1
2
(
2
a
b
+
k
)
x
2
+
(
a
b
2
+
c
−
d
)
x
]
x
2
x
3
A=\Big[\frac {1} {3} ax^3 - \frac {1} {2} (2ab+k)x^2 + (ab^2+c-d)x\Big]_{x_2} ^{x_3}
A=[31ax3−21(2ab+k)x2+(ab2+c−d)x]x2x3
四、编码计算求解
代码如下(参考)
#include <iostream>
#include <iomanip>
using namespace std;
double a, b, c, k, d;
// y=a(x-b)^2+c
// y=kx+d
double integral(double x) {
return a*x*x*x/3.0 - (2*a*b+k)*x*x/2.0 + (a*b*b+c-d)*x;
}
int main() {
double x1, y1, x2, y2, x3, y3;
int t;
cin >> t;
for(int i=0; i<t; i++){
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> x3 >> y3;
b = x1;
c = y1;
a = (y2-y1)/((x2-x1)*(x2-x1));
k = (y3-y2)/(x3-x2);
d = y2-k*x2;
double ans = integral(x3) - integral(x2);
//printf("%.2lf\n", ans);
cout << fixed << setprecision(2) << ans << endl;
}
return 0;
}
测试如下
2
5.00 5.00
0.00 0.00
10.00 0.00
33.33
10.00 10.00
1.00 1.00
14.00 8.222222
40.69