/// <summary>
        /// Creates a new instance of <see cref="LinePointUVAndSegment"/> based on the starting point <paramref name="linePoint"/> and filling in segment information based on the <paramref name="otherPoint"/>.
        /// </summary>
        /// <param name="linePoint">The line point which is the start of the line segment.</param>
        /// <param name="otherPoint">The other point in the line segment.</param>
        public LinePointUVAndSegment(LinePointUV linePoint, Vector2 otherPoint)
        {
            Parameter  = linePoint.Parameter;
            Point      = linePoint.Point;
            UV         = linePoint.UV;
            OtherPoint = otherPoint;
            var segmentVector = otherPoint - linePoint.Point;

            SegmentTangent = segmentVector.normalized;
            SegmentNormal  = NormalUtil.NormalFromTangent(SegmentTangent);
            SegmentLength  = segmentVector.magnitude;
        }
        /// <summary>
        /// Get an intersection point along an extruded segment, due to a neighbouring segment, given the extrusion amount and fraction along the segment where the intersection occurs.
        /// </summary>
        /// <param name="pointVector"></param>
        /// <param name="segmentDirection">Segment direction vector</param>
        /// <param name="extrusionMagnitudeFractionAlongSegment">Fraction of extrusion distance along the segment</param>
        /// <param name="extrusionAmount">The extrusion amount</param>
        internal static Vector2 GetExtrudedSegmentNeighbouringIntersectionPoint(Vector2 pointVector, Vector2 segmentDirection, double extrusionMagnitudeFractionAlongSegment, float extrusionAmount)
        {
            var normal = NormalUtil.NormalFromTangent(segmentDirection);

            return(pointVector + extrusionAmount * normal + Mathf.Abs(extrusionAmount) * segmentDirection * (float)extrusionMagnitudeFractionAlongSegment);
        }