Gym画图

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)

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值