Hack Your Minds

Simple Program For Finding Symmetrical Point

Lakshmi Narayanan G

Lakshmi Narayanan G


Hackerrank Problem Solving Ruby Mathematics

Simple Program For Finding Symmetrical Point

Posted by Lakshmi Narayanan G on .
Featured

Hackerrank Problem Solving Ruby Mathematics

Simple Program For Finding Symmetrical Point

Posted by Lakshmi Narayanan G on .

Following up from the earlier post, I first started with a very simple mathematical problem of finding symmetrical point, given a set of coordinates.

The problem statement is as follows:

Given two points P and Q, output the symmetric point of point P about Q.

Input Format

The first line contains an integer T representing the number of testcases
Each test case is a line containing four space separated integers Px Py Qx Qy representing the (x,y) coordinates of P and Q.

Output Format

For each test case output x and y coordinates of the symmetric point (each point in a new line).

Sample Input

2  
0 0 1 1  
1 1 2 2  

Sample Output

2 2  
3 3  

Point of Symmetry: A point of symmetry is a point that represents a "center" of sorts for the figure. For any line that you draw through the point of symmetry, if this line crosses the figure on one side of the point, the line will also cross the figure on the other side of the point, and at exactly the same distance from the point

Source: Purple Math

Formula: In Euclidean geometry, the inversion of a point X with respect to a point P is a point X* such that P is the midpoint of the line segment with endpoints X and X. In other words, the vector from X to P is the same as the vector from P to X.

The formula for the inversion in P is
x*=2a−x

Source: Point reflection - Wikipedia

With that in hand, the formula to find symmetric point of x coordinate is:

x' = 2Qx - Px  

And for Y coordinate, it is:

y' = 2Qy - Py  

The Solution:

test_cases = STDIN.readline().chomp.to_i  
loop do  
  co = STDIN.readline().split.map(&:to_i)
  print "#{2 * co[2] - co[0]} #{2* co[3] - co[1]}\n"
  test_cases = test_cases - 1
  break if test_cases == 0
end

Breakdown of the solution:

  • Read the number of test cases from STDIN as integer
  • Loop over the test cases
  • Read the set of points for each test case, into an integer array called co (Short for coordinates)
  • Px = co[0], Py = co[1], Qx = co[2], Qy = co[3]
  • Based on the formula above, the solution translates to:
    • x' = 2 * co[2] - co[0]
    • y' = 2 * co[3] - co[1]
  • Since Hackerrank requires the output to be in specific format, the print statement is modeled that way

That's it folks ! I'll be starting with couple of Project Euler problems in the next posts.

Note: Solution files for this and any future Mathematics problems that I solve can be found here: Github: glnarayanan/Mathematics

Lakshmi Narayanan G

Lakshmi Narayanan G

http://gln.me

Knowledge Hunter, Blogger, Social Media Aficionado, Open Source FanBuoy, Tea Lover, Happiness Enthusiast @ Chargebee, Lead Volunteer at Headstart Network Foundation

View Comments...