@@ -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-
454370struct LineDebug {
455371 start : Point ,
456372 end : Point ,
0 commit comments