给定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 }

四面体体积求法

四面体(三棱锥)体积 : 设 有: 不过这是有向的。如果知道那四个顶点,用这个公式即可求出体积。 如果不知道四点仅知道6条边长,就得用下面的方法——欧拉四面体公式 写成行列式...
  • theArcticOcean
  • theArcticOcean
  • 2016年02月02日 14:23
  • 1249

奥数题-求空间4点构成的四面体体积

今天闲逛百度,看到这样一个奥数题 空间中有一点“K”。从K放射出四条线段 KA、 KB、 KC、 KD 。已知 KA=3米 KB=4米 KC=5米 KD=6米。问:四面体ABCD体积的最大值是多少?...
  • mamihong
  • mamihong
  • 2017年11月12日 17:56
  • 280

matlab 四面体体积

计算方法:已知四面体顶点坐标分别为 (x1,y1,z1), (x2,y2,z2), (x3,y3,z3), (x4,y4,z4), 可以通过如下两种方法求四面体体积:1. 利用向量...
  • sss_369
  • sss_369
  • 2017年03月04日 16:06
  • 875

计算四面体体积

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

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

Java语言: Codee#1621301 import java.io.*;02 import java.util.*;03 import java.math.*;04 import java.te...
  • foreverlin1204
  • foreverlin1204
  • 2011年01月08日 15:37
  • 2843

球坐标

球坐标系[编辑] (重定向自球坐标系) 用球坐标  来表示一个点的位置 在数学里,球坐标系(英语:Spherical coordinate s...
  • hgl0417
  • hgl0417
  • 2014年05月02日 23:13
  • 1205

hdu1411知六边长求四面体体积

欧拉四面体问题 Euler's Tetrahedron Problem 以六条棱表示四面体的体积. 涉及的知识点 知识点一: 矢量的数量积 知识点二: 矢量的向量积 用六条棱长表示的四面体...
  • u013187393
  • u013187393
  • 2015年01月22日 18:48
  • 741

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

Pyramids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2718   Accep...
  • u012358934
  • u012358934
  • 2014年05月09日 21:39
  • 983

三维几何,四面体(压纸器,LA 4795)

学会了求四面体重心的公式和算法。 注意讨论清楚四点共面的情况。 最后是求芯片到底的距离而不是重心到底的距离。。。 理解题意是你的硬伤哎。。其实就是没有用心看,用心想,总是胡乱看一遍然后自...
  • xl2015190026
  • xl2015190026
  • 2017年02月06日 21:08
  • 203

数组数据所成柱形图,求体积

如图,输入数组a[]={3,1,0,4,3,6,2,1,3,1,5,1},求出阴影部分的体积,假设底面积为1,高度单位也为1;如下图的体积为28. //求体积 int vol(int *a,int ...
  • u012164081
  • u012164081
  • 2015年08月12日 10:48
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给定4个点坐标求四面体体积
举报原因:
原因补充:

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