use nalgebra::{RealField, Vector3};
use crate::crate_utils::impl_parallel;
#[inline]
pub fn linear_hall_voltage<T: RealField + Copy>(
b_field: Vector3<T>,
sensitivity: Vector3<T>,
quiescent_voltage: T,
min_voltage: T,
max_voltage: T,
) -> T {
let raw_voltage = quiescent_voltage + b_field.dot(&sensitivity);
raw_voltage.clamp(min_voltage, max_voltage)
}
pub fn linear_hall_voltage_batch<T: RealField + Copy>(
b_fields: &[Vector3<T>],
sensitivity: Vector3<T>,
quiescent_voltage: T,
min_voltage: T,
max_voltage: T,
out: &mut [T],
) {
impl_parallel!(
linear_hall_voltage,
rayon_threshold: 60,
input: b_fields,
output: out,
args: [sensitivity, quiescent_voltage, min_voltage, max_voltage]
)
}