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);
 }
        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);
        }
Beispiel #3
0
        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;
    }
Beispiel #5
0
    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);
                }
            }
Beispiel #7
0
 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);
 }