strip

canvas绘制飞线效果

好久不见. 提交于 2020-11-10 21:01:35
在我们做的可视化大屏项目中,经常会遇到飞线的效果。 在我们的大屏编辑器中,可以通过拖拽+配置参数的方式很快就能够实现。下面是我们使用大屏编辑器实现的一个项目效果: 中间地图就有飞线的效果。 抛开编辑器的快速实现不说,我们大致来说下canvas绘制飞线的大致原理。 贝塞尔曲线 飞线的路径主要是一个贝塞尔曲线,canvas绘制贝塞尔曲线比较容易。canvas支持绘制二次和三次,在本次示例中,主要还是绘制二次贝塞尔曲线为主。canvas中指定二次贝塞尔曲线路径的函数如下: ctx.quadraticCurveTo(cpx, cpy, x, y); 有关贝塞尔曲线的基础知识,读者可以自行学习,此处不再赘述。 渐变实现 从图中,可以看出飞线的效果是淡入的效果,颜色并不是一致的,起点处颜色很淡,终点处颜色就比较浓厚。 怎么样能够实现这种效果呢? 答案就是渐变,我们知道,canvas支持线性渐变和放射渐变。但是这两种渐变似乎都不太适合曲线的路径。 事实上,我们会考虑使用线性渐变。因为飞线效果中,曲线的弯曲程度都不太大,所以使用线性渐变,曲线造成的差异,人眼是感觉不出来的。 嗯嗯,图形学就是欺骗的艺术。 只要在线的起点和终点创建一个线性渐变,起点的颜色非透明度是0,终点的非透明度是1即可达到目标。 示例代码如下: function createGradient(ctx,p0,p1){ var

阿里巴巴内部Jetpack宝典意外流出!极致经典,堪称Android架构组件的天花板

百般思念 提交于 2020-11-10 18:44:57
简介 Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。 Android Jetpack组件的作用是什么? Navigation:一个用于管理Fragment切换的工具类,可视化、可绑定控件、支持动画等是其优点。 Data Binding:不用说,都知道,加速MVVM的创建。 Lifecycle:他是我们能够处理Activity和Fragment的生命周期的重要原因,在AndroidX的Fragment和Activity已经对Lifecycle提供了默认支持。 ViewModel:当做MVVM的ViewModel层,并具有声明周期意识的处理和UI相关的数据。 LiveData:同RxJava的作用一样,对数据进行监听,优点就是无需处理生命周期、无内存泄漏等。 Room:强大的ORM数据库框架。 Paging:易于使用的数据分页库,支持RecyclerView。WorkManager:灵活、简单、延迟和保证执行的后台任务处理库。 你可能选择Android Jetpack的原因 以下可能是你会选择Android Jetpack的原因: 一起使用更方便:因为Android Jetpack组件中的很多库都对其他库提供了支持

python基础一整型、bool、字符串

妖精的绣舞 提交于 2020-11-10 07:02:35
1整型、bool、字符串 1.整型 --数字(int) ​ 用于比较运算的 ​ 32位 -2 ** 31 ~ 2 ** 31 -1 ​ 64位 -2 ** 63 ~ 2 ** 63 -1 ​ 基础运算符:+ - * / // ** % python2 整型 int -- log(长整型) / 获取的是整数 python3 整型 int -- / 获取的是浮点数(小数) 2.进制 ​ 二进制 八进制 十进制 十六进制 ​ 十进制与二进制转换: ​ 十进制—>二进制:除二整除取倒余法 ​ 二进制—>十进制:二进制码*2**n之和 print(bin(21)) #十进制转二进制 print(int("10010",2)) #二进制转十进制 3.bool () 布尔值 print(bool(1))#数字非零就是True,零为False print(bool(""))#字符串空为False," "也为True 4.字符串:python中引号引起来的就是字符串,用来存储少量数据 ​ s = "MEAT" ​ MEAT 中每一个字母叫做一个元素 ​ s[0]:索引(下标),精确定位某个元素 ​ print(s[-1]) ​ 0123,从左向右 ​ -4-3-2-1,从右向左 切片,含前不含后 :[起始(0):终止(末尾):步长(1)],(默认值),步长含方向。起始或终止超出不会报错

Less的混合函数

こ雲淡風輕ζ 提交于 2020-11-05 08:20:04
混合范围 如果我们在一个混合中定义了变量,那么这个变量只能在这个混合或者引用了这个混合的区域中使用。但是有一个例外,就是如果调用者包含一个具有相同名称的变量,则该变量不会复制到调用者的作用域中,仅存在于调用者本地范围内的变量受到保护,而从父范围继承的变量将会被覆盖。 示例: .xkd() { @w: 10px; @h: 20px; } .p1{ .xkd(); @w: 100px; width: @w; height: @h; } 编译成 CSS 代码: .p1 { width: 100px; height: 20px; } Mixins 返回值 我们可以在 Mixins 中定义变量,并将作为它的返回值。 示例: .xkd(@a, @b) { @width: @a + @b; } .good{ .xkd(20px, 30px); width: @width; } 编译成 CSS 代码: .good { width: 50px; } 上述代码中,我们在混合 .xkd 中定义了一个变量 @width ,变量的值为两参数之和。然后在 .good 中引用了混合 .xkd ,其中的 width 属性值为 @width 变量的值。 注意,只有在引用了 .xkd 后,才能使用 @width 变量,否则会报错: .xkd(@a, @b) { @width: @a+@b; } .good{

提供一个基于vue+elementui的后台管理系统模板框架

吃可爱长大的小学妹 提交于 2020-11-04 07:01:05
今天提供一个基于vue+elementui的后台管理系统模板框架 项目页面可自行开发 路由导航可请求接口获得放入this.menuData中 路由页面参数为: "id": 1, "name": "/organizationManage", "label": "组织管理", "icon": "el-icon-message", "parentId": 0, "children": [{ "id": 2, "name": "/organizationManage", "label": "组织管理", "icon": "el-icon-loading", "parentId": 1 }] 此套项目源码我已放到GitHub上 https://github.com/sakexiaowei/element-admin-master 其中包括我的《el-tree公共组件(带操作按钮)源码分享》文章中所提供的公共vue组件 https://www.toutiao.com/i6879006284382011912/ 同学 如果对你有帮助的话,请点赞、分享、收藏三连为号主加油喔 有什么问题可以留言提问,号主看到后会第一时间为小伙伴解答 原创文章链接: https://www.toutiao.com/i6880091915702764035/ 来源: oschina 链接: https://my

字节跳动笔试练习题

淺唱寂寞╮ 提交于 2020-11-04 06:59:22
链接: https://www.nowcoder.com/questionTerminal/944e5ca0ea88471fbfa73061ebe95728?orderByHotValue=1&mutiTagIds=665&page=1&onlyReference=false 来源:牛客网 Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小Y使用1024元的纸币购买了一件价值为 N(0<N≤1024)N (0 < N \le 1024) N ( 0 < N ≤ 1 0 2 4 )的商品,请问最少他会收到多少硬币? w=int(input()) n =1024- w count = 0 if int(n/64)> 0: count =count+int(n/64 ) n =n%64 if int(n/16)> 0: count =count+int(n/16 ) n =n%16 if int(n/4)> 0: count =count+int(n/4 ) n =n%4 count =count+ n print (count) 链接: https://www.nowcoder.com/questionTerminal/5afcf93c419a4aa793e9b325d01957e2?orderByHotValue=1&mutiTagIds

SpreadJS 纯前端表格控件应用案例:雷鸟365在线文档系统

假如想象 提交于 2020-11-02 15:57:00
一、客户简介 上海佳软信息科技有限公司(简称:上海佳软)是一家追求务实的科技公司,希望通过小而美的软件产品,为用户解决核心需求。公司坚信,只有真正好用的工具才能赢得市场的口碑。 二、项目背景 随着网络信息化的发展,各类业务系统、表单系统、报表系统、分析系统和数据库等相继诞生,大数据处理和高性能要求是这类系统的普遍特征。 对于这类系统而言,其数据格式、储存和使用方式都有不同的规则和要求,这迫使系统开发者不得不同时维护多套系统,手动录入各项数据,如此反复、低效的工作,已然成为企业信息化发展的短板。 为什么经过多年的发展,数据反而越来越分化,越来越难以被大众所使用了呢? 早在20多年前,Excel就已凭借强大的公式、条件、图表和语言,让科学家们以一种自由、开放、可按需而变的方式使用数据。 如今,我们为何不可以用互联网的思维方式,重新演绎Excel对数据自由的探索方式,为其赋予新的价值,让应用数据不再受系统、环境、操作系统的限制呢? 基于这个原因,上海佳软推出了雷鸟365在线表格文档系统,这是一款有着Excel强大功能、允许多人实时协作编辑的产品。雷鸟365的出现让Excel联网成为可能,只需要导入本地文件,即可实现多人共享编辑文档,还可以设置访问修改权限。 三、项目截图 多人在线编辑发票和付款汇总表 自主配置系统权限 企业、团队文件共享系统 四、选择表格控件 SpreadJS 的主要原因

Python经典习题100例(附PDF下载地址)

青春壹個敷衍的年華 提交于 2020-11-01 20:30:48
pk哥肝了一个月,从两本书《Python基础教程(第3版)》和《流畅的Python》里把知识点进行了汇总,整理成了 100 道 Python习题, Python 100题我已经整理成了 PDF 文档,需要文档的可以关注下方公众号「Python知识圈」并回复:“ 100 ” 获取文档。 关注后回复:“ 100 ” 获取 pdf 文档 作者:pk哥 公众号:Python知识圈 Python基础习题 怎么计算2的3次方 解法1:直接用运算符 ** >>> 2**3 8 解法2:用函数 pow >>> pow(2,3) 8 怎么找出序列中的最大最小值? 用内置函数 max 和 min >>> l = (123, 888, 666) >>> max(l) 888 >>> min(l) 123 怎么将字符列表转为字符串 用 join 方法,合并序列的元素 >>> l = [ 'Python' , 'Circle' , 'is' , 'ok' ] >>> j = ' ' .join(l) >>> j 'Python Circle is ok' 怎么快速打印出包含所有 ASCII 字母(大写和小写)的字符串 用 string 模块的方法 >>> import string >>> string.ascii_letters

Python基础语法之输入输出、基本数据类型介绍

有些话、适合烂在心里 提交于 2020-10-31 06:27:40
输入输出 先从输出开始吧,编程语言的学习好像都是从打印Hello World开始的 print()会依次打印每个字符串,遇到逗号“,”会输出一个空格 print()函数输出后默认会换行,print("", end="") 去除换行 print ( 'Hello world' ) print ( 'a' , 'b' , 'c' ) 输入:通过input() 可以达到这个效果。 name =input() hello print(name) 执行效果: 格式化输出: 换行与缩进 python的语法其实总结一下就两条: (1)一条代码作为一行:比如一个赋值、一个运算、一个请求、一条打印等。(多行代码写在一行时,中间用;间隔) (2)对齐和缩进:同一级别的代码只需要保持对齐即可,对于不同级别的代码进行缩进,这样就能区分开代码执行的逻辑。 第二点的话,对于有过其他编程语言经验的人来说,可能一开始会有点不习惯,用惯了其他IDE工具的一键排版等功能,代码编写的比较随意,在python里面就不行,对代码编写规范要求比较高。 关于缩进风格: 标准Python风格是每个缩进级别是使用4个空格,永远不要使用Tab制表符! 因为不同编辑器,处理制表符的方式不同,有些会把它当成一个制表符,有的会将其看成是4个或4个以上的空格,因而会产生源代码中制表符和空格的使用不一的后果,违反了Python的缩进规则

Python字符串string常用方法和函数

筅森魡賤 提交于 2020-10-29 13:35:06
str = 'hello world' join合并,以join前的string为分隔符,将列表中的元素合并为一个新的字符串 str_1='*'.join(['Are','you','ok']) print(str_1) #结果Are*you*ok 分隔,split将string根据分隔符分隔成列表,也可以带参数num(分隔次数) splitlines,按照行('\r', '\r\n', \n')分隔,可以带参数是否保留换行符('\r', '\r\n', \n'),默认为 False,不包含换行符,如果为 True,则保留换行符 print(str.split()) #结果['hello', 'world'] print(str.split('o')) #结果['hell', ' w', 'rld'] print(str.split('o',1)) #结果['hell', ' world'] strline='hello\nword' print(strline.splitlines(),',',strline.splitlines(True)) #结果['hello', 'word'] , ['hello\n', 'word'] 字符串的开始与结束判断endwith,startswith #3.1endwith判断以什么结尾,参数为1字符串,2开始位置,3结束位置 print