lj_qualibration/src/draw.rs

94 lines
1.9 KiB
Rust

// This is where you can put your custom code
use crate::{Color, Point};
const RADIUS: f32 = 2000.0;
const X_CENTER: f32 = 2047.0;
const Y_CENTER: f32 = 2047.0;
pub fn draw_line_dotted(
p1: &Point,
p2: &Point,
nb_all: usize,
nb_visible: usize,
first_on: bool,
) -> Result<Vec<Point>, Box<dyn std::error::Error>> {
let mut pl = vec![];
let black = Color { r: 0, g: 0, b: 0 };
let cmp = if first_on { 0 } else { 1 };
for _ in 0..nb_all {
pl.push(Point {
color: black,
..*p1
});
}
for i in 0..nb_visible {
pl.push(Point {
color: if i % 2 == cmp { p2.color } else { black },
..*p2
});
}
if nb_visible > nb_all {
return Ok(pl);
}
for _ in 0..(nb_all - nb_visible) {
pl.push(Point {
color: black,
..*p2
});
}
Ok(pl)
}
pub fn draw_line(
p1: &Point,
p2: &Point,
nb_all: usize,
nb_visible: usize,
) -> Result<Vec<Point>, Box<dyn std::error::Error>> {
let mut pl = vec![];
let black = Color { r: 0, g: 0, b: 0 };
for _ in 0..nb_all {
pl.push(Point {
color: black,
..*p1
});
}
for _ in 0..nb_visible {
pl.push(*p2);
}
if nb_visible > nb_all {
return Ok(pl);
}
for _ in 0..(nb_all - nb_visible) {
pl.push(Point {
color: black,
..*p2
});
}
Ok(pl)
}
#[allow(dead_code)]
pub fn draw(_time: f64) -> Result<Vec<Point>, Box<dyn std::error::Error>> {
let mut v: Vec<Point> = vec![];
for i in 0..128 {
let a = i as f32 / 128.0 * std::f32::consts::PI * 2.0;
v.push(Point {
x: (X_CENTER + a.cos() * RADIUS) as f32,
y: (Y_CENTER + a.sin() * RADIUS) as f32,
color: Color {
r: 255,
g: 255,
b: 255,
},
});
}
Ok(v)
}