📜  平面内平行四边形的个数

📅  最后修改于: 2021-10-23 08:59:29             🧑  作者: Mango

给定平面上的一些点,它们是不同的,并且没有三个点位于同一条线上。我们需要找到顶点作为给定点的平行四边形的数量。
例子:

输入:points[] = {(0, 0), (0, 2), (2, 2), (4, 2), (1, 4), (3, 4)} 输出:2 两个平行四边形是可能的通过选择上面给定的点作为顶点,如下图所示。

我们可以通过使用平行四边形的一个特殊性质来解决这个问题,即平行四边形的对角线在中间相互交叉。所以如果我们得到这样一个中点,它是多个线段的中点,那么我们可以得出一个平行四边形存在的结论,如果中点出现x次更准确,那么可以在x C 2中选择可能的平行四边形的对角线方式,即会有 x*(x-1)/2 个平行四边形对应于这个特定的中点,频率为 x。所以我们迭代所有的点对,我们计算它们的中点并将中点的频率增加 1。最后,我们根据每个不同的中点的频率计算平行四边形的数量,如上所述。由于我们只需要中点的频率,为简单起见,在计算中点时忽略除以 2。

// C++ program to get number of Parallelograms we
// can make by given points of the plane
#include 
using namespace std;
  
// Returns count of Parallelograms possible
// from given points
int countOfParallelograms(int x[], int y[], int N)
{
    // Map to store frequency of mid points
    map, int> cnt;
    for (int i=0; isecond;
  
        // Increase the count of Parallelograms by
        // applying function on frequency of mid point
        res += freq*(freq - 1)/2
    }
  
    return res;
}
  
//  Driver code to test above methods
int main()
{
    int x[] = {0, 0, 2, 4, 1, 3};
    int y[] = {0, 2, 2, 2, 4, 4};
    int N = sizeof(x) / sizeof(int);
  
    cout << countOfParallelograms(x, y, N) << endl;
  
    return 0;
}

输出:

2

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。