package automenta.vivisect.face; /** * * @author me */ class VectorN { VectorN(int i) { v = new double[i]; } double distance(VectorN vectorn) { double d2 = 0.0D; for(int i = 0; i < size(); i++) { double d = vectorn.get(0) - get(0); double d1 = vectorn.get(1) - get(1); d2 += d * d + d1 * d1; } return Math.sqrt(d2); } double get(int i) { return v[i]; } void set(int i, double d) { v[i] = d; } void set(VectorN vectorn) { for(int i = 0; i < size(); i++) set(i, vectorn.get(i)); } int size() { return v.length; } public String toString() { String s = "{"; for(int i = 0; i < size(); i++) s = s + (i != 0 ? "," : "") + get(i); return s + "}"; } void transform(MatrixN matrixn) { VectorN vectorn = new VectorN(size()); for(int i = 0; i < size(); i++) { double d = 0.0D; for(int j = 0; j < size(); j++) d += matrixn.get(i, j) * get(j); vectorn.set(i, d); } set(vectorn); } private double v[]; } class Vector3D extends VectorN { Vector3D() { super(4); } void set(double d, double d1, double d2) { set(d, d1, d2, 1.0D); } void set(double d, double d1, double d2, double d3) { set(0, d); set(1, d1); set(2, d2); set(3, d3); } } public class Matrix3D extends MatrixN { Matrix3D() { super(4); identity(); } void rotateX(double d) { Matrix3D matrix3d = new Matrix3D(); double d1 = Math.cos(d); double d2 = Math.sin(d); matrix3d.set(1, 1, d1); matrix3d.set(1, 2, -d2); matrix3d.set(2, 1, d2); matrix3d.set(2, 2, d1); postMultiply(matrix3d); } void rotateY(double d) { Matrix3D matrix3d = new Matrix3D(); double d1 = Math.cos(d); double d2 = Math.sin(d); matrix3d.set(2, 2, d1); matrix3d.set(2, 0, -d2); matrix3d.set(0, 2, d2); matrix3d.set(0, 0, d1); postMultiply(matrix3d); } void rotateZ(double d) { Matrix3D matrix3d = new Matrix3D(); double d1 = Math.cos(d); double d2 = Math.sin(d); matrix3d.set(0, 0, d1); matrix3d.set(0, 1, -d2); matrix3d.set(1, 0, d2); matrix3d.set(1, 1, d1); postMultiply(matrix3d); } void scale(double d) { Matrix3D matrix3d = new Matrix3D(); matrix3d.set(0, 0, d); matrix3d.set(1, 1, d); matrix3d.set(2, 2, d); postMultiply(matrix3d); } void scale(double d, double d1, double d2) { Matrix3D matrix3d = new Matrix3D(); matrix3d.set(0, 0, d); matrix3d.set(1, 1, d1); matrix3d.set(2, 2, d2); postMultiply(matrix3d); } void scale(Vector3D vector3d) { scale(vector3d.get(0), vector3d.get(1), vector3d.get(2)); } void translate(double d, double d1, double d2) { Matrix3D matrix3d = new Matrix3D(); matrix3d.set(0, 3, d); matrix3d.set(1, 3, d1); matrix3d.set(2, 3, d2); postMultiply(matrix3d); } void translate(Vector3D vector3d) { translate(vector3d.get(0), vector3d.get(1), vector3d.get(2)); } }