私のコードはここで動作しますが、私の現在の方法は非常に非効率的で時間がかかります。私は4つのデカルト座標を生成し、それらをリストに追加しています。次に、4つのPsychopy線オブジェクト(visual.Line)を作成し、各オブジェクトに座標リスト(zdot_list)からx、y座標を割り当てます。現在、私は4つの線オブジェクトを1つずつ作成し、それぞれの '開始'パラメータにxy位置を割り当てています。Psychopy:同時に複数のラインオブジェクトを作成する
from psychopy import visual, core, event, sound
import random
import math
win = visual.Window([800,600],color=(0,0,0), colorSpace='rgb', rgb=None, allowGUI=True, monitor='testMonitor', units='deg', fullscr=True, screen=2)
# input polar, output cartesian coords
def pol_to_cart(distance, angle, x_origin=0, y_origin=0):
x=distance*math.cos(math.radians(angle))
y=distance*math.sin(math.radians(angle))
return x +x_origin, y + y_origin
zdots = 4
zdot_list = []
j=(-8)
# generate 4 xy coordinates and append to list
for i in range(zdots):
angle=0
line_cart = pol_to_cart(j, angle)
dotx = line_cart[0]
doty = line_cart[1]
zdot_list.append([dotx, doty])
j += .2
# generate 4 lines, add xy coordinate (from list^) to 'start' argument of each
linea = visual.Line(win, start=(zdot_list[0]), end=(4,0), lineColor="white")
lineb = visual.Line(win, start=(zdot_list[1]), end=(4,0), lineColor="white")
linec = visual.Line(win, start=(zdot_list[2]), end=(4,0), lineColor="white")
lined = visual.Line(win, start=(zdot_list[3]), end=(4,0), lineColor="white")
lines = [linea, lineb, linec, lined]
# display lines
for line in lines:
line.draw()
win.flip()
core.wait(3)
win.close()
ループを使用して線(または任意の形状)オブジェクトを作成する効率的な方法はありますか?私は必要なオブジェクトを自動生成し、それぞれのオブジェクトの 'start'引数にxy座標を追加したいと思います。画像には4つの線オブジェクトしかありませんが、実際にはそれぞれが異なるxy開始座標を持つ80以上が必要です。
乾杯、 ジョン
あなたの最適化は一度に1行ずつ表示されます。一緒に表示する必要があります。 – Jon
@Jonの最適化がすべてを一度に表示するように変更されました。 –
ループ自体の間に描画する必要はありませんか?ループの外側にこれらを描画すると、1つの行だけが表示されます(おそらくループの最後の繰り返し)。私はこれらの線を描くときに、より多くのコントロールが必要です。 – Jon