首页 文章 精选 留言 我的

精选列表

搜索[文本渲染],共10000篇文章
优秀的个人博客,低调大师

用深度学习来获取文本语义: 词向量应用于自然语言处理

◆◆◆ 序 词向量是一种把词处理成向量的技术,并且保证向量间的相对相似度和语义相似度是相关的。这个技术是在无监督学习方面最成功的应用之一。传统上,自然语言处理(NLP)系统把词编码成字符串。这种方式是随意确定的,且对于获取词之间可能存在的关系并没有提供有用的信息。词向量是NLP领域的一个替代方案。它把词或短语映射成实数向量,把特征从词汇表大小的高维度空间降低到一个相对低的维度空间。 例如,让我们看看四个词:“woman”(女人)、“man”(男人)、“queen”(女王)和“king”(国王)。我们把它们都向量化,再使用简单的代数运算来发现它们之间的语义相似度。计算向量间的相似度可以采用诸如余弦相似度的方法。当我们把词“woman”的向量减去词“man”后,这个差值的余弦相似度应该和词“queen”的向量减去“king”的向量的差值

优秀的个人博客,低调大师

React 状态更新后组件不重新渲染?从 Object.is 和闭包陷阱排查一次真实问题

上周帮同事排查一个 React 页面的 bug:点击按钮修改了 state 里的对象属性,接口数据回来了,控制台也打印了新的值,但页面上的数字和列表纹丝不动。代码里明明调用了 setState,也没有报错。这类问题通常不是 React 本身失效,而是新旧 state 在浅比较时被判定为相等,或者更新函数里引用了过期的闭包变量。React 的调度机制只会在 Object.is 比较结果为 false 时才安排 re-render,而很多开发者习惯直接修改原对象再 setState,导致引用没变。另一个常见场景是 useEffect 或事件回调里捕获了旧 state,在异步逻辑中读取到的永远是初始值。文章会从这两个方向拆解真实代码,给出可复现的示例和修复方式,包括不可变更新、函数式 setState 以及 useRef 的合理使用。

优秀的个人博客,低调大师

浏览器事件循环中微任务与渲染帧的竞态:一次滚动卡顿排查

上个月给一个数据看板加了「滚动加载 + 实时高亮」的功能。列表虚拟滚动本身没问题,但用户反馈快速滚动时,屏幕右下角的实时统计数字会偶尔跳变,不是漏掉一帧,而是直接显示成旧值。更让人迷惑的是,这个现象只在 Chrome 上出现,Safari 和 Firefox 反而正常。我最初怀疑是虚拟滚动计算误差,查了两天才发现根因在事件循环里:requestAnimationFrame 回调执行时,Promise.then 里的状态更新已经排队但还没提交,导致读取到的是上一轮 DOM 对应的数据。

优秀的个人博客,低调大师

【读书笔记《Android游戏编程之从零开始》】14.游戏开发基础(Bitmap 位图的渲染与操作)

Bitmap 是图形类,Android 系统支持的图片格式有 png、jpg、bmp 等。 对位图操作在游戏中是很重要的知识点,比如游戏中需要两张除了大小之外其他完全相同的图,那么如果会对位图进行缩放操作,很容易就节约了一张图片资源;这样既节约了美工的时间,更节约游戏安装包的大小;当然除了缩放,还有很多操作,例如对位图进行旋转、镜像、设置透明度等等操作都会节约很大的资源。 首先创建一个位图实例。位图的实例不能通过 new,如果想通过一张图片资源文件创建一个位图,则要通过位图工厂来索引图片资源文件,从而生成一张位图实例,如下所示: BitmapFactory.decodeResource(Resources res,int Id) 作用:通过资源文件生成一张位图 第一个参数:资源实例 第二个参数:资源ID 懂得如何通过图片资源创建位图实例后,下面就来详细介绍如何操作位图。创建项目“BitmapProject”,游戏框架为 SurfaceView 游戏框架。具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。 我这个准备了一张图片pic01.png: 修改 MySurfaceView.java ,代码中 bmp 是由图片资源生成一个位图实例。 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.pic01); 下面讲解位图常用的操作函数: 1.绘制位图 /** * 在画布上绘制一张位图 * 第一个参数:位图实例 * 第二、三个参数:位图的X,Y坐标 * 第四个参数:画笔实例 */ canvas.drawBitmap(bmp,0,0,paint); 代码执行效果如下: 2.旋转位图 /** * 旋转画布 * 第一个参数:画布旋转的角度 * 第二、三个参数:画布的旋转点 * 如果旋转的角度大于0,顺时针旋转;旋转的角度小于0,则逆时针旋转 * * Canvas 中旋转画布还有一个函数:rotate(float degress),参数传入的是旋转画布的角度,此种方法无法设置旋转点,默认旋转点为屏幕中心点。 */ canvas.rotate(30,bmp.getWidth()/2,bmp.getHeight()/2); canvas.drawBitmap(bmp,0,0,paint); 代码执行效果如下: 如果想让位图进行旋转,那么通过这种旋转画布的方法即可实现。但是当使用此种实现画布旋转时,需要注意两点: • 如果希望图片的旋转是以图片中心点进行旋转,那么在使用 rotate 旋转画布函数对画布进行旋转时,其旋转点坐标应该设置为图片的中心点坐标; • rotate 函数是对整个画布进行旋转操作,也就是意味着,画布上所有绘制的元素都会因画布的旋转而进行对应的旋转。 例如代码修改为: canvas.rotate(30,bmp.getWidth()/2,bmp.getHeight()/2); canvas.drawBitmap(bmp,0,0,paint); canvas.drawBitmap(bmp,100,0,paint); 当旋转画布后,绘制两个位图,效果图如下所示: 通过图片可以明显看出,第二次绘制的图片也被旋转!当然这并不是想要的效果,那么如果只想对一张位图进行旋转操作该如何实现呢? Canvas 类中有两个很重要的函数 save() 与 restore(): • save():作用是用于保存当前画布的状态; • restore():作用是恢复上次保存的画布状态。 这两个函数是配对出现的。 注意 save() 函数出现的次数不能大于 restore() 函数。 对位图旋转代码进行修改: //先保持画布的状态 canvas.save(); canvas.rotate(30,bmp.getWidth()/2,bmp.getHeight()/2); canvas.drawBitmap(bmp,0,0,paint); //再将画布恢复状态 canvas.restore(); canvas.drawBitmap(bmp,100,0,paint); 项目运行效果如下: 所以,当对画布进行缩放、旋转和位移操作时,为了保证其他绘制的元素不受影响,应该利用 save() 与 restore() 对画布进行适当的保持与恢复操作。 除此之外 还有一种对位图进行旋转的方式,就是利用矩阵 Matrix 来实现,代码如下: //首先创建一个矩阵实例 Matrix mx = new Matrix(); //然后对矩阵进行旋转缩放 mx.postRotate(30,bmp.getWidth()/2,bmp.getHeight()/2); //最后使用画布绘制位图时,将矩阵信息作为参数传入 canvas.drawBitmap(bmp,mx,paint); 效果如下: Matrix 类的 postRotate 函数与 Canvas 中的 rotate 函数的作用相同,参数表示的函数也都一致。 使用矩阵对位图进行操作时,可以免去对画布的状态保持和恢复,因为矩阵就是针对单独位图进行的操作,所以不会影响画布其他元素的绘制。 3.平移位图 //创建位图实例 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01); canvas.save(); /** * 平移图片 * 第一个参数:在X轴上平移画布的距离 * 第二个参数:在Y轴上平移画布的距离 */ canvas.translate(100, 0); canvas.drawBitmap(bmp, 0, 0, paint); canvas.restore(); canvas.save(); canvas.translate(-90, 280); canvas.drawBitmap(bmp, 0, 0, paint); canvas.restore(); canvas.save(); //利用矩阵也可以完成对位图的平移操作 Matrix maT = new Matrix(); maT.postTranslate(380,-90); canvas.drawBitmap(bmp, maT, paint); canvas.restore(); 代码执行效果如下: 4.缩放位图 //创建位图实例 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01); canvas.save(); canvas.drawText("原图:", 0, 20, paint); canvas.drawBitmap(bmp, 0, 40, paint); canvas.restore(); canvas.save(); /** * 对画布进行缩放 * 第一个参数:对画布X轴的缩放比例 * 第二个参数:对画布Y轴的缩放比例 * 此方法无法设置缩放起始点,默认缩放起始点为屏幕的(0,0)点 */ //缩小到0.5倍 canvas.scale(0.5f, 0.5f); canvas.drawBitmap(bmp, 600, 40, paint); canvas.restore(); canvas.save(); /** * 对画布进行缩放 * 第一个参数:对画布X轴的缩放比例 * 第二个参数:对画布Y轴的缩放比例 * 第三、四个参数:对画布进行缩放的起始点 */ //放大为2倍 canvas.scale(2f, 2f, 0, 0); canvas.drawBitmap(bmp, 0, 220, paint); canvas.restore(); canvas.save(); //,利用矩阵实现对位图的缩放操作,当前为缩小到0.75倍 Matrix ma = new Matrix(); ma.postTranslate(700, 40); ma.postScale(0.75f, 0.75f); canvas.drawBitmap(bmp,ma, paint); canvas.restore(); 代码执行效果如下: 5.镜像反转位图 //创建位图实例 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01); canvas.save(); canvas.drawText("原图:", 10, 20, paint); canvas.drawBitmap(bmp, 10, 40, paint); canvas.restore(); //X 轴镜像 canvas.save(); canvas.drawText("X 轴镜像:", 10, 320, paint); //当X轴的比例值小于0时,其实是对画布进行X轴的镜像后的缩放。 canvas.scale(-1, 1, 10+bmp.getWidth()/2, 340+bmp.getHeight()/2); canvas.drawBitmap(bmp, 10, 340,paint); canvas.restore(); //Y 轴镜像 canvas.save(); canvas.drawText("Y 轴镜像:", 10, 620, paint); //利用矩阵实现对位图的镜像操作 Matrix ma = new Matrix(); ma.postTranslate(10, 640); ma.postScale(1, -1, bmp.getWidth()/2+10,bmp.getHeight()/2+640); canvas.drawBitmap(bmp,ma, paint); canvas.restore(); //XY 轴镜像 canvas.save(); canvas.drawText("XY轴镜像:", 10, 920, paint); canvas.scale(-1, -1, 10+bmp.getWidth()/2, 940+bmp.getHeight()/2); canvas.drawBitmap(bmp, 10, 940,paint); canvas.restore(); 代码执行效果如下: 在游戏开发中,一般最经常用的是 png格式的图片,原因在于 png格式的图片支持透明度,当然这不是必须的。 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/4163943.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册