c# - 如何使矩形的所有角都正交
问题描述
我使用 Arcobjects C#.Net 在 ArcGIS Desktop 上开发了一个应用程序。应用程序将通过连接四个已知坐标来创建一个矩形。我需要将所有四个角调整为正交(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;
}
推荐阅读
- android - 如何使用 Mqtt 编写自定义变量更改侦听器
- java - 想要从应用程序抽屉中隐藏应用程序并想要从另一个应用程序打开
- algorithm - 多个3d形状的外形算法?
- tsql - 如何在没有游标的情况下实现多对多匹配
- php - PDO 异常是:“无数据库连接”
- java - 在引用和值语义之间切换
- jquery - 何在不更改当前页面的情况下执行操作?
- javascript - 从 NodeJS 调用的 AWS Lambda 中的空事件值
- javascript - Javascript stringify() 正在序列化使用 Jquery remove() 删除的元素
- php - 如何在 laravel 5.8 中使用批量分配上传图像?