Consider two points, \(p=(p_x, p_y)\) and \(q=(q_x, q_y)\). We consider the inversion or point reflection, \(r=(r_x, r_y)\), of point \(p\) across point \(q\) to be a \(180^{\circ}\) rotation of point \(p\) around \(q\).
Given \(n\) sets of points \(p\) and \(q\), find \(r\) for each pair of points and print two space-separated integers denoting the respective values of \(r_x\) and \(r_y\) on a new line.
Input Format
The first line contains an integer, \(n\), denoting the number of sets of points.
Each of the \(n\) subsequent lines contains four space-separated integers describing the respective values of \(p_x\), \(p_y\), \(q_x\), and \(q_y\) defining points \(p=(p_x,p_y)\) and \(q=(q_x,q_y)\).
Constraints
- \(1\leq n\leq 15\)
- \(-100\leq p_x,p_y,q_x,q_y\leq 100\)
Output Format
For each pair of points \(p\) and \(q\), print the corresponding respective values of \(r_x\) and \(r_y\) 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 \(p\), \(q\), and \(r\) for the \(n=2\) points given as Sample Input:
Thus, we print \(r_x\) and \(r_y\) as 2 2 on a new line.
Thus, we print \(r_x\) and \(r_y\) as 3 3 on a new line.
Solution
The rotation matrix around \(180^\circ\) is:
$$R(180^{\circ })={\begin{bmatrix}\cos 180^{\circ } &-\sin 180^{\circ } \\\sin 180^{\circ } &\cos 180^{\circ } \\\end{bmatrix}}={\begin{bmatrix}-1&0\\[3pt]0&-1\\\end{bmatrix}}$$
Now it's quite easy to translate by point \(q\), rotate with matrix \(R\) and translate back to \(q\):
$$r = q + R(180^{\circ }) \cdot (p - q) = 2q - p$$
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"
}