Cylinder Candy ZOJ - 3866 (求定积分)

Cylinder Candy
ZOJ - 3866

 Edward the confectioner is making a new batch of chocolate covered candy. Each candy center is shaped as a cylinder with radius r mm and height h mm.

The candy center needs to be covered with a uniform coat of chocolate. The uniform coat of chocolate is d mm thick.

You are asked to calcualte the volume and the surface of the chocolate covered candy.

Input

There are multiple test cases. The first line of input contains an integer T(1≤ T≤ 1000) indicating the number of test cases. For each test case:

There are three integers r, h, d in one line. (1≤ r, h, d ≤ 100)

Output

For each case, print the volume and surface area of the candy in one line. The relative error should be less than 10-8.

Sample Input

2
1 1 1
1 3 5

Sample Output

32.907950527415 51.155135338077
1141.046818749128 532.235830206285

题意:抽象出来就是求一个圆柱体外面加一层厚度为d的巧克力,求包装完这个立体图形的体积和表面积。

剖析:

以下是包装后的三视图:

这里写图片描述

这里写图片描述

这里写图片描述
所以这道题目的重点就是要求出旋转体的体积和表面积,那么很明显需要用定积分来求,求出后,中间部分就是圆柱形的体积和面积直接可以用公式求得,上下两部分需要用定积分,其推导过程如下:
首先我们需要求旋转体体积和表面积的积分公式如下图:
这里写图片描述
这里写图片描述

这里写图片描述
我们先求旋转体的体积
我们首先可以写出圆的公式

(xr)2+y2=d2 ( x − r ) 2 + y 2 = d 2

所以得到
x=f(y)=d2y2+r x = f ( y ) = d 2 − y 2 + r

由公式
V=πd0x2dy V = π ∫ 0 d x 2 d y
得到
V1=πd0(d2y2+r)2dy V 1 = π ∫ 0 d ( d 2 − y 2 + r ) 2 d y

=πd0(d2y2+r2+2rd2y2)dy = π ∫ 0 d ( d 2 − y 2 + r 2 + 2 r d 2 − y 2 ) d y

=πd3+πr2d13πd3+πd02rd2y2dy = π d 3 + π r 2 d − 1 3 π d 3 + π ∫ 0 d 2 r d 2 − y 2 d y

=πr2d+23πd3+πd02rd2y2dy = π r 2 d + 2 3 π d 3 + π ∫ 0 d 2 r d 2 − y 2 d y

y=dsinθ y = d s i n θ

d0d2y2=π20dcosθddsinθ=π20d2cos2θdθ ∫ 0 d d 2 − y 2 = ∫ 0 π 2 d c o s θ d d s i n θ = ∫ 0 π 2 d 2 c o s 2 θ d θ

=d2π20cos2θ+14d2θ = d 2 ∫ 0 π 2 c o s 2 θ + 1 4 d 2 θ

=d2π0cost+14dt = d 2 ∫ 0 π c o s t + 1 4 d t

=14πd2 = 1 4 π d 2

所以
V1=πr2d+23πd3+14πd2 V 1 = π r 2 d + 2 3 π d 3 + 1 4 π d 2

V2=π(r+d)2h V 2 = π ( r + d ) 2 h

V=2V1+V2 V = 2 V 1 + V 2

下面我们来求旋转体的表面积
同样我们由公式如果曲线方程为
y=f(x) y = f ( x )

绕x轴旋转一周的表面积
S=2πbaf(x)1+f(x)2dx S = 2 π ∫ a b f ( x ) 1 + f ′ ( x ) 2 d x

所以
S1=2πd0(d2y2+r)1+y2d2y2dy S 1 = 2 π ∫ 0 d ( d 2 − y 2 + r ) 1 + y 2 d 2 − y 2 d y

=2πd2+π2dr = 2 π d 2 + π 2 d r

上下两个圆
S2=2πr2 S 2 = 2 π r 2

侧面积
S3=2π(r+d)h S 3 = 2 π ( r + d ) h

S=S1+S2+S3 S = S 1 + S 2 + S 3

然后公式推到出来了,直接照着公式写代码就行了
code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double pi = acos(-1.0);
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        double r,d,h;
        scanf("%lf%lf%lf",&r,&h,&d);
        printf("%.10f ",2.0*(2.0/3.0*pi*d*d*d+pi*r*r*d+1.0/2.0*pi*pi*d*d*r)+pi*(r+d)*(r+d)*h);
        printf("%.10f\n",2.0*(2.0*pi*d*d+pi*pi*d*r)+2.0*pi*r*r+2.0*pi*(r+d)*h);
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值