Consider two points, and . We consider the inversion or point reflection, , of point across point to be a rotation of point around .
Given sets of points and , find for each pair of points and print two space-separated integers denoting the respective values of and on a new line.
Input Format
The first line contains an integer, , denoting the number of sets of points.
Each of the subsequent lines contains four space-separated integers describing the respective values of , , , and defining points and .
Constraints
Output Format
For each pair of points and , print the corresponding respective values of and as two space-separated integers on a new line.
Sample Input
2
0 0 1 1
1 1 2 2
Sample Output
2 2
3 3
Explanation
The graphs below depict points , , and for the points given as Sample Input:
Thus, we print and as 2 2 on a new line.
Thus, we print and as 3 3 on a new line.
Solution
The rotation matrix around is:
Now it's quite easy to translate by point , rotate with matrix and translate back to :
The final implementation then looks like this in Ruby:
gets.to_i.times{
x = gets.split.map(&:to_i)
print 2 * x[2] - x[0], ' ', 2 * x[3] - x[1], "\n"
}