private void AssertSphere(double[] a, double[] b, double[] c, double[] d, double[] centre, double radius) { CircumcentreSolver solver = new CircumcentreSolver(a, b, c, d); Assert.Equal(centre[0], solver.Centre[0]); Assert.Equal(centre[1], solver.Centre[1]); Assert.Equal(centre[2], solver.Centre[2]); Assert.Equal(radius, solver.Radius); }
public void FourPointCalibration(Plane a, Plane b, Plane c, Plane d) { var calibrate = new CircumcentreSolver(a.Origin, b.Origin, c.Origin, d.Origin); Point3d tcpOrigin = Point3d.Origin; foreach (Plane plane in new Plane[] { a, b, c, d }) { plane.RemapToPlaneSpace(calibrate.Center, out Point3d remappedPoint); tcpOrigin += remappedPoint; } tcpOrigin /= 4; Tcp = new Plane(tcpOrigin, Tcp.XAxis, Tcp.YAxis); }
public Tetrahedron(Vector3 vertex1, Vector3 vertex2, Vector3 vertex3, Vector3 vertex4) { vertices.Add(vertex1); vertices.Add(vertex2); vertices.Add(vertex3); vertices.Add(vertex4); var solver = new CircumcentreSolver(vec3todouble(vertex1), vec3todouble(vertex2), vec3todouble(vertex3), vec3todouble(vertex4)); center = new Vector3((float)solver.Centre[0], (float)solver.Centre[1], (float)solver.Centre[2]); radius = (float)solver.Radius; }
SphereData ransac_a_sphere(List <Vector3> points) { List <int> usedValues = new List <int>(); int min = 0, max = points.Count; for (int i = 0; i < 4; i++) { int val = UnityEngine.Random.Range(min, max); while (usedValues.Contains(val)) { val = UnityEngine.Random.Range(min, max); } usedValues.Add(val); } sphereSolver = new CircumcentreSolver(points[usedValues[0]], points[usedValues[1]], points[usedValues[2]], points[usedValues[3]]); return(new SphereData(sphereSolver.Centre2, (float)(sphereSolver.Radius))); }
private double[] GetCircumcentre() { // Get the 4 input pairs. double[] a = this.Vertices[0].Position; double[] b = this.Vertices[1].Position; double[] c = this.Vertices[2].Position; double[] d = this.Vertices[3].Position; // Return result. CircumcentreSolver solver = new CircumcentreSolver(a, b, c, d); if (!solver.Valid) { return(null); } else { return(solver.Centre); } }