0

PointA在我的应用程序中,用户将两个点指向PointB同一行(可以是任何角度)。所以我有以下信息

  1. 点A坐标

  2. 点B坐标

  3. A点和B点之间的距离

  4. Across distance(取自用户作为输入以绘制其他点)

  5. 角度(从 pointA 和 pointB 计算)。

基于此信息,另一个应用程序绘制四个点(矩形的顶点)。

我要做的是,我必须找到这四个点(矩形)的中心点,才能正确绘制出这四个点之间的矩形。

现在我可以绘制以中心为 pointA 的矩形,这显然是不正确的。我应该使用什么公式来计算 Rectangle 的中心,以便我可以绘制一个有界矩形?

图 1:

在此处输入图像描述

图 2:

在此处输入图像描述

图 3:

在此处输入图像描述

图 4:

在此处输入图像描述

图 5:

在此处输入图像描述

如所附图像所示,在每种情况下,矩形都是以 pointA 为质心绘制的。虽然我想要质心到四个点的中心。

PS:所有角度均以北 0 度测量。

4

2 回答 2

0

如果您有两个点p1, p2并且您需要从这些点中绘制一个矩形(获取其他 2 个点a1, a2):

a1.x = p1.x;
a1.y = p2.y;
a2.x = p2.x;
a2.y = p1.y;

好了,四个点p1、a2、p2、a1(顺时针顺序)描述了你的矩形。


更新:

var width = p2.x - p1.x;
var height = p2.y - p1.y;
var angle = 0;
var center = new Point(p1.x + width / 2, p1.y + height / 2);

更新:

var center = new Point();
var angle = //you have it. Radians.
var height = // you have this as well.
var halfSegment = new Point((p2.x - p1.x) / 2, (p2.y - p1.y) / 2);
center.x = halfSegment.x + Math.Cos(angle - Math.PI / 2) * height / 2;
center.y = halfSegment.y + Math.Sin(angle - Math.PI / 2) * height / 2;
于 2014-03-25T08:16:31.103 回答
0

我认为:

令 P0 = {x0,y0} 且 P1 = {x1,y1}

设向量 V01 = P1 - P0 == {V01x = P1x - P0x, V01y = P1y - P0y}

设向量 V03 = {V01x * Cos(PI/2) - V01y * Sin(PI/2) , V01x* Sin(PI/2) + V01y * Cos(PI/2)

宽度 = Sqrt(V03x * V03x + V03y * V03y)

VN = V03 / 宽度 == {V03x / 宽度,V03y / 宽度}

P3 = P0 + VN * 高度

P4 = P1 + VN * 高度

PC = (P0 + P1 + P2 + P3) / 4

于 2014-03-25T09:27:29.110 回答