def arcball_constrain_to_axis(point, axis):
    v = numpy.array(point, dtype=numpy.float64, copy=True)
    a = numpy.array(axis, dtype=numpy.float64, copy=True)
    v -= a * numpy.dot(a, v)  # on plane
    n = vector_norm(v)
    if n > _EPS:
        if v[2] < 0.0:
            numpy.negative(v, v)
        v /= n
        return v
    if a[2] == 1.0:
        return numpy.array([1.0, 0.0, 0.0])
    return unit_vector([-a[1], a[0], 0.0])
List file and directory objects in the object identified by a hash
dataset/ETHPy150Open IEEERobotics/bot/bot/hardware/complex_hardware/transformations.py/arcball_constrain_to_axis--crossover with--dataset/ETHPy150Open ipfs/py-ipfs-api/ipfsApi/client.py/Client.file_ls