Пример #1
0
def find_angle(atoms, target_coordinates, point1, point2):
    b, c = 0, 0
    for i in range(3):
        o = find_intersection_point(point1, point2, atoms[i])
        r = Vector(o, atoms[i])
        f = Vector(o, target_coordinates[i])

        if (r.len() < eps**10):
            print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
            return Angle(0, 1)

        # если эти 3 точки лежат на одной прямой, что бы я ни делала, это ни на что не повлияет

        axis = Vector(point1, point2) / Vector(point1, point2).len()
        r1 = r / r.len()
        s1 = vmul(r1, axis)
        b += 2 * r.len() * (f * r1)
        c += 2 * r.len() * (f * s1)

    return Angle(c / sqrt(b**2 + c**2), b / sqrt(b**2 + c**2))
Пример #2
0
def renew_len():
    for i in range(len(crd) - 1):
        for bond in bond_length[i]:
            if i < bond[0]:
                v = Vector(crd[i], crd[bond[0]])
                k = bond[1] / v.len()
                tmp = crd[bond[0]]
                crd[bond[0]] = crd[i] + (v * k)
                for l in range(bond[0] + 1, len(crd)):
                    v = Vector(tmp, crd[l])
                    tmp = crd[l]
                    crd[l] = crd[l - 1] + v