Проведите линию между двумя точками и вытяните линию с обеих сторон - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть код ниже, который позволяет мне провести линию между двумя заданными точками.Что мне нужно сделать, это растянуть эти линии в обоих направлениях, чтобы линия доходила до конца под одинаковым углом с обеих сторон линии

private void Form1_Load(object sender, EventArgs e)
{
    this.Controls.Add(new Panel{Left = 10, Top = 10,Width = 50,Height = 50, BackColor = Color.Blue});
    this.Controls.Add(new Panel {Left = 100, Top = 100,Width = 50,Height = 50, BackColor = Color.Blue});


}
protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Graphics g;
    g = e.Graphics;
    Pen myPen = new Pen(Color.Red);
    myPen.Width = 1;
    g.DrawLine(myPen, 12, 12, 45, 65);
    g.DrawLine(myPen, 100, 100, 45, 65);
}

1 Ответ

0 голосов
/ 23 февраля 2019

Попробуйте использовать метод:

startPoint и endPoint - известные точки.p1 и p2 - новые начальные и конечные точки.

 public static void FindSimmetricPointsOnLine(Point startPoint, Point endPoint, double distance, out Point p1, out Point p2)
        {
            p1 = new Point();
            p2 = new Point();
            var xa = startPoint.X;
            var ya = startPoint.Y;
            var xb = endPoint.X;
            var yb = endPoint.Y;
            var l = distance;
            double x1 = 0;
            double x2 = 0;
            double y1 = 0;
            double y2 = 0;


            if (xa == xb)
            {
                x1 = x2 = xa;
                y1 = ya + l;
                y2 = ya - l;
            }
            else
            {
                if (ya == yb)
                {
                    y1 = y2 = ya;
                    x1 = xa + l;
                    x2 = xa - l;
                }
                else
                {
                    var K = (ya - yb)/(xa - xb);
                    var B = ya - K*xa;
                    var A1 = K*K + 1;
                    var B1 = -2*(xa + K*(ya - B));
                    var C1 = xa*xa + (ya - B)*(ya - B) - l*l;
                    var D = B1*B1 - 4*A1*C1;

                    if (D >= 0)
                    {
                        x1 = (-B1 + Math.Sqrt(D))/(2*A1);
                        x2 = (-B1 - Math.Sqrt(D))/(2*A1);


                        y1 = K*x1 + B;
                        y2 = K*x2 + B;

                        p1 = new Point(x1, y1);
                        p2 = new Point(x2, y2);
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...