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'はミラーに垂直です。したがって、線の方程式は次のようになります。
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)
-
C++でのミラーリフレクション
4つの壁のそれぞれに鏡のある特別な正方形の部屋があるとします。南西の角を除く各角に受容体があります。これらには0、1、2の番号が付けられています。正方形の部屋には長さpの壁があり、南西の角からのレーザー光線が最初に0番目の受容体から距離qで東の壁に当たります。光線が最初に出会う受容体の数を見つける必要があります。 したがって、p =2、q =1の場合、ケースは次のようになります- したがって、光線が最初に反射して左壁に戻るときに、光線が受容体2に出会うため、出力は2になります。 これを解決するには、次の手順に従います- pとqはどちらも偶数ですが、 p:=p / 2 q:
-
C ++を使用して、括弧の文字列から等しい点を見つけます。
ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字