📜  检查点是否位于球体内

📅  最后修改于: 2021-10-23 09:04:52             🧑  作者: Mango

给定球心坐标(cx, cy, cz)及其半径r 。我们的任务是检查点(x, y, z) 是否位于该球体的内部、外部或之上。
例子:

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

方法:
一个点是否位于球体内,取决于它与中心的距离。
点 (x, y, z) 位于球心 (cx, cy, cz) 和半径 r 的球体内,如果

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

点 (x, y, z) 位于球心 (cx, cy, cz) 和半径 r 的球面上,如果

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

点 (x, y, z) 在球心 (cx, cy, cz) 和半径 r 的球外,如果

( x-cx ) ^2 + (y-cy) ^2 + (z-cz) ^ 2 > r^2 
C++
// CPP code to illustrate above approach
#include 
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


Javascript


输出:

Point is inside the sphere

时间复杂度: O(1)