lj_rust/src/worldstate.rs

53 lines
1.1 KiB
Rust
Raw Permalink Normal View History

2023-07-09 20:16:01 +00:00
use crate::point::{Point, Color};
use nalgebra::base::{Matrix3, Matrix1x3};
use crate::errors::{LJError, LJResult};
2023-07-01 15:42:31 +00:00
use log::debug;
2023-07-01 12:44:51 +00:00
2023-06-29 21:24:56 +00:00
#[derive(Debug, Default)]
2023-06-29 20:36:00 +00:00
pub struct EDH {
2023-07-09 20:16:01 +00:00
pub matrix: Matrix3<f32>,
2023-06-29 20:36:00 +00:00
}
impl EDH {
2023-07-09 20:16:01 +00:00
pub fn new(vec: Vec<Vec<f32>>) -> LJResult<EDH> {
if vec.len() != 3 ||
vec[0].len() != 3 ||
vec[1].len() != 3 ||
vec[2].len() != 3 {
return Err(Box::new(LJError::BadEDH));
}
// this is the matrix already transposed.
let matrix = Matrix3::new(vec[0][0], vec[1][0], vec[2][0],
vec[0][1], vec[1][1], vec[2][1],
vec[0][2], vec[1][2], vec[2][2]);
Ok(EDH { matrix })
}
pub fn apply(&self, point: &Point) -> Point {
let p = Matrix1x3::new(point.x, point.y, 1.0);
let p = p * self.matrix;
let new_p = Point { x: p[0] / p[2], y: p[1] / p[2], ..*point };
debug!("{:?} => {:?}", point, new_p);
new_p
}
2023-06-29 20:36:00 +00:00
}
2023-06-29 21:24:56 +00:00
#[derive(Debug, Default)]
2023-06-29 20:36:00 +00:00
pub struct WorldState {
pub edh: EDH,
pub resampler: Vec<f32>,
2023-07-17 08:24:02 +00:00
pub client_key: String,
2023-06-29 20:36:00 +00:00
pub intensity: u8,
pub kpps: u32,
2023-07-09 20:16:01 +00:00
pub color: Color,
pub draw_black: bool,
pub draw_grid: bool,
pub grid: Vec<Point>,
2023-06-29 20:36:00 +00:00
}
2023-07-09 20:16:01 +00:00
impl WorldState {}