Exemple #1
0
 private static IEnumerable <Vector3> ArcVertices(IArc arc, IArc nextArc, Sweepline sweepline)
 {
     if (arc.LeftNeighbour == arc.Site)
     {
         var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVerticesPerArc);
         var vertices = azimuths.Select(azimuth => PointOnEllipse(arc, azimuth, sweepline)).ToList();
         return(vertices);
     }
     else if (Mathf.Approximately((float)arc.Site.Priority, (float)sweepline.Priority))
     {
         var intersection = arc.PointOfIntersection(sweepline).ToUnityVector3();
         var site         = arc.Site.Position.ToUnityVector3();
         var downArc      = DrawingUtilities.VerticesOnGeodesic(intersection, site, NumberOfVerticesPerArc);
         var upArc        = DrawingUtilities.VerticesOnGeodesic(site, intersection, NumberOfVerticesPerArc);
         var vertices     = downArc.Concat(upArc);
         return(vertices);
     }
     else
     {
         var leftLimit  = DrawingUtilities.AzimuthOf(arc.LeftIntersection(sweepline).ToUnityVector3());
         var rightLimit = DrawingUtilities.AzimuthOf(nextArc.LeftIntersection(sweepline).ToUnityVector3());
         var azimuths   = DrawingUtilities.AnglesInRange(leftLimit, rightLimit, NumberOfVerticesPerArc);
         var vertices   = azimuths.Select(azimuth => PointOnEllipse(arc, azimuth, sweepline)).ToList();
         return(vertices);
     }
 }
Exemple #2
0
        private static IEnumerable <Vector3> VerticesInEdge(Vertex origin, Vertex destination)
        {
            var originVector      = origin.Position.ToUnityVector3();
            var destinationVector = destination.Position.ToUnityVector3();

            if (originVector == destinationVector || Vector3.Cross(originVector, destinationVector) != new Vector3(0, 0, 0))
            {
                return(DrawingUtilities.VerticesOnGeodesic(originVector, destinationVector, NumberOfVerticesPerEdge));
            }
            else
            {
                var commonSites = origin.Sites.Intersect(destination.Sites).ToList();
                var normal      = -(commonSites.First().Position.ToUnityVector3() - commonSites.Last().Position.ToUnityVector3()).normalized;
                return(DrawingUtilities.VerticesOnHalfOfGreatCircle(originVector, normal, NumberOfVerticesPerEdge));
            }
        }