0
点赞
收藏
分享

微信扫一扫

【三】gym简单画图、快来上手入门吧,超级简单!


【三】gym简单画图

def __init__(self): self.viewer = rendering.Viewer(600, 400) # 600x400 是画板的长和框

要注意在gym的画布中


  • 向右为x轴正方向,向上为y轴正方向,左下角为坐标原点
  • 默认颜色:黑色
  • 默认坐标:原点(左下角)
  • gym中的color属性:gym中的这个color,(x, y, z)中的每一位应该取[0, 1]之间的值

def render(self, mode='human'): ''' 这里是绘制部分 ''' return self.viewer.render(return_rgb_array=mode == 'rgb_array')



demo_1:



  1. 首先,导入库文件(包括gym模块和gym中的渲染模块)
  2. 我们生成一个类,该类继承 gym.Env. 同时,可以添加元数据,改变渲染环境时的参数
  3. 我们在初始函数中定义一个 viewer ,即画板
  4. 继承 render函数
  5. 最后运行

import gym from gym.envs.classic_control import rendering class Test(gym.Env): # 如果你不想改参数,下面可以不用写 metadata = { 'render.modes': ['human', 'rgb_array'], 'video.frames_per_second': 2 } def __init__(self): self.viewer = rendering.Viewer(600, 400) # 600x400 是画板的长和框 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__': t = Test() while True: t.render()

结果:

【三】gym简单画图、快来上手入门吧,超级简单!_tensorflow


demo_2:


再画个圆试试:【render函数替换一下就行】

def render(self, mode='human', close=False): # 画一个直径为 30 的园 circle = rendering.make_circle(30) self.viewer.add_geom(circle) return self.viewer.render(return_rgb_array=mode == 'rgb_array')

【三】gym简单画图、快来上手入门吧,超级简单!_pytorch_02

得到了圆在左下角,原因是:默认情况下圆心在坐标原点

增加一个平移操作让圆显现:【圆心平移】

def render(self, mode='human', close=False): # 画一个直径为 30 的园 circle = rendering.make_circle(30) # 添加一个平移操作 circle_transform = rendering.Transform(translation=(100, 200)) # 让圆添加平移这个属性 circle.add_attr(circle_transform) self.viewer.add_geom(circle) return self.viewer.render(return_rgb_array=mode == 'rgb_array')

【三】gym简单画图、快来上手入门吧,超级简单!_深度学习_03


demo_3:


画一个一个六边形

import gym from gym.envs.classic_control import rendering import numpy import math def render(self, mode='human', close=False): # 画一个直径为 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))]) # 添加一个平移操作 circle_transform = rendering.Transform(translation=(50, 100)) # 让圆添加平移这个属性 circle.add_attr(circle_transform) self.viewer.add_geom(circle) return self.viewer.render(return_rgb_array=mode == 'rgb_array')

【三】gym简单画图、快来上手入门吧,超级简单!_机器学习_04


扩充:


直线

# 方式一 # 定义一根线 aline = rendering.Line((100, 30), (500, 30)) # 1 # 把图形元素添加到画板中 self.viewer.add_geom(aline) # 方式二 transform0 = rendering.Transform(translation=(50, 100)) # 相对偏移 self.viewer.draw_line((0, 0), (0, 300), color=(0, 0, 1)).add_attr(transform0) # 2

画圆

# 方式一 acircle = rendering.make_circle(50, 10, filled=False) # 3 *注意下面还做了平移操作 # radius=10 半径 # res=30 说是画圆,其实是画正多边形,res指定多边形的边数 # filled=True 是否填充 acircle.set_color(0, 1, 0) acircle.set_linewidth(5) # 设置线宽 # 添加一个平移操作 transform1 = rendering.Transform(translation=(100, 200)) # 相对偏移 # 让圆添加平移这个属性 acircle.add_attr(transform1) self.viewer.add_geom(acircle) # 方式二 transform2 = rendering.Transform(translation=(200, 200)) # 相对偏移 self.viewer.draw_circle(20, 30, False).add_attr(transform2) # 4

多边形

# 方式一 apolygon = rendering.make_polygon([(30, 30), (50, 30), (50, 80), (30, 80)], filled=True) # 5 *注意下面做了偏移 # 依次传入各个顶点 apolygon.set_color(0, 0, 0) transform3 = rendering.Transform(translation=(50, 200)) # 相对偏移 apolygon.add_attr(transform3) self.viewer.add_geom(apolygon) # 方式二 transform4 = rendering.Transform(translation=(50, 50)) # 相对偏移 self.viewer.draw_polygon([(60, 30), (80, 30), (80, 80), (60, 80)], False).add_attr(transform4) # 6

曲线

# 那么,也就可以用它来画曲线了 transform7 = rendering.Transform(translation=(0, 200)) # 相对偏移 points2 = [(x, 100 * np.sin(0.02 * x)) for x in np.linspace(1, 600, 600)] self.viewer.draw_polyline(points2, color=(0, 0, 255), linewidth=5).add_attr(transform7) # 10

胶囊

# 胶囊形状 acapsule = rendering.make_capsule(10, 20) # 11 # length, width, 默认中心画在原点 acapsule.add_attr(rendering.Transform(translation=(70, 100))) self.viewer.add_geom(acapsule)

if __name__ == '__main__': env = RenderTestEnv() # 声明一个变量的时候就调用了__init__()函数生成了画布 env.render() # 显示画面 time.sleep(10) # 持续3秒 env.close() # 清掉画布





举报

相关推荐

0 条评论