Skip to content

Commit 32436e6

Browse files
committed
AA on both sides
1 parent 33f37f3 commit 32436e6

File tree

1 file changed

+41
-125
lines changed

1 file changed

+41
-125
lines changed

debug-tools/examples/line-perp.rs

Lines changed: 41 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -149,17 +149,17 @@ fn perpendicular(
149149
(Rgb888::CSS_CORNFLOWER_BLUE, Rgb888::YELLOW)
150150
};
151151

152-
// let (c1, c2) = (Rgb888::GREEN, Rgb888::GREEN);
153-
154-
let mut distance = 0.0f32;
152+
let (c_left, c_right) = (Rgb888::GREEN, Rgb888::GREEN);
155153

156154
let origin = Point::new(x0, y0);
157155

158156
// dbg!(orig_width_l);
159157

160158
let limit_l = orig_width_l * 2.0;
159+
let limit_r = orig_width_r * 2.0;
160+
161+
let mut distance = 0.0f32;
161162

162-
// while tk.pow(2) <= width_l + tk.pow(2) && width_l > 0 {
163163
while distance.floor() <= limit_l && width_l > 0 {
164164
// println!("---");
165165

@@ -213,29 +213,36 @@ fn perpendicular(
213213
let mut tk = winit;
214214
let mut p = 0;
215215

216-
while tk.pow(2) <= width_r && width_r > 0 {
217-
if p > 0 {
218-
let thing = (tk.pow(2) - width_l) as f32 / width_l as f32;
219-
let fract = if tk.pow(2) > width_l {
220-
1.0 - thing
221-
} else {
222-
1.0
223-
};
224-
225-
let fract = 1.0;
226-
227-
Pixel(
228-
point,
229-
Rgb888::new(
230-
(c_right.r() as f32 * fract) as u8,
231-
(c_right.g() as f32 * fract) as u8,
232-
(c_right.b() as f32 * fract) as u8,
233-
),
234-
)
235-
.draw(display)?;
236-
}
216+
let mut distance = 0.0f32;
237217

238-
if error > threshold {
218+
while distance.floor() <= limit_r && width_r > 0 {
219+
// println!("---");
220+
221+
let is_outside = {
222+
let le1 = LinearEquation::from_line(&right_extent);
223+
224+
le1.check_side(point, side_check_right)
225+
};
226+
227+
// let fract = 1.0 - dbg!(dist(left_extent, point));
228+
229+
let fract = if !is_outside {
230+
1.0
231+
} else {
232+
1.0 - dist(right_extent, point)
233+
};
234+
235+
Pixel(
236+
point,
237+
Rgb888::new(
238+
(c_right.r() as f32 * fract) as u8,
239+
(c_right.g() as f32 * fract) as u8,
240+
(c_right.b() as f32 * fract) as u8,
241+
),
242+
)
243+
.draw(display)?;
244+
245+
if error >= threshold {
239246
point -= step.major;
240247
error += e_minor;
241248
tk += 2 * dy;
@@ -244,7 +251,14 @@ fn perpendicular(
244251
error += e_major;
245252
point -= step.minor;
246253
tk += 2 * dx;
247-
p += 1;
254+
255+
// dbg!(distance);
256+
257+
distance = {
258+
let delta = point - origin;
259+
260+
f32::sqrt((delta.x.pow(2) + delta.y.pow(2)) as f32)
261+
};
248262
}
249263

250264
Ok(())
@@ -353,104 +367,6 @@ fn thick_line(
353367
Ok(())
354368
}
355369

356-
// /// Left/right extents perpendicular to a given point. Returns `(L, R)`.
357-
// fn perp_extents(
358-
// start: Point,
359-
// delta: MajorMinor<i32>,
360-
// mut step: MajorMinor<Point>,
361-
// width: i32,
362-
// ) -> (Point, Point) {
363-
// let mut point = start;
364-
365-
// if width < 2 {
366-
// return (start, start);
367-
// }
368-
369-
// let dx = delta.major;
370-
// let dy = delta.minor;
371-
372-
// let mut sign = match (step.major, step.minor) {
373-
// (Point { x: -1, y: 0 }, Point { x: 0, y: 1 }) => -1,
374-
// (Point { x: 0, y: -1 }, Point { x: -1, y: 0 }) => -1,
375-
// (Point { x: 1, y: 0 }, Point { x: 0, y: -1 }) => -1,
376-
// (Point { x: 0, y: 1 }, Point { x: 1, y: 0 }) => -1,
377-
// _ => 1,
378-
// };
379-
380-
// if sign == -1 {
381-
// step.major *= -1;
382-
// step.minor *= -1;
383-
// }
384-
385-
// let dx = dx.abs();
386-
// let dy = dy.abs();
387-
388-
// let threshold = dx - 2 * dy;
389-
// let e_minor = -2 * dx;
390-
// let e_major = 2 * dy;
391-
392-
// let mut error = 0;
393-
// let mut tk = 0i32;
394-
395-
// let side = LineSide::Center;
396-
397-
// let (mut width_l, mut width_r) = side.widths(width);
398-
399-
// if sign == -1 {
400-
// core::mem::swap(&mut width_l, &mut width_r);
401-
// }
402-
403-
// if side == LineSide::Right {
404-
// core::mem::swap(&mut width_l, &mut width_r);
405-
// }
406-
407-
// let orig_width_l = width_l as f32;
408-
// let orig_width_r = width_r as f32;
409-
410-
// let width_l = width_l.pow(2) * (dx * dx + dy * dy);
411-
// let width_r = width_r.pow(2) * (dx * dx + dy * dy);
412-
413-
// while tk.pow(2) <= width_l && width_l > 0 {
414-
// if error >= threshold {
415-
// point += step.major;
416-
// error += e_minor;
417-
// tk += 2 * dy;
418-
// }
419-
420-
// error += e_major;
421-
// point += step.minor;
422-
// tk += 2 * dx;
423-
// }
424-
425-
// let point_l = point;
426-
427-
// let mut point = start;
428-
// let mut error = 0;
429-
// let mut tk = 0i32;
430-
// let mut p = 0;
431-
432-
// while tk.pow(2) <= width_r && width_r > 0 {
433-
// if error > threshold {
434-
// point -= step.major;
435-
// error += e_minor;
436-
// tk += 2 * dy;
437-
// }
438-
439-
// error += e_major;
440-
// point -= step.minor;
441-
// tk += 2 * dx;
442-
// p += 1;
443-
// }
444-
445-
// (point_l, point)
446-
// }
447-
448-
// fn extents(start: Point, end: Point, width: i32, step: MajorMinor<Point>) -> (Line, Line) {
449-
// let delta = end - start;
450-
451-
// let (start_l, start_r) = perp_extents(start, delta, step, width);
452-
// }
453-
454370
struct LineDebug {
455371
start: Point,
456372
end: Point,

0 commit comments

Comments
 (0)