def rotate(self, q):
        q1 = np.quaternion(q[0], q[1], q[2], q[3])
        q2 = np.conjugate(q1)
        v = np.quaternion(0, self.x, self.z, self.y)
        rot = (q1 * v) * q2
        return Nodes(rot.x, rot.z, rot.y)

    def project(self, win_width, win_height, fov, viewer_distance):
        transformation = [120, 220]
        factor = fov / (viewer_distance + self.z)
        x = self.x * factor + win_width / 1.6
        y = -self.y * factor + win_height / 1.6
        return Nodes(x - transformation[0], y - transformation[1], self.z)


if __name__ == '__main__':
    i = 200
    get_data = gdata()
    print('Intro')
    while (i > 0):
        getmag = next(get_data)
        fuse.calibrate(getmag)
        i -= 1
    print('Cal done. Magnetometer bias vector:', fuse.magbias, fuse.scale)
    get_centre = init_quat()
    centre = next(get_centre)
    fuse.set_centre(centre)
    print("Centre initialised")
    main()