给定4个点坐标求四面体体积

原创 2011年01月08日 15:37:00

Java语言Codee#16213
01 import java.io.*;
02 import java.util.*;
03 import java.math.*;
04 import java.text.*;
05 //给定四面体4个点,求体积
06 //学习了解了数量积(点积or内积)写作(a,b)运算结果为数字
07 //向量积(叉积or外积)写作[a,b]运算结果为向量
08 //那么混合积为定义三个向量AB,AC,AD,则其混合积为([AB,AC],AD)(这里A,B,C,D是四面体4个点)
09 //其绝对值除6就是四面体体积
10 //(ab与ac的叉积 点积上 ad)是体积的6倍
11 //(ab与ac的叉积的模)是面积的两倍
12 //有个PPT讲解的很不错,有助于了解混合积数学及物理含义
13 //http://wlkc.zzuli.edu.cn/kejianweb/xiandai/2/2-3.ppt
14 public class Main {
15        final static int maxn=4;
16        public static class Point{
17            double x,y,z;
18            
19            Point(){};
20            Point(double xx,double yy,double zz){
21                x=xx;y=yy;z=zz;
22            }
23            void out(){
24                System.out.println(x+" "+y+" "+z);
25            }
26            
27        };
28        
29        public static double Dot(Point p,Point a,Point b){
30             return(a.x-p.x)*(b.x-p.x)+(a.y-p.y)*(b.y-p.y);
31        }//pa与pb的点积 (2维)
32        
33        public static double Cross(Point p,Point a,Point b){
34             return (a.y-p.y)*(b.x-p.x)-(a.x-p.x)*(b.y-p.y);
35        }//pa与pb的叉积(2维)
36        
37        public static double Cross(Point a,Point b){
38             return a.y*b.x-a.x*b.y;
39        }//向量a与b的叉积(2维)
40        
41        public static double Dot(Point a,Point b){
42             return a.x*b.x+a.y*b.y;
43         }//向量a和b的点积(2维)
44        
45        
46        
47        public static double ThreeDot(Point p,Point a,Point b){
48             return(a.x-p.x)*(b.x-p.x)+(a.y-p.y)*(b.y-p.y)+(a.z-p.z)*(b.z-p.z);
49        }//pa与pb的点积 (3维)    
50        
51        
52        public static Point ThreeCross(Point p,Point a,Point b){
53            Point C=new Point();
54            C.x=(a.y-p.y)*(b.z-p.z)-(a.z-p.z)*(b.y-p.y);
55            C.y=(a.z-p.z)*(b.x-p.x)-(a.x-p.x)*(b.z-p.z);
56            C.z=(a.x-p.x)*(b.y-p.y)-(a.y-p.y)*(b.x-p.x);
57            return C;
58        }//pa与pb的叉积(3维)
59        
60        public static double ThreeDot(Point a,Point b){
61             return a.x*b.x+a.y*b.y+a.z*b.z;
62        }//向量a与b的点积 (3维)
63        
64        public static Point ThreeCross(Point a,Point b){
65            Point C=new Point();
66            C.x=a.y*b.z-a.z*b.y;
67            C.y=a.z*b.x-a.x*b.z;
68            C.z=a.x*b.y-a.y*b.x;
69            return C;
70        }//向量a与b的叉积(3维)
71        
72        public static double TetrahedronArea(Point a,Point b,Point c,Point d){
73            double ans=Math.abs(ThreeDot(ThreeCross(a,b,c),
74                    new Point(d.x-a.x,d.y-a.y,d.z-a.z)))/6;
75            return ans;
76        }
77        
78        public static Point p[]=new Point[maxn];
79        
80        public static void main(String args[]){
81            Scanner in=new Scanner(System.in);
82                     
83            int test=in.nextInt();
84            for(int caseid=1;caseid<=test;caseid++){
85                for(int i=0;i<maxn;i++){
86                    double x=in.nextDouble();
87                    double y=in.nextDouble();
88                    double z=in.nextDouble();
89                    p[i]=new Point(x,y,z);
90                }
91                   
92                
93                DecimalFormat g=new DecimalFormat("0.000");
94                System.out.println("Case #"+caseid+": "+
95                        g.format(TetrahedronArea(p[0],p[1],p[2],p[3])));
96            }
97        }
98 }

相关文章推荐

计算四面体体积

 已知四面体顶点坐标分别为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),(x4,y4,z4),可以通过如下两种方法求四面体体积:1. 利用向量的混和积     过一顶点的三向量设为...

C# 8中基本数据类型的可空值类型

C# 8中基本数据类型除了 string 外,int、long、float、double、decimal、Char、bool都可以声明为可空类型,且在方法中使用时也没有可空值类型必须在非可空值类型后面...

vs 中大括号之间垂直虚线显示

   在使用Vs2012或者Vs2010编写代码时,虽然可以使用快捷键Ctrl+E+D(编排整个文档)来使代码对齐,但在编写有大量代码的时候,就有些混乱了。当然了,如果你的记忆力非常好,写...
  • minsenwu
  • minsenwu
  • 2014年10月22日 21:23
  • 14688

用opencv计算棋盘格内角点坐标(通过4个内角点获得转换矩阵),并同时用halcon和opnecv对图像进行透视变换

该篇和上篇的主要区别是选取4个内角点而不是全部内角点计算转换矩阵,程序改变不大,主要是想看一下两者之间矫正结果有什么区别。// projectivetest.cpp : 定义控制台应用程序的入口点。 ...

求四面体体积

  • 2011年11月18日 23:53
  • 440B
  • 下载

hdu1411 校庆神秘建筑(求四面体体积)

Problem Description 杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑...

hdu1411知六边长求四面体体积

欧拉四面体问题 Euler's Tetrahedron Problem 以六条棱表示四面体的体积. 涉及的知识点 知识点一: 矢量的数量积 知识点二: 矢量的向量积 用六条棱长表示的四面体...

POJ 2208 已知空间四面体六条边长度,求体积

Pyramids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2718   Accep...

HDU 1141 校庆神秘建筑 知六边长求四面体体积

欧拉四面体问题 Euler's Tetrahedron Problem 以六条棱表示四面体的体积. 涉及的知识点 知识点一: 矢量的数量积 知识点二: 矢量的向量积 用六条棱长表示的四面体体积公式 内...

HDU1411求四面体体积

欧拉体积公式: /*************************************************** 方法一: 欧拉体积公式用行列式求,见上图; ***********...
  • Jarily
  • Jarily
  • 2012年12月25日 19:25
  • 824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给定4个点坐标求四面体体积
举报原因:
原因补充:

(最多只允许输入30个字)