Question

J'ai un ensemble de lignes de segment UN B. Indiquer UN est situé dans [x0,y0] = [0.0] coordonne comme étant un point radial. B est la fin des lignes de segment [x1,y1]. J'ai trouvé des réponses ici Et j'ai essayé de l'adapter à mon problème.

La question: Comment puis-je tracer le segment radial montrant que B est la fin de la flèche.? Parce que, dans mon code, les tailles de flèches dépassent la fenêtre de tracé.

Toute aide serait appréciée.

import numpy as np
import pylab as pl

def arrow_segment(AB):

    for idx in range(0,len(AB)):
            plt.arrow(AB[idx,0],  #x1
                  AB[idx,1],  # y1
                  AB[idx,2]-AB[idx,0], # x2 - x1
                  AB[idx,3]-AB[idx,1], # y2 - y1
                  color='blue',head_width=0.05, head_length=0.1)
    plt.show()
AB = [[0, 0., 1., 10]]
arrow_segment(AB)
Était-ce utile?

La solution

Je comprends que vous demandez quoi faire lorsque la pointe de flèche est hors de l'intrigue. Il y a quelques options:

  1. Vous pouvez dessiner la flèche jusqu'à la limite et utiliser un type de tête de flèche qui indique que ce n'est pas la véritable extrémité de la flèche, comme une demi-tête de flèche, "shape"="left", ou ouvert vs fermé, etc.
  2. Vous pouvez dessiner la pointe de flèche à mi-chemin le long de la flèche, comme se fait pour une rationalisation. Je ne connais pas de commande pour cela dans MPL, mais vous pouvez facilement le faire en utilisant deux flèches, ou simplement tracer une ligne et la tête d'une flèche, etc.

Éditer:Pour l'exhaustivité, j'ajouterai mon point de vue sur un n ° 2. Ici je trace la ligne, puis je trace la flèche sur la ligne, et la pointe de flèche peut être tracée n'importe où le long de la ligne et contrôlée par f (entre 0 et 1). L'exemple montre quelques lignes tracé pour f allant de 0 à .1.

import numpy as np
import pylab as plt

def arrow_mh(v4, color, f=.5):
    x0, y0, x1, y1 = v4
    line = plt.plot([x0, x1], [y0, y1], color=color)

    f = max(f, .0001)
    dx = f*(x1-x0)
    dy = f*(y1-y0)
    a = plt.arrow(x0, y0, dx, dy,
          color=color,head_width=0.05, head_length=0.1)

def arrow_segment(AB):

    for idx in range(0,len(AB)):
        arrow_mh(AB[idx], 'blue', .01*(9-idx))
    plt.xlim(0, 1)
    plt.ylim(0, 1)
    plt.show()
AB = np.array([[.1*i, .1, .5, 4] for i in range(10)])
arrow_segment(AB)

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top