C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でセクション内の線の交点を見つける


y =mx+cの形式の線のセットがあるとします。この線で作られたセクションと垂直セクションがあります。与えられたセクションに存在する交点を見つける必要があります。線が-

のようであると仮定します

L1 =y =x + 2

L2 =y =-x + 7

L3 =y =-3

L4 =y =2x-7

そして、垂直断面はx=2からx=4まで与えられます。

ここでは、L1とL2の交点がこのセクション内に存在するため、答えは真になります。

この問題を解決するために、ソート手法を訴えます。まず、垂直断面の両方の境界との各線の交点を計算します。その後、それをペアで保存します。 x座標は境界自体に等しいため、交差点のy座標値をペアとして格納する必要があります。

次に、これらのペアを左側の境界との交点に基づいて並べ替えます。その後、これらのペアを1つずつループします。連続する2つのペアについて、現在のペアの2番目の値が前のペアの2番目の値よりも小さい場合は、指定された垂直セクションに交差が存在する必要があります。

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
class line {
   public:
      int slope, intercept;
      line(){
      }
      line(int slope, int intercept) : slope(slope), intercept(intercept) {
   }
};
int getYCoordinate(line l, int x) {
   return (l.slope * x + l.intercept);
}
bool hasIntersectionPoint(line lines[], int left_range, int right_range, int N) {
   pair<int, int> y_border[N];
   for (int i = 0; i < N; i++)
      y_border[i] = make_pair(getYCoordinate(lines[i], left_range), getYCoordinate(lines[i], right_range));
   sort(y_border, y_border + N);
   for (int i = 1; i < N; i++) {
      if (y_border[i].second < y_border[i - 1].second)
         return true;
   }
   return false;
}
int main() {
   int N = 4;
   int slope[] = { 1, -1, 0, 2 };
   int intercept[] = { 2, 7, -3, -7 };
   line lines[N];
   for (int i = 0; i < N; i++)
      lines[i] = line(slope[i], intercept[i]);
   int left_range = 2;
   int right_range = 4;
   if (hasIntersectionPoint(lines, left_range, right_range, N)) {
      cout << "The intersection point is lies between " << left_range << " and " << right_range;
   } else {
      cout << "No intersection point is present in between " << left_range << " and " << right_range;
   }
}

出力

The intersection point is lies between 2 and 4

  1. C++での2本の線の交点のプログラム

    線ABに対応する点AとB、および線PQに対応する点PとQが与えられます。タスクは、これら2つの線の交点を見つけることです。 注 −点はX座標とY座標の2D平面で与えられます。 ここで、A(a1、a2)、B(b1、b2)およびC(c1、c2)、D(d1、d2)は、2つの異なる線を形成している座標であり、P(p1、p2)は交点です。 (交点の図解のためだけに) 交点を見つける方法 − 上の図を-としましょう 例 したがって、(a1、a2)、(b1、b2)、(c1、c2)、(d1、d2)を使用して、:A1 =b2 --a2B1 =a1 --b1C1 =(A1 * a1)+( B1 *

  2. 2つのシリーズの最初の衝突点を見つけるC++プログラム

    この記事では、最初の衝突点、つまり両方のシリーズが持つ最初の点を見つけるプログラムについて説明します。 この場合、5つの変数「a」、「b」、「c」、「d」、および「n」が与えられます。それぞれn桁のこれらから2つの等差数列を作成する必要があります b, b+a, b+2a, ….b+(n-1)a d, d+c, d+2c, ….. d+(n-1)c そして、与えられたシリーズの両方が持っている最初の共通点を見つけます。 これを解決するために、最初のシリーズで番号を作成します。そして、各数値について、それが2番目のシリーズの最初の数値以上であるかどうか、またその