# Mirror of a point through a 3 D plane

• Last Updated : 20 Aug, 2022

Given a point(x, y, z) in 3-D and coefficients of the equation of a plane, the task is to find the mirror image of that point through the given plane.
Examples:

Input: a = 1, b = -2, c = 0, d = 0, x = -1, y = 3, z = 4
Output: x3 = 1.7999999999999998, y3 = -2.5999999999999996, z3 = 4.0
Input: a = 2, b = -1, c = 1, d = 3, x = 1, y = 3, z = 4
Output: x3 = -3.0, y3 = 5.0, z3 = 2.0

Approach: Equation of plane is as ax + by + cz + d = 0. Therefore, direction ratios of the normal to the plane are (a, b, c). Let N be the foot of perpendicular from a given point to the given plane so, line PN has directed ratios (a, b, c) and it passes through P(x1, y1, z1).
The equation of line PN will be as:-

`(x - x1) / a = (y - y1) / b = (z - z1) / c = k`

Hence any point on line PN can be written as:-

```x = a*k + x1
y = b*k + y1
z = c*k + z1```

since N lies in both line and plane so will satisfy(ax + by + cz + d = 0).

```=>a * (a * k + x1) + b * (b * k + y1) + c * (c * k + z1) + d = 0.
=>a * a * k + a * x1 + b * b * k + b * y1 + c * c * k + c * z1 + d = 0.
=>(a * a + b * b + c * c)k = -a * x1 - b * y1 - c * z1 - d.
=>k = (-a * x1 - b * y1 - c * z1 - d) / (a * a + b * b + c * c).```

Now, the coordinates of Point N in terms of k will be:-

```x2 = a * k + x1
y2 = b * k + y1
z2 = c * k + z1```

Since, Point N(x2, y2, z2) is midpoint of point P(x1, y1, z1) and point Q(x3, y3, z3), coordinates of Point Q are:-

```=> x3 = 2 * x2 - x1
=> y3 = 2 * y2 - y1
=> z3 = 2 * z2 - z1```

## C++

 `// C++ program to find``// Mirror of a point ``// through a 3 D plane``#include ``#include``#include ``#include ` `using` `namespace` `std;` `// Function to mirror image``void` `mirror_point(``float` `a, ``float` `b, ``                  ``float` `c, ``float` `d, ``                  ``float` `x1, ``float` `y1,``                  ``float` `z1)``{``    ``float` `k = (-a * x1 - b * ``                ``y1 - c * z1 - d) / ``        ``(``float``)(a * a + b * b + c * c);``    ``float` `x2 = a * k + x1;``    ``float` `y2 = b * k + y1;``    ``float` `z2 = c * k + z1;``    ``float` `x3 = 2 * x2 - x1;``    ``float` `y3 = 2 * y2 - y1;``    ``float` `z3 = 2 * z2 - z1;``      ` `    ``std::cout << std::fixed;``    ``std::cout << std::setprecision(1);``    ``cout << ``" x3 = "` `<< x3; ``    ``cout << ``" y3 = "` `<< y3; ``    ``cout << ``" z3 = "` `<< z3;``}` `// Driver Code``int` `main()``{``    ``float` `a = 1;``    ``float` `b = -2;``    ``float` `c = 0;``    ``float` `d = 0;``    ``float` `x1 = -1;``    ``float` `y1 = 3;``    ``float` `z1 = 4;``  ` `    ``// function call``    ``mirror_point(a, b, c, d, ``                 ``x1, y1, z1);``    ``return` `0;``}``// This code is contributed``// by Amber_Saxena.`

## C

 `// C program to find``// Mirror of a point``// through a 3 D plane``#include``    ` `// Function to mirror image``void` `mirror_point(``float` `a, ``float` `b,``                  ``float` `c, ``float` `d,``                  ``float` `x1, ``float` `y1,``                  ``float` `z1)``{``    ``float` `k = (-a * x1 - b *``                ``y1 - c * z1 - d) /``        ``(``float``)(a * a + b * b + c * c);``    ``float` `x2 = a * k + x1;``    ``float` `y2 = b * k + y1;``    ``float` `z2 = c * k + z1;``    ``float` `x3 = 2 * x2 - x1;``    ``float` `y3 = 2 * y2 - y1;``    ``float` `z3 = 2 * z2 - z1;``    ` `    ``printf``(``"x3 = %.1f "``, x3);``    ``printf``(``"y3 = %.1f "``, y3);``    ``printf``(``"z3 = %.1f "``, z3);``}` `// Driver Code``int` `main()``{``    ``float` `a = 1;``    ``float` `b = -2;``    ``float` `c = 0;``    ``float` `d = 0;``    ``float` `x1 = -1;``    ``float` `y1 = 3;``    ``float` `z1 = 4;` `    ``// function call``    ``mirror_point(a, b, c, d,``                 ``x1, y1, z1);``}` `// This code is contributed``// by Amber_Saxena.`

## Java

 `// Java program to find``// Mirror of a point``// through a 3 D plane``import` `java.io.*;` `class` `GFG``{``    ` `// Function to mirror image``static` `void` `mirror_point(``int` `a, ``int` `b, ``                         ``int` `c, ``int` `d,``                         ``int` `x1, ``int` `y1,``                         ``int` `z1)``{``    ``float` `k = (-a * x1 - b * y1 - c * z1 - d) /``        ``(``float``)(a * a + b * b + c * c);``    ``float` `x2 = a * k + x1;``    ``float` `y2 = b * k + y1;``    ``float` `z2 = c * k + z1;``    ``float` `x3 = ``2` `* x2 - x1;``    ``float` `y3 = ``2` `* y2 - y1;``    ``float` `z3 = ``2` `* z2 - z1;``    ` `    ``System.out.print(``"x3 = "` `+ x3 + ``" "``);``    ``System.out.print(``"y3 = "` `+ y3 + ``" "``);``    ``System.out.print(``"z3 = "` `+ z3 + ``" "``);``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `a = ``1``;``    ``int` `b = -``2``;``    ``int` `c = ``0``;``    ``int` `d = ``0``;``    ``int` `x1 = -``1``;``    ``int` `y1 = ``3``;``    ``int` `z1 = ``4``;` `    ``// function call``    ``mirror_point(a, b, c, d,``                 ``x1, y1, z1) ;``}``}` `// This code is contributed``// by inder_verma`

## Python

 `# Function to mirror image``def` `mirror_point(a, b, c, d, x1, y1, z1):``     ` `    ``k ``=``(``-``a ``*` `x1``-``b ``*` `y1``-``c ``*` `z1``-``d)``/``float``((a ``*` `a ``+` `b ``*` `b ``+` `c ``*` `c))``    ``x2 ``=` `a ``*` `k ``+` `x1``    ``y2 ``=` `b ``*` `k ``+` `y1``    ``z2 ``=` `c ``*` `k ``+` `z1``    ``x3 ``=` `2` `*` `x2``-``x1``    ``y3 ``=` `2` `*` `y2``-``y1``    ``z3 ``=` `2` `*` `z2``-``z1``    ``print` `"x3 ="``, x3,``    ``print` `"y3 ="``, y3,``    ``print` `"z3 ="``, z3,`  `# Driver Code``a ``=` `1``b ``=` `-``2``c ``=` `0``d ``=` `0``x1 ``=` `-``1``y1 ``=` `3``z1 ``=` `4` `# function call``mirror_point(a, b, c, d, x1, y1, z1) `

## C#

 `// C# program to find Mirror of``// a point through a 3 D plane``using` `System;` `class` `GFG``{``        ` `// Function to mirror image``static` `void` `mirror_point(``int` `a, ``int` `b,``                         ``int` `c, ``int` `d,``                         ``int` `x1, ``int` `y1,``                         ``int` `z1)``{``    ``float` `k = (-a * x1 - b * y1 - c * z1 - d) /``              ``(``float``)(a * a + b * b + c * c);``    ``float` `x2 = a * k + x1;``    ``float` `y2 = b * k + y1;``    ``float` `z2 = c * k + z1;``    ``float` `x3 = 2 * x2 - x1;``    ``float` `y3 = 2 * y2 - y1;``    ``float` `z3 = 2 * z2 - z1;``    ` `    ``Console.Write(``"x3 = "` `+ x3 + ``" "``);``    ``Console.Write(``"y3 = "` `+ y3 + ``" "``);``    ``Console.Write(``"z3 = "` `+ z3 + ``" "``);``}` `// Driver Code``static` `public` `void` `Main ()``{``    ``int` `a = 1;``    ``int` `b = -2;``    ``int` `c = 0;``    ``int` `d = 0;``    ``int` `x1 = -1;``    ``int` `y1 = 3;``    ``int` `z1 = 4;``    ` `    ``// function call``    ``mirror_point(a, b, c, d,``                 ``x1, y1, z1);``}``}` `// This code is contributed by jit_t`

## PHP

 ``

## Javascript

 ``

Output:

`x3 = 1.8 y3 = -2.6 z3 = 4.0`

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up