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

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


4つの壁のそれぞれに鏡のある特別な正方形の部屋があるとします。南西の角を除く各角に受容体があります。これらには0、1、2の番号が付けられています。正方形の部屋には長さpの壁があり、南西の角からのレーザー光線が最初に0番目の受容体から距離qで東の壁に当たります。光線が最初に出会う受容体の数を見つける必要があります。

したがって、p =2、q =1の場合、ケースは次のようになります-

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

したがって、光線が最初に反射して左壁に戻るときに、光線が受容体2に出会うため、出力は2になります。

これを解決するには、次の手順に従います-

  • pとqはどちらも偶数ですが、
    • p:=p / 2
    • q:=q / 2
  • pが偶数の場合、2を返します
  • qが偶数の場合、0を返します
  • 1を返します。

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int mirrorReflection(int p, int q) {
      while(p % 2 == 0 && q % 2 == 0){
         p >>= 1;
         q >>= 1;
      }
      if(p % 2 == 0) return 2;
      if(q % 2 == 0) return 0;
      return 1;
   }
};
main(){
   Solution ob;
   cout << (ob.mirrorReflection(2, 1));
}

入力

2
1

出力

2

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

    この問題では、2次元平面内の点Pが与えられ、点a、b、cofは方程式ax + by + c=0になります。私たちのタスクは次のことを見つけることです。点の2次元平面の鏡像。 問題を理解するために例を見てみましょう 入力 P = (2, 1), a = 1, b = -1, c = 0 出力 (1, 2) 説明 飛行機は次のように見えます ソリューションアプローチ この問題を解決するには、座標(x、y)を持つ方程式点Pを見つける必要があります。つまり、P-Pの線が鏡の線と交差する中点であるRがあります。 線P-R-Pはミラーに垂直です。したがって、線の方程式は次のようになります。

  2. C++でのラインリフレクション

    2D平面上にn個の点があるとすると、指定された点を対称的に反射するy軸に平行な線があるかどうかを確認する必要があります。つまり、指定された線上にすべての点を反映した後に線が存在するかどうかを確認する必要があります。元のポイントのセットは、反映されたポイントと同じです。 したがって、入力がpoints =[[1,1]、[-1,1]]のような場合 その場合、出力はtrueになります これを解決するには、次の手順に従います- 1つのセットを定義します。 n:=ポイントのサイズ minVal:=inf maxVal:=-inf 初期化i:=0の場合、i <