91 lines
1.9 KiB
Rust
91 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,
|
|
) -> 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 i in 0..nb_visible {
|
|
pl.push(Point {
|
|
color: if i % 2 == 0 { 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)
|
|
}
|