【三】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 ...
随机推荐
- 你真的了解token续期嘛?
Spring Boot + Vue中的Token续签机制 在现代的全栈应用开发中,Spring Boot作为后端框架和Vue.js作为前端框架的组合非常流行.在这种架构中实现Token续签是保障应用安 ...
- 获取标准报表CJI3的ALV数据
1.CJI3 运行标准程序CJI3,获取对象和业务货币值,在其他程序中展示 2.代码展示 CJI3对应程序名rkpep003,最终展示的ALV结构可以再程序中找到. 因为本实例只获取其中两个字段的值, ...
- 创建QUERY报表
一.SQ02创建信息集 该事务代码用于查询需要的表,及表之间的关联关系 首先设置查询区域,标准区域中所建立的信息集仅在当前客户端使用,全局区域中建立的信息集可以跨client 创建信息集 选择基础表关 ...
- spring中这些编程技巧,真的让我爱不释手
前言 最近越来越多的读者认可我的文章,还是挺让人高兴的.有些读者希望我多分享spring方面的知识点,能够在实际工作中派的上用场.我对spring的源码有过一定的研究,结合我这几年实际的工作经验,把s ...
- 【iOS源码混淆工具】iOS代码混淆工具
主要功能 Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密.可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护. 可以根据设置对函数 ...
- uni-app滚动加载下一页
https://www.bilibili.com/video/BV1BJ411W7pX?p=39
- Shell 脚本编程学习
本文为博主原创,转载请注明出处: 目录: 1. shell 变量 2. 运算符 3. if 语句 4.for 循环 5.while 语句 6. case 语法 7.跳出循环:continue 与 br ...
- 神经网络优化篇:详解学习率衰减(Learning rate decay)
学习率衰减 加快学习算法的一个办法就是随时间慢慢减少学习率,将之称为学习率衰减,来看看如何做到,首先通过一个例子看看,为什么要计算学习率衰减. 假设要使用mini-batch梯度下降法,mini-ba ...
- Prime Time - 介绍
Prime Time是对timing进行分析 Prime Time使用的是STA方法进行分析 工具会有更新,但是核心内容是不变的 Prime Time(intro to STA) 没有PT工具的时候, ...
- SV概述
System Verilog概述 路科验证视频,B站可看(补充一下知识) 学习SV之前,最好有Verilog基础 SV诞生 SV发展历史 Verilog - 偏向于设计 System Verilog ...



