(a, b)
| 210 | return (oa+ta*da+ob+tb*db) * 0.5, denom |
| 211 | |
| 212 | def rotmat(a, b): |
| 213 | a, b = a / np.linalg.norm(a), b / np.linalg.norm(b) |
| 214 | v = np.cross(a, b) |
| 215 | c = np.dot(a, b) |
| 216 | s = np.linalg.norm(v) |
| 217 | kmat = np.array([[0, -v[2], v[1]], [v[2], 0, -v[0]], [-v[1], v[0], 0]]) |
| 218 | return np.eye(3) + kmat + kmat.dot(kmat) * ((1 - c) / (s ** 2 + 1e-10)) |
| 219 | |
| 220 | if __name__ == '__main__': |
| 221 | parser = argparse.ArgumentParser() # TODO: refine it. |