Dado un punto (x, y, z) en 3-D y los coeficientes de la ecuación de un plano, la tarea es encontrar la imagen especular de ese punto a través del plano dado.
Ejemplos:
Entrada: a = 1, b = -2, c = 0, d = 0, x = -1, y = 3, z = 4
Salida: x3 = 1,7999999999999998, y3 = -2,5999999999999996, z3 = 4,0
Entrada: a = 2 , b = -1, c = 1, d = 3, x = 1, y = 3, z = 4
Salida: x3 = -3,0, y3 = 5,0, z3 = 2,0
Enfoque: La ecuación del plano es como ax + by + cz + d = 0. Por lo tanto, las relaciones de dirección de la normal al plano son (a, b, c) . Sea N el pie de la perpendicular desde un punto dado al plano dado, entonces, la línea PN tiene razones dirigidas (a, b, c) y pasa por P(x1, y1, z1).
La ecuación de la línea PN será como: –
(x - x1) / a = (y - y1) / b = (z - z1) / c = k
Por lo tanto, cualquier punto en la línea PN se puede escribir como: –
x = a*k + x1 y = b*k + y1 z = c*k + z1
dado que N se encuentra tanto en la línea como en el plano, satisfará (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).
Ahora, las coordenadas del Punto N en términos de k serán:
x2 = a * k + x1 y2 = b * k + y1 z2 = c * k + z1
Dado que el punto N(x2, y2, z2) es el punto medio del punto P(x1, y1, z1) y el punto Q(x3, y3, z3), las coordenadas del punto Q son:
=> 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 <bits/stdc++.h> #include<math.h> #include <iostream> #include <iomanip> 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<stdio.h> // 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
<?php // PHP program to find Mirror of // a point through a 3 D plane // Function to mirror image function mirror_point($a, $b, $c, $d, $x1, $y1, $z1) { $k = (-$a * $x1 - $b * $y1 - $c * $z1 - $d) / ($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; echo sprintf("x3 = %.1f ", $x3); echo sprintf("y3 = %.1f ", $y3); echo sprintf("z3 = %.1f ", $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); // This code is contributed // by Amber_Saxena. ?>
Javascript
<script> // JavaScript program to find // Mirror of a point // through a 3 D plane // Function to mirror image function mirror_point(a, b, c, d, x1, y1, z1) { var k = parseFloat( (-a * x1 - b * y1 - c * z1 - d) / parseFloat(a * a + b * b + c * c) ); var x2 = parseFloat(a * k + x1); var y2 = parseFloat(b * k + y1); var z2 = parseFloat(c * k + z1); var x3 = parseFloat(2 * x2 - x1).toFixed(1); var y3 = parseFloat(2 * y2 - y1).toFixed(1); var z3 = parseFloat(2 * z2 - z1).toFixed(1); document.write(" x3 = " + x3); document.write(" y3 = " + y3); document.write(" z3 = " + z3); } // Driver Code var a = 1; var b = -2; var c = 0; var d = 0; var x1 = -1; var y1 = 3; var z1 = 4; // function call mirror_point(a, b, c, d, x1, y1, z1); </script>
x3 = 1.8 y3 = -2.6 z3 = 4.0
Publicación traducida automáticamente
Artículo escrito por anamika9988 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA