From 38b611bfa3bc7be9caec01b17aaa603e45dc2b67 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 20 Oct 2016 03:49:12 -0400 Subject: [PATCH 1/2] TST: Make proj3d tests into real tests. Bundling them up in the middle of the code ensures they're never run. --- lib/mpl_toolkits/mplot3d/proj3d.py | 86 ------------- .../test_mplot3d/proj3d_axes_cube.png | Bin 0 -> 23182 bytes .../test_mplot3d/proj3d_lines_dists.png | Bin 0 -> 18898 bytes lib/mpl_toolkits/tests/test_mplot3d.py | 119 +++++++++++++++++- 4 files changed, 117 insertions(+), 88 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_axes_cube.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_lines_dists.png diff --git a/lib/mpl_toolkits/mplot3d/proj3d.py b/lib/mpl_toolkits/mplot3d/proj3d.py index 9406a8372025..418df7da9238 100644 --- a/lib/mpl_toolkits/mplot3d/proj3d.py +++ b/lib/mpl_toolkits/mplot3d/proj3d.py @@ -9,8 +9,6 @@ import six from six.moves import zip -from matplotlib.collections import LineCollection -from matplotlib.patches import Circle import numpy as np import numpy.linalg as linalg @@ -69,27 +67,6 @@ def line2d_seg_dist(p1, p2, p0): return d -def test_lines_dists(): - import pylab - ax = pylab.gca() - - xs, ys = (0,30), (20,150) - pylab.plot(xs, ys) - points = list(zip(xs, ys)) - p0, p1 = points - - xs, ys = (0,0,20,30), (100,150,30,200) - pylab.scatter(xs, ys) - - dist = line2d_seg_dist(p0, p1, (xs[0], ys[0])) - dist = line2d_seg_dist(p0, p1, np.array((xs, ys))) - for x, y, d in zip(xs, ys, dist): - c = Circle((x, y), d, fill=0) - ax.add_patch(c) - - pylab.xlim(-200, 200) - pylab.ylim(-200, 200) - pylab.show() def mod(v): """3d vector length""" @@ -105,12 +82,6 @@ def world_transformation(xmin, xmax, [0,0,1.0/dz,-zmin/dz], [0,0,0,1.0]]) -def test_world(): - xmin, xmax = 100, 120 - ymin, ymax = -100, 100 - zmin, zmax = 0.1, 0.2 - M = world_transformation(xmin, xmax, ymin, ymax, zmin, zmax) - print(M) def view_transformation(E, R, V): n = (E - R) @@ -218,53 +189,6 @@ def proj_trans_clip_points(points, M): xs, ys, zs = list(zip(*points)) return proj_transform_clip(xs, ys, zs, M) -def test_proj_draw_axes(M, s=1): - import pylab - xs, ys, zs = [0, s, 0, 0], [0, 0, s, 0], [0, 0, 0, s] - txs, tys, tzs = proj_transform(xs, ys, zs, M) - o, ax, ay, az = (txs[0], tys[0]), (txs[1], tys[1]), \ - (txs[2], tys[2]), (txs[3], tys[3]) - lines = [(o, ax), (o, ay), (o, az)] - - ax = pylab.gca() - linec = LineCollection(lines) - ax.add_collection(linec) - for x, y, t in zip(txs, tys, ['o', 'x', 'y', 'z']): - pylab.text(x, y, t) - -def test_proj_make_M(E=None): - # eye point - E = E or np.array([1, -1, 2]) * 1000 - #E = np.array([20,10,20]) - R = np.array([1, 1, 1]) * 100 - V = np.array([0, 0, 1]) - viewM = view_transformation(E, R, V) - perspM = persp_transformation(100, -100) - M = np.dot(perspM, viewM) - return M - -def test_proj(): - import pylab - M = test_proj_make_M() - - ts = ['%d' % i for i in [0,1,2,3,0,4,5,6,7,4]] - xs, ys, zs = [0,1,1,0,0, 0,1,1,0,0], [0,0,1,1,0, 0,0,1,1,0], \ - [0,0,0,0,0, 1,1,1,1,1] - xs, ys, zs = [np.array(v)*300 for v in (xs, ys, zs)] - # - test_proj_draw_axes(M, s=400) - txs, tys, tzs = proj_transform(xs, ys, zs, M) - ixs, iys, izs = inv_transform(txs, tys, tzs, M) - - pylab.scatter(txs, tys, c=tzs) - pylab.plot(txs, tys, c='r') - for x, y, t in zip(txs, tys, ts): - pylab.text(x, y, t) - - pylab.xlim(-0.2, 0.2) - pylab.ylim(-0.2, 0.2) - - pylab.show() def rot_x(V, alpha): cosa, sina = np.cos(alpha), np.sin(alpha) @@ -274,13 +198,3 @@ def rot_x(V, alpha): [0,0,0,0]]) return np.dot(M1, V) - -def test_rot(): - V = [1,0,0,1] - print(rot_x(V, np.pi/6)) - V = [0,1,0,1] - print(rot_x(V, np.pi/6)) - - -if __name__ == "__main__": - test_proj() diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_axes_cube.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_axes_cube.png new file mode 100644 index 0000000000000000000000000000000000000000..a7cc7e23bcc74a32d8d9c5300b9882c41f019c00 GIT binary patch literal 23182 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_lines_dists.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/proj3d_lines_dists.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4ee7ab593829e7497093ec2abb7a450d2111eb GIT binary patch literal 18898 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 Date: Thu, 20 Oct 2016 03:49:25 -0400 Subject: [PATCH 2/2] Fix mplot3d.proj3d.rot_x's handling of w. I'm pretty sure a rotation should not re-scale w. --- lib/mpl_toolkits/mplot3d/proj3d.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/mplot3d/proj3d.py b/lib/mpl_toolkits/mplot3d/proj3d.py index 418df7da9238..7b787ea4ac29 100644 --- a/lib/mpl_toolkits/mplot3d/proj3d.py +++ b/lib/mpl_toolkits/mplot3d/proj3d.py @@ -195,6 +195,6 @@ def rot_x(V, alpha): M1 = np.array([[1,0,0,0], [0,cosa,-sina,0], [0,sina,cosa,0], - [0,0,0,0]]) + [0,0,0,1]]) return np.dot(M1, V)