Related Articles

# Check if it is possible to reach vector B by rotating vector A and adding vector C to it

• Last Updated : 13 Jul, 2021

Given three 2-Dimensional 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:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```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`

My Personal Notes arrow_drop_up