Class 2 - Find the Torsional Angle

Sort by

recency

|

149 Discussions

|

  • + 0 comments

    I’m currently working on this problem because it’s part of my assignment, and I really want to understand how to calculate the torsional angle step by step. At first, it seemed complicated, but after practicing on HackerRank and using NumPy for vector operations, things started to make sense. I learned how cross and dot products help find the angle between planes, and how atan2 gives a more accurate result when dealing with 3D geometry.

    To make sure my assignment explanation looks professional and clear, I’ve also been using MyPerfectWords.com for writing support. It’s been super helpful for organizing my thoughts and explaining the math process properly. Between HackerRank for coding and MyPerfectWords.com for writing, I feel like I’m finally getting a solid grasp on both the logic and presentation sides of this task.

  • + 1 comment
    class Points(object):
        def __init__(self, x, y, z):
            self.x = x
            self.y = y
            self.z = z
    
        # Vector subtraction
        def __sub__(self, no):
            return Points(
                self.x - no.x,
                self.y - no.y,
                self.z - no.z
            )
    
        # Cross product with another vector
        def cross(self, no):
            return Points(
                self.y * no.z - self.z * no.y,
                self.z * no.x - self.x * no.z,
                self.x * no.y - self.y * no.x
            )
    
        # Dot product with another vector
        def dot(self, no):
            return((self.x * no.x) + (self.y * no.y) + (self.z * no.z))
            
        def absolute(self): #Vector absolute length
            return pow((self.x ** 2 + self.y ** 2 + self.z ** 2), 0.5)
    
  • + 0 comments

    In agreement with the other commenters, this is fundementally an excercise in linear algebra.

  • + 0 comments
    import math
    
    class Points(object):
        def __init__(self, x, y, z):
            self.x = x
            self.y = y
            self.z = z
            
        def __sub__(self, no):
            return Points(self.x - no.x, self.y - no.y, self.z - no.z)
    
        def dot(self, no):
            return self.x * no.x + self.y * no.y + self.z * no.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)
            
        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))
    
  • + 0 comments

    From a pedagogical standpoint, this problem is poorly positioned as an “easy” exercise. The code may look like a basic class implementation, but the underlying mathematical prerequisites, particularly 3D vector operations like cross products, dot products, and vector magnitude, are well beyond what most learners at the “easy” level will have encountered.

    This creates a mismatch: students trying to learn basic object-oriented programming are suddenly forced into geometric reasoning that belongs in a linear algebra or physics course. The task doesn’t teach OOP, it assumes you already know how to represent and manipulate vectors in 3D space, then asks you to encode that knowledge.

    Good pedagogy means aligning difficulty with assumed background knowledge. This problem doesn’t. It should be reclassified as medium or even hard, and tagged clearly to reflect its mathematical prerequisites.