如何利用中点坐标求矩形的四个顶点

考虑一个矩形 ABCD,已知 AD 边和 BC 边的中点坐标(分别为 p 和 q),同时给出了这两条边的长度 L(AD = BC = L)。现在的任务是,根据这些给定的参数,计算出四个顶点 A、B、C 和 D 的坐标。

!Rectangle

示例:

输入:p = (1, 0)
      q = (1, 2)
      L = 2
输出:(0, 0), (0, 2), (2, 2), (2, 0)
解释:
计算出的点构成了一个矩形,
且符合输入的约束条件。

输入:p = (1, 1)
      q = (-1, -1)
      L = 2*sqrt(2)
输出:(0, 2), (-2, 0), (0, -2), (2, 0)

根据问题描述,我们可以将情况分为三种:

  • 矩形是水平的,即 AD 和 BC 平行于 X 轴。
  • 矩形是垂直的,即 AD 和 BC 平行于 Y 轴。
  • 矩形是倾斜的,即与坐标轴成一定的角度。

前两种情况非常直观,利用基础几何知识就能轻松解决。而对于第三种情况,我们需要应用一些数学概念来确定顶点的位置。

为了更清晰地理解,让我们参考上面的示意图。已知 p 和 q 的坐标,因此我们可以求出 AD 和 BC 的斜率(因为连接 p 和 q 的线段 pq 垂直于 AD)。一旦我们知道了 AD 的斜率,就可以得出经过 AD 的直线方程。接下来,我们可以利用距离公式计算出沿 X 轴和 Y 轴的位移量。

如果 AD 的斜率为 m,那么
m = (p.x- q.x)/(q.y - p.y)

沿 X 轴的位移 dx 为:
   L/(2*sqrt(1+m*m))

同理,沿 Y 轴的位移 dy 为:
m*L/(2*sqrt(1+m*m))

现在,我们只需要将计算出的位移量与相应点的坐标进行加法或减法运算,就能简单地求出四个顶点的坐标。

下面是具体的代码实现。

C++


CODEBLOCK_fa1cc79c

Java


// Java program to find corner points of

// a rectangle using given length and middle

// points.

class GFG

{

// Structure to represent a co-ordinate point

static class Point

{

float x, y;

Point()

{

x = y = 0;

}

Point(float a, float b)

{

x = a;

y = b;

}

};

// This function receives two points and length

// of the side of rectangle and prints the 4

// corner points of the rectangle

static void printCorners(Point p, Point q, float l)

{

Point a = new Point(), b = new Point(),

c = new Point(), d = new Point();

// horizontal rectangle

if (p.x == q.x)

{

a.x = (float) (p.x – (l / 2.0));

a.y = p.y;

d.x = (float) (p.x + (l / 2.0));

d.y = p.y;

b.x = (float) (q.x – (l / 2.0));

b.y = q.y;

c.x = (float) (q.x + (l / 2.0));

c.y = q.y;

}

// vertical rectangle

else if (p.y == q.y)

{

a.y = (float) (p.y – (l / 2.0));

a.x = p.x;

d.y = (float) (p.y + (l / 2.0));

d.x

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/33648.html
点赞
0.00 平均评分 (0% 分数) - 0