2017-07-30 27 views
0

2d線(x1、y1) - >(x2、y2)を描画し、Affine2D.rotate_deg_aroundを使用してmatplotlibの角度thetaで回転します。matplotlib改行後の点の座標調整

start = (120, 0) 
ht = 100 
coords = currentAxis.transData.transform([start[0],start[1]]) 
trans1 = mpl.transforms.Affine2D().rotate_deg_around(coords[0],coords[1], 45) 
line1 = lines.Line2D([start[0], start[0]], [start[1], ht+start[1]], color='r', linewidth=2) 
line1.set_transform(currentAxis.transData + trans1) 
currentAxis.add_line(line1) 

Now(x2、y2)は回転後に(120、100)にならないでしょう。私は回転後に新しい(x2、y2)を見つける必要があります。

答えて

1

matplotlib変換関数は、ここで最も快適な解決策ではないかもしれません。

オリジナルのデータポイントを回転して翻訳するので、「一般的な」3×3回転行列と別の変換を使用する方がよい場合があります。または、回転と平行移動の両方を保持する4×4行列。

チェック http://www.lfd.uci.edu/~gohlke/code/transformations.py.html

この1は、回転のための4×4行列を返しますが、あなたは翻訳と右の列に、上の3つのコンポーネントが設定することができますから関数rotation_matrix(angle, direction, point=None)

最初は恐ろしく見えるかもしれません:) しかし、一度それに慣れると、そのようなもののための非常に便利なツールです。

少し詳細

http://www.dirsig.org/docs/new/affine.html

http://www.euclideanspace.com/maths/geometry/affine/matrix4x4/

https://en.wikipedia.org/wiki/Transformation_matrix

+0

を得るために使用することができます。これは、線を作成する間に渡された値[120、120]と[0,100]を私に与えます。私は変態点が必要です。 –

0

私は、変換後に新しいコ座標を取得できませんでした。それで、次のようにしました。

  1. 回転軸を中心に回転して回転します。ドット積の
  2. 結果

  3. ドット積(形質転換される必要以上の動作点(P)の行列)は、あなたが

    trans1 = mpl.transforms.Affine2D().rotate_deg_around(120, 100, 45) 
    txn = np.dot(trans1.get_matrix(), [120, 200, 1]) 
    line1 = lines.Line2D([120, txn[0]], [100, txn[1]], color='r', linewidth=line_width) 
    currentAxis.add_line(line1) 
    
0

回転後Pの新たな座標を与えますまず表示座標に変換し、表示座標の点を中心に回転させます。しかし、あなたがやりたがっていることは、データ座標で回転を実行して、表示座標に変換することです。

import matplotlib.pyplot as plt 
import matplotlib as mpl 
import matplotlib.lines as lines 
start = (120, 0) 
ht = 100 

fig, ax = plt.subplots() 

trans1 = mpl.transforms.Affine2D().rotate_deg_around(start[0],start[1], 45) 
line1 = lines.Line2D([start[0], start[0]], [start[1], ht+start[1]], color='r', linewidth=2) 
line1.set_transform(trans1 + ax.transData) 
ax.add_line(line1) 

ax.relim() 
ax.autoscale_view() 
plt.show() 

enter image description here

変換その後も、私はすでにそれを試みた回転座標

newpoint = trans1.transform([start[0], ht+start[1]]) 
# in this case newpoint would be [ 49.28932188 70.71067812] 
+0

Ok。しかし、変換なしで(120,100)であった(x2、y2)の新しい座標をどうやって取得するのですか?変換後にこれらの新しいポイントが必要です –

+0

「私は新しいポイントが必要です」とはどういう意味ですか?ラインには新しい座標がありますか? – ImportanceOfBeingErnest

+0

はい、目に見える新しいポイントがあります。しかし、私は新しい変容点が必要です。私は別の線を描くためにそれが必要です。 –

関連する問題