【三】gym简单画图、快来上手入门吧,超级简单!
相关文章:
【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!
【五】gym搭建自己的环境____详细定义自己myenv.py文件
【六】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:
- 首先,导入库文件(包括gym模块和gym中的渲染模块)
- 我们生成一个类,该类继承 gym.Env. 同时,可以添加元数据,改变渲染环境时的参数
- 我们在初始函数中定义一个 viewer ,即画板
- 继承 render函数
- 最后运行
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()结果:
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')
得到了圆在左下角,原因是:默认情况下圆心在坐标原点
增加一个平移操作让圆显现:【圆心平移】
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')
demo_3:
画一个一个六边形
import gym
from gym.envs.classic_control import rendering
import numpy
import mathdef 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')
扩充:
直线
# 方式一
# 定义一根线
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() # 清掉画布
【三】gym简单画图、快来上手入门吧,超级简单!的更多相关文章
- smarty半小时快速上手入门教程
http://www.jb51.net/article/56754.htm http://www.yiibai.com/smarty/smarty_functions.html http://www. ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 华大单片机开发板HC32L13X上手入门
HC32L136开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...
- 华大单片机开发板HC32F030上手入门
HC32F030开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...
- 我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程
转: (activiti入门列子一个简单的activiti请假流程) 我的第一个activiti实例 2017年05月31日 14:29:45 chf_mixueer 阅读数:1223 整个项目的 ...
- Struts1入门实例(简单登录)
Struts1入门实例(简单登录) 现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技术不是很新潮,前台用的还是struts1. 虽然不是什么新技术,但仍可以从中学到好多东西的.花了一个晚 ...
- 让Netty入门变得简单
让Netty入门变得简单 https://mp.weixin.qq.com/s/MBnbLmCmFJo0QK9WNwXrXQ 如果先启动nettyClient就不会有nettyServer输出了: p ...
- Unity3D入门其实很简单
在上次发布拙作后,有不少童鞋询问本人如何学习Unity3D.本人自知作为一名刚入门的菜鸟,实在没有资格谈论这么高大上的话题,生怕误导了各位.不过思来想去,决定还是写一些自己的经验,如果能给想要入门U3 ...
- jmGraph:一个基于html5的简单画图组件
jmGraph:一个基于html5的简单画图组件 特性: 代码书写简单易理解 面向对象的代码结构 对图形控件化 样式抽离 模块化:入seajs实现模块化开发 兼容性:暂只推荐支持html5的浏览器:i ...
- 【Netty整理01-快速入门】Netty简单使用Demo(已验证)
多处摘抄或手打,为了十积分厚着脸皮标为原创,惭愧惭愧~本篇文章用于快速入门搭建一个简单的netty 应用,如想稍微深入系统的了解,请参照本人下一篇博客,链接: 参考地址: 官方文档:http://ne ...
随机推荐
- 谣言粉碎机?Python验证股市操盘口诀
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 经常炒股的朋友,应该都听说过这段操盘口诀: 早上大跌要买,早上大涨要卖 下午大涨不追,下午大跌次日买 早 ...
- 🔥 DeepVideo 智能视频生产训练营火热报名中!
阿里云视频云和阿里云开发者学堂联合打造 国内首个视频云训练营11月8日启幕 四天直播,技术大咖亲临授课干货 全面介绍视频智能生产技术和产品 帮助开发者迅速入门视频云 已超千人报名,丰富打卡玩法礼品 活 ...
- SE54视图簇
一.创建关联表 头表 行表 设置行表的外键 创建两张表的表维护生成器,此处不再展开 二.SE54视图簇 激活上述 三.创建事务代码维护 四.效果展示 定期更文,欢迎关注 TRANSLATE with ...
- 6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...
- Kotlin 协程真的比 Java 线程更高效吗?
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-OcCDI4L5GR8vVXSYhXJ7w作者:吴越 网上几乎全部介绍Kotlin的文章都会说 ...
- Asp .Net Core 系列:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现
目录 简介 什么是 Ocelot ? 什么是 Nacos ? 什么是 Swagger ? 什么是 Cors ? Asp .Net Core 集成 Ocelot 网关集成 Nacos 下游配置 Naco ...
- vue-echarts之折线图以及双Y轴折线,柱状混合图,部分属性记录
https://blog.csdn.net/qq_41139348/article/details/106870005 https://segmentfault.com/a/1190000021898 ...
- P1955【绿】
这道题是标准的"离散化+并查集"模版题,通过这道题彻底理解了并查集,同时还意识到了我之前一直用map来实现离散化的方法其实是最简单但是最慢的方法,以这道题为例,map导致时间消耗有 ...
- OpenStack 工作流组件: Mistral
1 Mistral 简介 Mistral 是由 Mirantis 开发,贡献给 OpenStack 社区的工作流组件,它提供 Workflow As a Service 服务. 在计算机中通常处理的任 ...
- linux 对子用户配置java 环境变量
转载请注明出处: 若服务器安装 jdk 时用的是root 用户,则root 用户登录服务器可以直接获取Java环境. 当切换到其他子用户时,则会发现环境不存在,命令不存在等. 解决方案: 1. 先切换 ...



