p5.vector-arguments is a p5.js library that enables the use of p5.js Vectors with the p5.js Shape functions.
It enables usage such as this, where the argument to circle() (and other shape
functions) can be a Vector:
function setup() {
createCanvas(windowWidth, windowHeight);
enableVectorArguments();
}
function draw() {
let pt = createVector(mouseX, mouseY);
circle(pt, 100);
pt.add(100, 200);
circle(pt, 50);
}
You can find a collection of examples here.
Getting Started
Add the following line to your index.html document:
<script src="https://unpkg.com/p5.vector-arguments@1"></script>
Add the following line to your setup() function:
enableVectorArguments();
Details
Any p5.js function that accepts a pair of coordinates x and y, can instead accept an instance of p5.Vector.
You can mix and match numbers and vectors. For example, given pt1 = createVector(100, 200) and pt2 = createVector(50, 20), all of the following
are equivalent:
rect(100, 200, 50, 20);
rect(pt1, 50, 20);
rect(100, 200, pt2);
rect(pt1, pt2);
Installation Options
Option 1: Using a CDN
The simplest way to use this file is to add the following line to your
index.html document:
<script src="https://unpkg.com/p5.vector-arguments@1"></script>
This should go after the line that includes p5.js or p5.min.js.
Option 2: Downloading the library file
Alternatively, download
p5.vector-arguments.js from this
repository. Include it in your HTML document by adding this line, after the line
that includes p5.js or p5.min.js:
<script src="p5.vector-arguments.js"></script>
Option 3: Using the p5-server CLI or VS Code extension
The p5-server command-line tool,
and the P5 Server Visual Studio Code
Extension,
will each infer this library from the presence of a call to
enableVectorArguments() in a JavaScript-only sketch (a sketch that is just a
JavaScript file, without an HTML file).
Performance Notes
Run tests/perf to see the effect of the performance plugin on performance. Look in JavaScript Developer Console.
There are two questions about performance:
- What is the effect of calling
enableVectorArguments()on calls that do not use the features that it provide? On my computer,circle(50, 50, 10)is about the same speed.square(10, 10, 50, 50)is about 2-5% (0.03–0.09µ/call) slower. - Once
enableVectorArguments()has been called, what is the performance of using a Vector to a function, instead of two (or three) numbers? In my tests, replacing two numbers by a Vector leavescircle()about the same speed (sometimes it is faster, sometimes slower) andrect()about 45% (0.45µ/call) slower.
Keeping in Touch
Report bugs, features requests, and suggestions here, or message me on Twitter.
Follow @osteele on Twitter for updates.
Other Work
p5.js Libraries lists my other p5.js libraries.
https://code.osteele.com lists my other p5.js projects. These include tools, libraries, and examples and educational materials.
License
MIT