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

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

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 }

标签:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值