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

C++で2次元平面内の点の鏡像を検索します


この問題では、2次元平面内の点Pが与えられ、点a、b、cofは方程式ax + by + c=0になります。私たちのタスクは次のことを見つけることです。点の2次元平面の鏡像。

問題を理解するために例を見てみましょう

入力

P = (2, 1), a = 1, b = -1, c = 0

出力

(1, 2)

説明

飛行機は次のように見えます

C++で2次元平面内の点の鏡像を検索します

ソリューションアプローチ

この問題を解決するには、座標(x'、y')を持つ方程式点P'を見つける必要があります。つまり、P-P'の線が鏡の線と交差する中点であるRがあります。

線P-R-P'はミラーに垂直です。したがって、線の方程式は次のようになります。

ay - by + d = 0

ポイントはP(x、y)です。 P'(x'、y'); R(xm、ym)。

ポイントPとRは既知です。したがって、方程式を使用すると、P’は次のようになります。

$$ \ left(\ frac {??'-??} {??} \ right)=\ left(\ frac {??'-??} {??} \ right)=\ left(\ frac { ????-???? + ??} {?? ^ 2 + x ^ 2} \ right)$$

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
void findMirrorImage( double a, double b, double c, double x, double y){
   double points = -2 * (a * x + b * y + c) / (a * a + b * b);
   double xm = points * a + x;
   double ym = points * b + y;
   cout<<"("<<xm<<","<<ym<<")";
}
int main(){
   double a = -1.0;
   double b = 1.0;
   double c = 0.0;
   double x = 1.0;
   double y = 0.0;
   cout<<"Image of point ("<<x<<", "<<y<<") using mirror ("<<a<<")x + ("<<b<<")y + ("<<c<< ") = 0, is :";
   findMirrorImage(a, b, c, x, y);
   return 0;
}

出力

Image of point (1, 0) using mirror (-1)x + (1)y + (0) = 0, is :(0,1)

  1. C++でのミラーリフレクション

    4つの壁のそれぞれに鏡のある特別な正方形の部屋があるとします。南西の角を除く各角に受容体があります。これらには0、1、2の番号が付けられています。正方形の部屋には長さpの壁があり、南西の角からのレーザー光線が最初に0番目の受容体から距離qで東の壁に当たります。光線が最初に出会う受容体の数を見つける必要があります。 したがって、p =2、q =1の場合、ケースは次のようになります- したがって、光線が最初に反射して左壁に戻るときに、光線が受容体2に出会うため、出力は2になります。 これを解決するには、次の手順に従います- pとqはどちらも偶数ですが、 p:=p / 2 q:

  2. C ++を使用して、括弧の文字列から等しい点を見つけます。

    ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字