@@ -149,17 +149,17 @@ fn perpendicular(
149
149
( Rgb888 :: CSS_CORNFLOWER_BLUE , Rgb888 :: YELLOW )
150
150
} ;
151
151
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 ) ;
155
153
156
154
let origin = Point :: new ( x0, y0) ;
157
155
158
156
// dbg!(orig_width_l);
159
157
160
158
let limit_l = orig_width_l * 2.0 ;
159
+ let limit_r = orig_width_r * 2.0 ;
160
+
161
+ let mut distance = 0.0f32 ;
161
162
162
- // while tk.pow(2) <= width_l + tk.pow(2) && width_l > 0 {
163
163
while distance. floor ( ) <= limit_l && width_l > 0 {
164
164
// println!("---");
165
165
@@ -213,29 +213,36 @@ fn perpendicular(
213
213
let mut tk = winit;
214
214
let mut p = 0 ;
215
215
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 ;
237
217
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 {
239
246
point -= step. major ;
240
247
error += e_minor;
241
248
tk += 2 * dy;
@@ -244,7 +251,14 @@ fn perpendicular(
244
251
error += e_major;
245
252
point -= step. minor ;
246
253
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
+ } ;
248
262
}
249
263
250
264
Ok ( ( ) )
@@ -353,104 +367,6 @@ fn thick_line(
353
367
Ok ( ( ) )
354
368
}
355
369
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
-
454
370
struct LineDebug {
455
371
start : Point ,
456
372
end : Point ,
0 commit comments