Find mirror image of a point in 2-D plane - GeeksforGeeks

29 Nov, 2021
Given a point P in 2-D plane and equation of mirror, the task is to find the image of that point Q formed due to the mirror. Equation of mirror is in form ax + by + c = Examples:  
Input : P = (1, 0), a = -1, b = 1, c = 0
Output : Q = (0, 1)

Input : P = (3, 3), a = 0, b = 1, c = -2
Output : Q = (3, 1)
 
 
 
 
Let coordinate of P(given point) be (x1, y1)
Let coordinate of Q(image point) be (x2, y2)
Let coordinate of R(point on mirror) be (x3, y3)
Since object and image are equidistant from mirror, R must be middle point of P and QSince equation of mirror is given to be: ax + by + c = 0. Equation of line passing through P and Q is perpendicular to mirror. Therefore equation of line passing through P and Q becomes ay – bx + d = 0, Also P passes through line passing through P and Q, so we put coordinate of P in above equation, a*y1 – b*x1 + d = 0 d = b*x1 – a*y1Also R is intersection of mirror and line passing through P and Q. So we find solution of ax + by + c = 0 ay -bx + d = 0 Since a, b, c, d all are known we can find x and y here. Since coordinates of R is known now ie.. x3, y3 are known now.Since R is middle point of PQ, (x3, y3) = ((x1+x2)/2, (y1+y2)/2) Since x1, y1, x3, y3 are known, we get below equation where (x, y) are coordinates of Q(image point) 
We use above formula to find mirror image of point P(x1, y1) with respect to mirror of equation ax + by + c  
C++
Java
Python 3
C#
Javascript
// C++ code to find mirror image#include <iostream>using namespace std;  // C++ function which finds coordinates// of mirror image.// This function return a pair of doublepair<double, double> mirrorImage(    double a, double b, double c,    double x1, double y1){    double temp = -2 * (a * x1 + b * y1 + c) /                              (a * a + b * b);    double x = temp * a + x1;    double y = temp * b + y1;    return make_pair(x, y);}  // Driver code to test above functionint main(){    double a = -1.0;    double b = 1.0;    double c = 0.0;    double x1 = 1.0;    double y1 = 0.0;      pair<double, double> image = mirrorImage(a, b, c, x1, y1);    cout << "Image of point (" << x1 << ", " << y1 << ") ";    cout << "by mirror (" << a << ")x + (" << b         << ")y + (" << c << ") = 0, is :";    cout << "(" << image.first << ", " << image.second         << ")" << endl;      return 0;}
// Java code to find mirror imageclass GFG{static class pair{     double first, second;     public pair(double first, double second)     {         this.first = first;         this.second = second;     } }   // function which finds coordinates// of mirror image.// This function return a pair of doublestatic pair mirrorImage(double a, double b,                         double c, double x1,                         double y1){    double temp = -2 * (a * x1 + b * y1 + c) /                       (a * a + b * b);    double x = temp * a + x1;    double y = temp * b + y1;    return new pair(x, y);}  // Driver codepublic static void main(String []args){    double a = -1.0;    double b = 1.0;    double c = 0.0;    double x1 = 1.0;    double y1 = 0.0;      pair image = mirrorImage(a, b, c, x1, y1);    System.out.print("Image of point (" + x1 +                                    ", " + y1 + ") ");    System.out.print("by mirror (" + a +                           ")x + (" + b +                           ")y + (" + c + ") = 0, is :");    System.out.println("(" + image.first +                        ", " + image.second + ")");}}  // This code is contributed by 29AjayKumar
# Python 3 code to find mirror image   # Python function which finds coordinates # of mirror image. # This function return a pair of double def mirrorImage( a, b, c, x1, y1):    temp = -2 * (a * x1 + b * y1 + c) /(a * a + b * b)    x = temp * a + x1    y = temp * b + y1     return (x, y)  # Driver code to test above function a = -1.0b = 1.0c = 0.0x1 = 1.0y1 = 0.0  x, y = mirrorImage(a, b, c, x1, y1); print("Image of point (" + str (x1) + ", " + str( y1) + ") ")print("by mirror (" + str (a) + ")x + (" + str( b) + ")y + (" +str(c) + ") = 0, is :") print( "(" + str(x) + ", " + str(y) + ")" )   # This code is contributed by ApurvaRaj
// C# code to find mirror imageusing System;  class GFG{class pair{     public double first, second;     public pair(double first, double second)     {         this.first = first;         this.second = second;     } }   // function which finds coordinates// of mirror image.// This function return a pair of doublestatic pair mirrorImage(double a, double b,                         double c, double x1,                         double y1){    double temp = -2 * (a * x1 + b * y1 + c) /                       (a * a + b * b);    double x = temp * a + x1;    double y = temp * b + y1;    return new pair(x, y);}  // Driver codepublic static void Main(String []args){    double a = -1.0;    double b = 1.0;    double c = 0.0;    double x1 = 1.0;    double y1 = 0.0;      pair image = mirrorImage(a, b, c, x1, y1);    Console.Write("Image of point (" + x1 +                                 ", " + y1 + ") ");    Console.Write("by mirror (" + a +                        ")x + (" + b +                        ")y + (" + c + ") = 0, is :");    Console.WriteLine("(" + image.first +                      ", " + image.second + ")");}}  // This code is contributed by PrinciRaj1992
<script>      // JavaScript code to find mirror image        // JavaScript function which finds coordinates      // of mirror image.      // This function return a pair of double      function mirrorImage(a, b, c, x1, y1) {        var temp = (-2 * (a * x1 + b * y1 + c)) / (a * a + b * b);        var x = temp * a + x1;        var y = temp * b + y1;        return [x, y];      }        // Driver code to test above function      var a = -1.0;      var b = 1.0;      var c = 0.0;      var x1 = 1.0;      var y1 = 0.0;        var [x, y] = mirrorImage(a, b, c, x1, y1);      document.write("Image of point (" + x1 + ", " + y1 + ") ");      document.write(        "by mirror <br> (" + a + ")x + (" + b + ")y + (" + c + ") = 0, is :"      );      document.write("(" + x + ", " + y + ")");    </script>
Output:  
Image of point (1, 0) by mirror 
(-1)x + (1)y + (0) = 0, is :(0, 1)
This article is contributed by Pratik Chhajer. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
29AjayKumar
princiraj1992
ApurvaRaj
rdtank
Geometric
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for distance between two points on earth
Convex Hull | Set 1 (Jarvis's Algorithm or Wrapping)
Line Clipping | Set 1 (Cohen–Sutherland Algorithm)
Convex Hull | Set 2 (Graham Scan)
Check whether a given point lies inside a triangle or not
Optimum location of point to minimize total distance
Convex Hull using Divide and Conquer Algorithm
Polygon Clipping | Sutherland–Hodgman Algorithm
Closest Pair of Points | O(nlogn) Implementation
Given n line segments, find if any two segments intersect