S3toR3() public static method

public static S3toR3 ( Vector3D p ) : Vector3D
p Vector3D
return Vector3D
Exemplo n.º 1
0
        public static void Hypercube()
        {
            List <Vector3D> vertices = new List <Vector3D>();

            vertices.Add(new Vector3D(1, 1, 1, 1));
            vertices.Add(new Vector3D(1, 1, 1, -1));
            vertices.Add(new Vector3D(1, 1, -1, 1));
            vertices.Add(new Vector3D(1, 1, -1, -1));
            vertices.Add(new Vector3D(1, -1, 1, 1));
            vertices.Add(new Vector3D(1, -1, 1, -1));
            vertices.Add(new Vector3D(1, -1, -1, 1));
            vertices.Add(new Vector3D(1, -1, -1, -1));
            vertices.Add(new Vector3D(-1, 1, 1, 1));
            vertices.Add(new Vector3D(-1, 1, 1, -1));
            vertices.Add(new Vector3D(-1, 1, -1, 1));
            vertices.Add(new Vector3D(-1, 1, -1, -1));
            vertices.Add(new Vector3D(-1, -1, 1, 1));
            vertices.Add(new Vector3D(-1, -1, 1, -1));
            vertices.Add(new Vector3D(-1, -1, -1, 1));
            vertices.Add(new Vector3D(-1, -1, -1, -1));

            HashSet <H3.Cell.Edge> edges = new HashSet <H3.Cell.Edge>(new H3.Cell.EdgeEqualityComparer());

            foreach (Vector3D v1 in vertices)
            {
                foreach (Vector3D v2 in vertices)
                {
                    if (v1.Dist(v2) == 2)
                    {
                        edges.Add(new H3.Cell.Edge(v1, v2));
                    }
                }
            }

            // Radial project to S3, then stereographic to R3.
            foreach (H3.Cell.Edge edge in edges)
            {
                edge.Start.Normalize();
                edge.Start = Sterographic.S3toR3(edge.Start);
                edge.End.Normalize();
                edge.End = Sterographic.S3toR3(edge.End);
            }

            PovRay.WriteEdges(new PovRay.Parameters()
            {
                AngularThickness = .05
            }, Geometry.Spherical, edges.ToArray(), "433.pov", append: false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Inputs and Outputs are in R3 (stereographically projected).
        /// </summary>
        public static Vector3D[] GeodesicPoints(Vector3D v1, Vector3D v2)
        {
            Vector3D start = Sterographic.R3toS3(v1);
            Vector3D end   = Sterographic.R3toS3(v2);

            AvoidNorthPole(ref start, end);
            AvoidNorthPole(ref end, start);

            int div = 42;
            //int div = 56;		// 343
            //int div = 50;		// 333
            Segment seg = Segment.Line(start, end);

            Vector3D[] result = seg.Subdivide(div);
            for (int i = 0; i < result.Length; i++)
            {
                result[i].Normalize();
                result[i] = Sterographic.S3toR3(result[i]);
            }

            return(result);
        }