From f3292494bb402850d09b6da9a85afc9cf00c15c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Mon, 30 Jan 2023 12:11:52 +0100 Subject: [PATCH] Co-authored-by: Damien Guillotin --- src/draw.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/draw.py diff --git a/src/draw.py b/src/draw.py new file mode 100644 index 0000000..d3cdcab --- /dev/null +++ b/src/draw.py @@ -0,0 +1,59 @@ +import matplotlib.pyplot as plt +import numpy as np + + +def f(x, y): + return np.exp(-((x**2) + y**2) / 3) + + +x_vals = np.linspace(-5, 5, 100) +y_vals = np.linspace(-5, 5, 100) + + +X, Y = np.meshgrid(x_vals, y_vals) + +Z = f(X - 2, Y) + f(X + 2, Y) +Z = (Z > 0.4).astype(np.float32) +Z *= np.random.rand(*Z.shape) + + +for i, x in enumerate(x_vals): + for j, y in enumerate(y_vals): + color = f"#{hex(int(Z[j, i] * 255))[2:]}{hex(int(Z[j, i] * 255))[2:]}{hex(int(Z[j, i] * 255))[2:]}" + plt.fill([x, x + 0.1, x + 0.1, x], [y, y, y + 0.1, y + 0.1], color=color) + + +nb_cams = 32 +cam_poses = np.array( + [[6 * np.cos(theta), 6 * np.sin(theta)] for theta in np.linspace(0, 2 * np.pi, nb_cams, endpoint=False)] +) +cam_rots = np.linspace(np.pi, 3 * np.pi, nb_cams, endpoint=False) +cam2world_projs = np.array( + [ + [[np.cos(theta), -np.sin(theta), cam_pose[0]], [np.sin(theta), np.cos(theta), cam_pose[1]], [0, 0, 1]] + for theta, cam_pose in zip(cam_rots, cam_poses) + ] +) + +for i in range(nb_cams): + plt.plot(cam_poses[i][0], cam_poses[i][1], "ro") + plt.text(cam_poses[i][0], cam_poses[i][1], str(i)) + x = np.array([[0, 0, 1], [0.5, -0.2, 1], [0.5, 0.2, 1], [0, 0, 1]]).T + x = cam2world_projs[i] @ x + x /= x[2, :] + plt.plot(x[0, :], x[1, :], "r-") + + +# draw 1d image of the scene for each camera +for i in range(nb_cams): + # sort pixels by distance to camera + cam_pose = cam_poses[i] + pixels_dist = np.linalg.norm(np.array([X.flatten(), Y.flatten()]).T - cam_pose, axis=1) + X_ = X.flatten()[np.argsort(pixels_dist)] + Y_ = Y.flatten()[np.argsort(pixels_dist)] + + +plt.xlim(-7, 7) +plt.ylim(-7, 7) +plt.axis("equal") +plt.show()