Skip to content
Related Articles

Related Articles

Improve Article

Angle between a Pair of Lines in 3D

  • Last Updated : 05 May, 2021
Geek Week

Given coordinates of three points A(x1, y1, z1), B(x2, y2, z2), and C(x3, y3, z3) in a 3D plane, where B is the intersection point of line AB and BC, the task is to find the angle between lines AB and BC.
 

Examples: 
 

Input: x1 = 1, y1 = 3, z1 = 3; x2 = 3, y2 = 4, z2 = 5; x3 = 5, y3 = 6, z3 = 9; 
Output: 54.6065
Input: x1 = 10, y1 = 10, z1 = 10; x2 = 0, y2 = 0, z2 = 0; x3 = 15, y3 = 10, z3 = 15; 
Output: 56.4496  

Approach:
 



1. Find the equation of lines AB and BC with the given coordinates in terms of direction ratios as: 
 

AB = (x1 – x2)i + (y1 – y2)j + (z1 – z2)k 
BC = (x3 – x2)i + (y3 – y2)j + (z3 – z2)k 
 

2. Use the formula for cos Θ for the two direction ratios of lines AB and BC to find the cosine of the angle between lines AB and BC as: 
 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

where, 
AB.BC is the dot product of direction ratios AB and BC. 
|AB| is the magnitude of line AB 
|BC| is the magnitude of line BC 

3. Suppose there are two direction ratios: 
 

A = ai + bj + ck
B = xi + yj + zk

 then 

Dot Product(A.B) = a*x + b*y + c*z 
magnitude of A = |A| = \sqrt{a^{2} + b^{2} + c^{2}}
magnitude of B = |B| = \sqrt{x^{2} + y^{2} + z^{2}}   

4. The cosine of the angle calculated gives the cosine value in radian. To find the angle multiply the cosine value by (180/Π).

Below is the implementation of the above approach:
 

C++




// C++ program for the above approach
 
#include "bits/stdc++.h"
#define PI 3.14
using namespace std;
 
// Function to find the angle between
// the two lines
void calculateAngle(
    int x1, int y1, int z1,
    int x2, int y2, int z2,
    int x3, int y3, int z3)
{
    // Find direction ratio of line AB
    int ABx = x1 - x2;
    int ABy = y1 - y2;
    int ABz = z1 - z2;
 
    // Find direction ratio of line BC
    int BCx = x3 - x2;
    int BCy = y3 - y2;
    int BCz = z3 - z2;
 
    // Find the dotProduct
    // of lines AB & BC
    double dotProduct
        = ABx * BCx
          + ABy * BCy
          + ABz * BCz;
 
    // Find magnitude of
    // line AB and BC
    double magnitudeAB
        = ABx * ABx
          + ABy * ABy
          + ABz * ABz;
    double magnitudeBC
        = BCx * BCx
          + BCy * BCy
          + BCz * BCz;
 
    // Find the cosine of
    // the angle formed
    // by line AB and BC
    double angle = dotProduct;
    angle /= sqrt(
        magnitudeAB * magnitudeBC);
 
    // Find angle in radian
    angle = (angle * 180) / PI;
 
    // Print the angle
    cout << abs(angle) << endl;
}
 
// Driver Code
int main()
{
 
    // Given coordinates
    // Points A
    int x1 = 1, y1 = 3, z1 = 3;
 
    // Points B
    int x2 = 3, y2 = 4, z2 = 5;
 
    // Points C
    int x3 = 5, y3 = 6, z3 = 9;
 
    // Function Call
    calculateAngle(x1, y1, z1,
                   x2, y2, z2,
                   x3, y3, z3);
 
    return 0;
}

Java




// Java program for the above approach
import java.util.*;
 
class GFG{
     
// Function to find the angle
// between the two lines
static void calculateAngle(int x1, int y1, int z1,
                           int x2, int y2, int z2,
                           int x3, int y3, int z3)
{
     
    // Find direction ratio of line AB
    int ABx = x1 - x2;
    int ABy = y1 - y2;
    int ABz = z1 - z2;
 
    // Find direction ratio of line BC
    int BCx = x3 - x2;
    int BCy = y3 - y2;
    int BCz = z3 - z2;
 
    // Find the dotProduct
    // of lines AB & BC
    double dotProduct = ABx * BCx +
                        ABy * BCy +
                        ABz * BCz;
 
    // Find magnitude of
    // line AB and BC
    double magnitudeAB = ABx * ABx +
                         ABy * ABy +
                         ABz * ABz;
    double magnitudeBC = BCx * BCx +
                         BCy * BCy +
                         BCz * BCz;
 
    // Find the cosine of the
    // angle formed by line
    // AB and BC
    double angle = dotProduct;
    angle /= Math.sqrt(magnitudeAB * magnitudeBC);
 
    // Find angle in radian
    angle = (angle * 180) / 3.14;
 
    // Print the angle
    System.out.printf("%.4f", Math.abs(angle));
}
 
// Driver code
public static void main(String[] args)
{
 
    // Given coordinates
    // Points A
    int x1 = 1, y1 = 3, z1 = 3;
 
    // Points B
    int x2 = 3, y2 = 4, z2 = 5;
 
    // Points C
    int x3 = 5, y3 = 6, z3 = 9;
 
    // Function Call
    calculateAngle(x1, y1, z1,
                   x2, y2, z2,
                   x3, y3, z3);
}
}
 
// This code is contributed by offbeat

Python3




# Python3 program for the above approach
import math
 
# Function to find the angle
# between the two lines
def calculateAngle(x1, y1, z1,
                   x2, y2, z2,
                   x3, y3, z3):
                        
    # Find direction ratio of line AB
    ABx = x1 - x2;
    ABy = y1 - y2;
    ABz = z1 - z2;
 
    # Find direction ratio of line BC
    BCx = x3 - x2;
    BCy = y3 - y2;
    BCz = z3 - z2;
 
    # Find the dotProduct
    # of lines AB & BC
    dotProduct = (ABx * BCx +
                  ABy * BCy +
                  ABz * BCz);
 
    # Find magnitude of
    # line AB and BC
    magnitudeAB = (ABx * ABx +
                   ABy * ABy +
                   ABz * ABz);
    magnitudeBC = (BCx * BCx +
                   BCy * BCy +
                   BCz * BCz);
 
    # Find the cosine of
    # the angle formed
    # by line AB and BC
    angle = dotProduct;
    angle /= math.sqrt(magnitudeAB *
                       magnitudeBC);
 
    # Find angle in radian
    angle = (angle * 180) / 3.14;
 
    # Print angle
    print(round(abs(angle), 4))
 
# Driver Code
if __name__=='__main__':
 
    # Given coordinates
    # Points A
    x1, y1, z1 = 1, 3, 3;
 
    # Points B
    x2, y2, z2 = 3, 4, 5;
 
    # Points C
    x3, y3, z3 = 5, 6, 9;
  
    # Function Call
    calculateAngle(x1, y1, z1,
                   x2, y2, z2,
                   x3, y3, z3);
 
# This code is contributed by AbhiThakur

C#




// C# program for the above approach
using System;
class GFG{
     
// Function to find the angle
// between the two lines
static void calculateAngle(int x1, int y1,
                           int z1, int x2,
                           int y2, int z2,
                           int x3, int y3,
                           int z3)
{
     
    // Find direction ratio of line AB
    int ABx = x1 - x2;
    int ABy = y1 - y2;
    int ABz = z1 - z2;
 
    // Find direction ratio of line BC
    int BCx = x3 - x2;
    int BCy = y3 - y2;
    int BCz = z3 - z2;
 
    // Find the dotProduct
    // of lines AB & BC
    double dotProduct = ABx * BCx +
                        ABy * BCy +
                        ABz * BCz;
 
    // Find magnitude of
    // line AB and BC
    double magnitudeAB = ABx * ABx +
                         ABy * ABy +
                         ABz * ABz;
    double magnitudeBC = BCx * BCx +
                         BCy * BCy +
                         BCz * BCz;
 
    // Find the cosine of the
    // angle formed by line
    // AB and BC
    double angle = dotProduct;
    angle /= Math.Sqrt(magnitudeAB *
                       magnitudeBC);
 
    // Find angle in radian
    angle = (angle * 180) / 3.14;
 
    // Print the angle
    Console.Write(String.Format("{0:F4}", Math.Abs(angle)));
}
 
// Driver code
public static void Main()
{
 
    // Given coordinates
    // Points A
    int x1 = 1, y1 = 3, z1 = 3;
 
    // Points B
    int x2 = 3, y2 = 4, z2 = 5;
 
    // Points C
    int x3 = 5, y3 = 6, z3 = 9;
 
    // Function Call
    calculateAngle(x1, y1, z1,
                   x2, y2, z2,
                   x3, y3, z3);
}
}
 
// This code is contributed by Code_Mech

Javascript




<script>
 
 
// Javascript program for the above approach
 
var PI = 3.14;
 
// Function to find the angle between
// the two lines
function calculateAngle(
    x1, y1, z1,
    x2, y2, z2,
    x3, y3, z3)
{
    // Find direction ratio of line AB
    var ABx = x1 - x2;
    var ABy = y1 - y2;
    var ABz = z1 - z2;
 
    // Find direction ratio of line BC
    var BCx = x3 - x2;
    var BCy = y3 - y2;
    var BCz = z3 - z2;
 
    // Find the dotProduct
    // of lines AB & BC
    var dotProduct
        = ABx * BCx
          + ABy * BCy
          + ABz * BCz;
 
    // Find magnitude of
    // line AB and BC
    var magnitudeAB
        = ABx * ABx
          + ABy * ABy
          + ABz * ABz;
    var magnitudeBC
        = BCx * BCx
          + BCy * BCy
          + BCz * BCz;
 
    // Find the cosine of
    // the angle formed
    // by line AB and BC
    var angle = dotProduct;
    angle /= Math.sqrt(
        magnitudeAB * magnitudeBC);
 
    // Find angle in radian
    angle = (angle * 180) / PI;
 
    // Prvar the angle
    document.write(Math.abs(angle).toFixed(4));
}
 
// Driver Code
// Given coordinates
// Povars A
var x1 = 1, y1 = 3, z1 = 3;
// Povars B
var x2 = 3, y2 = 4, z2 = 5;
// Povars C
var x3 = 5, y3 = 6, z3 = 9;
// Function Call
calculateAngle(x1, y1, z1,
               x2, y2, z2,
               x3, y3, z3);
 
 
</script>
Output: 
54.6065

 

Attention reader! All those who say programming isn’t for kids, just haven’t met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12. 

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.




My Personal Notes arrow_drop_up
Recommended Articles
Page :