Exemple #1
0
        /// <summary>
        ///     Geo Arc Constructor: Vertex, Vertex, Vertex (V3)
        ///     The V3 Constructor takes three vertices that the arc must pass through and
        ///     calculates all of the other properties of the arc
        /// </summary>
        /// <param name="vertex0">The Starting Vertex</param>
        /// <param name="middleVertex">The Middle Vertex</param>
        /// <param name="vertex1">The Ending Vertex</param>
        public GeoArc(Vertex vertex0, Vertex middleVertex, Vertex vertex1)
        {
            // Vertex 0
            _vertex0 = vertex0;
            Vertex0.PropertyChanged += Vertex0OnPropertyChanged;

            // Middle Vertex
            _arcMiddleVertex              = middleVertex;
            MiddleVertex.PropertyChanged += MiddleVertexOnPropertyChanged;

            // Vertex 1
            _vertex1 = vertex1;
            Vertex1.PropertyChanged += Vertex1OnPropertyChanged;

            // Center Vertex
            _centerVertex = CalcCenterVertex(Vertex0, MiddleVertex, Vertex1);
            CenterVertex.PropertyChanged += CenterVertexOnPropertyChanged;

            // Starting Angle
            _startAngle = Vector.AngleBetweenVectors(
                new Vector(CenterVertex, vertex0), UnitVectors.XUnitVector
                );

            // Ending Angle
            _endAngle = Vector.AngleBetweenVectors(
                new Vector(CenterVertex, Vertex1), UnitVectors.XUnitVector
                );

            // Total Angle
            Angle = EndAngle - StartAngle;

            // Bulge
            _bulge = Bulge.CalcBulge(Angle);

            // Radius
            _radius = GeoMath.Distance(CenterVertex, vertex0);

            // Geometric Properties
            Length = CalcLength();
            Area   = CalcArea();
        }
Exemple #2
0
 /// <summary>
 ///     The Radius of the Bulge
 /// </summary>
 /// <param name="v0">The Stating Vertex</param>
 /// <param name="v1">The Ending Vertex</param>
 /// <param name="angle">The Total Angle of the arc</param>
 /// <returns></returns>
 public static double Radius(Vertex v0, Vertex v1, double angle)
 {
     return(GeoMath.Distance(v0, v1) / (2 * Math.Sin(angle / 2)));
 }