C# 如何使矩形的所有角正交

C# 如何使矩形的所有角正交,c#,geometry,mathematical-optimization,arcobjects,orthogonal,C#,Geometry,Mathematical Optimization,Arcobjects,Orthogonal,我使用Arcobjects C#.Net在ArcGIS桌面上开发了一个应用程序。应用程序将通过连接四个已知坐标来创建一个矩形。我需要将所有四个角调整为正交(90度)。有没有数学方法可以从四个已知坐标中实现这一点?或者Arcobjects中是否有直接的方法来实现这一点 如果要确保角度为90度,则需要确保对角线长度相同。这意味着在您的示例中,长度(P1-P3)=长度(P2-P4) 您可以选择:中点=中间点(P1-P3)。这是你的中心点。现在将虚线平行移向中点。现在你已经调整了P2和P4,穿过圆圈和虚

我使用Arcobjects C#.Net在ArcGIS桌面上开发了一个应用程序。应用程序将通过连接四个已知坐标来创建一个矩形。我需要将所有四个角调整为正交(90度)。有没有数学方法可以从四个已知坐标中实现这一点?或者Arcobjects中是否有直接的方法来实现这一点


如果要确保角度为90度,则需要确保对角线长度相同。这意味着在您的示例中,长度(P1-P3)=长度(P2-P4)

您可以选择:中点=中间点(P1-P3)。这是你的中心点。现在将虚线平行移向中点。现在你已经调整了P2和P4,穿过圆圈和虚线

代码:

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;


    }

如果要确保角度为90度,则需要确保对角线的长度相同。这意味着在您的示例中,长度(P1-P3)=长度(P2-P4)

您可以选择:中点=中间点(P1-P3)。这是你的中心点。现在将虚线平行移向中点。现在你已经调整了P2和P4,穿过圆圈和虚线

代码:

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;


    }

你能画一个相对于原始形状顶部的调整坐标形状的例子吗?你必须选择哪个角是固定的,然后使用一些好的老式高中三角法,但是,如果相邻边的长度不同,然后,它将不会像只矫直一个角度并将变换应用于其他角度那样简单,您必须更改长度扫描您绘制一个相对于原始形状顶部/上方的调整坐标形状的示例?您必须选择哪个角将是静止的,然后使用一些好的老式高中三角学,但是,如果相邻边的长度不相同,那么它就不会像矫直一个角度并将变换应用于其他角度那么简单,你必须改变长度请确认答案?你能确认答案吗?