- 浏览: 66233 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
monkeyVon:
感谢楼主分享~不过有个地方有点错误,majorityCnt(c ...
《机器学习实战》3:决策树 -
liu765023051:
很好,感谢楼主分享了。
2013年11月15日-DWR的工作原理
1、假设有一个四面体,四个顶点定义:
V1 = (x1, y1, z1)
V2 = (x2, y2, z2)
V3 = (x3, y3, z3)
V4 = (x4, y4, z4)
要检测的点定义为:P = (x, y, z)
可以根据这些点组成的4个行列式来进行判断:
D0
|x1 y1 z1 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D1
|x y z 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D2
|x1 y1 z1 1|
|x y z 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D3
|x1 y1 z1 1|
|x2 y2 z2 1|
|x y z 1|
|x4 y4 z4 1|
D4
|x1 y1 z1 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x y z 1|
判据:
如果Di (i=1,2,3,4)与D0的符号都相同,即同为正,或同为负,那么P点就在四面体内部;
否则P点在四面体外部。
2、算法的Java实现:
3、上面判断了点是否在多面体内,以来上面的程序,就可以进行点与长方体关系的判断。
算法原理:
(1)首先将长方体划分为四面体(每个长方体划分为5个四面体)
(2)分别判断点与以上四面体的关系,只有点不在任意一个四面体时,表示点不在长方体内。
程序实现如下:
V1 = (x1, y1, z1)
V2 = (x2, y2, z2)
V3 = (x3, y3, z3)
V4 = (x4, y4, z4)
要检测的点定义为:P = (x, y, z)
可以根据这些点组成的4个行列式来进行判断:
D0
|x1 y1 z1 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D1
|x y z 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D2
|x1 y1 z1 1|
|x y z 1|
|x3 y3 z3 1|
|x4 y4 z4 1|
D3
|x1 y1 z1 1|
|x2 y2 z2 1|
|x y z 1|
|x4 y4 z4 1|
D4
|x1 y1 z1 1|
|x2 y2 z2 1|
|x3 y3 z3 1|
|x y z 1|
判据:
如果Di (i=1,2,3,4)与D0的符号都相同,即同为正,或同为负,那么P点就在四面体内部;
否则P点在四面体外部。
2、算法的Java实现:
/** * 判断点是否在四面体内 * * @param point * 含有三个元素的数组,表示点的坐标 * @param box * 4X3的二维数组,四面体四个顶点的坐标 * @return */ static boolean pointInTetrahedron(double[] point, double[][] box) { // 标志点是否在四面体内 boolean flag = true; // 扩展四面体矩阵,最后增加一列,数值全为1 double[][] ts = new double[4][4]; for (int j = 0; j < ts.length; j++) { for (int j2 = 0; j2 < ts.length - 1; j2++) { ts[j][j2] = box[j][j2]; } ts[j][3] = 1; } // 查看扩展后的矩阵 System.out.println("扩展的四面体为:"); for (int i = 0; i < ts.length; i++) { for (int j = 0; j < ts.length; j++) { System.out.print(ts[i][j] + " "); } System.out.println(); } // 用点的坐标分别替换四面体的点坐标,得到新的矩阵 for (int i = 0; i < ts.length; i++) { // 数组的深度拷贝 // 注意:对于一维数组可以直接使用clone()进行复制, //但是对于二维数组必须对每一行进行深度复制才行 double[][] ti = new double[ts.length][ts[0].length]; for (int j = 0; j < ts.length; j++) { ti[j] = ts[j].clone(); } // 点坐标替换四面体的点坐标 ti[i][0] = point[0]; ti[i][1] = point[1]; ti[i][2] = point[2]; // 输出新的矩阵 System.out.println("替换的四面体为:"); for (int im = 0; im < ts.length; im++) { for (int j = 0; j < ts.length; j++) { System.out.print(ti[im][j] + " "); } System.out.println(); } // 如果点坐标替换之后的矩阵与原四面体矩阵两者符号不同,P点不在四面体内 if (determinant(ts) * determinant(ti) < 0) { flag = false; break; } } return flag; }
3、上面判断了点是否在多面体内,以来上面的程序,就可以进行点与长方体关系的判断。
算法原理:
(1)首先将长方体划分为四面体(每个长方体划分为5个四面体)
(2)分别判断点与以上四面体的关系,只有点不在任意一个四面体时,表示点不在长方体内。
程序实现如下:
/** * 判断点是否在长方体内 * 首先将长方体划为5个四面体,分别判断点是否在这几个四面体内 * 如果这个点在任何一个四面体内部,那么这个点就在这个多面体内部; * 如果这个点不在任何一个四面体内部,那么这个点就不在这个多面体内部。 * @param point 点的坐标 * @param box 长方体的三个基矢 * @return */ public static boolean pointInBox(double[] point,double[][] box){ //标志点是否在长方体内,true表示点在长方体内,false不在 boolean flag=true; //将长方体划分为五个四面体 double[][] t0={{box[0][0],box[0][1],box[0][2]}, {box[2][0],box[2][1],box[2][2]}, {box[2][0]+box[0][0],box[2][1]+box[0][1],box[2][2]+box[0][2]}, {box[0][0]+box[1][0]+box[2][0],box[0][1]+box[1][1]+box[2][1],box[0][2]+box[1][2]+box[2][2]}}; double[][] t1={{box[0][0],box[0][1],box[0][2]}, {box[1][0],box[1][1],box[1][2]}, {box[2][0],box[2][1],box[2][2]}, {box[0][0]+box[1][0]+box[2][0],box[0][1]+box[1][1]+box[2][1],box[0][2]+box[1][2]+box[2][2]}}; double[][] t2={{box[0][0],box[0][1],box[0][2]}, {box[1][0],box[1][1],box[1][2]}, {box[0][0]+box[1][0],box[0][1]+box[1][1],box[0][2]+box[1][2]}, {box[0][0]+box[1][0]+box[2][0],box[0][1]+box[1][1]+box[2][1],box[0][2]+box[1][2]+box[2][2]}}; double[][] t3={{box[2][0],box[2][1],box[2][2]}, {box[1][0],box[1][1],box[1][2]}, {box[2][0]+box[1][0],box[2][1]+box[1][1],box[2][2]+box[1][2]}, {box[0][0]+box[1][0]+box[2][0],box[0][1]+box[1][1]+box[2][1],box[0][2]+box[1][2]+box[2][2]}}; double[][] t4={{0,0,0}, {box[0][0],box[0][1],box[0][2]}, {box[1][0],box[1][1],box[1][2]}, {box[2][0],box[2][1],box[2][2]}}; //点不在任意一个四面体内,说明点不在该长方体内 boolean f1=pointInTetrahedron(point, t0); boolean f2=pointInTetrahedron(point, t1); boolean f3=pointInTetrahedron(point, t2); boolean f4=pointInTetrahedron(point, t3); boolean f5=pointInTetrahedron(point, t4); System.out.println(f1+" "+f2+" "+f3+" "+f4+" "+f5); if(!pointInTetrahedron(point, t0)&&!pointInTetrahedron(point, t1)&& !pointInTetrahedron(point, t2)&&!pointInTetrahedron(point, t3)&& !pointInTetrahedron(point, t4)){ flag=false; } return flag; }
发表评论
-
Java内存模型笔记(一)
2017-02-17 14:05 0JVM内存模型:主内存和线程独立的工作内存 Java内存 ... -
Java面试题系列1
2015-01-22 22:02 0第一部分 JVM 和 内存模式 垃圾回收 第二部分 数据 ... -
面试中会问到的Java基础问题
2014-05-15 23:01 01 String/StringBuilder/StringBu ... -
java 求矩阵乘法及行列式的值
2014-03-10 11:19 5622最近用到矩阵的数学计算,写了两个简单的程序,贴在这里: 1、 ... -
养成良好的开发习惯(Java)
2014-03-05 10:13 01、使用Eclipse中的注释模板 打开Eclipse,有 ... -
Java设计模式——策略模式
2014-03-02 00:20 637《Thinking in Java》看了一大部分,发现其 ... -
Java学习笔记——数组
2014-01-05 12:56 651现在已经很少用到 ... -
Java学习笔记——持有对象
2013-12-14 16:53 663通常,在程序运行之前是不知道所需对象的类型及数量的,为解决 ... -
Java学习笔记——多态、接口、内部类
2013-12-08 23:31 546大部分内容都是摘自《Thinking in Java》 ... -
Java学习笔记——复用类
2013-12-02 23:50 869Java中实现代码复用的两 ... -
log4j的用法
2013-12-03 10:06 749在调试程序中最常用的 ... -
Java学习笔记——初始化和清理
2013-11-24 14:13 6841.构造器 (1)默认构造器:Java同样采用构造器的方式保 ... -
JAVA Runtime 调用第三方应用
2013-11-26 13:43 1572有些时候我们需要在Java程序中调用一些exe程序或是脚本 ... -
Java学习笔记——操作符
2013-11-20 23:06 698操作符对所有编程 ... -
ArrayList 的复制
2013-11-18 10:28 837今天在使用ArrayList的时候遇到一个问题,搞了 ...
相关推荐
迈向高级的Java面试突围课,完整版10章,2021年最新课程,本课采用大厂多轮面试形式贯穿主线,内容涵盖Java中高级面试的必考点、高频点、加薪点。同时融合讲师多年阿里字节考官经验,通过真实模拟不同面试场景,将...
已知四面体顶点坐标,求四面体内切圆圆心坐标的Matlab程序!
混凝土四面六边透水框架群技术在河道整治、护岸及抢险中的应用,徐国宾,张耀哲, 混凝土四面六边透水框架是一种新型江河护岸工程技术。通过室内试验,研究了四面六边透水框架淤滩固脚护岸的可行性,以及透水�
//四条斜靠在坐标轴四面上的直线,沿轴移动,形成星形图案。 //平移、放缩、旋转、正平行投影(三视图)、一点透视投影在一起 //一点透视,没有平移 //一点透视,加入平移,画一个立方体。。 //深度缓冲区算法的...
这里面有大量人物行走图给大家分享下。(我也是在东方网找的,感谢那位乐于分享的童鞋,嘻嘻。)
可执行文件 实现 立方体 正四面体绘制与贴图 显示在不同视点下 的观测结果
在四面体内,Bernstein-Bézier(B-B)形式定义两类正则实多项式代数曲面片,一类是二次的,一类是三次的。此两类曲面片在四面体内的交集为一条正则曲线段。先固定二次曲面片,并得到其参数形式,然后约简三次曲面片...
材料行业四面刨车间四面刨组长岗位说明书.doc
心怀感恩,四面春风
行业分类-外包设计-四面立体包装体及四面立体包装方法的说明分析.rar
非公经济四面开花.docx
四面刨安全操作规程.pdf
初中语文文摘社会四面看庄子
大学英语四级语法四面看.docx
材料行业四面刨车间工艺流程.ppt
2019全国卷高考语文备考策略与建议 兼谈高考语文改革方向 第一部分高考语文改革的几个重要变化 1.总方针立德树人与一点四面 立德树人十八大报告中国家第一次把立德树人作为教育的根本任务明确地提了出来十
约克空调室内机 四面出风卡式机规格书
电子政务-四面排热风电暖炉.zip
吉利新能源车“四面”出击.pdf