python案例:模拟产生万花尺螺旋线(turtle、parser、turtle图像保存为png)
前言
初学python,需要一点有趣的案例。同时,细节功能足够,且不难明了。
这里提供一个模拟产生万花尺螺环线的程序。
如果您对万花尺不了解,科普内容可见:https://www.bilibili.com/video/BV1w7411q7xH/
您可以将以下代码全文拷贝过去,运行一下。然后再具体看注解。
鉴于我在代码中,已经注解的很详细了。所以就不在正文中多说了。
代码全文
'''
名称:spiroAnimator.py
功能:模拟产生万花尺螺旋线。 科普内容可见:https://www.bilibili.com/video/BV1w7411q7xH/
使用方法:
1:可以不用输入任何参数,直接运行此程序。将展示随机万花尺螺环图形。
2:可以使用parser解析器输入参数,生成指定图形。具体方法举例如下:1)将本程序复制到pycharm。2)在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 88 0.44 。From:@小小脚色008
Date:2021-11-4
'''# 导入库函数
import random, argparse, math, turtle
from PIL import Image
from datetime import datetime# Spiro类:绘制一个图形
class Spiro:# constructor init初始化部分,在创建实例对象时会自动执行。def __init__(self, xc, yc, col, R, r, l):# 创建turtle对象。turtle光标。self.t = turtle.Turtle()self.t.shape('turtle')self.step = 5 # 步长5度。self.drawingComplete = False # 完成绘制标识self.setparams(xc, yc, col, R, r, l)self.restart()# 类中的self是对其实例化的意思,平时照用即可。https://blog.csdn.net/weixin_50123771/article/details/108960333def setparams(self, xc, yc, col, R, r, l):self.xc = xcself.yc = ycself.col = colself.R = int(R) # 像素点为整数。self.r = int(r)self.l = l# 确定循环截止条件。r/R约分后的分子,就是 圈数,再多就重复了。# 比如,若R=100,r=50,则只1圈即可。gcdVal = math.gcd(self.r, self.R)self.nRot = self.r // gcdValself.k = r / float(R)self.a = 0# 设置颜色self.t.color(*col)def restart(self):self.drawingComplete = Falseself.t.showturtle()self.t.penup()R, k, l = self.R, self.k, self.l # R,k,l本函数自用。a = 0.00 # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)self.xl = self.xc + xself.yl = self.yc + y # 使用xl,yl保存当前循环上一个的光标位置。用于计算光标方向。self.t.pendown()def draw(self):# 连续绘制。R, k, l = self.R, self.k, self.lfor i in range(0, 360 * self.nRot + 1, self.step):a = math.radians(i) # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)# 确定绘制完成之后,才能隐藏光标。self.t.hideturtle()def update(self):# 单步执行绘制,非连续。if self.drawingComplete:return # 若绘制完成标识为真,则不再执行此函数,直接跳出。self.a += self.stepR, k, l = self.R, self.k, self.la = math.radians(self.a) # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)# 计算光标朝向atan2 = math.atan2((self.yc + y - self.yl), (self.xc + x - self.xl)) # 两个坐标点的tan值deg = math.degrees(atan2) # 角度值,算法: https://blog.csdn.net/JohinieLi/article/details/81041550# self.t.setheading(deg) # 设置光标方向功能,比较耗时。导致图画太慢了。 且画面乱、不美观,所以屏蔽此句代码。self.xl = self.xc + xself.yl = self.yc + y # 使用xl,yl保存当前循环上一个的光标位置。用于计算光标方向。if self.a >= 360 * self.nRot:self.drawingComplete = Trueself.t.hideturtle()def clear(self):self.t.clear()# 螺环动画类
class SpiroAnimator:# conductordef __init__(self, N):self.deltaT = 1 # △t=10msself.width = turtle.window_width()self.height = turtle.window_height() # 海龟画布的宽度、高度,存下来。# 创建对象self.spiros = [] # 空列表,用来存储 Spiro成员类的实例对象。for i in range(N):rparams = self.genRandomParams()spiro = Spiro(*rparams)self.spiros.append(spiro) # 对象存入列表turtle.ontimer(self.update, self.deltaT) # 定时调用 update函数。def restart(self):for spiro in self.spiros:# 清空,重新设置随机参数后,再次启动。spiro.clear()rparams = self.genRandomParams()spiro.setparams(*rparams)spiro.restart()def genRandomParams(self):width, height = self.width, self.heightR = random.randint(50, min(width, height) // 2)r = random.randint(10, 9 * R // 10)l = random.uniform(0.1, 0.9)xc = random.randint(-width // 2, width // 2)yc = random.randint(-height // 2, height // 2)col = (random.random(), random.random(), random.random())return (xc, yc, col, R, r, l)def update(self):nComplete = int(0) # 动画绘图完成标识。for spiro in self.spiros:spiro.update() # 调用成员类的update函数,让画笔走一步,只走一步。if spiro.drawingComplete:nComplete += 1if nComplete >= len(self.spiros):saveDrawing() # 画完可以保存一下。毕竟还挺漂亮。self.restart()turtle.ontimer(self.update, self.deltaT) # 形成自循环,直到四个图全部画完。#此处update函数作为传参,不能带括号。# 转换光标可见状态def toggleTurtles(self):for spiro in self.spiros:if spiro.t.isvisible():spiro.t.hideturtle()else:spiro.t.showturtle()# 保存图像函数.
'''
函数功能:将turtle图片保存。实现方法,先用自带的getscreen函数将turtle保存为eps格式,然后用PIL库将之转为png格式。
难点:电脑中必须安装Ghostscript,否则会报错。安装方法为:
1、官网下载https://www.zhihu.com/question/20585795/answer/15575381 。如果不翻墙,下载速度会很慢。
2、安装后,到电脑系统环境变量界面,将Path变量编辑,增加一个变量。比如,我增加的是 C:\Program Files\gs\gs9.55.0\bin
'''def saveDrawing():turtle.hideturtle() # 为了美观,隐藏光标。dateStr = datetime.now().strftime('%Y%m%d-%H%M%S') # 使用datetime库,获取当前时间并格式化。fileName = 'spiro-' + dateStrprint('图片已保存为%s.eps/png' % fileName)# 首先,生成eps文件 .将turtle图片保存为eps,这是常规做法。img = turtle.getscreen()canvas = img.getcanvas()canvas.postscript(file=fileName + '.eps')# 使用PIL库的Image函数,将eps转为png格式。此处电脑中必须安装Ghostscript,否则会报错。# 官网下载,如不翻墙,速度较慢。这里分享一个我下载的版本。链接: https://caiyun.139.com/m/i?1A5CwCxV0HS5Y 提取码:QB9Himage = Image.open(fileName + '.eps')image.save(fileName + '.png', 'png')# 保存完毕后,恢复光标显示。turtle.showturtle()# main函数
def main():print('万花尺螺环线正在生成中……')# 使用parser解释器进行数据交互。descStr = '''名称:spiroAnimator.py功能:模拟产生万花尺螺旋线。 科普内容可见:https://www.bilibili.com/video/BV1w7411q7xH/使用方法:1:可以不用输入任何参数,直接运行此程序。将展示随机万花尺螺环图形。2:可以使用parser解析器输入参数,生成指定图形。具体方法举例如下:1)将本程序复制到pycharm。2)在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 88 0.44 。From:@小小脚色008Date:2021-11-4'''parser = argparse.ArgumentParser(description=descStr)parser.add_argument('--sparams', nargs=3, type=float, dest='sparams', required=False,help='三个输入参数为:R,r,l。其中,R为大圆半径,r为小圆半径,l为小孔到小圆圆心的距离与r的比值')# parser解释器的参数示意参见https://docs.python.org/zh-cn/3/library/argparse.html 。# 上一段添加参数的意思大约是:您可以以'--sparams'为名,添加3个数值。当然,您也可以不添加,不强制要求。# 比如,您可以在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 100 0.9# 您也可以设置Parmmeters栏为空,什么也不输入。args = parser.parse_args()# 对turtle模块的画布进行设置。(turtle分为画布和光标两个大类)turtle.setup(width=0.99, height=0.99)turtle.shape('turtle')turtle.title('Spirograph')turtle.onkey(saveDrawing, "s") # 创建事件:当用户按下s键,将保存图片。 #注意,onkey此时,被调用函数名称不带()。turtle.listen()turtle.hideturtle() # 画布上最原始的光标,没用处,隐藏起来。# 检查用户是否输入信息。比如,输入 --sparams 300 100 0.9if args.sparams: # 此处,args.sparams 用到了上文添加参数时的dest。这是对象的属性名设置。# 如果有参数输入,则应该绘制指定的螺环线。params = [float(x) for x in args.sparams]col = (0.0, 0.0, 0.0) # 此元组规定了曲线的RGB颜色。此处默认为黑色。spiro = Spiro(0, 0, col, *params) # 此时创建实例对象,同时执行Spiro类的init初始化部分代码。spiro.draw() # 调用draw方法,开始绘制。else:# 用户无指定参数输入时,随机绘制螺环图形。spiroAnim = SpiroAnimator(4) # 特意创建一个SpiroAnimator管理此事,此时Spiro类是它的成员类。turtle.onkey(spiroAnim.toggleTurtles, "t") # 按下t按键,则光标转换turtle.onkey(spiroAnim.restart, "space") # 按下空格键,则清空图形。turtle.mainloop() # turtle画布保持,不关闭。if __name__ == '__main__':main()
parser的使用
parser解释器用于cmd交互、输入参数。
但如果我只是为了测试,不想用cmd窗口输入命令怎么办?
具体方法举例如下:
1)将本程序复制到pycharm。
2)在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 88 0.44 。
接下来的问题是,如果我想用cmd输入命令怎么办?
我使用cmd失败了,使用anaconda命令行窗口,成功了。
转换盘符到D盘时,直接D:
然后在具体cd到文件夹路径。
turtle图像保存为png格式
turtle图像如何保存为png格式?
第一步,,生成eps文件 .将turtle图片保存为eps,这是常规做法。
第二步,使用PIL库的Image函数,将eps转为png格式。此处电脑中必须安装Ghostscript,否则会报错。
官网下载,如不翻墙,速度较慢。这里分享一个我下载的版本。链接: https://caiyun.139.com/m/i?1A5CwCxV0HS5Y 提取码:QB9H
第三步,安装后,到电脑系统环境变量界面,将Path变量编辑,增加一个变量。比如,我增加的是 C:\Program Files\gs\gs9.55.0\bin。
'''
名称:spiroAnimator.py
功能:模拟产生万花尺螺旋线。 科普内容可见:https://www.bilibili.com/video/BV1w7411q7xH/
使用方法:
1:可以不用输入任何参数,直接运行此程序。将展示随机万花尺螺环图形。
2:可以使用parser解析器输入参数,生成指定图形。具体方法举例如下:1)将本程序复制到pycharm。2)在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 88 0.44 。From:@小小脚色008
Date:2021-11-4
'''# 导入库函数
import random, argparse, math, turtle
from PIL import Image
from datetime import datetime# Spiro类:绘制一个图形
class Spiro:# constructor init初始化部分,在创建实例对象时会自动执行。def __init__(self, xc, yc, col, R, r, l):# 创建turtle对象。turtle光标。self.t = turtle.Turtle()self.t.shape('turtle')self.step = 5 # 步长5度。self.drawingComplete = False # 完成绘制标识self.setparams(xc, yc, col, R, r, l)self.restart()# 类中的self是对其实例化的意思,平时照用即可。https://blog.csdn.net/weixin_50123771/article/details/108960333def setparams(self, xc, yc, col, R, r, l):self.xc = xcself.yc = ycself.col = colself.R = int(R) # 像素点为整数。self.r = int(r)self.l = l# 确定循环截止条件。r/R约分后的分子,就是 圈数,再多就重复了。# 比如,若R=100,r=50,则只1圈即可。gcdVal = math.gcd(self.r, self.R)self.nRot = self.r // gcdValself.k = r / float(R)self.a = 0# 设置颜色self.t.color(*col)def restart(self):self.drawingComplete = Falseself.t.showturtle()self.t.penup()R, k, l = self.R, self.k, self.l # R,k,l本函数自用。a = 0.00 # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)self.xl = self.xc + xself.yl = self.yc + y # 使用xl,yl保存当前循环上一个的光标位置。用于计算光标方向。self.t.pendown()def draw(self):# 连续绘制。R, k, l = self.R, self.k, self.lfor i in range(0, 360 * self.nRot + 1, self.step):a = math.radians(i) # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)# 确定绘制完成之后,才能隐藏光标。self.t.hideturtle()def update(self):# 单步执行绘制,非连续。if self.drawingComplete:return # 若绘制完成标识为真,则不再执行此函数,直接跳出。self.a += self.stepR, k, l = self.R, self.k, self.la = math.radians(self.a) # 弧度值x = R * ((1 - k) * math.cos(a) + l * k * math.cos((1 - k) * a / k))y = R * ((1 - k) * math.sin(a) - l * k * math.sin((1 - k) * a / k))self.t.setpos(self.xc + x, self.yc + y)# 计算光标朝向atan2 = math.atan2((self.yc + y - self.yl), (self.xc + x - self.xl)) # 两个坐标点的tan值deg = math.degrees(atan2) # 角度值,算法: https://blog.csdn.net/JohinieLi/article/details/81041550# self.t.setheading(deg) # 设置光标方向功能,比较耗时。导致图画太慢了。 且画面乱、不美观,所以屏蔽此句代码。self.xl = self.xc + xself.yl = self.yc + y # 使用xl,yl保存当前循环上一个的光标位置。用于计算光标方向。if self.a >= 360 * self.nRot:self.drawingComplete = Trueself.t.hideturtle()def clear(self):self.t.clear()# 螺环动画类
class SpiroAnimator:# conductordef __init__(self, N):self.deltaT = 1 # △t=10msself.width = turtle.window_width()self.height = turtle.window_height() # 海龟画布的宽度、高度,存下来。# 创建对象self.spiros = [] # 空列表,用来存储 Spiro成员类的实例对象。for i in range(N):rparams = self.genRandomParams()spiro = Spiro(*rparams)self.spiros.append(spiro) # 对象存入列表turtle.ontimer(self.update, self.deltaT) # 定时调用 update函数。def restart(self):for spiro in self.spiros:# 清空,重新设置随机参数后,再次启动。spiro.clear()rparams = self.genRandomParams()spiro.setparams(*rparams)spiro.restart()def genRandomParams(self):width, height = self.width, self.heightR = random.randint(50, min(width, height) // 2)r = random.randint(10, 9 * R // 10)l = random.uniform(0.1, 0.9)xc = random.randint(-width // 2, width // 2)yc = random.randint(-height // 2, height // 2)col = (random.random(), random.random(), random.random())return (xc, yc, col, R, r, l)def update(self):nComplete = int(0) # 动画绘图完成标识。for spiro in self.spiros:spiro.update() # 调用成员类的update函数,让画笔走一步,只走一步。if spiro.drawingComplete:nComplete += 1if nComplete >= len(self.spiros):saveDrawing() # 画完可以保存一下。毕竟还挺漂亮。self.restart()turtle.ontimer(self.update, self.deltaT) # 形成自循环,直到四个图全部画完。#此处update函数作为传参,不能带括号。# 转换光标可见状态def toggleTurtles(self):for spiro in self.spiros:if spiro.t.isvisible():spiro.t.hideturtle()else:spiro.t.showturtle()# 保存图像函数.
'''
函数功能:将turtle图片保存。实现方法,先用自带的getscreen函数将turtle保存为eps格式,然后用PIL库将之转为png格式。
难点:电脑中必须安装Ghostscript,否则会报错。安装方法为:
1、官网下载https://www.zhihu.com/question/20585795/answer/15575381 。如果不翻墙,下载速度会很慢。
2、安装后,到电脑系统环境变量界面,将Path变量编辑,增加一个变量。比如,我增加的是 C:\Program Files\gs\gs9.55.0\bin
'''def saveDrawing():turtle.hideturtle() # 为了美观,隐藏光标。dateStr = datetime.now().strftime('%Y%m%d-%H%M%S') # 使用datetime库,获取当前时间并格式化。fileName = 'spiro-' + dateStrprint('图片已保存为%s.eps/png' % fileName)# 首先,生成eps文件 .将turtle图片保存为eps,这是常规做法。img = turtle.getscreen()canvas = img.getcanvas()canvas.postscript(file=fileName + '.eps')# 使用PIL库的Image函数,将eps转为png格式。此处电脑中必须安装Ghostscript,否则会报错。# 官网下载,如不翻墙,速度较慢。这里分享一个我下载的版本。链接: https://caiyun.139.com/m/i?1A5CwCxV0HS5Y 提取码:QB9Himage = Image.open(fileName + '.eps')image.save(fileName + '.png', 'png')# 保存完毕后,恢复光标显示。turtle.showturtle()# main函数
def main():print('万花尺螺环线正在生成中……')# 使用parser解释器进行数据交互。descStr = '''名称:spiroAnimator.py功能:模拟产生万花尺螺旋线。 科普内容可见:https://www.bilibili.com/video/BV1w7411q7xH/使用方法:1:可以不用输入任何参数,直接运行此程序。将展示随机万花尺螺环图形。2:可以使用parser解析器输入参数,生成指定图形。具体方法举例如下:1)将本程序复制到pycharm。2)在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 88 0.44 。From:@小小脚色008Date:2021-11-4'''parser = argparse.ArgumentParser(description=descStr)parser.add_argument('--sparams', nargs=3, type=float, dest='sparams', required=False,help='三个输入参数为:R,r,l。其中,R为大圆半径,r为小圆半径,l为小孔到小圆圆心的距离与r的比值')# parser解释器的参数示意参见https://docs.python.org/zh-cn/3/library/argparse.html 。# 上一段添加参数的意思大约是:您可以以'--sparams'为名,添加3个数值。当然,您也可以不添加,不强制要求。# 比如,您可以在pycharm的 Run菜单下,找到Edit Configurations菜单。选择对应程序(此时是spiro.py),在Parmmeters栏中输入 --sparams 300 100 0.9# 您也可以设置Parmmeters栏为空,什么也不输入。args = parser.parse_args()# 对turtle模块的画布进行设置。(turtle分为画布和光标两个大类)turtle.setup(width=0.99, height=0.99)turtle.shape('turtle')turtle.title('Spirograph')turtle.onkey(saveDrawing, "s") # 创建事件:当用户按下s键,将保存图片。 #注意,onkey此时,被调用函数名称不带()。turtle.listen()turtle.hideturtle() # 画布上最原始的光标,没用处,隐藏起来。# 检查用户是否输入信息。比如,输入 --sparams 300 100 0.9if args.sparams: # 此处,args.sparams 用到了上文添加参数时的dest。这是对象的属性名设置。# 如果有参数输入,则应该绘制指定的螺环线。params = [float(x) for x in args.sparams]col = (0.0, 0.0, 0.0) # 此元组规定了曲线的RGB颜色。此处默认为黑色。spiro = Spiro(0, 0, col, *params) # 此时创建实例对象,同时执行Spiro类的init初始化部分代码。spiro.draw() # 调用draw方法,开始绘制。else:# 用户无指定参数输入时,随机绘制螺环图形。spiroAnim = SpiroAnimator(4) # 特意创建一个SpiroAnimator管理此事,此时Spiro类是它的成员类。turtle.onkey(spiroAnim.toggleTurtles, "t") # 按下t按键,则光标转换turtle.onkey(spiroAnim.restart, "space") # 按下空格键,则清空图形。turtle.mainloop() # turtle画布保持,不关闭。if __name__ == '__main__':main()
python案例:模拟产生万花尺螺旋线(turtle、parser、turtle图像保存为png)相关推荐
- Python案例:通过方向键移动屏幕上的图像
Python案例:通过方向键移动屏幕上的图像 1.安装PyGame (1)下载PyGame http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame
- 把python tkinter canvas中的图形图像保存为通用格式文件的5种方法
在计算机上画图未完成,需要保存未完成图形以便以后继续,或者完成画图,要保存为通用格式文件,方便浏览.如使用python tkinter Canvas画图,其好像没有将图像保存通用格式文件的方法,但可以 ...
- php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...
Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...
- Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)
Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...
- python绘制动态模拟图-Python实现模拟时钟代码推荐
语言:Python IDE:Python.IDE 一.编写时钟程序,要求根据时间动态更新 代码思路 需求:5个Turtle对象, 1个绘制外表盘+3个模拟表上针+1个输出文字 Step1:建立Turt ...
- 棋盘代码_【案例】 绘制国际象棋棋盘?(turtle 登场)
案例介绍 今天我们来用 turtle 画一个国际象棋棋盘,大小为 8x8. 国际象棋棋盘 turtle 绘图(海归绘图)很适合用来引导孩子学习编程,请想象绘图区有一只机器海龟,起始位置在 x-y 平 ...
- Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人 ...
- 【案例】绘制国际象棋棋盘?(turtle 登场)
文章目录 案例介绍 准备工作 细节设计 代码汇总 运行结果 后记 参考资料 案例介绍 今天我们来用 turtle 画一个国际象棋棋盘,大小为 8x8. 国际象棋棋盘 turtle 绘图(海归绘图)很适 ...
- python爬虫模拟有道翻译
python爬虫模拟有道翻译 案例目的: 通过模拟有道翻译,介绍携带form表单发送post请求以及破解form表单中的加密数据. 案例实现功能: 模拟有道翻译,实现中英互译. 爬取过程分析: 找到目 ...
最新文章
- Python导出Excel文件
- python实现远程登录_python远程登录代码
- pdb连接数_Oracle 19c 之多租户 PDB 连接与访问(三)
- 机器人学 —— 机器人视觉(极几何)
- matlab浮点数求绝对值_MATLAB仿真阵列天线切比雪夫综合法(附代码)
- rk3399性能_AIIA AI公布首轮评估结果:瑞芯微RK3399数据抢眼
- 基于Modbus RTU协议的开关量控制采集简介
- 深入理解并发的关键字-volatile
- HDU 2076 夹角有多大(题目已修改,注意读题)
- Eclipse找不到或无法加载主类
- wine linux 目录,linux中wine的安装及使用
- 大数据可视化应用_在数据可视化中应用种族平等意识
- BUUCTF-[XMAN2018排位赛]ppap
- gerund - 动名词
- Maxima函数的不完全列表
- Windows桌面美化(壁纸网站,任务栏透明、颜色设置)
- ros安装yocs_velocity_smoother
- WIN10 禁用 credentital guard Device Guard或Credential Guard与Workstation不兼容
- 通信原理 | 通信的基本概念和通信系统的组成
- Boston Dog