(horizontal_mean, vertical_mean, horizontal_stddev=0, vertical_stddev=0, radius=1, batch_size=1, device='cpu')
| 100 | |
| 101 | @staticmethod |
| 102 | def sample(horizontal_mean, vertical_mean, horizontal_stddev=0, vertical_stddev=0, radius=1, batch_size=1, device='cpu'): |
| 103 | h = (torch.rand((batch_size, 1), device=device) * 2 - 1) * horizontal_stddev + horizontal_mean |
| 104 | v = (torch.rand((batch_size, 1), device=device) * 2 - 1) * vertical_stddev + vertical_mean |
| 105 | v = torch.clamp(v, 1e-5, math.pi - 1e-5) |
| 106 | |
| 107 | theta = h |
| 108 | v = v / math.pi |
| 109 | phi = torch.arccos(1 - 2*v) |
| 110 | |
| 111 | camera_origins = torch.zeros((batch_size, 3), device=device) |
| 112 | |
| 113 | camera_origins[:, 0:1] = radius*torch.sin(phi) * torch.cos(math.pi-theta) |
| 114 | camera_origins[:, 2:3] = radius*torch.sin(phi) * torch.sin(math.pi-theta) |
| 115 | camera_origins[:, 1:2] = radius*torch.cos(phi) |
| 116 | |
| 117 | forward_vectors = math_utils.normalize_vecs(-camera_origins) |
| 118 | return create_cam2world_matrix(forward_vectors, camera_origins) |
| 119 | |
| 120 | def create_cam2world_matrix(forward_vector, origin): |
| 121 | """ |
nothing calls this directly
no test coverage detected