【HDU 5733】tetrahedron
输入4个点三维坐标,如果是六面体,则输出内切球的球心坐标和半径。
点pi对面的面积为si,点a,b,c组成的面积=|ab叉乘ac|/2。
内心为a,公式:
s0=s1+s2+s3+s4
a.x=∑si*pi.x/s0
a.y=∑si*pi.y/s0
a.z=∑si*pi.z/s0
n为p1、p2、p3的法向量,n=p1p2叉乘p1p3
半径=p1a点乘n/|n|
#include <cstdio>
#include <cmath>
#define dd double
struct point{
dd x,y,z;
int input(){
return scanf("%lf%lf%lf",&x,&y,&z);
}
point operator -(const point &b) const
{
return (point){x-b.x,y-b.y,z-b.z};
}
dd operator *(const point &b)const
{
return x*b.x+y*b.y+z*b.z;
}
point operator ^(const point &b)const
{
return (point){y*b.z-b.y*z,b.x*z-x*b.z,x*b.y-b.x*y};
}
}p[];
dd sqr(dd x){
return x*x;
}
dd area(const point &o,const point &s,const point &e,point &n){
point a=s-o,b=e-o;
n=a^b;
return sqrt(sqr(n.x)+sqr(n.y)+sqr(n.z))/;
}
int main() {
while(~p[].input()){
for(int i=;i<=;i++)
p[i].input();
dd s[];
point n,l=p[]-p[];;
s[]=area(p[],p[],p[],n);
if(l*n==){
puts("O O O O");
continue;
}
s[]=area(p[],p[],p[],n);
s[]=area(p[],p[],p[],n);
s[]=area(p[],p[],p[],n);
dd x=,y=,z=,down=;
for(int i=;i<=;i++){
down+=s[i];
x+=s[i]*p[i].x;
y+=s[i]*p[i].y;
z+=s[i]*p[i].z;
}
point a=(point){x/down,y/down,z/down};
point b=a-p[];
dd r=fabs(b*n)/s[]/;
printf("%.4f %.4f %.4f %.4f\n",a.x,a.y,a.z,r);
}
}
【HDU 5733】tetrahedron的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- JS常用方法函数整理
1.document.write("");为输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...
- 作业——FoodTracker程序
作业及学习地址:https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSw ...
- Java—Servlet开发
Servlet API中有4个java包: javax.servlet:包含定义Servlet与Servlet容器之间契约的类与接口. javax.servlet.http:包含定义HTTPServl ...
- Oracle round函数是什么意思?怎么运用?
如何使用 Oracle Round 函数 (四舍五入) 描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果. SELECT ROUND( number, [ decimal_p ...
- Android 中布局设置导致的TextView不显示的问题
将TextView放入TableLayout中,设置TextView的Layout Witdh/Layout Height 为Wrap Content或其他大小,导致TextView内容无法显示,改为 ...
- linux可靠信号和非可靠信号测试样例
不可靠信号(在执行自定义函数其间会丢失同类信号) 可靠信号(在执行自定义函数其间不会丢失同类信号) 不可靠信号用一次以后,就恢复其默认处理吗? 至少在ubuntu 12.04上,已经是一次绑定,永远使 ...
- 表单 - Validatebox - 表单参数校验
$("input[name='username']").validatebox({ required: true,//必填 validType:'email'//要求用户名必须是一 ...
- Castle.ActiveRecord 多对多关系 引发的错误处理
在Castle.ActiveRecord 实体类中,如果两个对象有 “多对多” 关系,一般的做法是将其分解为 两个“一对多”关系,但有时引发了 “您要删除 或 引用 的对象#2在数据库中不存在”的异常 ...
- Linux Linux程序练习十四(多进程压力测试)
/* * 题目: * 编程一个基本多进程测试框架,提示用户输入进程数.和每个进程数运行圈数.(fork) * 进行多进程压力测试.(execve) * 要求父进程能监控所有子进程的退出,避免僵尸进程. ...
- 关于onbeforeunload的一些想法
页面在关闭前会有onbeforeUnload事件,来询问用户是否要关闭这个页面OR选项卡 浏览器的F5刷新为按下F5----onbeforeUnload----onunload----onload; ...