public static Triangle FromTwoPointsAndTwoLengths(Point point1, Point point2, double l1, double l2)
 {
     double l3 = point1.Distance(point2);
     double area = Triangle.AreaByLenghts(l1, l2, l3);
     double angle = Math.Asin(2 * area / (l1 * l3));
     Vector horizontal = point1.VectorTo(point1.AddX(1));
     double angle0 = horizontal.AngleWith(point1.VectorTo(point2));
     double x = l1 * Math.Cos(angle0 - angle);
     double y = l1 * Math.Sin(angle0 - angle);
     Point point3 = point1.AddX(x).AddY(y);
     return new Triangle(point1, point2, point3);
 }
Esempio n. 2
0
        public static Triangle FromTwoPointsAndTwoLengths(Point point1, Point point2, double l1, double l2)
        {
            double l3         = point1.Distance(point2);
            double area       = Triangle.AreaByLenghts(l1, l2, l3);
            double angle      = Math.Asin(2 * area / (l1 * l3));
            Vector horizontal = point1.VectorTo(point1.AddX(1));
            double angle0     = horizontal.AngleWith(point1.VectorTo(point2));
            double x          = l1 * Math.Cos(angle0 - angle);
            double y          = l1 * Math.Sin(angle0 - angle);
            Point  point3     = point1.AddX(x).AddY(y);

            return(new Triangle(point1, point2, point3));
        }
Esempio n. 3
0
        public static Point[] CalcBezier(Point pStart, Point pEnd, bool p1left = true, bool p2left = false)
        {
            var top    = pStart.Y < pEnd.Y ? pStart.Y : pEnd.Y;
            var bottom = top == pStart.Y ? pEnd.Y : pStart.Y;

            var left  = pStart.X < pEnd.X ? pStart.X : pEnd.X;
            var right = left == pStart.X ? pEnd.X : pStart.X;

            var disX = right - left;
            var disY = bottom - top;

            var ps = pStart;
            var p1 = p1left ? pStart.AddX(40) : pStart.SubX(40);
            var p2 = p2left ? pEnd.AddX(40) : pEnd.SubX(40);

            var inL = p2.X < p1.X ? p2.X : p1.X;

            var pM = p1left != p2left ? new Point(left + disX / 2, top + disY / 2) : new Point(inL + disX / 2, top + disY / 2);

            var pE = pEnd;

            return(new Point[] { ps, p1, p1, pM, p2, p2, pE });
        }