Class 2 - Find the Torsional Angle

Sort by

recency

|

148 Discussions

|

  • + 0 comments
    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.

  • + 0 comments

    how to solve this torsional angle