Gym画图
首先导入gym和gym中的rendering模块
import gym
from gym.envs.classic_control import rendering
定义一个环境类,该类继承gym.Env,同时添加元数据,改变渲染环境时的参数
class Environment(gym.Env):
# 如果你不想改参数,下面可以不用写
metadata = {
'render.modes': ['human', 'rgb_array'],
'video.frames_per_second': 2
}
在初始函数中定义一个viewer,也就是画板:
def __init__(self):
self.viewer = rendering.Viewer(600, 400)
继承render函数:
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')
运行:
if __name__ == '__main__':
env = Environment()
while True:
env.render()
扩展
画圆:
# 画一个直径为 50 的圆
circle = rendering.make_circle(50)
self.viewer.add_geom(circle)
移动圆点的圆心:
# 画一个直径为 50 的圆
circle = rendering.make_circle(50)
# 添加一个平移操作
circle_transform = rendering.Transform(translation=(300, 100))
# 让圆添加平移这个属性
circle.add_attr(circle_transform)
self.viewer.add_geom(circle)
输出:
画正六边形:
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))])
# 添加一个平移操作
circle_transform = rendering.Transform(translation=(100, 100)
circle.add_attr(circle_transform)
self.viewer.add_geom(circle)
输出: