Beispiel #1
0
        def findReaction(
            b: Beam, p: Union[Beam, None]
        ) -> Tuple[Vector3, float]:  # tuple float is the beam's angle
            v: Vector3 = Vector3(0, 0, 0)
            endFirst: bool
            for i in range(len(self.beams)):
                if b == self.beams[i][0]:
                    break

            if len(b.start[1]) == 0:
                endFirst = False
                if b.start[0] != None:
                    v = rotate(b.start[0].reaction, -self.beams[i][2])
            elif len(b.end[1]) == 0:
                endFirst = True
                if b.end[0] != None:
                    v = rotate(b.end[0].reaction, -self.beams[i][2])
            elif p != None:
                if p in b.start[1]:
                    endFirst = True
                    for c in b.end[1]:
                        r: Tuple[Vector3, float] = findReaction(c, b)
                        v += rotate(r[0], r[1] - self.beams[i][2])
                elif p in b.end[1]:
                    endFirst = False
                    for c in b.start[1]:
                        r: Tuple[Vector3, float] = findReaction(c, b)
                        v += rotate(r[0], r[1] - self.beams[i][2])
                else:
                    raise Exception('Cannot find parent!')
            else:
                raise Exception('Parent not given!')

            v = b.solve(v, self.beams[i][2], endFirst)
            solution[i] = b.stress
            return (v, self.beams[i][2])