diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-26 07:45:03 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-26 07:45:03 +0800 |
commit | 3e01f38b506fafcd7ca7658dc77cb377c25578d0 (patch) | |
tree | 1e2b5934f58991cfce070287ba21f1cc9a0ba7f0 | |
parent | f17f6b2905d79f85167e88be007d8f4bbbd17044 (diff) |
feat: fix and improve spans for HALF_ARC_SPAN
-rw-r--r-- | packages/svgbob/src/map/circle_map.rs | 15 | ||||
-rw-r--r-- | packages/svgbob/src/map/circle_map/test_circle_map.rs | 28 | ||||
-rw-r--r-- | packages/svgbob/test_data/circles.bob | 701 |
3 files changed, 719 insertions, 25 deletions
diff --git a/packages/svgbob/src/map/circle_map.rs b/packages/svgbob/src/map/circle_map.rs index e7000f2..3b90b1b 100644 --- a/packages/svgbob/src/map/circle_map.rs +++ b/packages/svgbob/src/map/circle_map.rs @@ -656,11 +656,6 @@ lazy_static! { let center_cell = circle_art.center_cell(); - // cells tangent to the circle - let top_tangent = Cell::new(center_cell.x, top_left.y); - let bottom_tangent = Cell::new(center_cell.x, bottom_left.y); - let left_tangent = Cell::new(top_left.x, center_cell.y); - let right_tangent = Cell::new(top_right.x, center_cell.y); let center = circle_art.center(); let radius = circle_art.radius(); @@ -681,10 +676,10 @@ lazy_static! { let span4_center = Cell::new((center.x.floor() / Cell::width()) as i32, (center.y.floor() / Cell::height()) as i32); - let bounds_top_half = Cell::rearrange_bound(top_left, right_tangent); - let bounds_bottom_half = Cell::rearrange_bound(left_tangent, bottom_right); - let bounds_left_half = Cell::rearrange_bound(top_left, bottom_tangent); - let bounds_right_half = Cell::rearrange_bound(top_tangent, bottom_right); + let bounds_top_half = Cell::rearrange_bound(top_left, Cell::new(top_right.x, span1_center.y)); + let bounds_bottom_half = Cell::rearrange_bound(Cell::new(bottom_left.x, span3_center.y), bottom_right); + let bounds_left_half = Cell::rearrange_bound(Cell::new(span2_center.x, top_left.y), bottom_left); + let bounds_right_half = Cell::rearrange_bound(Cell::new(span1_center.x, top_right.y), bottom_right); let span_top_half = span.extract(bounds_top_half.0, bounds_top_half.1).localize(); let span_bottom_half = span.extract(bounds_bottom_half.0, bounds_bottom_half.1).localize(); @@ -746,7 +741,9 @@ lazy_static! { #[derive(Default, Hash, PartialEq, Eq)] pub struct DiameterArc { + /// the arc diameter diameter: i32, + /// arc number arc: usize, } impl Ord for DiameterArc { diff --git a/packages/svgbob/src/map/circle_map/test_circle_map.rs b/packages/svgbob/src/map/circle_map/test_circle_map.rs index 105c618..2b76005 100644 --- a/packages/svgbob/src/map/circle_map/test_circle_map.rs +++ b/packages/svgbob/src/map/circle_map/test_circle_map.rs @@ -27,6 +27,11 @@ fn test_circle1() { #[test] fn test_half_arc_span5_top() { + for (diameter, (arc, span)) in FLATTENED_HALF_ARC_SPAN.iter() { + println!("diameter: {}", diameter.diameter); + println!("{}", span); + println!(); + } let art = r#" ___ ,' `. @@ -38,31 +43,29 @@ fn test_half_arc_span5_top() { assert_eq!(spans.len(), 1); let span1 = spans.remove(0); let (arc, _) = endorse_half_arc_span(&span1).unwrap(); - assert_eq!(arc.radius, 5.0); + assert_eq!(arc.radius, 4.5); } #[test] fn test_half_arc_span5_bottom() { let art = r#" - \ / `.___.' "#; + for (diameter, (arc, span)) in FLATTENED_HALF_ARC_SPAN.iter() { + println!("diameter: {}", diameter.diameter); + println!("{}", span); + println!(); + } let cell_buffer = CellBuffer::from(art); let mut spans: Vec<Span> = cell_buffer.into(); assert_eq!(spans.len(), 1); let span1 = spans.remove(0); let (arc, _) = endorse_half_arc_span(&span1).unwrap(); - assert_eq!(arc.radius, 5.0); + assert_eq!(arc.radius, 4.5); } -// half12: A (0,1) (0,6) 5 -> 0 0 0 -// span23: -// __ -// ,' -// \ -// `.__ #[test] fn test_half_arc_span5_left() { let art = r#" @@ -82,13 +85,6 @@ fn test_half_arc_span5_left() { assert_eq!(arc.radius, 5.0); } -// half34: A (0,0) (0,5) 5 -> 0 0 0 -// span41: -// __ -// `. -// \ -// __.' -// #[test] fn test_half_arc_span5_right() { let art = r#" diff --git a/packages/svgbob/test_data/circles.bob b/packages/svgbob/test_data/circles.bob index ba04298..5915b50 100644 --- a/packages/svgbob/test_data/circles.bob +++ b/packages/svgbob/test_data/circles.bob @@ -820,3 +820,704 @@ '-.... ....-' + +diameter: 4 + + ,-. +( ) + +diameter: 4 + +( ) + `-' + +diameter: 4 + + ,- +( + `- + +diameter: 4 + +-. + ) +-' + + +diameter: 5 + + .--. +( ) + + +diameter: 5 + +( ) + `--' + + +diameter: 5 + + .- +( + `- + + +diameter: 5 + +-. + ) +-' + + +diameter: 6 + + _ + .' '. +( ) + + +diameter: 6 + +( ) + `._.' + + +diameter: 6 + + _ + .' +( + `._ + + +diameter: 6 + +_ + '. + ) +_.' + + +diameter: 7 + + __ + ,' '. +( ) + + +diameter: 7 + +( ) + `.__.' + + +diameter: 7 + + _ + ,' +( + `._ + + +diameter: 7 + +_ + '. + ) +_.' + + +diameter: 8 + + ___ + ,' '. +( ) + + +diameter: 8 + +( ) + `. .' + `-' + + +diameter: 8 + + __ + ,' +( + `. + `- + +diameter: 8 + +__ + '. + ) + .' +-' + + +diameter: 9 + + ___ + ,' `. +/ \ + + +diameter: 9 + + +\ / + `.___.' + + +diameter: 9 + + __ + ,' +/ +\ + `.__ + + +diameter: 9 + +__ + `. + \ + / +__.' + + +diameter: 10 + + ____ + ,' `. +/ \ + + +diameter: 10 + + +\ / + `.____.' + + +diameter: 10 + + __ + ,' +/ +\ + `.__ + + +diameter: 10 + +__ + `. + \ + / +__.' + + +diameter: 11 + + ____ + .' `. + / \ +( ) + + +diameter: 11 + +( ) + \ / + `.____.' + + +diameter: 11 + + __ + .' + / +( + \ + `.__ + + +diameter: 11 + +__ + `. + \ + ) + / +__.' + +diameter: 12 + + _____ + ,' `. + / \ +( ) + + +diameter: 12 + +( ) + \ / + `._____.' + + +diameter: 12 + + ___ + ,' + / +( + \ + `.___ + + +diameter: 12 + +___ + `. + \ + ) + / +___.' + + +diameter: 13 + + ______ + ,' `. + / \ +| | + +diameter: 13 + +| | +| | + \ / + `.______.' + + +diameter: 13 + + ___ + ,' + / +| +| + \ + `.___ + + +diameter: 13 + +___ + `. + \ + | + | + / +___.' + + +diameter: 14 + + _______ + ,' `. + / \ +| | + + +diameter: 14 + +| | +| | + \ / + `._______.' + + +diameter: 14 + + ____ + ,' + / +| +| + \ + `.____ + + +diameter: 14 + +____ + `. + \ + | + | + / +____.' + + +diameter: 15 + + ________ + ,' `. + / \ +| | +| | + + +diameter: 15 + +| | +| | + \ / + `.________.' + + +diameter: 15 + + ____ + ,' + / +| +| +| + \ + `.____ + + +diameter: 15 + +____ + `. + \ + | + | + | + / +____.' + + +diameter: 16 + + __-----__ + ,' `. + / \ +| | +| | + +diameter: 16 + +| | +| | + \ / + `. .' + `-------' + +diameter: 16 + + __--- + ,' + / +| +| +| + \ + `. + `---- + +diameter: 16 + +---__ + `. + \ + | + | + | + / + .' +----' + +diameter: 17 + + .--------. + ,' `. + / \ +| | +| | + +diameter: 17 + +| | +| | + \ / + `. .' + `--------' + +diameter: 17 + + .---- + ,' + / +| +| +| + \ + `. + `---- + +diameter: 17 + +----. + `. + \ + | + | + | + / + .' +----' + +diameter: 18 + + _.-'''''-._ + ,' `. + / \ +. . +| | +| | + +diameter: 18 + +| | +| | + \ / + `._ _.' + '-.....-' + + +diameter: 18 + + _.-''' + ,' + / +. +| +| +| + \ + `._ + '-... + + +diameter: 18 + +'''-._ + `. + \ + . + | + | + | + / + _.' +...-' + +diameter: 19 + + _.-''''''-._ + ,' `. + / \ +. . +| | +| | + + +diameter: 19 + +| | +| | + \ / + `._ _.' + '-......-' + + +diameter: 19 + + _.-''' + ,' + / +. +| +| +| + \ + `._ + '-... + + +diameter: 19 + +'''-._ + `. + \ + . + | + | + | + / + _.' +...-' + + +diameter: 20 + + _.-'''''''-._ + ,' `. + / \ +. . +| | +| | + + +diameter: 20 + + +| | +| | + \ / + `._ _.' + '-.......-' + + +diameter: 20 + + _.-'''' + ,' + / +. +| +| +| + \ + `._ + '-.... + + +diameter: 20 + +''''-._ + `. + \ + . + | + | + | + / + _.' +....-' + + +diameter: 21 + + _.-''''''''-._ + ,' `. + / \ +. . +| | +| | + +diameter: 21 + +| | +| | +| | + \ / + `._ _.' + '-........-' + +diameter: 21 + + _.-'''' + ,' + / +. +| +| +| +| + \ + `._ + '-.... + + +diameter: 21 + +''''-._ + `. + \ + . + | + | + | + | + / + _.' +....-' + +diameter: 22 + + _.-'''''''''-._ + ,' `. + / \ +. . +| | +| | + +diameter: 22 + +| | +| | +| | + \ / + `._ _.' + '-.........-' + + +diameter: 22 + + _.-''''' + ,' + / +. +| +| +| +| + \ + `._ + '-..... + + +diameter: 22 + +'''''-._ + `. + \ + . + | + | + | + | + / + _.' |