Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

두 개의 평행선에만 모든 좌표 포인트가 포함되어 있는지 여부를 찾는 C++ 프로그램

<시간/>

이 기사에서는 두 개의 평행선만 주어진 모든 좌표점을 가질 수 있는지 여부를 찾는 프로그램에 대해 논의할 것입니다.

이를 위해 좌표가 (i,rr[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)입니다.

유사하게 우리는 주어진 배열에서 세 개의 점을 가지고 그들의 기울기를 비교할 수 있습니다. 3개의 점 중 2개의 선만 있으므로 그 중 2개는 같은 선에 있어야 합니다.

이를 위해 우리는 3개의 점을 취하고 그것들을 통한 절편을 계산할 것입니다. 절편에 대해 정확히 두 개의 다른 값을 얻는다면 배열의 점은 두 개의 평행선에 표시될 수 있으며 그렇지 않은 경우에는 표시되지 않습니다.

프로그램은 조건이 가능하면 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