private Vector3 FindBestVertex(float x, float y, float z, int corners) { QEFData data = new QEFData(); data.positions = GetCrossingPoints(x, y, z, corners); data.normals = new Vector3[data.positions.Length]; for (int i = 0; i < data.normals.Length; i++) { Vector3 point = data.positions[i]; data.normals[i] = CalculateSurfaceNormal(point.x + x, point.y + y, point.z + z); } data = QEFSolver.Solve3D(data); return(data.point); }
public Vector3 getPoint() { if (dirty) { dirty = false; List <Vector3> p = new List <Vector3>(); List <Vector3> n = new List <Vector3>(); foreach (Edge edge in edges) { p.Add(edge.p); n.Add(edge.n); } point = QEFSolver.minimize(p.ToArray(), n.ToArray(), point, 50, 0.02f); } return(point); }