C++程序判断所有坐标点是否仅位于两条平行线上


在本文中,我们将讨论一个程序,用于判断所有给定的坐标点是否仅位于两条平行线上。

为此,我们将得到一个数组,坐标将是 (i, arr[i])。假设我们得到一个数组:

arr = {2,6,8,12,14}

那么这些点可以位于两条平行线上,第一条线包含 **(1,2), (3,8)** 和 **(5,14)**。第二条线包含其余坐标,即 (2,6) 和 (4,12)。

这个问题可以通过比较由给定点形成的线的斜率来解决。我们知道,由 (a1,b1) 和 (a2,b2) 形成的线的斜率是 (b2-b1)/(a2-a1)。

类似地,我们可以从给定数组中取三个点并比较它们的斜率。由于我们只有两条线,在三个点中,其中两个必须在同一条线上。

为此,我们将取三个点并计算它们形成的直线的截距。如果我们恰好得到两个不同的截距值,那么数组中的点可以表示在两条平行线上,否则不行。

如果条件成立,程序返回 1,否则返回 0。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
//to calculate if we get exactly two values of intercept
bool is_intercept(double slope, int arr[], int num) {
   set<double> Lines;
   for (int i = 0; i < num; i++)
      Lines.insert(arr[i] - slope * (i));
   return Lines.size() == 2;
}
//to check the slope of the given points
bool is_parallel(int arr[], int num) {
   bool slope1 = is_intercept(arr[1] - arr[0], arr, num);
   bool slope2 = is_intercept(arr[2] - arr[1], arr, num);
   bool slope3 = is_intercept((arr[2] - arr[0]) / 2, arr, num);
   return (slope1 || slope2 || slope3);
}
int main() {
   int arr[] = {2,6,8,12,14};
   int num = sizeof(arr)/sizeof(arr[0]);
   cout << (int)is_parallel(arr, num);
   return 0;
}

输出

1

更新于:2019年10月3日

307 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告