문제

세그먼트 라인 세트가 있습니다 AB. 가리키다 위치에 있습니다 [x0,y0] = [0.0] 방사형 점으로 좌표. 세그먼트 라인의 끝입니다 [x1,y1]. 나는 몇 가지 답을 찾았다 여기 그리고 나는 그것을 내 문제에 적응 시키려고 노력했다.

질문: B가 화살표의 끝이라는 것을 보여주는 방사형 세그먼트를 어떻게 표시 할 수 있습니까? 내 코드에서 화살표 크기가 플롯 창을 초과하기 때문입니다.

도움이 될 것입니다.

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)
도움이 되었습니까?

해결책

내 이해는 화살촉이 줄거리에서 벗어 났을 때 무엇을 해야하는지 묻습니다. 몇 가지 옵션이 있습니다.

  1. 화살표를 경계까지 끌어 당기고 반 화살표 헤드와 같은 화살표의 진정한 끝이 아님을 나타내는 화살표 유형을 사용할 수 있습니다. "shape"="left", 또는 개방 대 폐쇄 등
  2. 간소화를 위해 완료된 것처럼 화살표를 따라 화살촉을 중간에 그릴 수 있습니다. 나는 mpl에서 이것에 대한 명령을 모르지만, 두 개의 화살표를 사용하여 쉽게 할 수 있거나 줄과 화살표의 머리 등을 플로팅 할 수 있습니다.

편집하다:완전성을 위해 #2에 내 테이크를 추가하겠습니다. 다음은 선을 플로팅 한 다음 선 위에 화살표를 플로팅하며 화살촉은 선을 따라 어디서나 제어 할 수 있습니다. f (0과 1 사이). 이 예제는 몇 줄을 플로팅했습니다 f 에 이르기까지 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top