Encuentra el pie de la perpendicular de un punto en un plano 3D

Dado un punto (x1, y1, z1) en 3D y los coeficientes de la ecuación del plano, tenemos que encontrar el pie de la perpendicular de un punto en un plano 3D.
Ejemplos: 
 

Entrada: a = 1, b = -2, c = 0, d = 0, x = -1, y = 3, z = 4 
Salida: x2 = 0,4 y2 = 0,2 z2 = 4,0
Entrada: a = 2, b = -1, c = 1, d = 3, x = 1, y = 3, z = 4 
Salida: x2 = -1,0 y2 = 4,0 z2 = 3,0

Enfoque: La ecuación del plano se da 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 el 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 = un * k + x1 
y = segundo * 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 = segundo * k + y1 
z2 = c * k + z1

A continuación se muestra la implementación de lo anterior: 
 

C++

// C++ program to find
// foot of perpendicular
// of a point in a 3 D plane.
#include <bits/stdc++.h>
#include <iomanip>
#include <iostream>
#include <math.h>
using namespace std;
 
// Function to find foot of perpendicular
void foot(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;
 
    std::cout << std::fixed;
    std::cout << std::setprecision(1);
    cout << " x2 = " << x2;
    cout << " y2 = " << y2;
    cout << " z2 = " << z2;
}
 
// 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
    foot(a, b, c, d, x1, y1, z1);
    return 0;
}
// This code is contributed  by Amber_Saxena.

Java

// Java program to find
// foot of perpendicular
// of a point in a 3 D plane.
import java.util.*;
import java.text.*;
 
class solution
{
 
// Function to find foot of perpendicular
static void foot(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;
    DecimalFormat form = new DecimalFormat("0.0");
    System.out.print(" x2 = " +form.format(x2));
    System.out.print(" y2 = " +form.format(y2));
    System.out.print( " z2 = " +form.format(z2));
}
 
// Driver Code
public static void main(String arr[])
{
    float a = 1;
    float b = -2;
    float c = 0;
    float d = 0;
    float x1 = -1;
    float y1 = 3;
    float z1 = 4;
 
    // function call
    foot(a, b, c, d, x1, y1, z1);
 
}
}

Python3

# Python3 program to find
# foot of perpendicular
# of a point in a 3 D plane.
 
# Function to find foot of perpendicular
def foot(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;
 
    print("x2 =",round(x2,1))
    print("y2 =",round(y2,1))
    print("z2 =",round(z2,1))
 
 
# Driver Code
if __name__ == "__main__" :
 
    a = 1
    b = -2
    c = 0
    d = 0
    x1 = -1
    y1 = 3
    z1 = 4
 
    # function call
    foot(a, b, c, d, x1, y1, z1)
 
# This code is contributed by Ryuga

C#

// C# program to find
// foot of perpendicular
// of a point in a 3 D plane.
using System;
using System.Globalization;
 
class GFG
{
 
// Function to find foot of perpendicular
static void foot(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;
    NumberFormatInfo form = new NumberFormatInfo();
    form.NumberDecimalSeparator = ".";
    Console.Write(" x2 = " + x2.ToString(form));
    Console.Write(" y2 = " + y2.ToString(form));
    Console.Write( " z2 = " + z2.ToString(form));
}
 
// Driver Code
public static void Main(String []arr)
{
    float a = 1;
    float b = -2;
    float c = 0;
    float d = 0;
    float x1 = -1;
    float y1 = 3;
    float z1 = 4;
 
    // function call
    foot(a, b, c, d, x1, y1, z1);
}
}
 
// This code contributed by Rajput-Ji

PHP

<?php
// PHP program to find foot of perpendicular
// of a point in a 3 D plane.
 
// Function to find foot of perpendicular
function foot($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;
 
    echo "x2 = " . round($x2, 1);
    echo " y2 = " . round($y2, 1);
    echo " z2 = " . round($z2, 1);
}
 
// Driver Code
$a = 1; $b = -2; $c = 0; $d = 0;
$x1 = -1; $y1 = 3; $z1 = 4;
 
// function call
foot($a, $b, $c, $d, $x1, $y1, $z1);
 
// This code is contributed by ita_c
?>

Javascript

<script>
      // JavaScript program to find
      // foot of perpendicular
      // of a point in a 3 D plane.
 
      // Function to find foot of perpendicular
      function foot(a, b, c, d, x1, y1, z1) {
        var k = (-a * x1 - b * y1 - c * z1 - d) / (a * a + b * b + c * c);
        var x2 = a * k + x1;
        var y2 = b * k + y1;
        var z2 = c * k + z1;
 
        document.write("x2 =" + x2.toFixed(1) + " ");
        document.write("y2 =" + y2.toFixed(1) + " ");
        document.write("z2 =" + z2.toFixed(1) + " ");
      }
 
      // 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
      foot(a, b, c, d, x1, y1, z1);
    </script>
Producción: 

x2 = 0.4 y2 = 0.2 z2 = 4.0

 

Publicación traducida automáticamente

Artículo escrito por Amber_Saxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *