【欧拉体积公式及行列式】AC总在数十WA后——POJ 2208

这个题是个公式推导题。已知四面体的六条边,求四面体体积。

在计算几何的模板中发现欧拉公式,可以计算任意四面体的体积,知道3个点坐标和3个COS值即可。而题目是知道6条边,所以需要进行推导转化,通过线性代数知识变成行列式

(注意输入顺序是AB,AC,AD,BC,BD,CD,这一点挖了十次左右。。另外,推导过程中的matix[2][0]发生了错误,应为:(p^2+r^2-m^2)/2,这一点上WA了5次):


AC代码,HDU上有一道完全一样的题,买一送一。线性代数很重要啊!!!

#include <iostream>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;

double matix[3][3];

double calmatix()
{
	return (matix[0][0]*matix[1][1]*matix[2][2])
			+(matix[0][1]*matix[1][2]*matix[2][0])
			+(matix[0][2]*matix[1][0]*matix[2][1])
			-(matix[0][2]*matix[1][1]*matix[2][0])
			-(matix[0][1]*matix[1][0]*matix[2][2])
			-(matix[0][0]*matix[1][2]*matix[2][1]);
}


void changenum(double l,double m,double n,double p,double q,double r)
{
	matix[0][0]=p*p;
	matix[0][1]=(p*p+q*q-n*n)/2.0;
	matix[0][2]=(p*p+r*r-m*m)/2.0;
	matix[1][0]=(p*p+q*q-n*n)/2.0;
	matix[1][1]=q*q;
	matix[1][2]=(q*q+r*r-l*l)/2.0;
	
	matix[2][0]=(p*p+r*r-m*m)/2.0;
	
	matix[2][1]=(q*q+r*r-l*l)/2.0;
	matix[2][2]=r*r;
	
}



int main()
{
	double p,q,r,l,m,n;
	while(cin>>n>>m>>p>>l>>q>>r)
	{
		changenum(l,m,n,p,q,r);  //狗日的顺序太恶心了!! 
		
		double result;
		double temp=calmatix();
		if(temp<0)
		{
			temp=abs(temp);
		}
		
		temp=sqrt(temp);
		result=temp/6.0;
		
		
		cout<<setiosflags(ios::fixed)<<setprecision(4)<<result<<endl;
	}
	
	return 0;
}
最后附录尸体一张…………………………虽百WA其犹未悔……ORZ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值