コード例 #1
0
        public Point2D GetPointByOffset(double offset, bool isFromPoint1)
        {
            Point2D from = isFromPoint1 ? Point1 : Point2;
            Point2D to   = isFromPoint1 ? Point2 : Point1;

            AbscissaDirection abscissaDirection = from.X.IsLessThanOrApproximatelyEqualTo(to.X) ? AbscissaDirection.LeftToRight : AbscissaDirection.RightToLeft;
            OrdinateDirection ordinateDirection = from.Y.IsLessThanOrApproximatelyEqualTo(to.Y) ? OrdinateDirection.BottomToTop : OrdinateDirection.TopToBottom;

            var point = LineEquation.GetPointByOffset(from, offset, abscissaDirection, ordinateDirection);

            if (point is null)
            {
                throw new InvalidOperationException($"Cannot get point on line segment {this} by offset {offset}");
            }

            return(point.Value);
        }
コード例 #2
0
        public Point2D GetPointByDistance(double x, double distance, AbscissaDirection direction)
        {
            if (distance.IsApproximately(0.0))
            {
                return(new Point2D(x, CalculateY(x)));
            }

            if (distance.IsLessThanOrApproximatelyEqualTo(0.0))
            {
                distance  = Math.Abs(distance);
                direction = direction == AbscissaDirection.LeftToRight ? AbscissaDirection.RightToLeft : AbscissaDirection.LeftToRight;
            }

            var xDistance = Math.Sqrt(distance.Square() / (Slope.Square() + 1));

            var x1 = x - xDistance;
            var x2 = x + xDistance;

            var pointX = direction == AbscissaDirection.LeftToRight
                ? (x1.IsGreaterThanOrApproximatelyEqualTo(x) ? x1 : x2)
                : (x1.IsLessThanOrApproximatelyEqualTo(x) ? x1 : x2);

            return(new Point2D(pointX, CalculateY(pointX)));
        }
コード例 #3
0
ファイル: Sheet.cs プロジェクト: Genotoxicity/KSPE3Lib
 private void SetAxesDirections()
 {
     dynamic xLeft = default(dynamic);
     dynamic yBottom = default(dynamic);
     dynamic xRight = default(dynamic);
     dynamic yTop = default(dynamic);
     sheet.GetDrawingArea(ref xLeft, ref yBottom, ref xRight, ref yTop);
     if (yTop < yBottom)
         ordinateDirection = OrdinateDirection.TopToBottom;
     else
         ordinateDirection = OrdinateDirection.BottomToTop;
     if (xLeft < xRight)
         abscissaDirection = AbscissaDirection.LeftToRight;
     else
         abscissaDirection = AbscissaDirection.RightToLeft;
 }