- 首先仪搔,導(dǎo)入庫文件(包括gym模塊和gym中的渲染模塊)
import gym
from gym.envs.classic_control import rendering
- 我們生成一個(gè)類蓖捶,該類繼承 gym.Env. 同時(shí),可以添加元數(shù)據(jù)萌朱,改變渲染環(huán)境時(shí)的參數(shù)
class Test(gym.Env):
# 如果你不想改參數(shù)屠阻,下面可以不用寫
metadata = {
'render.modes': ['human', 'rgb_array'],
'video.frames_per_second': 2
}
- 我們?cè)诔跏己瘮?shù)中定義一個(gè) viewer 红省,即畫板
def __init__(self):
self.viewer = rendering.Viewer(600, 400) # 600x400 是畫板的長和框
- 繼承 render函數(shù)
def render(self, mode='human', close=False):
# 下面就可以定義你要繪畫的元素了
line1 = rendering.Line((100, 300), (500, 300))
line2 = rendering.Line((100, 200), (500, 200))
# 給元素添加顏色
line1.set_color(0, 0, 0)
line2.set_color(0, 0, 0)
# 把圖形元素添加到畫板中
self.viewer.add_geom(line1)
self.viewer.add_geom(line2)
return self.viewer.render(return_rgb_array=mode == 'rgb_array')
- 最后運(yùn)行
if __name__ == '__main__':
t = Test()
while True:
t.render()
值得注意的是,畫板的水平方向是 x 軸国觉, 垂直方向是 y 軸吧恃, 且原點(diǎn)在左下角
- 在畫個(gè)圖形試試:
畫個(gè)圓:
def render(self, mode='human', close=False):
# 畫一個(gè)直徑為 30 的園
circle = rendering.make_circle(30)
self.viewer.add_geom(circle)
return self.viewer.render(return_rgb_array=mode == 'rgb_array')
注意到,默認(rèn)情況下圓心在坐標(biāo)原點(diǎn)麻诀,那要怎么把它挪到其他地方呢痕寓?
def render(self, mode='human', close=False):
# 畫一個(gè)直徑為 30 的園
circle = rendering.make_circle(30)
# 添加一個(gè)平移操作
circle_transform = rendering.Transform(translation=(100, 200))
# 讓圓添加平移這個(gè)屬性
circle.add_attr(circle_transform)
self.viewer.add_geom(circle)
return self.viewer.render(return_rgb_array=mode == 'rgb_array')
注意:是圓心在平移
- 例子:
def render(self, mode='human', close=False):
# 畫一個(gè)直徑為 30 的園
circle = rendering.make_polyline([(50, 200-50*math.sqrt(3)),
(100, 200), (200, 200),
(250, 200 - 50 * math.sqrt(3)),
(200, 200 - 100*math.sqrt(3)),
(100, 200 - 100*math.sqrt(3)),
(50, 200 - 50 * math.sqrt(3))])
# 添加一個(gè)平移操作
circle_transform = rendering.Transform(translation=(100, 200))
# 讓圓添加平移這個(gè)屬性
circle.add_attr(circle_transform)
self.viewer.add_geom(circle)
return self.viewer.render(return_rgb_array=mode == 'rgb_array')