4

矢印の方向を描いているときに問題が発生しました。ポイント(x、y)座標とそれらの角度があります。私がやりたいことは、与えられた角度に従って矢印を描くことです(各ポイント座標でポイント方向を矢印として表示するだけです)。ここで、 「+x」、「+y」、「-x」、「-y」の座標は、それぞれ 90、0、270、180 度であると仮定する必要があります。

私は Python の描画ツールに少し慣れていません。pylab を使用するか、他のモジュールを使用するか、または..まだまったくわかりません。より良い説明をするために、次のコードをサンプルとして入れました。

 # Inputs:
 x = np.array([ 2, 4, 8, 10, 12, 14, 16])
 y = np.array([ 5, 10, 15, 20, 25, 30, 35])
 angles = np.array([45,275,190,100,280,18,45]) 

 import numpy as np
 import scipy as sp
 import pylab as pl

 def draw_line(x,y,angle):

     # First, draw (x,y) coordinate ???
     # Second, according to the angle indicate the direction as an arrow ???
4

2 に答える 2

10

で矢印を描くことができますmatplotlib.pyplot.arrow(x, y, dx, dy, hold=None, **kwargs)。難しいと思われる部分は、オフセットdxを定義しdy、角度と矢印の長さを指定することrです。angleラジアン単位の極座標の場合

dx = r*cos(angle)
dy = r*sin(angle)

あなたのdraw_line機能がなるように

def draw_line(x, y, angle):
    r = 1  # or whatever fits you
    arrow(x, y, r*cos(angle), r*sin(angle))

これにより、 から始まり(x,y)、 の方向にangle長さ の矢印が描画され1ます。

于 2013-04-12T12:51:45.963 に答える
3

指定された角度はマップの規則に従いますが、デカルトの規則では (+x、+y、-x、-y) がそれぞれ (0、90、180、270) になります。また、ラジアンも使用します。角度を変換するには:

import math
cartesianAngleRadians = (450-mapAngleDegrees)*math.pi/180.0

指定された x、y ポイントに従って目盛りを描画するソース コードを次に示します。

import numpy as np
import scipy as sp
import pylab as pl
import math

x = np.array([ 2, 4, 8, 10, 12, 14, 16])
y = np.array([ 5, 10, 15, 20, 25, 30, 35])
angles = np.array([45,275,190,100,280,18,45]) 

def draw_line(x,y,angle,length):
  cartesianAngleRadians = (450-angle)*math.pi/180.0
  terminus_x = x + length * math.cos(cartesianAngleRadians)
  terminus_y = y + length * math.sin(cartesianAngleRadians)
  pl.plot([x, terminus_x],[y,terminus_y])
  print [x, terminus_x],[y,terminus_y]


pl.axis('equal')
pl.axis([-5,20,-5,40])
for i in range(0,len(x)):
  print x[i],y[i],angles[i]
  draw_line(x[i],y[i],angles[i],1)

pl.show()
于 2013-04-12T22:37:16.890 に答える