Journal Third
两球问题
先放一下题目:
这种比较长的题看一遍我貌似都没法懂他是想干什么,就相当于看了一下故事hhh。
–
其实也就是一个数学问题啦,数学模型就是两个球体相交的情况下,求体积与表面积之和,可以说没有太大难度吧,关键就是找数学公式。然后知道了球冠与球缺的概念。以及球缺的表面积与体积的公式。
球冠:
先上一下公式:
球缺表面积:
球缺体积:
两球相交时球缺的高度:
然后是代码:
// 球体问题.cpp : 计算两球相交后的总体积与表面积
//Ste-Made
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<math.h>
#define Pi 2*acos(0)
int pairs;
double r1, r2;//两球半径
double d;//球心距离
double dest;//密度
double mass;
double to_vo;
double to_su;
double h1, h2;
void Input(void);
void Judge(double v);//判断上浮或下沉
void Output(double v, double s);
double scap_volume(double R,double H);//计算体积
double scap_surface(double R,double H);//计算表面积
int main()
{
scanf("%d", &pairs);
while (pairs)
{
Input();
h1 = r1 + (pow(r1, 2) - pow(r2, 2) + pow(d, 2)) / (2.0 * d);
h2 = r2 + (pow(r2, 2) - pow(r1, 2) + pow(d, 2)) / (2.0 * d);
to_vo = scap_volume(r1,h1) + scap_volume(r2,h2);
to_su = scap_surface(r1,h1) + scap_surface(r2,h2);
Output(to_vo, to_su);
Judge(to_vo);
pairs--;
}
return 0;
}
void Input(void)
{
scanf("%lf%lf%lf%lf%lf", &r1, &r2, &d, &mass, &dest);
}
void Output(double v, double s)
{
printf("%.4f %.4f\n", v, s);
}
void Judge(double v)
{
double dest_scap = mass / v;
if (dest > dest_scap)
{
printf("The Paired-Sphere Floats.\n");
}
else
printf("The Paired-Sphere Sinks.\n");
}
double scap_volume(double R, double H)
{
return Pi * pow(H, 2) * (R - H / 3);
}
double scap_surface(double R, double H)
{
return 2 * Pi * R * H ;
}
哦对了,然后发现用float类型和double类型最后所得的结果是不一样的。以后有时间会写一篇专门学习一下两者的区别的嘻嘻
然后是第一次用2*acos(0)函数来表示Pi的值。