图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景

了解paper.js的基础知识,在往后的开发过程中会让你如履平地。

基础知识

paper.js 提供了两种编写方式,一种是纯粹的JavaScript编写,还有一种是使用官方提供的PaperScript。
区别就是在于,调用paper下的字对象是否需要加paper,以及向量的加减乘除。
下面看一下两种写法

使用 paperscript

<script type="text/paperscript" canvas="myCanvas">// Create a Paper.js Path to draw a line into it:var path = new Path();// Give the stroke a colorpath.strokeColor = 'black';var start = new Point(100, 100);// Move to start and draw a line from therepath.moveTo(start);// Note the plus operator on Point objects.// PaperScript does that for us, and much more!path.lineTo(start + [ 100, -50 ]);
</script>

使用javascript

<script>paper.setup('myCanvas');// Create a Paper.js Path to draw a line into it:var path = new paper.Path();// Give the stroke a colorpath.strokeColor = 'black';var start = new paper.Point(100, 100);// Move to start and draw a line from therepath.moveTo(start);// Note the plus operator on Point objects.// PaperScript does that for us, and much more!path.lineTo(start + [ 100, -50 ]);
</script>

向量

向量告诉我们的朝哪个方向移动以及移动多远。

向量的加法
在这里插入图片描述
向量的减法
在这里插入图片描述

向量的乘法,拉长向量的距离
在这里插入图片描述

向量的除法,缩小向量的距离
在这里插入图片描述

坐标系

坐标系的原点是在左上角, 0,0

画基本的几何元素

 paper.setup('myCanvas');// 圆var circle = new paper.Path.Circle({center: [80, 50],radius: 30,fillColor: 'red'});// 椭圆var ellipse = new paper.Path.Ellipse({point: [150, 20],size: [80, 40],fillColor: 'blue'});// 矩形var rectangle = new paper.Path.Rectangle({point: [250, 20],size: [100, 50],fillColor: 'green'});// 正方形var square = new paper.Path.Rectangle({point: [370, 20],size: [50, 50],fillColor: 'yellow'});// 线段var line = new Path({segments: [[500, 20], [550, 70]],strokeColor: 'black'});// 弧线var arc = new paper.Path.Arc({from: [600, 50],through: [650, 20],to: [700, 50],strokeColor: 'orange'});// 曲线var curve = new Path({strokeColor: 'purple'});curve.add(new paper.Point(750, 25));curve.add(new paper.Point(800, 75));curve.smooth();// 多边形var polygon = new paper.Path.RegularPolygon({center: [900, 50],sides: 6,radius: 30,fillColor: 'pink'});// 星形var star = new paper.Path.Star({center: [1050, 50],points: 5,radius1: 20,radius2: 40,fillColor: 'brown'});

在这里插入图片描述

视图的缩放

// 缩小一半
paper.view.zoom = 0.5
// 扩大2倍
paper.view.zoom = 2// 放大2倍
paper.view.scale(2)// 缩小一半
paper.view.scale(0.5)

两者能实现同样的效果,但zoom是依据最原始的缩放比例,scale是依据当前的缩放比例。
如果你先缩放0.5。然后paper.view.scale(1),那么现在还是缩小了一半。

元素的移动,旋转

元素的旋转

// 旋转
paper.view.onFrame = function(event) {star.rotate(3);
}

角度是 顺时针是正角度,逆时针是负角度。

元素的移动


star.position = star.position.add(new paper.Point(100, 50));setTimeout(() => {star.position = new paper.Point(20, 20);
}, 2000)// 或者使用translate
star.translate(new paper.Point(20, 20))

特性有哪些

画点的切线,
画法线,
求图形的交集,并集,补集
贝塞尔曲线
svg导入导出
json导入,导出

特性有很多

说一下不擅长的东西,2d渲染,位图的处理有限
动画功能有限,毕竟定位是矢量库。

负责人几乎不再维护啦,
导入svg有一些问题,特别是高精度的,小尺寸的复杂svg
社区不够活跃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python获取1688商品详情的教程

如何使用Python编程语言来获取1688网站上的商品详情信息。通过本教程&#xff0c;读者将学会使用Python的请求库和解析库来爬取商品数据。 目录 简介环境准备编写爬虫代码处理和存储数据快速获取遵守法律法规和网站政策 1. 简介 1688是中国领先的B2B电子商务平台&#xff0…

Windows server 由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。

问题现象&#xff1a; 解决办法 临时远程方式1: 打开 mstsc 时带上 /admin 等参数&#xff0c;如下图所示&#xff1a; 使用“mstsc /admin /v:目标ip”来强制登录服务器&#xff0c;但只能是管理员身份。 远程方式2&#xff1a; 通过VM远程登陆系统后&#xff0c;运行输入R…

【Python Cookbook】S03E02 执行精确的小数计算 decimal, math.fsum()

目录 问题解决方案讨论 问题 如果我们需要对小数执行精确的计算&#xff0c;并且不希望因为浮点数的误差带来影响&#xff0c;我们该怎么做&#xff1f; 解决方案 关于浮点数&#xff0c;一个人尽皆知的问题就是其无法精确地表达出所有十进制小数位&#xff0c;因此甚至简单…

Python编程编辑器PyCharm 界面介绍

PyCharm 界面介绍 当你打开 PyCharm 后&#xff0c;会看到以下主要界面区域&#xff1a; 1&#xff09;菜单栏&#xff1a; 位于界面最顶端&#xff0c;包含文件&#xff08;File&#xff09;、编辑&#xff08;Edit&#xff09;、查看&#xff08;View&#xff09;、导航&a…

qemu 调试 Linux kernel 基于 x86_64

配置qemu&#xff1a; cd qemu/ mkdir build cd build/ $ ../configure --enable-slirp \ --enable-slirp-smbd --smbd/home/hipper/ex_ubuntu-22.4.4-live-server_qemu/smba_00 \ --target-list"riscv32-softmmu riscv64-softmmu x86_64-softmmu" make -j 创建…

ICMAN液位检测——WS003B管道检测模组

ICMAN液位检测之WS003B管道检测模组 体积小&#xff0c;成本低&#xff0c; 液位检测精度高&#xff0c; 有水输出低电平无水高电平&#xff0c; 适用于饮水机、咖啡机、扫地机器人、洗地机等&#xff0c; 有需要朋友快联系我吧&#xff01; AWE展会不容错过的ICMAN检测模组…

[大师C语言(第四十篇)]C语言最危险行为盘点

C语言因其高效和灵活性被广泛应用于系统编程、嵌入式系统、操作系统等领域。然而&#xff0c;这些特性也使得C语言容易产生一些危险行为&#xff0c;可能导致程序错误、安全漏洞甚至系统崩溃。本文将盘点C语言中最危险的行为&#xff0c;并对其背后的技术进行详细解析。 第一部…

PostgreSQL 基本SQL语法(二)

1. SELECT 语句 1.1 基本 SELECT 语法 SELECT 语句用于从数据库中检索数据。基本语法如下&#xff1a; SELECT column1, column2, ... FROM table_name; 例如&#xff0c;从 users 表中检索所有列的数据&#xff1a; SELECT * FROM users; 1.2 使用 WHERE 条件 WHERE 子…

RabbitMQ实践——搭建多人聊天服务

大纲 用户登录创建聊天室监听Stream&#xff08;聊天室&#xff09;发送消息实验登录Tom侧Jerry侧 创建聊天室Jerry侧Tom侧 进入聊天室Jerry侧Tom侧 发送消息Jerry发送消息Jerry侧聊天室Tom侧聊天室 Tom发送消息Jerry侧聊天室Tom侧聊天室 代码工程参考资料 在《RabbitMQ实践——…

Webpack: 前端资深构建工具

概述 如果你是一名前端工程师&#xff0c;相信之前或多或少听过、用过 Webpack 这一构建工具&#xff0c;它能够融合多种工程化工具&#xff0c;将开发阶段的应用代码编译、打包成适合网络分发、客户端运行的应用产物如今&#xff0c;Webpack 已经深深渗入到前端工程的方方面面…

简单了解IoC

IoC 什么是IoC&#xff1f; IoC&#xff08;Inversion of Control&#xff09;&#xff0c;即控制反转&#xff0c;这是一种设计思想&#xff0c;在Spring指将对象的控制权交给Spring容器&#xff0c;由容器来实现对象的创建、管理&#xff0c;程序员只需要从容器获取想要的对…

java设计模式(四)原型模式(Prototype Pattern)

1、模式介绍&#xff1a; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象…

ES6模板字符串详解

ES6是JavaScript语言的一次重大更新&#xff0c;引入了许多新特性和语法改进&#xff0c;其中模板字符串是一个非常实用和灵活的语法特性。它可以让我们从数组或对象中提取值&#xff0c;并赋给对应的变量&#xff0c;让代码变得更加简洁和易读。 本文将深入探讨ES6解构赋值的语…

域控制器BSP开发工程师面试题

在域控制器BSP(Board Support Package)开发工程师的面试中,可能会遇到以下一些问题。以下是根据参考文章和相关知识整理的面试题及其可能的回答格式: 面试题1:请简要介绍一下您对域控制器BSP的理解。 回答: 域控制器BSP,即板卡支持包,是嵌入式系统开发中的关键组成部…

Nginx开发--动静分离和URLRewrite

05 【动静分离和URLRewrite】 1.动静分离介绍 为了提高网站的响应速度&#xff0c;减轻程序服务器&#xff08;Tomcat&#xff0c;Jboss等&#xff09;的负载&#xff0c;对于静态资源&#xff0c;如图片、js、css等文件&#xff0c;可以在反向代理服务器中进行缓存&#xff…

减少液氮罐内液氮损耗的方法

监测与管理液氮容器的密封性能 液氮容器的密封性能直接影响液氮的损耗情况。一个常见的损耗源是容器本身的密封不良或老化导致的泄漏。为了有效减少液氮损耗&#xff0c;首先应当定期检查液氮容器的密封性能。这可以通过简单的方法如肉眼检查外观&#xff0c;或者更精确的方法…

KALI LINUX 开启ssh免登录服务及固定ip及

SSH以进行远程登录 在Kali Linux中启用SSH以进行远程登录,请按照以下步骤操作: 安装SSH服务:sudo apt update sudo apt install openssh-server 已安装可忽略 sudo systemctl start ssh 启动SSH服务 sudo systemctl enable ssh 确保SSH服务设置为开机启动: (可选)如…

xxl-job 分布式任务调度 基本使用

xxl-job 是一个分布式任务调度平台&#xff0c;使用非常方便。 官网&#xff1a;https://gitee.com/xuxueli0323/xxl-job 工作原理类似于nacos 执行器注册到调度中心 调度中心分配任务 执行器执行任务 docker-compose 配置 version: 3 services:xxl-job:image: xuxueli/xxl-…

科普文:外贸垃圾邮件判定

国外垃圾邮件判定规则 很多时候&#xff0c;外贸的沟通多以邮件为主&#xff0c;他们作为专业的采购商&#xff0c;每天邮箱里都会塞满了邮件。因此&#xff0c;为了提高工作效率&#xff0c;很多国外客户喜欢使用垃圾邮件过滤器来过滤掉一部分垃圾邮件。 以下几种情况会触发垃…

《重构》读书笔记【第1章 重构,第一个示例,第2章 重构原则】

文章目录 第1章 重构&#xff0c;第一个示例1.1 重构前1.2 重构后 第2章 重构原则2.1 何谓重构2.2 两顶帽子2.3 为何重构2.4 何时重构2.5 重构和开发过程 第1章 重构&#xff0c;第一个示例 我这里使用的IDE是IntelliJ IDEA 1.1 重构前 plays.js export const plays {&quo…