检查平面中的4个点是否定义了一个正方形?

时间:2010-04-24 10:07:13

标签: c

如何检查平面中的4个点是否定义了正方形?给出一个点和一个正方形区域的值的函数是什么作为输入参数返回四个平方(定义一个相应的类型),其边平行于x轴和y轴

这是我如何开始的:

#include <stdio.h>
#include<math.h>
struct point{
float x;
float y;
}
typedef struct point POINT;
struct square{
struct point p1;
struct point p2;
struct point p3;
struct point p4;
}
typedef struct square SQUARE;

int main()
{
int point;
printf("point coordinate");
printf("\n\n");

printf("enter data\n");

3 个答案:

答案 0 :(得分:4)

计算每对点之间的所有6个平方距离。即:

(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)

对它们进行排序。
其中最小的四个应该(大约)相等,两个大的应该是(大约)两倍大。

你需要衡量“方形是多方形”吗?

答案 1 :(得分:1)

  1. 选择p1,并将其设为原点,即将每个点转换为-p1。
  2. 设p2为最接近p1的下一个点。 (修正了Paul R的观察结果。)
  3. 取p1和p2之间的角度θ,将所有点旋转-theta。在此阶段,p1和p2形成一条水平线(假设角度0朝向东方)。
  4. 测试p3和p4是否具有相同的y坐标(在公差范围内)。
  5. 测试p3和p4与p1和p2具有相同的x坐标,以任何顺序(在公差范围内)。

答案 2 :(得分:0)

这取决于您是否可以对点的排序做出任何假设。如果没有,那么将有两个操作:

  1. 首先按X,Y

  2. 对点进行排序
  3. 测试相等的宽度/高度(请注意,当你使用浮点数作为坐标时,你可能需要在比较相等时定义一个小的公差值)

  4. 如果已知点的特定顺序,则可省略步骤1.

    (请注意,这个答案假定您正在测试与X / Y轴方向相同的正方形 - 如果正方形可以旋转任意角度,那么它会变得更复杂。)< / p>