MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ transform_coordinates()

std::vector< uint64_t > MayaFlux::Kakshya::transform_coordinates ( const std::vector< uint64_t > &  coords,
const std::vector< double > &  scale_factors = {},
const std::vector< int64_t > &  offset_values = {},
const std::unordered_map< std::string, std::any > &  rotation_params = {} 
)

Transform coordinates using scaling, translation, rotation.

Parameters
coordsInput coordinates.
scale_factorsScaling factors per dimension.
offset_valuesTranslation offset per dimension.
rotation_paramsOptional rotation parameters.
Returns
Transformed coordinates.

Definition at line 82 of file CoordUtils.cpp.

86{
87 std::vector<uint64_t> transformed = coords;
88
89 if (!scale_factors.empty()) {
90 for (size_t i = 0; i < coords.size() && i < scale_factors.size(); ++i) {
91 transformed[i] = static_cast<uint64_t>(scale_factors[i] * static_cast<double>(coords[i]));
92 }
93 }
94
95 if (!offset_values.empty()) {
96 for (size_t i = 0; i < transformed.size() && i < offset_values.size(); ++i) {
97 int64_t new_coord = static_cast<int64_t>(transformed[i]) + offset_values[i];
98 transformed[i] = static_cast<uint64_t>(std::max(int64_t(0), new_coord));
99 }
100 }
101
102 if (!rotation_params.empty() && coords.size() >= 2) {
103 auto angle_it = rotation_params.find("angle_radians");
104 if (angle_it != rotation_params.end()) {
105 try {
106 auto angle = safe_any_cast_or_throw<double>(angle_it->second);
107 double cos_a = std::cos(angle);
108 double sin_a = std::sin(angle);
109
110 auto x = static_cast<double>(transformed[0]);
111 auto y = static_cast<double>(transformed[1]);
112
113 transformed[0] = static_cast<uint64_t>(x * cos_a - y * sin_a);
114 transformed[1] = static_cast<uint64_t>(x * sin_a + y * cos_a);
115 } catch (const std::bad_any_cast&) {
116 // TODO: DO better than ignore invalid
117 MF_ERROR(Journal::Component::Kakshya, Journal::Context::Runtime,
118 "Invalid rotation angle parameter. Expected double, got {}", angle_it->second.type().name());
119 }
120 }
121 }
122
123 return transformed;
124}
#define MF_ERROR(comp, ctx,...)

References MayaFlux::Journal::Kakshya, MF_ERROR, and MayaFlux::Journal::Runtime.