计算两个球体的体积交
double Pi = 3.1415926535;
class Sphere //属性分别为:(x,y,z)三个坐标以及半径
{
private:
double m_x;
double m_y;
double m_z;
double m_r;
public:
Sphere() :m_x(0), m_y(0), m_z(0), m_r(0)
{
}
Sphere(double x, double y, double z, double r) :m_x(x), m_y(y), m_z(z), m_r(r)
{
}
bool intersect(Sphere& o);
double vol_ints(Sphere& o);
double distance(Sphere& o);
};
bool Sphere::intersect(Sphere& o)
{
if (m_x == o.m_x && m_y == o.m_y && m_z == o.m_z)
return true;
else
{
double dis = distance(o);
if ((m_r + o.m_r) * (m_r + o.m_r) > dis)
return true;
else
return false;
}
}
double Sphere::distance(Sphere& o)
{
return (m_x - o.m_x) * (m_x - o.m_x) + (m_y - o.m_y) * (m_y - o.m_y) + (m_z - o.m_z) * (m_z - o.m_z);
}
double Sphere::vol_ints(Sphere& o)
{
if (!intersect(o))
return 0;
else
{
double dis = sqrt(distance(o));
double max = m_r > o.m_r ? m_r : o.m_r;
double min = m_r > o.m_r ? o.m_r : m_r;
if (dis + min <= max)
return 4.0 * Pi * pow(min, 3) / 3.0;
else
{
double cos_a = (max * max + dis * dis - min * min) / (2 * max * dis);
double cos_b = (min * min + dis * dis - max * max) / (2 * min * dis);
double h_a = max * (1 - cos_a);
double h_b = min * (1 - cos_b);
return (Pi / 3) * (3 * max - h_a) * h_a * h_a + (Pi / 3) * (3 * min - h_b) * h_b * h_b;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话