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

C++の別のポイントを中心としたポイントの回転


原点を中心とした点Xの回転は、反時計回りに角度θで行われます。-

原点反clRotateockwiseについてのXbyθ:X * Polar(1.0、θ)。

ここで、複素数の関数polarはヘッダーファイルで定義され、位相角と大きさを使用して複素数を見つけるために使用されます。polar(mag、angle)は複素数を返します。

点Yを中心とした点Xの回転

ポイントを別のポイントを中心に回転させるには、すべての座標の移動が特定の方向に発生する平行移動を使用します。

C++の別のポイントを中心としたポイントの回転

XをYを中心に回転させる手順。

  • XをYに変換すると、Yが新しい原点になります。これは、すべてのポイントからYを引くことによって実行できます。 XはX-Yになります。

  • 上記の式を使用して、新しい原点を中心に(X-Y)回転します:(X-Y)* Polar(1.0、θ)

  • すべてのポイントにYを追加することによる逆翻訳。

Yを中心としたXの回転は:(X-Y)* Polar(1.0、θ)+ Y

以下は、別のポイントを中心としたポイントの回転を示すコードです

#include <iostream>
#include <complex>
using namespace std;
typedef complex<double> point;
#define x real()
#define y imag()
int main(){
   // Rotate P about Q
   point X(5.0, 3.0);
   point Y(2.0, 4.0);
   // Angle of rotation is 90 degrees
   double theta = 3.14/2;
   point Xnew=(X-Y) * polar(1.0, theta) + Y;
   cout << "rotating X 90 degrees anti-clockwise about Y becomes:";
   cout << "(" << Xnew.x << ", " << Xnew.y << ")" << endl;
   return 0;
}

出力

rotating X 90 degrees anti-clockwise about Y becomes:(3.00239, 6.9992)

  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++の別の二分木のサブツリーであるかどうかを確認します

    2つの二分木があるとします。小さい方のツリーが別の二分木のサブツリーであるかどうかを確認する必要があります。これらの2本の木が与えられていると考えてください。 2本の木があります。 2番目のツリーは、最初のツリーのサブツリーです。このプロパティを確認するために、ポストオーダー方式でツリーをトラバースします。このノードをルートとするサブツリーが2番目のツリーと同一である場合、それはサブツリーです。 例 #include <bits/stdc++.h> using namespace std; class node {    public:   &