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); } }
private Vector3[] CircleEventVertices(CircleEvent circle) { var angles = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVerticesPerCircle); var points = angles.Select(angle => VertexOfCircleEvent(circle, angle)).ToArray(); return(points); }
private static Vector3[] SweeplineVertices(Sweepline sweepline) { if (Math.Abs(sweepline.Z) >= 1) { return(new Vector3[0]); } var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, NumberOfVertices); var vertices = azimuths.Select(azimuth => VertexOnSweepline(sweepline, azimuth)).ToArray(); return(vertices); }
private static GameObject DrawLabelsAtColatitude(float colatitude) { var azimuths = DrawingUtilities.AnglesInRange(0, 2 * Mathf.PI, 36); var labels = azimuths.Take(36).Select(azimuth => DrawLabel(colatitude, azimuth)); var parentObject = new GameObject("Latitude Labels " + Mathf.Rad2Deg * colatitude); foreach (var label in labels) { label.transform.parent = parentObject.transform; } return(parentObject); }
private static GameObject DrawLongitude(float azimuth) { var azimuths = DrawingUtilities.AnglesInRange(0, Mathf.PI, NumberOfPointsPerLongitude); var vertices = azimuths.Select( colatitude => DrawingUtilities.CreateVectorAt(colatitude, azimuth)) .ToArray(); var longitudeObject = DrawingUtilities.CreateLineObject( "Longitude " + Mathf.Rad2Deg * azimuth, vertices, "Boundaries"); return(longitudeObject); }