读取4点坐标.他们做广场吗?

Ale*_*lex 4 c++ algorithm

我计算了点之间的距离,如果距离相等,则点成正方形,否则不计算.只有当我按以下顺序读取坐标A(x,y),B(x,y),C(x,y),D(x,y)或反向时,我的代码才有效.但是,如果我读这样的例如A(x,y),B(x,y),D(x,y),C(x,y)它将不起作用,因为dist方法将计算方形的对角线长度.我怎么解决这个问题?

#include <iostream>
using namespace std;

struct {
    int x;
    int y;
}a[10];

int dist(int x1, int y1, int x2, int y2)
{
    int c1, c2;
    c1 = x2-x1;
    c2 = y2-y1;
    return (c1*c1)+(c2*c2);
}

int main()
{
    int d1, d2, d3, d4;
    for (int i=1; i<=4; i++)
    {
        cout << 'X' << i << '='; cin >> a[i].x;
        cout << 'Y' << i << '='; cin >> a[i].y;
    }
    d1 = dist(a[1].x, a[1].y, a[2].x, a[2].y);
    d2 = dist(a[2].x, a[2].y, a[3].x, a[3].y);
    d3 = dist(a[3].x, a[3].y, a[4].x, a[4].y);
    d4 = dist(a[4].x, a[4].y, a[1].x, a[1].y);
    if(d1==d2 && d1==d3 && d1==d4)
        cout << "Is a square";
    else
        cout << "Is not a square";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 9

检查距离是不够的,你需要检查至少一个角度,因为形状可能是一个菱形.

仅检查角度也是不够的,因为最终可能会出现一个矩形.

这些点之间总共有6个距离.计算所有这些.在这6个中,四个应该相等(称其长度x).- 这可以保证菱形

另外两个在它们之间应该是相等的(称它们的长度y).这保证了一个矩形

将菱形和矩形放在一起,BAM! - 广场