online 发表于 2020-12-11 05:24:33

[简单画图]Gym 简单画图

https://att.xiawai.com/data/attachment/forum/202012/11/iks5jxh4hik64759.gif

首先,导入库文件(包括gym模块和gym中的渲染模块)
import gym
from gym.envs.classic_control import rendering
我们生成一个类,该类继承 gym.Env. 同时简单画图,可以添加元数据,改变渲染环境时的参数class Test(gym.Env):
    # 如果你不想改参数,下面可以不用写
    metadata = {
      'render.modes': ['human', 'rgb_array'],
      'video.frames_per_second': 2
    }
我们在初始函数中定义一个 viewer简单画图,即画板    def __init__(self):
      self.viewer = rendering.Viewer(600, 400)   # 600x400 是画板的长和框
继承 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__':
    t = Test()
    while True:
      t.render()

https://upload-images.jianshu.io/upload_images/13326502-af8f598b7fac6970.png

https://att.xiawai.com/data/attachment/forum/202012/11/cnan5owsttc64760.jpg

Selection_046.png
值得注意的是,画板的水平方向是 x 轴, 垂直方向是 y 轴, 且原点在左下角
在画个图形试试:

https://att.xiawai.com/data/attachment/forum/202012/11/ipwydr1less64761.jpg

画个圆:
    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')

https://upload-images.jianshu.io/upload_images/13326502-3e853088f98e9be9.png

https://att.xiawai.com/data/attachment/forum/202012/11/in21op4jx1w64762.jpg

image.png
注意到,默认情况下圆心在坐标原点,那要怎么把它挪到其他地方呢?
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')

https://att.xiawai.com/data/attachment/forum/202012/11/skaylhjg1qe64763.jpg

https://upload-images.jianshu.io/upload_images/13326502-54f703951a1ae97b.png

image.png
注意:是圆心在平移例子:
    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=(100, 200))
      # 让圆添加平移这个属性
      circle.add_attr(circle_transform)
      self.viewer.add_geom(circle)
      return self.viewer.render(return_rgb_array=mode == 'rgb_array')

https://upload-images.jianshu.io/upload_images/13326502-12aecdfb26271533.png

image.png
© 著作权归作者所有,转载或内容合作请联系作者

以上内容就是[简单画图]Gym 简单画图的相关内容介绍,喜欢侠外游戏论坛的朋友可以关注我们。

迅雷 发表于 2020-12-11 07:01:17

有生活的时候就有幸福。

奋斗的小白 发表于 2020-12-13 08:04:22

真是汗啊我的银子好少啊加油

熠熠紫宸 发表于 2020-12-14 11:18:56

人生必有风险,所以引人入胜亦在于此。
页: [1]
查看完整版本: [简单画图]Gym 简单画图