资源简介

采用java实现基于二次误差度量的网格简化算法;主要使用了java的集合框架中的treeSet

资源截图

代码片段和文件信息

package MeshSimpliefication_QuadErr;

import java.util.ArrayList;
import java.util.TreeSet;

import javax.vecmath.Matrix3d;
import javax.vecmath.Point3d;
import javax.vecmath.SingularMatrixException;

public class EdgeWithCost implements Comparable {
int v1ind v2ind;// 边的两个顶点的索引
double cost;//边的折叠损耗
Point3d v;//边折叠后的新的顶点的坐标
private static double co = 1;

/**
 * @param v1ind 边的两个顶点的索引
 * @param v2ind 边的两个顶点的索引
 */
public EdgeWithCost(int v1ind int v2ind) {
super();
this.v1ind = v1ind;
this.v2ind = v2ind;
}

/**仅用于测试
 * @param v1ind 边的两个顶点的索引
 * @param v2ind 边的两个顶点的索引
 * @param cost 损耗
 */
public EdgeWithCost(int v1ind int v2ind double cost) {
super();
this.v1ind = v1ind;
this.v2ind = v2ind;
this.cost = cost;
}

/**更改其中的一个顶点的索引
 * @param vOldInd 旧的顶点索引
 * @param vNewInd 新的顶点索引
 */
public void setVertex(int vOldInd int vNewInd) {
if (v1ind == vOldInd)
v1ind = vNewInd;
if (v2ind == vOldInd)
v2ind = vNewInd;
}

/**
 * @param vInd 该边的一个顶点索引
 * @return 该边的另一个顶点索引
 */
public int getOtherVertex(int vInd) {
if (v1ind == vInd)
return v2ind;
if (v2ind == vInd)
return v1ind;
return -1;
}

/**
 * @param vInd 该边的一个顶点索引
 * @return 该顶点索引是否为较小的一个
 */
public boolean isSmallVertexIndex(int vInd) {
if (v1ind == vInd)
return vInd < v2ind;
if (v2ind == vInd)
return vInd < v1ind;
return false;

}

/**计算该边的折叠损耗即新的顶点值
 * @param vList 所有顶点的列表
 */
void cal_v_cost(ArrayList vList) {
VertexComplicated vc1 = vList.get(v1ind);
VertexComplicated vc2 = vList.get(v2ind);
Matrix3d A = new Matrix3d(vc1.Q);
A.add(vc2.Q);

Point3d b1 = VecOp.mulMatrix3d_vec3d(vc1.Q vc1.vertex);// 因为Q为对称矩阵
Point3d b2 = VecOp.mulMatrix3d_vec3d(vc2.Q vc2.vertex);
double c = VecOp.dotProduct(vc1.vertex b1) + VecOp.dotProduct(vc2.vertex b2);

b1.add(b2);// b1 现在等于b
try {
A.invert();// A现在等于A的逆
} catch (SingularMatrixException e) {
// A不可逆,采用(v1+v2)/2作为新顶点
v = new Point3d(new double[] { (vc1.vertex.x + vc2.vertex.x) / 2
(vc1.vertex.y + vc2.vertex.y) / 2 (vc1.vertex.z + vc2.vertex.z) / 2 });
Point3d t = VecOp.mulMatrix3d_vec3d(A v);
cost = VecOp.dotProduct(v t) + c - 2 * VecOp.dotProduct(b1 v) + co
* (vc1.errorPairContraction + vc2.errorPairContraction);
System.err.println(“A 不可逆“);
return;
}
v = VecOp.mulMatrix3d_vec3d(A b1); // 即A的逆乘以b
cost = c - VecOp.dotProduct(b1 v) + co
* (vc1.errorPairContraction + vc2.errorPairContraction);// 因为Q为对称矩阵
// System.out.print(“(“+v1+“ “+v2+“);“);
// System.out.print(“cost=“+cost);
// System.out.println(“   contracted point=“+v);
}

/**
 * @return 较小的顶点索引
 */
public int getSmallVertex() {
return v1ind < v2ind ? v1ind : v2ind;
}

/**
 * @return 较大的顶点索引
 */
public int getBigVertex() {
return v1ind > v2ind ? v1ind : v2ind;
}

/* 将损耗作为第一键值,将另外

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      22139  2009-12-26 14:14  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\bunny_icon.jpg

     文件      29718  2009-12-26 17:12  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\MeshSimplifier_version1.jar

     文件      36434  2010-01-01 13:06  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\MeshSimplifier_version2.jar

     文件     318956  2010-01-01 13:06  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\MeshSimplify_lib\vecmath.jar

     文件     122812  2009-07-12 10:51  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\models\dinosaur.2k.obj

     文件         43  2009-12-26 21:57  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\readme.txt

     文件         55  2010-01-01 12:35  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\run.bat

     文件         63  2009-12-26 21:55  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\run.vbs

     文件     255210  2010-01-01 13:10  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\程序使用说明.docx

     文件     216218  2010-01-24 12:50  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\基于二次误差度量的网格简化.pdf

     文件        631  2009-12-26 17:03  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\.classpath

     文件        402  2009-12-12 22:48  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\.project

     文件        629  2009-12-12 22:48  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\.settings\org.eclipse.jdt.core.prefs

     文件      22139  2009-12-26 14:14  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\bunny_icon.jpg

     文件     318956  2009-12-26 17:12  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\MeshSimplify_lib\vecmath.jar

     文件       4665  2009-12-26 15:06  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\EdgeWithCost.java

     文件        669  2009-12-28 10:09  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\Exceptions.java

     文件       1434  2009-12-28 12:54  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\FaceTriangle.java

     文件       2493  2009-12-28 11:53  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\FileChooser_obj.java

     文件       6457  2009-12-28 12:46  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\MeshSimplifier_UI_Entry.java

     文件       3134  2009-12-26 17:04  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\objectFileParser.java

     文件       9731  2009-12-26 16:50  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\ObjFile.java

     文件      19498  2010-01-01 12:39  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\ObjFileSimplified_v2.java

     文件      18611  2009-12-28 12:51  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\ObjFileSimplified_version1.java

     文件       1479  2009-12-26 15:05  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\VecOp.java

     文件       2719  2009-12-28 12:46  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr\VertexComplicated.java

     目录          0  2010-01-24 12:31  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\src\MeshSimpliefication_QuadErr

     目录          0  2010-01-24 12:31  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\MeshSimplify_lib

     目录          0  2010-01-24 16:10  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\MeshSimplifier_可执行文件\models

     目录          0  2010-01-24 12:31  复件 2009310399梁超_基于二次误差度量的网格简化_最终报告及程序\源程序_MeshSimplification_QuadErr\.settings

............此处省略8个文件信息

评论

共有 条评论