2017-05-12 52 views
0

シェイプを回転しようとしていますが、次のコードを使用して同じ関数で変換しようとしています。誰もそれを作る方法を知っているので、両方の変換が行われますか?ありがとう!ここでmatplotlibのポリゴンを回転して平行移動する

は私のコードです:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 
import matplotlib as mpl 
from math import * 

#some helper values 
p=4 
theta=pi/6 
x1 = p*cos(theta/2) 
y1 = p*sin(theta/2) 
vertices =[(-x1-p/2,0), (-p/2, y1), (p/2, y1), (x1+p/2, 0), (p/2, -y1), (-p/2, -y1)] 
midPoint = [3,4] 

#set up the plot 
fig = plt.figure() 
ax = fig.add_subplot(111) 

#function to rotate and translate the standard shape to a new position 
def plot_polygon(vertices, midPoint, theta): 
    polygon = patches.Polygon(vertices, color="red", alpha=0.50) 
    r = mpl.transforms.Affine2D().rotate(theta) + ax.transData 
    t = mpl.transforms.Affine2D().translate(midPoint[0],midPoint[1]) + ax.transData 
    polygon.set_transform(r) 
    polygon.set_transform(t) 
    ax.add_patch(polygon) 

plot_polygon(vertices, midPoint, theta) 

plt.xlim(-30, 30) 
plt.ylim(-30, 30) 

plt.grid(True) 

plt.show() 

答えて

1

あなたがa = 3を設定し、後でa = 4場合は、最後aであなたが上書き.set_transformを経由して変換設定することで4なく7

になります以前に設定された変換、最後に来るものは使用される変換です。

したがって、複合変換を使用してset_transformを1回呼び出す必要があります。

r = mpl.transforms.Affine2D().rotate(theta) 
t = mpl.transforms.Affine2D().translate(midPoint[0],midPoint[1]) 
tra = r + t + ax.transData 
polygon.set_transform(tra) 
+0

ありがとう - この作品! – sashaks

関連する問題