Carquois parcelle flèche ratio d'aspect

Je vais avoir quelques problèmes avec Matplotlib du carquois de l'intrigue. Étant donné un vecteur de vitesse de terrain, je veux tracer les vecteurs de la vitesse sur le dessus des lignes d'écoulement. Les vecteurs ne sont pas tangents aux flux de fonctionner comme prévu.

Pour calculer le flux de fonction, j'utilise un Python version traduite du Dr Pankratov du code Matlab disponible à http://www-pord.ucsd.edu/~matlab/stream.htm (le mien sera bientôt disponible sur GitHub).

À l'aide de ses résultats, j'utilise ce code:

import numpy
import pylab
# Regular grid coordineates, velocity field and stream function
x, y = numpy.meshgrid(numpy.arange(0, 21), numpy.arange(0, 11))
u = numpy.array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29],
[ 8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28],
[ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27],
[ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26],
[ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25],
[ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24],
[ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23],
[ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22],
[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21],
[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20]])
v = numpy.array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
13,  14,  15,  16,  17,  18,  19,  20],
[ -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,
12,  13,  14,  15,  16,  17,  18,  19],
[ -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,
11,  12,  13,  14,  15,  16,  17,  18],
[ -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
10,  11,  12,  13,  14,  15,  16,  17],
[ -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,
9,  10,  11,  12,  13,  14,  15,  16],
[ -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,
8,   9,  10,  11,  12,  13,  14,  15],
[ -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,
7,   8,   9,  10,  11,  12,  13,  14],
[ -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,
6,   7,   8,   9,  10,  11,  12,  13],
[ -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,
5,   6,   7,   8,   9,  10,  11,  12],
[ -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,
4,   5,   6,   7,   8,   9,  10,  11],
[-10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,
3,   4,   5,   6,   7,   8,   9,  10]])
psi = numpy.array([[   0. ,    0.5,    2. ,    4.5,    8. ,   12.5,   18. ,   24.5,
32. ,   40.5,   50. ,   60.5,   72. ,   84.5,   98. ,  112.5,
128. ,  144.5,  162. ,  180.5,  200. ],
[  -9.5,  -10. ,   -9.5,   -8. ,   -5.5,   -2. ,    2.5,    8. ,
14.5,   22. ,   30.5,   40. ,   50.5,   62. ,   74.5,   88. ,
102.5,  118. ,  134.5,  152. ,  170.5],
[ -18. ,  -19.5,  -20. ,  -19.5,  -18. ,  -15.5,  -12. ,   -7.5,
-2. ,    4.5,   12. ,   20.5,   30. ,   40.5,   52. ,   64.5,
78. ,   92.5,  108. ,  124.5,  142. ],
[ -25.5,  -28. ,  -29.5,  -30. ,  -29.5,  -28. ,  -25.5,  -22. ,
-17.5,  -12. ,   -5.5,    2. ,   10.5,   20. ,   30.5,   42. ,
54.5,   68. ,   82.5,   98. ,  114.5],
[ -32. ,  -35.5,  -38. ,  -39.5,  -40. ,  -39.5,  -38. ,  -35.5,
-32. ,  -27.5,  -22. ,  -15.5,   -8. ,    0.5,   10. ,   20.5,
32. ,   44.5,   58. ,   72.5,   88. ],
[ -37.5,  -42. ,  -45.5,  -48. ,  -49.5,  -50. ,  -49.5,  -48. ,
-45.5,  -42. ,  -37.5,  -32. ,  -25.5,  -18. ,   -9.5,    0. ,
10.5,   22. ,   34.5,   48. ,   62.5],
[ -42. ,  -47.5,  -52. ,  -55.5,  -58. ,  -59.5,  -60. ,  -59.5,
-58. ,  -55.5,  -52. ,  -47.5,  -42. ,  -35.5,  -28. ,  -19.5,
-10. ,    0.5,   12. ,   24.5,   38. ],
[ -45.5,  -52. ,  -57.5,  -62. ,  -65.5,  -68. ,  -69.5,  -70. ,
-69.5,  -68. ,  -65.5,  -62. ,  -57.5,  -52. ,  -45.5,  -38. ,
-29.5,  -20. ,   -9.5,    2. ,   14.5],
[ -48. ,  -55.5,  -62. ,  -67.5,  -72. ,  -75.5,  -78. ,  -79.5,
-80. ,  -79.5,  -78. ,  -75.5,  -72. ,  -67.5,  -62. ,  -55.5,
-48. ,  -39.5,  -30. ,  -19.5,   -8. ],
[ -49.5,  -58. ,  -65.5,  -72. ,  -77.5,  -82. ,  -85.5,  -88. ,
-89.5,  -90. ,  -89.5,  -88. ,  -85.5,  -82. ,  -77.5,  -72. ,
-65.5,  -58. ,  -49.5,  -40. ,  -29.5],
[ -50. ,  -59.5,  -68. ,  -75.5,  -82. ,  -87.5,  -92. ,  -95.5,
-98. ,  -99.5, -100. ,  -99.5,  -98. ,  -95.5,  -92. ,  -87.5,
-82. ,  -75.5,  -68. ,  -59.5,  -50. ]])
# The plots!
pylab.close('all')
pylab.ion()
pylab.figure(figsize=[8, 8])
pylab.contour(x, y, psi, 20, colors='k', linestyles='-', linewidth=1.0)
pylab.quiver(x, y, u, v, angles='uv', scale_units='xy', scale=10)
ax = pylab.axes()
ax.set_aspect(1.)

pour produire le résultat suivant pour illustrer mes questions.

Carquois parcelle flèche ratio d'aspect

Apparemment, les calculs sont corrects, mais les vecteurs de vitesse ne sont pas tangents aux flux de fonction, comme prévu. À l'aide de l'exacte enregistrer les valeurs, Matlab produit un carquois de l'intrigue qui montre exactement ce que je veux. Dans mon cas, le réglage du rapport d'aspect de l'un me donne le résultat souhaité, mais les forces de l'axes rectangle d'avoir un rapport d'aspect spécifique.

ax = pylab.axes()
ax.set_aspect(1.)

J'ai déjà essayé, sans succès, les différents arguments comme des "unités", "les angles" ou d '"échelle".

Quelqu'un sait comment produire carquois parcelles qui s'adaptent à la toile " ratio d'aspect et sont toujours tangente à mes lignes de contour, comme prévu?

Je m'attends à un résultat similaire à ceci (notez la façon dont les vecteurs sont tangents aux lignes d'écoulement):
Carquois parcelle flèche ratio d'aspect

Merci beaucoup!

OriginalL'auteur regeirk | 2012-08-22