Related Articles
Check if it is possible to reach vector B by rotating vector A and adding vector C to it
• Last Updated : 13 Apr, 2021

Given three 2-Dimentional vector co-ordinates A, B and C. The task is to perform below operations any number of times on vector A to get vector B

• Rotate the vector 90 degrees clockwise.
• Add vector C to it.

Print “YES” B is obtained using the above operations, else Print “NO”.
Examples:

```Input: Vector A: 2 3, Vector B: 2 3, Vector C: 0 0
Output: YES
The given vector A has coordinate (2, 3) and we need to
convert this vector A to vector B which is also (2, 3).
By rotating vector A 4 times by 90 degrees and adding
it to vector C(0, 0) will give us vector B(2, 3).

Input: Vector A: 0 0, Vector B: 1 1, Vector C: 2 2
Output: NO``` Below is the step by step algorithm to solve this problem:

• Initialize three vectors of 2-D coordinates as A ( a, b ), B ( x, y ) and C ( p, q ).
• Coordinates of vector A can be of any quadrant. So, initialize a check function for all the quadrant and check if any of it is true.
• Find a-x and b-y, which will tell us how much we need to make it to vector B.
• Initialize d = p*p + q*q. If d = 0 then you need not to add anything in vector A.
• If D > 0, then check if a*p + b*q and b*p – a*q is in the multiple of ‘d’ so that it is possible to get the vector B.

Below is the implementation of above algorithm:

## C++

 `// C++ program to Check if it is``// possible to reach vector B by``// Rotating vector A and adding``// vector C to it any number of times` `#include ``using` `namespace` `std;``#define ll long long` `// function to check if vector B is``// possible from vector A``ll check(ll a, ll b, ll p, ll q)``{``    ``ll d = p * p + q * q;` `    ``// if d = 0, then you need to add nothing to vector A``    ``if` `(d == 0)``        ``return` `a == 0 && b == 0;``    ``else``        ``return` `(a * p + b * q) % d == 0 && (b * p - a * q) % d == 0;``}` `bool` `check(``int` `a, ``int` `b, ``int` `x, ``int` `y, ``int` `p, ``int` `q)``{``    ``// for all four quadrants``    ``if` `(check(a - x, b - y, p, q)``        ``|| check(a + x, b + y, p, q)``        ``|| check(a - y, b + x, p, q)``        ``|| check(a + y, b - x, p, q))``        ``return` `true``;``    ``else``        ``return` `false``;``}` `// Driver code``int` `main()``{``    ``// initialize all three``    ``// vector coordinates` `    ``int` `a = -4, b = -2;``    ``int` `x = 0, y = 0;``    ``int` `p = -2, q = -1;` `    ``if` `(check(a, b, x, y, p, q))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;` `    ``return` `0;``}`

## Java

 `// Java program to Check if it is``// possible to reach vector B by``// Rotating vector A and adding``// vector C to it any number of times.``  ` `public` `class` `GFG {` `    ``// function to check if vector B is``    ``// possible from vector A``    ``static` `boolean` `check(``long` `a, ``long` `b, ``long` `p, ``long` `q)``    ``{``        ``long` `d = p * p + q * q;``      ` `        ``// if d = 0, then you need to add nothing to vector A``        ``if` `(d == ``0``)``            ``return` `a == ``0` `&& b == ``0``;``        ``else``            ``return` `(a * p + b * q) % d == ``0` `&& (b * p - a * q) % d == ``0``;``    ``}``      ` `    ``static` `boolean` `check(``int` `a, ``int` `b, ``int` `x, ``int` `y, ``int` `p, ``int` `q)``    ``{``        ``// for all four quadrants``        ``if` `(check(a - x, b - y, p, q)``            ``|| check(a + x, b + y, p, q)``            ``|| check(a - y, b + x, p, q)``            ``|| check(a + y, b - x, p, q))``            ``return` `true``;``        ``else``            ``return` `false``;``    ``}``      `  `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``// initialize all three``        ``// vector coordinates``      ` `        ``int` `a = -``4``, b = -``2``;``        ``int` `x = ``0``, y = ``0``;``        ``int` `p = -``2``, q = -``1``;``      ` `        ``if` `(check(a, b, x, y, p, q))``            ``System.out.println(``"Yes"``);``        ``else``            ``System.out.println(``"No"``);``    ` `    ``}``    ``// This Code is contributed by ANKITRAI1``}`

## Python3

 `# Python3 program to Check if it``# is possible to reach vector B``# by Rotating vector A and adding``# vector C to it any number of times` `# function to check if vector B``# is possible from vector A``def` `check(a, b, p, q):` `    ``d ``=` `p ``*` `p ``+` `q ``*` `q;` `    ``# if d = 0, then you need to``    ``# add nothing to vector A``    ``if` `(d ``=``=` `0``):``        ``return` `a ``=``=` `0` `and` `b ``=``=` `0``;``    ``else` `:``        ``return` `((a ``*` `p ``+` `b ``*` `q) ``%` `d ``=``=` `0` `and``                ``(b ``*` `p ``-` `a ``*` `q) ``%` `d ``=``=` `0``);` `def` `checks(a, b, x, y, p, q):` `    ``# for all four quadrants``    ``if` `(check(a ``-` `x, b ``-` `y, p, q) ``or``        ``check(a ``+` `x, b ``+` `y, p, q) ``or``        ``check(a ``-` `y, b ``+` `x, p, q) ``or``        ``check(a ``+` `y, b ``-` `x, p, q)):``        ``return` `True``;``    ``else``:``        ``return` `False``;` `# Driver code` `# initialize all three``# vector coordinates``a ``=` `-``4``;``b ``=` `-``2``;``x ``=` `0``;``y ``=` `0``;``p ``=` `-``2``;``q ``=` `-``1``;` `if` `(checks(a, b, x, y, p, q)):``    ``print``( ``"Yes"``);``else``:``    ``print` `(``"No"``);` `# This code is contributed``# by Shivi_Aggarwal`

## C#

 `// C# program to Check if it is``// possible to reach vector B by``// Rotating vector A and adding``// vector C to it any number of times.``using` `System;``class` `GFG``{` `// function to check if vector B is``// possible from vector A``static` `bool` `check(``long` `a, ``long` `b,``                  ``long` `p, ``long` `q)``{``    ``long` `d = p * p + q * q;``    ` `    ``// if d = 0, then you need to``    ``// add nothing to vector A``    ``if` `(d == 0)``        ``return` `a == 0 && b == 0;``    ``else``        ``return` `(a * p + b * q) % d == 0 &&``               ``(b * p - a * q) % d == 0;``}``    ` `static` `bool` `check(``int` `a, ``int` `b, ``int` `x,``                  ``int` `y, ``int` `p, ``int` `q)``{``    ``// for all four quadrants``    ``if` `(check(a - x, b - y, p, q) ||``        ``check(a + x, b + y, p, q) ||``        ``check(a - y, b + x, p, q) ||``        ``check(a + y, b - x, p, q))``        ``return` `true``;``    ``else``        ``return` `false``;``}``    ` `// Driver code``public` `static` `void` `Main()``{``    ``// initialize all three``    ``// vector coordinates``    ``int` `a = -4, b = -2;``    ``int` `x = 0, y = 0;``    ``int` `p = -2, q = -1;``    ` `    ``if` `(check(a, b, x, y, p, q))``        ``Console.Write(``"Yes"``);``    ``else``        ``Console.Write(``"No"``);``}``}` `// This code is contributed``// by ChitraNayal`

## PHP

 ``

## Javascript

 ``
Output:
`Yes`

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up