@@ -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
@@ -208,32 +208,78 @@ fn perpendicular(
208
208
209
209
// println!("\n===========================\n");
210
210
211
+ // let mut point = Point::new(x0, y0);
212
+ // let mut error = -einit;
213
+ // let mut tk = winit;
214
+ // let mut p = 0;
215
+
216
+ // while tk.pow(2) <= width_r + tk.pow(2) && 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
+ // Pixel(
226
+ // point,
227
+ // Rgb565::new(
228
+ // (c1.r() as f32 * fract) as u8,
229
+ // (c1.g() as f32 * fract) as u8,
230
+ // (c1.b() as f32 * fract) as u8,
231
+ // ),
232
+ // )
233
+ // .draw(display)?;
234
+ // }
235
+
236
+ // if error > threshold {
237
+ // point -= step.major;
238
+ // error += e_minor;
239
+ // tk += 2 * dy;
240
+ // }
241
+
242
+ // error += e_major;
243
+ // point -= step.minor;
244
+ // tk += 2 * dx;
245
+ // p += 1;
246
+ // }
247
+
248
+ // // ---
249
+
211
250
let mut point = Point :: new ( x0, y0) ;
212
251
let mut error = -einit;
213
252
let mut tk = winit;
214
253
let mut p = 0 ;
215
254
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
- }
255
+ let mut distance = 0.0f32 ;
256
+
257
+ while distance. floor ( ) <= limit_r && width_r > 0 {
258
+ // println!("---");
259
+
260
+ let is_outside = {
261
+ let le1 = LinearEquation :: from_line ( & right_extent) ;
262
+
263
+ le1. check_side ( point, side_check_right)
264
+ } ;
265
+
266
+ // let fract = 1.0 - dbg!(dist(left_extent, point));
267
+
268
+ let fract = if !is_outside {
269
+ 1.0
270
+ } else {
271
+ 1.0 - dist ( right_extent, point)
272
+ } ;
273
+
274
+ Pixel (
275
+ point,
276
+ Rgb888 :: new (
277
+ ( c_right. r ( ) as f32 * fract) as u8 ,
278
+ ( c_right. g ( ) as f32 * fract) as u8 ,
279
+ ( c_right. b ( ) as f32 * fract) as u8 ,
280
+ ) ,
281
+ )
282
+ . draw ( display) ?;
237
283
238
284
if error > threshold {
239
285
point -= step. major ;
@@ -244,7 +290,14 @@ fn perpendicular(
244
290
error += e_major;
245
291
point -= step. minor ;
246
292
tk += 2 * dx;
247
- p += 1 ;
293
+
294
+ // dbg!(distance);
295
+
296
+ distance = {
297
+ let delta = point - origin;
298
+
299
+ f32:: sqrt ( ( delta. x . pow ( 2 ) + delta. y . pow ( 2 ) ) as f32 )
300
+ } ;
248
301
}
249
302
250
303
Ok ( ( ) )
@@ -353,104 +406,6 @@ fn thick_line(
353
406
Ok ( ( ) )
354
407
}
355
408
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
409
struct LineDebug {
455
410
start : Point ,
456
411
end : Point ,
0 commit comments