Paper.js入门指南:路径和几何形状

paper.js入门指南:路径和几何形状

在之前的教程中,我介绍了 Paper.js 中的安装过程和项目层次结构。这次我将教你有关路径、线段及其操作的知识。这将使您能够使用该库创建复杂的形状。之后,我想介绍 Paper.js 所基于的一些基本几何原理。

使用路径

Paper.js 中的路径由一系列由曲线连接的线段表示。段基本上是一个 point 及其两个句柄,它们定义曲线的位置和方向。不定义线段会导致直线而不是曲线。

使用 new Path() 构造函数定义新路径后,您可以借助 path.add(segment) 向其添加段功能。由于此函数支持多个参数,因此您还可以一次添加多个段。假设您想要在现有路径内的特定索引处插入新段。您可以使用 path.insert(index, segment) 函数来执行此操作。同样,要删除特定索引处的段,可以使用 path.removeSegment(index) 函数。这两个函数都使用从零开始的索引。这意味着使用 path.removeSegment(3) 将删除第四段。您可以使用 path.lated 属性关闭所有绘制的路径。它将把路径的第一段和最后一段连接在一起。

到目前为止,我们所有的路径都是直线。要创建弯曲路径而不指定每个段的句柄,可以使用 path.smooth() 函数。此函数计算路径中所有段的手柄的最佳值,以使经过它们的曲线平滑。段本身不会更改其位置,如果您为任何段指定了句柄值,这些值将被忽略。下面的代码使用我们讨论的所有函数和属性来创建四个路径,其中两个是弯曲的。

var aPath = new Path();aPath.add(new Point(30, 60));aPath.add(new Point(100, 200));aPath.add(new Point(300, 280), new Point(280, 40));aPath.insert(3, new Point(180, 110));aPath.fullySelected = 'true';aPath.closed = true;  var bPath = aPath.clone();bPath.smooth();bPath.position.x += 400;  var cPath = aPath.clone();cPath.position.y += 350;cPath.removeSegment(3);  var dPath = bPath.clone();dPath.strokeColor = 'green';dPath.position.y += 350;dPath.removeSegment(3);

首先,我们创建一个新路径,然后向其中添加段。使用 path.insert(3, new Point(180, 110)) 插入一个新段来代替第四个段,并将第四个段移动到第五个位置。我已将 fullySelected 设置为 true 以显示每条曲线的所有点和手柄。对于第二条路径,我使用了 path.smooth() 函数来使曲线平滑。使用 cPath.removeSegment(3) 删除第四段为我们提供了原始形状,没有任何基于索引的插入。您可以通过在此 CodePen 演示中注释掉 aPath.insert(3, new Point(180, 110)); 来验证这一点。这是到目前为止我们所有操作的最终结果:

预定义形状

Paper.js 支持一些开箱即用的基本形状。例如,要创建一个圆,您可以简单地使用 new Path.Circle(center, radius) 构造函数。同样,您可以使用 new Path.Rectangle(rect) 构造函数来创建矩形。您可以指定左上角和右下角,也可以指定左上角和矩形的大小。要绘制圆角矩形,可以使用 new Path.RoundedRectangle(rect, size) 构造函数,其中 size 参数决定圆角的大小。

如果要创建 n 边正多边形,可以使用 new Path.RegularPolygon(center, numSides, radius) 构造函数来实现。参数 center 确定多边形的中心,radius 确定多边形的半径。

下面的代码将生成我们刚刚讨论的所有形状。

var aCircle = new Path.Circle(new Point(75, 75), 60);aCircle.strokeColor = 'black';  var aRectangle = new Path.Rectangle(new Point(200, 15), new Point(400, 135));aRectangle.strokeColor = 'orange';  var bRectangle = new Path.Rectangle(new Point(80, 215), new Size(400, 135));bRectangle.strokeColor = 'blue';  var myRectangle = new Rectangle(new Point(450, 30), new Point(720, 170));var cornerSize = new Size(10, 60);var cRectangle = new Path.RoundRectangle(myRectangle, cornerSize);cRectangle.fillColor = 'lightgreen';  var aTriangle = new Path.RegularPolygon(new Point(120, 500), 3, 110);aTriangle.fillColor = '#FFDDBB';aTriangle.selected = true;var aDodecagon = new Path.RegularPolygon(new Point(460, 490), 12, 100);aDodecagon.fillColor = '#CCAAFC';aDodecagon.selected = true;

我们创建的第一个矩形是基于坐标点的。下一个使用第一个点来确定矩形的左上角,然后使用大小值来绘制其余的点。在第三个矩形中,我们还指定了矩形的半径。第一个半径参数决定水平曲率,第二个参数决定垂直曲率。

最后两个形状只需使用 RegularPolygon 构造函数来创建三角形和十二边形。下面的嵌入式演示显示了我们代码的结果。

简化和扁平化路径

有两种创建圆的方法。第一个是创建许多没有任何手柄的段并将它们紧密地放置在一起。这样,尽管它们将由直线连接,但整体形状仍会更接近圆形。第二种方法是仅使用四个段,并为其句柄设置适当的值。这可以节省大量内存,并且仍然可以给我们带来期望的结果。

大多数时候,我们可以从路径中删除相当多的线段,而不会显着改变其形状。该库提供了一个简单的 path.simplify([tolerance]) 函数来实现此结果。容差参数是可选的。它用于指定路径简化算法可以偏离其原始路径的最大距离。默认设置为 2.5。如果将该参数设置为较高的值,最终的曲线会更平滑一些,段点也会较少,但偏差可能会很大。同样,较低的值将导致非常小的偏差,但会包含更多的段。

小门道AI 小门道AI

小门道AI是一个提供AI服务的网站

小门道AI 117 查看详情 小门道AI

您还可以使用 path.flatten(maxDistance) 函数将路径中的曲线转换为直线。在展平路径时,库会尝试使段之间的距离尽可能接近 maxDistance

var aPolygon = new Path.RegularPolygon(new Point(140, 140), 800, 120);aPolygon.fillColor = '#CCAAFC';aPolygon.selected = true;  var bPolygon = aPolygon.clone();bPolygon.fillColor = '#CCFCAA';bPolygon.simplify();  var cPolygon = aPolygon.clone();cPolygon.fillColor = '#FCAACC';cPolygon.simplify(4);  var dPolygon = bPolygon.clone();dPolygon.fillColor = '#FCCCAA';dPolygon.flatten(80);

在上面的代码中,我首先使用上面讨论的 RegularPolygon 函数创建了一个多边形。我特意将 selected 属性设置为 true ,以便这些路径中的所有段都可见。然后,我从第一个多边形中克隆了第二个多边形,并在其上使用了 simplify 函数。这将段数减少到只有五个。

在第三个多边形中,我将公差参数设置为更高的值。这进一步减少了段的数量。您可以看到所有路径仍然具有相同的基本形状。在最后的路径中,我使用了 flatten(maxDistance) 函数来展平我们的曲线。该算法尝试使形状尽可能接近原始形状,同时仍然遵守 maxDistance 约束。最终结果如下:

几何和数学

Paper.js 有一些基本数据类型,如 PointSizeRectangle 来描述图形项的几何属性。它们是几何值(如位置或尺寸)的抽象表示。点只是描述二维位置,大小描述二维空间中的抽象维度。这里的矩形表示由左上角点及其宽度和高度围成的区域。它与我们之前讨论的矩形路径不同。与路径不同,它不是一个项目。您可以在这个 Paper.js 教程中了解有关它们的更多信息。

您可以对点数和大小执行基本的数学运算 – 加法、减法、乘法和除法。以下所有操作均有效:

var pointA = new Point(20, 10);var pointB = pointA * 3; // { x: 60, y: 30 }var pointC = pointB - pointA; // { x: 40, y: 20 }var pointD = pointC + 30; // { x: 70, y: 50 }var pointE = pointD / 5;  // { x: 14, y: 10 }var pointF = pointE * new Point(3, 2); // { x: 42, y: 20 }// You can check the output in console for verificationconsole.log(pointF); 

除了这些基本操作之外,您还可以执行一些舍入操作或生成点和大小的随机值。考虑以下示例:

var point = new Point(3.2, 4.7);var rounded = point.round(); // { x: 3, y: 5 }var ceiled  = point.ceil();  // { x: 4, y: 5 }var floored = point.floor(); // { x: 3, y: 4 }// Generate a random point with x between 0 and 50// and y between 0 and 40var pointR = new Point(50, 40) * Point.random();// Generate a random size with width between 0 and 50// and height between 0 and 40var sizeR = new Size(50, 40) * Size.random();

random() 函数生成 0 到 1 之间的随机值。您可以将它们与适当的 PointSize 对象相乘值以获得所需的结果。

这总结了您需要熟悉的基本数学知识,以使用 Paper.js 创建有用的内容。

最终想法

完成本教程后,您应该能够创建各种路径和形状、展平曲线或简化复杂路径。现在您对可以使用 Paper.js 执行的各种数学运算也有了基本的了解。通过结合您在本系列教程和上一个教程中学到的所有内容,您应该能够在不同图层上创建复杂的多边形并将它们混合在一起。您还应该能够在路径中插入和删除线段以获得所需的形状。

如果您正在寻找其他 JavaScript 资源来学习或在工作中使用,请查看我们在 Envato 市场中提供的资源。

如果您对本教程有任何疑问,请在评论中告诉我。

以上就是Paper.js入门指南:路径和几何形状的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/536189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 12:52:58
下一篇 2025年11月9日 12:55:41

相关推荐

  • css全屏背景图片设置django加载图片路径详细说明

    下面小编就为大家带来一篇css全屏背景图片设置,django加载图片路径详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 css全屏背景图片设置,django加载图片路径详解 #bg { position:fixed; top:0; left:0; width:10…

    好文分享 2025年12月23日
    000
  • 深入理解文件的绝对路径与相对路径

    我们在引用文件或者图片时,都会涉及到相对路径和绝对路径,如果不同明确区分他们,那么很容易出错。这篇文章就给大家文件的相对路径和绝对路径,有需要的朋友可以参考一下,希望对你有用。 用DW写HTML的时候,可以直接选择到具体文件的路径,现在改用了webstorm,只能选择到与HTML文件同一目录下的文件…

    2025年12月21日 好文分享
    000
  • HTML的a标签href属性指定相对路径与绝对路径的用法讲解

    href是链接前端文件的一个最常用的重要属性,这里我们就来看一下html的a标签href属性指定相对路径与绝对路径的用法讲解,需要的朋友可以参考下 在实际Web开发中,插入图片、包含CSS文件等都需要有路径,如果文件路径的添加错误,就会导致引用失效(无法浏览链接文件,或无法显示插入的图片等)。很多初…

    好文分享 2025年12月21日
    000
  • 在Canvas中如何实现自定义路径动画?

    这次给大家带来在canvas中如何实现自定义路径动画?,canvas实现自定义路径动画的注意事项有哪些,下面就是实战案例,一起来看一下。 在最近的项目中笔者需要做一个新需求:在canvas中实现自定义的路径动画。这里所谓的自定义路径不单单包括一条直线,也许是多条直线的运动组合,甚至还包含了贝塞尔曲线…

    好文分享 2025年12月21日
    000
  • 如何覆盖C++中的分支和路径?

    在 c++++ 中覆盖分支和路径可有效确保代码全面测试。方法包括:使用 google test 等覆盖率框架。利用 gcc 和 clang 编译器的 -ftest-coverage 覆盖率标志。通过 gcov 和 lcov 代码插桩库检测执行路径。 如何在 C++ 中覆盖分支和路径 在单元测试中,覆…

    2025年12月18日
    000
  • 检查给定的图中两个节点之间的路径是否表示最短路径

    要检查图表的两个中心之间的给定路径是否符合最短路径,可以通过使用可靠的最短路径将沿给定路径的整个边缘权重与相同中心组合之间的最短距离进行比较方式计算,例如 Dijkstra 计算或 Floyd−Warshall 计算。如果给定路径上的所有边权重与最有限的删除相匹配,那么它就代表最简单的路径。另外:如…

    2025年12月17日
    000
  • 360压缩怎么更改图片压缩的保存目录?-360压缩更改图片压缩保存目录的方法

    360压缩电脑版是由360公司推出的新一代永久免费压缩工具。那么在使用过程中,如何修改图片压缩后的保存路径呢?接下来就由小编为大家详细介绍360压缩修改图片压缩保存路径的操作步骤! 如何更改360压缩中图片压缩的保存位置? 1、启动360压缩程序,随后点击顶部菜单中的“图片压缩”功能。 2、在界面中…

    2025年12月3日 软件教程
    000
  • laravel框架中常用目录路径详解

    本文主要和大家分享laravel框架中常用目录路径详解,希望能帮助到大家。app_path()app_path函数返回app目录的绝对路径:$path = app_path();你还可以使用app_path函数为相对于app目录的给定文件生成绝对路径:$path = app_path(‘…

    2025年11月28日
    000
  • 了解Linux中的当前路径显示方法

    在Linux操作系统中,当前路径指的是用户当前所处的工作目录。了解当前路径对于用户在命令行环境中的操作非常重要,因为用户需要知道自己在哪个目录下,以便能够正确地定位和操作文件。本文将介绍几种在Linux系统中显示当前路径的方法,并附上具体的代码示例。 方法一:使用pwd命令 pwd 命令是 Linu…

    2025年11月25日 运维
    100
  • Linux系统中RPM包存放的标准路径是什么?

    《Linux系统中RPM包存放的标准路径及代码示例》 在Linux系统中,RPM(Red Hat Package Manager)包是一种用于软件包管理的标准格式。当我们使用yum等工具安装软件的时候,实际上是在系统中安装或更新RPM包。RPM包在系统中存放的路径是有一定规范的,下面将介绍一下在常见…

    2025年11月19日
    000
  • Linux内核源代码存放路径解析

    Linux内核是一个开源的操作系统内核,其源代码存储在一个专门的代码仓库中。在本文中,我们将详细解析Linux内核源代码的存放路径,并通过具体的代码示例来帮助读者更好地理解。 1. Linux内核源代码存放路径 Linux内核源代码存储在一个名为linux的Git仓库中,该仓库托管在[https:/…

    2025年11月19日
    000
  • 如何查找Linux系统中RPM文件的存储路径?

    在Linux系统中,RPM(Red Hat Package Manager)是一种常见的软件包管理工具,用于安装、升级和删除软件包。有时候我们需要找到某个已安装的RPM文件的存储路径,以便进行查找或者其他操作。下面将介绍在Linux系统中如何查找RPM文件的存储路径,同时提供具体的代码示例。 首先,…

    2025年11月19日
    000
  • linux显示当前路径

    查看当前路径命令:pwd pwd命令能够显示当前所处的路径。 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为: # pwd /home/samlee 第一行为运行的命令,第二行的内容为运行pwd命令后显示的信息,即显示用户当前所在的工作目录的路径为/…

    2025年11月9日 运维
    000
  • vscode如何更改文件默认保存路径

    在导航栏中,选择最左侧的file选项 点击后,在弹出的下拉列表中,选择save Workspace as(保存工作路径)选项 (推荐教程:vscode教程) 点击后,进行更改路径,选择合适的盘符,一般建议选择保存在空闲的盘符 存了个图 视频图片解析/字幕/剪辑,视频高清保存/图片源图提取 17 查看…

    2025年11月8日 开发工具
    100
  • JavaScript事件冒泡原理解析:探讨事件的冒泡过程和触发顺序

    深入理解JavaScript冒泡事件机制:探究事件的冒泡路径和触发顺序 在前端开发中,我们经常会使用JavaScript来处理各种事件,如点击、滚动、输入等。而这些事件在触发后,会经历一个冒泡的过程,从被触发的元素开始,逐级向上级元素传递,直至最顶层的元素。本文将详细探究JavaScript事件的冒…

    2025年11月8日 web前端
    000
  • Linux下查看MySQL的安装路径

    Linux下查看mysql、apache是否安装,并卸载。 指令 ps -ef|grep mysql 得出结果 root 17659 1 0 2011 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe –datadir=/var/lib/mysql &#82…

    数据库 2025年11月8日
    000
  • Windows中如何修改MySQL数据路径datadir?

    这篇文章主要为大家详解在WindowsServer2012上,更改MySQL数据路径datadir,内容还是挺不错的,值得来看一下,喜欢的小伙伴们可以关注一下。 背景说明 在windows下,mysql安装路径不能修改,也无法通过gui界面进行配置; 默认安装路径 %mysql_root% = c:…

    2025年11月6日
    000
  • 修改iTunes备份文件的存储路径

    itunes备份文件修改路径 随着智能手机的普及,我们的手机中存储着大量珍贵的照片、通讯录、短信等重要数据。为了保障数据的安全,大多数人会选择通过iTunes进行手机备份,以防止意外数据丢失或设备损坏。然而,iTunes备份文件存放路径是默认存储在计算机的固定位置,对于一些用户来说,这可能不够灵活和…

    2025年11月6日
    000
  • linux默认不显示当前路径怎么办

    首先进入到etc目录,编辑profile文件 vim profile 然后在最后一行加上: export PS1='[u@h $PWD]$’ 保存之后执行: 麦当秀MindShow AiPPT 麦当秀|MINDSHOW是一款百万用户正在使用的三分钟生成一份PPT的AI应用系统。它利用引领前沿的人工智…

    2025年11月5日 运维
    000

发表回复

登录后才能评论
关注微信