Class 2 - Find the Torsional Angle in Python - HackerRank Solution

Class 2 - Find the Torsional Angle in Python - HackerRank Solution
 


Problem :


You are given four points A, B, c and D in a 3-dimensional Cartesian coordinate system. You are required to print the angle between the plane made by the points A, B, C and B, C, D in degrees(not radians). Let the angle be PHI.
Cos(PHI) = (X*Y) / |X| |Y| where X = ABxBC and Y = BC x CD.
Here, X.Y means the dot product of X and Y, and ABxBC means the cross product of vectors and . Also, AB = B - A.



Input Format :

One line of input containing the space separated floating number values of the X,Y and Z coordinates of a point.

Output Format :

Output the angle correct up to two decimal places.



Sample Input :

0 4 5
1 7 6
0 5 9
1 7 2
 

Sample Output :

8.19



Solution :

 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Class 2 - Find the Torsional Angle in Python - HackerRank Solution
# Python 3
import math

class Points(object):
# Class 2 - Find the Torsional Angle in Python - HackerRank Solution START
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def __sub__(self, no):
        x = self.x - no.x
        y = self.y - no.y
        z = self.z - no.z
        return Points(x, y, z)

    def dot(self, no):
        x = self.x * no.x
        y = self.y * no.y
        z = self.z * no.z
        return x + y + z

    def cross(self, no):
        x = self.y * no.z - self.z * no.y
        y = self.z * no.x - self.x * no.z
        z = self.x * no.y - self.y * no.x
        return Points(x, y, z)

# Class 2 - Find the Torsional Angle in Python - HackerRank Solution END
    
    def absolute(self):
        return pow((self.x ** 2 + self.y ** 2 + self.z ** 2), 0.5)

if __name__ == '__main__':
    points = list()
    for i in range(4):
        a = list(map(float, input().split()))
        points.append(a)

    a, b, c, d = Points(*points[0]), Points(*points[1]), Points(*points[2]), Points(*points[3])
    x = (b - a).cross(c - b)
    y = (c - b).cross(d - c)
    angle = math.acos(x.dot(y) / (x.absolute() * y.absolute()))

    print("%.2f" % math.degrees(angle))
 




Disclaimer :-
the above hole problem statement is given by hackerrank.com but the solution is generated by the codeworld19 authority if any of the query regarding this post or website fill the following contact form thank you.

Next Post Previous Post
2 Comments
  • Tushar Pangare
    Tushar Pangare Wednesday, June 02, 2021

    Thanks for answer

  • taranstech
    taranstech Monday, September 27, 2021

    Hi, Thank you for this informative blog, I have just started to learn python course and this blog is really informative for me. Thank you for this blog!

Add Comment
comment url