Как сделать все углы прямоугольника как ортогональные - PullRequest
0 голосов
/ 09 сентября 2018

Я разработал приложение в верхней части ArcGIS Desktop, используя Arcobjects C # .Net. Приложение создаст прямоугольник, соединив четыре известные координаты. Мне нужно отрегулировать все четыре угла как ортогональные (90 градусов). Есть ли математический способ достичь этого из четырех известных координат? или в Arcobjects есть какой-нибудь прямой метод сделать это?

enter image description here

1 Ответ

0 голосов
/ 09 сентября 2018

Если вы хотите, чтобы углы были 90 градусов, вам нужно убедиться, что диагонали имеют одинаковую длину. в вашем примере это означает длину (P1-P3) == длина (P2-P4).

Вы можете перейти с: средняя точка = середина (P1-P3). Это ваша центральная точка. Теперь переместите пунктирную линию параллельно средней точке. Теперь у вас есть настроенные P2 и P4, пересекающие круг и пунктир.

enter image description here

в коде:

static void Main(string[] args)
    {
        Point P1 = new Point() { X = 2, Y = 1 };
        Point P2 = new Point() { X = 1.8, Y = 2.5 };
        Point P3 = new Point() { X = 6, Y = 4 };
        Point P4 = new Point() { X = 6.2, Y = 2.6 };
        double distX13 = P3.X - P1.X;
        double distY13 = P3.Y - P1.Y;
        Point midP = new Point() { X = P1.X + distX13 / 2, Y = P1.Y + distY13 / 2 };
        double lenght13 = Math.Sqrt(distX13 * distX13 + distY13 * distY13);

        double a24 = Math.Atan2(P4.Y - P2.Y, P4.X - P2.X);

        P2.X = midP.X - Math.Cos(a24) * lenght13 / 2;
        P2.Y = midP.Y - Math.Sin(a24) * lenght13 / 2;
        P4.X = midP.X + Math.Cos(a24) * lenght13 / 2;
        P4.Y = midP.Y + Math.Sin(a24) * lenght13 / 2;


    }
...