繁体   English   中英

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

[英]checking whether 4 points in a plane define a square?

如何检查平面中的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");

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

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

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

你需要衡量“广场的方形”吗?

  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坐标,以任何顺序(在公差范围内)。

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

  1. 首先按X,Y对点进行排序

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM