📜  查找3D中三角形的所有角度

📅  最后修改于: 2021-04-24 22:38:31             🧑  作者: Mango

给定3D中一个三角形的3个顶点的坐标,即A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3)。任务是找出由上述坐标形成的三角形的所有角度。

例子:

Input: 
x1 = -1, y1 = 3, z1 = 2
x2 = 2, y2 = 3, z2 = 5
x3 = 3, y3 = 5, z3 = -2

Output:
angle A =  90.0 degree
angle B =  54.736 degree
angle C =  35.264 degree

方法:
为了找到角度A,找出AB和AC的方向比:
AB的方向比= x2-x1,y2-y1,z2-z1
AC的方向比率= x3-x1,y3-y1,z3-z1
然后角度A = cos^{-1}\left(\frac{(x_{2}-x_{1})*(x_{3}-x_{1})+(y_{2}-y_{1})*(y_{3}-y_{1})+(z_{2}-z_{1})*(z_{3}-z_{1})}{(\sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}+(z_{2}-z_{1})^{2}})*(\sqrt{(x_{3}-x_{1})^{2}+(y_{3}-y_{1})^{2}+(z_{3}-z_{1})^{2}})}\right)

为了找到角度B,找出BA和BC的方向比:
BA的方向比= x1-x2,y1-y2,z1-z2
BC的方向比率= x3-x2,y3-y2,z3-z2
那么角度B = cos^{-1}\left(\frac{(x_{1}-x_{2})*(x_{3}-x_{2})+(y_{1}-y_{2})*(y_{3}-y_{2})+(z_{1}-z_{2})*(z_{3}-z_{2})}{(\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}+(z_{1}-z_{2})^{2}})*(\sqrt{(x_{3}-x_{2})^{2}+(y_{3}-y_{2})^{2}+(z_{3}-z_{2})^{2}})}\right)

为了找到角度C,找出CB和CA的方向比:
CB的方向比率= x2-x3,y2-y3,z2-z3
CA的方向比= x1-x3,y1-y3,z1-z3
那么角度C = cos^{-1}\left(\frac{(x_{2}-x_{3})*(x_{1}-x_{3})+(y_{2}-y_{3})*(y_{1}-y_{3})+(z_{2}-z_{3})*(z_{1}-z_{3})}{(\sqrt{(x_{2}-x_{3})^{2}+(y_{2}-y_{3})^{2}+(z_{2}-z_{3})^{2}})*(\sqrt{(x_{1}-x_{3})^{2}+(y_{1}-y_{3})^{2}+(z_{1}-z_{3})^{2}})}\right)

下面是上述方法的实现:

C++
//CPP program for finding all angles of a triangle 
#include
#include
using namespace std;
  
// function for finding the angle 
float angle_triangle(int x1, int x2, int x3, 
            int y1, int y2, int y3, int z1, int z2, int z3)
{
  
    int num = (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)+(z2-z1)*(z3-z1) ;
  
    float den = sqrt(pow((x2-x1),2)+pow((y2-y1),2)+pow((z2-z1),2))*\
                sqrt(pow((x3-x1),2)+pow((y3-y1),2)+pow((z3-z1),2)) ;
  
    float angle = acos(num / den)*(180.0/3.141592653589793238463) ;
  
    return angle ;
}
  
// Driver code
int main()
{
int x1 = -1;
int y1 = 3;
int z1 = 2;
int x2 = 2;
int y2 = 3;
int z2 = 5;
int x3 = 3;
int y3 = 5;
int z3 = -2;
float angle_A = angle_triangle(x1, x2, x3, y1, y2,
                                y3, z1, z2, z3);
float angle_B = angle_triangle(x2, x3, x1, y2, y3, 
                                y1, z2, z3, z1);
float angle_C = angle_triangle(x3, x2, x1, y3, 
                            y2, y1, z3, z2, z1);
cout<<"Angles are :"<


Java
//Java program for finding all angles of a triangle 
  
class GFG{
// function for finding the angle 
static double angle_triangle(int x1, int x2, int x3, 
            int y1, int y2, int y3, int z1, int z2, int z3)
{
  
    int num = (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)+(z2-z1)*(z3-z1) ;
  
    double den = Math.sqrt(Math.pow((x2-x1),2)+
                Math.pow((y2-y1),2)+Math.pow((z2-z1),2))*
                Math.sqrt(Math.pow((x3-x1),2)+
                Math.pow((y3-y1),2)+Math.pow((z3-z1),2)) ;
  
    double angle = Math.acos(num / den)*(180.0/3.141592653589793238463) ;
  
    return angle ;
}
  
// Driver code
public static void main(String[] args)
{
int x1 = -1;
int y1 = 3;
int z1 = 2;
int x2 = 2;
int y2 = 3;
int z2 = 5;
int x3 = 3;
int y3 = 5;
int z3 = -2;
double angle_A = angle_triangle(x1, x2, x3, y1,
                            y2, y3, z1, z2, z3);
double angle_B = angle_triangle(x2, x3, x1,
                            y2, y3, y1, z2, z3, z1);
double angle_C = angle_triangle(x3, x2, x1,
                            y3, y2, y1, z3, z2, z1);
System.out.println("Angles are :"); 
System.out.println("angle A = "+angle_A+" degree");
System.out.println("angle B = "+angle_B+" degree");
System.out.println("angle C = "+angle_C+" degree");
}
}
// This code is contributed by mits


Python3
# Python Code for finding all angles of a triangle 
import math 
  
# function for finding the angle 
def angle_triangle(x1, x2, x3, y1, y2, y3, z1, z2, z3): 
  
    num = (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)+(z2-z1)*(z3-z1) 
  
    den = math.sqrt((x2-x1)**2+(y2-y1)**2+(z2-z1)**2)*\
                math.sqrt((x3-x1)**2+(y3-y1)**2+(z3-z1)**2) 
  
    angle = math.degrees(math.acos(num / den)) 
  
    return round(angle, 3) 
  
# driver code     
x1 = -1
y1 = 3
z1 = 2
x2 = 2
y2 = 3
z2 = 5
x3 = 3
y3 = 5
z3 = -2
angle_A = angle_triangle(x1, x2, x3, y1, y2, y3, z1, z2, z3) 
angle_B = angle_triangle(x2, x3, x1, y2, y3, y1, z2, z3, z1) 
angle_C = angle_triangle(x3, x2, x1, y3, y2, y1, z3, z2, z1) 
print("Angles are :") 
print("angle A = ", angle_A, "degree") 
print("angle B = ", angle_B, "degree") 
print("angle C = ", angle_C, "degree")


C#
// C# program for finding all 
// angles of a triangle 
using System;
                      
class GFG
{
      
// function for finding the angle 
static double angle_triangle(int x1, int x2, int x3, 
                             int y1, int y2, int y3, 
                             int z1, int z2, int z3)
{
  
    int num = (x2 - x1) * (x3 - x1) +
              (y2 - y1) * (y3 - y1) + 
              (z2 - z1) * (z3 - z1);
  
    double den = Math.Sqrt(Math.Pow((x2 - x1), 2) +
                           Math.Pow((y2 - y1), 2) + 
                           Math.Pow((z2 - z1), 2)) *
                 Math.Sqrt(Math.Pow((x3 - x1), 2) + 
                           Math.Pow((y3 - y1), 2) + 
                           Math.Pow((z3 - z1), 2));
  
    double angle = Math.Acos(num / den) * 
                   (180.0/3.141592653589793238463);
  
    return angle ;
}
  
// Driver code
public static void Main()
{
    int x1 = -1, y1 = 3, z1 = 2;
    int x2 = 2, y2 = 3, z2 = 5;
    int x3 = 3, y3 = 5, z3 = -2;
    double angle_A = angle_triangle(x1, x2, x3, 
                                    y1, y2, y3, 
                                    z1, z2, z3);
    double angle_B = angle_triangle(x2, x3, x1,
                                    y2, y3, y1, 
                                    z2, z3, z1);
    double angle_C = angle_triangle(x3, x2, x1,
                                    y3, y2, y1,
                                    z3, z2, z1);
    Console.WriteLine("Angles are :"); 
    Console.WriteLine("angle A = " + angle_A + 
                                   " degree");
    Console.WriteLine("angle B = " + angle_B +
                                   " degree");
    Console.WriteLine("angle C = " + angle_C + 
                                   " degree");
}
}
  
// This code is contributed by 29AjayKumar


PHP


输出:
Angles are :
angle A =  90.0 degree
angle B =  54.736 degree
angle C =  35.264 degree