Comprobar si un punto se encuentra dentro de una esfera o no

Dadas las coordenadas del centro de una esfera (cx, cy, cz) y su radio r . Nuestra tarea es comprobar si un punto (x, y, z) se encuentra dentro, fuera o sobre esta esfera.
Ejemplos: 
 

Input : Centre(0, 0, 0) Radius 3
        Point(1, 1, 1)
Output :Point is inside the sphere

Input :Centre(0, 0, 0) Radius 3
       Point(2, 1, 2)
Output :Point lies on the sphere

Input :Centre(0, 0, 0) Radius 3
       Point(10, 10, 10)
Output :Point is outside the sphere

Aproximación: 
Si un punto se encuentra dentro de una esfera o no, depende de su distancia al centro. 
Un punto (x, y, z) está dentro de la esfera con centro (cx, cy, cz) y radio r si 
 

( x-cx ) ^2 + (y-cy) ^2 + (z-cz) ^ 2 < r^2 

Un punto (x, y, z) se encuentra en la esfera con centro (cx, cy, cz) y radio r si 
 

( x-cx ) ^2 + (y-cy) ^2 + (z-cz) ^ 2 = r^2 

Un punto (x, y, z) está fuera de la esfera con centro (cx, cy, cz) y radio r si 
 

( x-cx ) ^2 + (y-cy) ^2 + (z-cz) ^ 2 > r^2 

C++

// CPP code to illustrate above approach
#include <bits/stdc++.h>
using namespace std;
// function to calculate the distance between centre and the point
int check(int cx, int cy, int cz, int x, int y, int z)
{
    int x1 = pow((x - cx), 2);
    int y1 = pow((y - cy), 2);
    int z1 = pow((z - cz), 2);
 
    // distance between the centre
    // and given point
    return (x1 + y1 + z1);
}
 
// Driver program to test above function
int main()
{
    // coordinates of centre
    int cx = 1, cy = 2, cz = 3;
 
    int r = 5; // radius of the sphere
    int x = 4, y = 5, z = 2; // coordinates of point
 
    int ans = check(cx, cy, cz, x, y, z);
 
    // distance btw centre and point is less
    // than radius
    if (ans < (r * r))
        cout << "Point is inside the sphere";
 
    // distance btw centre and point is
    // equal to radius
    else if (ans == (r * r))
        cout << "Point lies on the sphere";
 
    // distance btw center and point is
    // greater than radius
    else
        cout << "Point is outside the sphere";
    return 0;
}

Java

// Java code to illustrate above approach
import java.io.*;
import java.util.*;
import java.lang.*;
 
class GfG {
     
    // function to calculate the distance
    // between centre and the point
    public static int check(int cx, int cy,
                 int cz, int x, int y, int z)
    {
        int x1 = (int)Math.pow((x - cx), 2);
        int y1 = (int)Math.pow((y - cy), 2);
        int z1 = (int)Math.pow((z - cz), 2);
     
        // distance between the centre
        // and given point
        return (x1 + y1 + z1);
    }
     
    // Driver program to test above function
    public static void main(String[] args)
    {
        // coordinates of centre
        int cx = 1, cy = 2, cz = 3;
     
        int r = 5; // radius of the sphere
         
        // coordinates of point
        int x = 4, y = 5, z = 2;
     
        int ans = check(cx, cy, cz, x, y, z);
     
        // distance btw centre and point is less
        // than radius
        if (ans < (r * r))
            System.out.println("Point is inside"
                       + " the sphere");
     
        // distance btw centre and point is
        // equal to radius
        else if (ans == (r * r))
            System.out.println("Point lies on"
                        + " the sphere");
     
        // distance btw center and point is
        // greater than radius
        else
            System.out.println("Point is outside"
                             + " the sphere");
    }
}
 
// This code is contributed by Sagar Shukla.

Python

# Python3 code to illustrate above approach
 
import math
# function to calculate distance btw center and given point
def check(cx, cy, cz, x, y, z, ):
     
    x1 = math.pow((x-cx), 2)
    y1 = math.pow((y-cy), 2)
    z1 = math.pow((z-cz), 2)
    return (x1 + y1 + z1) # distance between the centre and given point
     
# driver code   
cx = 1
cy = 2 # coordinates of centre
cz = 3
 
r = 5 # radius of sphere
 
x = 4
y = 5 # coordinates of the given point
z = 2
# function call to calculate distance btw centre and given point
ans = check(cx, cy, cz, x, y, z);
 
# distance btw centre and point is less than radius
if ans<(r**2):
    print("Point is inside the sphere")
 
# distance btw centre and point is equal to radius
elif ans ==(r**2):
    print("Point lies on the sphere")
 
# distance btw centre and point is greater than radius
else:
    print("Point is outside the sphere")

C#

// C# code to illustrate
// above approach
using System;
 
class GFG
{
     
    // function to calculate
    // the distance between
    // centre and the point
    public static int check(int cx, int cy,
                            int cz, int x,
                            int y, int z)
    {
        int x1 = (int)Math.Pow((x - cx), 2);
        int y1 = (int)Math.Pow((y - cy), 2);
        int z1 = (int)Math.Pow((z - cz), 2);
     
        // distance between the
        // centre and given point
        return (x1 + y1 + z1);
    }
     
    // Driver Code
    public static void Main()
    {
        // coordinates of centre
        int cx = 1, cy = 2, cz = 3;
     
        int r = 5; // radius of the sphere
         
        // coordinates of point
        int x = 4, y = 5, z = 2;
     
        int ans = check(cx, cy, cz,
                        x, y, z);
     
        // distance btw centre
        // and point is less
        // than radius
        if (ans < (r * r))
            Console.WriteLine("Point is inside" +
                                  " the sphere");
     
        // distance btw centre
        // and point is
        // equal to radius
        else if (ans == (r * r))
            Console.WriteLine("Point lies on" +
                                " the sphere");
     
        // distance btw center
        // and point is greater
        // than radius
        else
            Console.WriteLine("Point is outside" +
                                   " the sphere");
    }
}
 
// This code is contributed by anuj_67.

PHP

<?php
// function to calculate 
// the distance between
// centre and the point
function check($cx, $cy, $cz,
               $x, $y, $z)
{
    $x1 = pow(($x - $cx), 2);
    $y1 = pow(($y - $cy), 2);
    $z1 = pow(($z - $cz), 2);
 
    // distance between the
    // centre and given point
    return ($x1 + $y1 + $z1);
}
 
// Driver Code
 
// coordinates of centre
$cx = 1;
$cy = 2;
$cz = 3;
 
$r = 5; // radius of the sphere
$x = 4;
$y = 5;
$z = 2; // coordinates of point
 
$ans = check($cx, $cy, $cz,
             $x, $y, $z);
 
// distance btw centre and
// point is less than radius
if ($ans < ($r * $r))
    echo "Point is inside " .  
                "the sphere";
 
// distance btw centre and
// point is equal to radius
else if ($ans == ($r * $r))
    echo "Point lies on the sphere";
 
// distance btw center and point
// is greater than radius
else
    echo "Point is outside " .
                 "the sphere";
     
// This code is contributed
// by shiv_bhakt
?>

Javascript

<script>
 
// Javascript code to illustrate above approach
 
// function to calculate the distance between centre and the point
function check(cx, cy, cz, x, y, z)
{
    let x1 = Math.pow((x - cx), 2);
    let y1 = Math.pow((y - cy), 2);
    let z1 = Math.pow((z - cz), 2);
 
    // distance between the centre
    // and given point
    return (x1 + y1 + z1);
}
 
// Driver program to test above function
  
    // coordinates of centre
    let cx = 1, cy = 2, cz = 3;
 
    let r = 5; // radius of the sphere
    let x = 4, y = 5, z = 2; // coordinates of point
 
    let ans = check(cx, cy, cz, x, y, z);
 
    // distance btw centre and point is less
    // than radius
    if (ans < (r * r))
        document.write("Point is inside the sphere");
 
    // distance btw centre and point is
    // equal to radius
    else if (ans == (r * r))
        document.write("Point lies on the sphere");
 
    // distance btw center and point is
    // greater than radius
    else
        document.write("Point is outside the sphere");
     
// This code is contributed by Mayank Tyagi
 
</script>

Producción: 

Point is inside the sphere

Complejidad de tiempo: O(1)
 

Publicación traducida automáticamente

Artículo escrito por aman0309 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 *