summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2022-09-26 07:45:03 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2022-09-26 07:45:03 +0800
commit3e01f38b506fafcd7ca7658dc77cb377c25578d0 (patch)
tree1e2b5934f58991cfce070287ba21f1cc9a0ba7f0
parentf17f6b2905d79f85167e88be007d8f4bbbd17044 (diff)
feat: fix and improve spans for HALF_ARC_SPAN
-rw-r--r--packages/svgbob/src/map/circle_map.rs15
-rw-r--r--packages/svgbob/src/map/circle_map/test_circle_map.rs28
-rw-r--r--packages/svgbob/test_data/circles.bob701
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
+
+'''''-._
+ `.
+ \
+ .
+ |
+ |
+ |
+ |
+ /
+ _.'