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
-
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つのシリーズの最初の衝突点を見つける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番目のシリーズの最初の数値以上であるかどうか、またその