///|
/// Precomputed Bit Parity and Hamming Neighborhood Lookups for ArUco Standard Dictionaries.
/// Accelerates error correction and bit voting in real-time embedded environments.
pub fn generate_aruco_bit_parity_table() -> Array[Int] {
let table = Array::make(256, 0)
for i in 0..<256 {
let mut count = 0
let mut temp = i
while temp > 0 {
count += temp & 1
temp = temp >> 1
}
table[i] = count
}
table
}
///|
/// Precomputed 4-way 90-degree bit rotation lookup table for 16-bit 4x4 grids.
pub fn generate_rotation_table_4x4() -> Array[Int] {
let table = Array::make(65536, 0)
for code in 0..<65536 {
let mut rot = 0
for r in 0..<4 {
for c in 0..<4 {
let bit = (code >> (r * 4 + c)) & 1
if bit == 1 {
let new_r = c
let new_c = 3 - r
rot = rot | (1 << (new_r * 4 + new_c))
}
}
}
table[code] = rot
}
table
}
///|
/// Precomputed Hamming distance matrix between all pairs in ArUco 4x4 50 dictionary.
pub fn aruco_4x4_50_pairwise_distance_matrix() -> Array[Array[Int]] {
let dict = dictionary_aruco_4x4_50()
let n = dict.codewords.length()
let matrix : Array[Array[Int]] = []
for i in 0.. Array[Array[Int]] {
let dict = dictionary_aruco_5x5_50()
let n = dict.codewords.length()
let matrix : Array[Array[Int]] = []
for i in 0.. Array[Array[Int]] {
let dict = dictionary_aruco_6x6_50()
let n = dict.codewords.length()
let matrix : Array[Array[Int]] = []
for i in 0.. Array[Array[Int]] {
let dict = dictionary_aruco_7x7_50()
let n = dict.codewords.length()
let matrix : Array[Array[Int]] = []
for i in 0..