From 87c668ac9d28dba7cccc536b4568b8fe7a20076f Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sat, 5 Aug 2017 22:41:13 -0400 Subject: [PATCH 1/4] Remove unnecessary math in Path.arc. These trig bits were necessary to properly scale by major and minor axes for an ellipse, but this method only supports circular arcs. --- lib/matplotlib/path.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/path.py b/lib/matplotlib/path.py index 4216f3a9e1b7..057b5f8a56e8 100644 --- a/lib/matplotlib/path.py +++ b/lib/matplotlib/path.py @@ -864,14 +864,11 @@ def arc(cls, theta1, theta2, n=None, is_wedge=False): polylines, quadratic or cubic Bezier curves `_. """ - theta1, theta2 = np.deg2rad([theta1, theta2]) - - twopi = np.pi * 2.0 halfpi = np.pi * 0.5 - eta1 = np.arctan2(np.sin(theta1), np.cos(theta1)) - eta2 = np.arctan2(np.sin(theta2), np.cos(theta2)) - eta2 -= twopi * np.floor((eta2 - eta1) / twopi) + eta1 = theta1 + eta2 = theta2 - 360 * np.floor((theta2 - theta1) / 360) + eta1, eta2 = np.deg2rad([eta1, eta2]) # number of curve segments to make if n is None: From 5162f37421184f7af8a19004d35e6602a5c46987 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 6 Aug 2017 00:50:58 -0400 Subject: [PATCH 2/4] Ensure that Path.arc works for any full circle. Depending on the inputs, the range may get squashed down to ~0 when trying to remove extra 2pi revolutions. Fixes #8992. --- lib/matplotlib/path.py | 4 ++++ lib/matplotlib/tests/test_path.py | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/matplotlib/path.py b/lib/matplotlib/path.py index 057b5f8a56e8..8195bcf8ba12 100644 --- a/lib/matplotlib/path.py +++ b/lib/matplotlib/path.py @@ -868,6 +868,10 @@ def arc(cls, theta1, theta2, n=None, is_wedge=False): eta1 = theta1 eta2 = theta2 - 360 * np.floor((theta2 - theta1) / 360) + # Ensure 2pi range is not flattened to 0 due to floating-point errors, + # but don't try to expand existing 0 range. + if theta2 != theta1 and eta2 <= eta1: + eta2 += 360 eta1, eta2 = np.deg2rad([eta1, eta2]) # number of curve segments to make diff --git a/lib/matplotlib/tests/test_path.py b/lib/matplotlib/tests/test_path.py index 31b97830375f..25635b2d8ac3 100644 --- a/lib/matplotlib/tests/test_path.py +++ b/lib/matplotlib/tests/test_path.py @@ -205,3 +205,15 @@ def test_path_deepcopy(): path2 = Path(verts, codes) copy.deepcopy(path1) copy.deepcopy(path2) + + +@pytest.mark.parametrize('offset', range(-720, 361, 45)) +def test_full_arc(offset): + low = offset + high = 360 + offset + + path = Path.arc(low, high) + mins = np.min(path.vertices, axis=0) + maxs = np.max(path.vertices, axis=0) + np.testing.assert_allclose(mins, -1) + assert np.allclose(maxs, 1) From c586b55e2298d7410e2afbf986464f638f8d2569 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 6 Aug 2017 00:51:21 -0400 Subject: [PATCH 3/4] Update broken test images. These are a bit unfortunate since they're mostly invisible. --- .../test_patches/wedge_range.pdf | Bin 4207 -> 3692 bytes .../test_patches/wedge_range.png | Bin 24157 -> 25401 bytes .../test_patches/wedge_range.svg | 117 +++++++++--------- 3 files changed, 56 insertions(+), 61 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.pdf b/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.pdf index bfb079b97af25ef5dba2b9ec5fba58675f83e96b..7f85a4fb0c90c1e4d4d32b95ff9b333e79340781 100644 GIT binary patch delta 3001 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 F{|B`boUi}@ diff --git a/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.png b/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.png index 6035d0604b3ea33b74e03e097a082fa240747ffb..1c1d4c4f96fbab10663ca53b06776781be4b2206 100644 GIT binary patch literal 25401 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 literal 24157 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 G_WuH}rI{1} diff --git a/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.svg b/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.svg index c1fa833228ea..23a18eeee8a7 100644 --- a/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.svg +++ b/lib/matplotlib/tests/baseline_images/test_patches/wedge_range.svg @@ -27,43 +27,44 @@ z " style="fill:#ffffff;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> - +" style="fill:none;stroke:#000000;stroke-linejoin:miter;stroke-width:3;"/> +" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/> - + +" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/> - + - + - + - + - + - + - + - + - + - + - + @@ -288,80 +283,80 @@ L 0 4 +" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/> - + +" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/> - + - + - + - + - + - + - + - + - + - + - + @@ -369,8 +364,8 @@ L -4 0 - - + + From e41d033009d6a34acadfe43a645be2b35d0bd4a1 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 7 Aug 2017 04:14:24 -0400 Subject: [PATCH 4/4] Document how Path.arc handles >360 degree arcs. --- lib/matplotlib/path.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/matplotlib/path.py b/lib/matplotlib/path.py index 8195bcf8ba12..fcaf191dc04b 100644 --- a/lib/matplotlib/path.py +++ b/lib/matplotlib/path.py @@ -856,6 +856,10 @@ def arc(cls, theta1, theta2, n=None, is_wedge=False): Return an arc on the unit circle from angle *theta1* to angle *theta2* (in degrees). + *theta2* is unwrapped to produce the shortest arc within 360 degrees. + That is, if *theta2* > *theta1* + 360, the arc will be from *theta1* to + *theta2* - 360 and not a full circle plus some extra overlap. + If *n* is provided, it is the number of spline segments to make. If *n* is not provided, the number of spline segments is determined based on the delta between *theta1* and *theta2*. @@ -931,6 +935,10 @@ def wedge(cls, theta1, theta2, n=None): Return a wedge of the unit circle from angle *theta1* to angle *theta2* (in degrees). + *theta2* is unwrapped to produce the shortest wedge within 360 degrees. + That is, if *theta2* > *theta1* + 360, the wedge will be from *theta1* + to *theta2* - 360 and not a full circle plus some extra overlap. + If *n* is provided, it is the number of spline segments to make. If *n* is not provided, the number of spline segments is determined based on the delta between *theta1* and *theta2*.