12#include "algebra/array.hpp"
13#include "detray/algebra/concepts.hpp"
20namespace detray::algebra {
23template <detray::concepts::vector vector_t>
24inline void fill_random_vec(std::vector<vector_t> &collection) {
26 std::random_device rd;
27 std::mt19937 mt(rd());
28 std::uniform_real_distribution<typename vector_t::value_type> dist(0.f, 1.f);
30 auto rand_obj = [&]() {
33 for (std::size_t i = 0u; i < detray::traits::size<vector_t>; ++i) {
40 collection.resize(collection.capacity());
41 std::ranges::generate(collection, rand_obj);
45template <detray::concepts::transform3D transform3_t>
46inline void fill_random_trf(std::vector<transform3_t> &collection) {
47 using vector_t =
typename transform3_t::vector3;
50 std::random_device rd;
51 std::mt19937 mt(rd());
52 std::uniform_real_distribution<typename transform3_t::scalar_type> dist(0.f,
55 auto rand_obj = [&]() {
60 x_axis = detray::vector::normalize(vector_t{dist(mt), dist(mt), dist(mt)});
61 z_axis = {dist(mt), dist(mt), dist(mt)};
62 t = detray::vector::normalize(vector_t{dist(mt), dist(mt), dist(mt)});
65 typename transform3_t::scalar_type coeff =
66 detray::vector::dot(x_axis, z_axis) / detray::vector::norm(x_axis);
67 z_axis = x_axis - coeff * z_axis;
69 return transform3_t{t, x_axis, detray::vector::normalize(z_axis)};
72 collection.resize(collection.capacity());
73 std::ranges::generate(collection, rand_obj);
77template <detray::concepts::matrix matrix_t>
78inline void fill_random_matrix(std::vector<matrix_t> &collection) {
79 using scalar_t =
typename matrix_t::value_type::value_type;
82 std::random_device rd;
83 std::mt19937 mt(rd());
84 std::uniform_real_distribution<scalar_t> dist(0.f, 1.f);
85 auto rand_obj = [&]() {
88 for (std::size_t j = 0u; j <
m.size(); ++j) {
89 for (std::size_t i = 0u; i <
m[0].size(); ++i) {
97 collection.resize(collection.capacity());
98 std::ranges::generate(collection, rand_obj);
constexpr double m
Meter.
Definition Units.hpp:97