UNPKG

p5

Version:

[![npm version](https://badge.fury.io/js/p5.svg)](https://www.npmjs.com/package/p5)

741 lines (729 loc) 22.5 kB
// This file is auto-generated from JSDoc documentation import p5 from 'p5'; declare module 'p5' { /** * Draws a Bézier curve.Bézier curves can form shapes and curves that slope gently. They're defined * by two anchor points and two control points. Bézier curves provide more * control than the spline curves created with the * curve() function.The first two parameters, `x1` and `y1`, set the first anchor point. The * first anchor point is where the curve starts.The next four parameters, `x2`, `y2`, `x3`, and `y3`, set the two control * points. The control points "pull" the curve towards them.The seventh and eighth parameters, `x4` and `y4`, set the last anchor * point. The last anchor point is where the curve ends.Bézier curves can also be drawn in 3D using WebGL mode. The 3D version of * `bezier()` has twelve arguments because each point has x-, y-, * and z-coordinates. * * @param x-coordinate of the first anchor point. * @param y-coordinate of the first anchor point. * @param x-coordinate of the first control point. * @param y-coordinate of the first control point. * @param x-coordinate of the second control point. * @param y-coordinate of the second control point. * @param x-coordinate of the second anchor point. * @param y-coordinate of the second anchor point. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Draw the anchor points in black. * stroke(0); * strokeWeight(5); * point(85, 20); * point(15, 80); * * // Draw the control points in red. * stroke(255, 0, 0); * point(10, 10); * point(90, 90); * * // Draw a black bezier curve. * noFill(); * stroke(0); * strokeWeight(1); * bezier(85, 20, 10, 10, 90, 90, 15, 80); * * // Draw red lines from the anchor points to the control points. * stroke(255, 0, 0); * line(85, 20, 10, 10); * line(15, 80, 90, 90); * * describe( * 'A gray square with three curves. A black s-curve has two straight, red lines that extend from its ends. The endpoints of all the curves are marked with dots.' * ); * } * </code> * </div> * * <div> * <code> * // Click the mouse near the red dot in the top-left corner * // and drag to change the curve's shape. * * let x2 = 10; * let y2 = 10; * let isChanging = false; * * function setup() { * createCanvas(100, 100); * * describe( * 'A gray square with three curves. A black s-curve has two straight, red lines that extend from its ends. The endpoints of all the curves are marked with dots.' * ); * } * * function draw() { * background(200); * * // Draw the anchor points in black. * stroke(0); * strokeWeight(5); * point(85, 20); * point(15, 80); * * // Draw the control points in red. * stroke(255, 0, 0); * point(x2, y2); * point(90, 90); * * // Draw a black bezier curve. * noFill(); * stroke(0); * strokeWeight(1); * bezier(85, 20, x2, y2, 90, 90, 15, 80); * * // Draw red lines from the anchor points to the control points. * stroke(255, 0, 0); * line(85, 20, x2, y2); * line(15, 80, 90, 90); * } * * // Start changing the first control point if the user clicks near it. * function mousePressed() { * if (dist(mouseX, mouseY, x2, y2) < 20) { * isChanging = true; * } * } * * // Stop changing the first control point when the user releases the mouse. * function mouseReleased() { * isChanging = false; * } * * // Update the first control point while the user drags the mouse. * function mouseDragged() { * if (isChanging === true) { * x2 = mouseX; * y2 = mouseY; * } * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100); * * background('skyblue'); * * // Draw the red balloon. * fill('red'); * bezier(50, 60, 5, 15, 95, 15, 50, 60); * * // Draw the balloon string. * line(50, 60, 50, 80); * * describe('A red balloon in a blue sky.'); * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100, WEBGL); * * describe('A red balloon in a blue sky. The balloon rotates slowly, revealing that it is flat.'); * } * * function draw() { * background('skyblue'); * * // Rotate around the y-axis. * rotateY(frameCount * 0.01); * * // Draw the red balloon. * fill('red'); * bezier(0, 0, 0, -45, -45, 0, 45, -45, 0, 0, 0, 0); * * // Draw the balloon string. * line(0, 0, 0, 0, 20, 0); * } * </code> * </div> */ function bezier(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void; /** * @param z-coordinate of the first anchor point. * @param z-coordinate of the first control point. * @param z-coordinate of the second control point. * @param z-coordinate of the second anchor point. */ function bezier(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, x3: number, y3: number, z3: number, x4: number, y4: number, z4: number): void; /** * Calculates coordinates along a Bézier curve using interpolation.`bezierPoint()` calculates coordinates along a Bézier curve using the * anchor and control points. It expects points in the same order as the * bezier() function. `bezierPoint()` works one axis * at a time. Passing the anchor and control points' x-coordinates will * calculate the x-coordinate of a point on the curve. Passing the anchor and * control points' y-coordinates will calculate the y-coordinate of a point on * the curve.The first parameter, `a`, is the coordinate of the first anchor point.The second and third parameters, `b` and `c`, are the coordinates of the * control points.The fourth parameter, `d`, is the coordinate of the last anchor point.The fifth parameter, `t`, is the amount to interpolate along the curve. 0 * is the first anchor point, 1 is the second anchor point, and 0.5 is halfway * between them. * * @param coordinate of first control point. * @param coordinate of first anchor point. * @param coordinate of second anchor point. * @param coordinate of second control point. * @param amount to interpolate between 0 and 1. * @return coordinate of the point on the curve. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 85; * let x2 = 10; * let x3 = 90; * let x4 = 15; * let y1 = 20; * let y2 = 10; * let y3 = 90; * let y4 = 80; * * // Style the curve. * noFill(); * * // Draw the curve. * bezier(x1, y1, x2, y2, x3, y3, x4, y4); * * // Draw circles along the curve's path. * fill(255); * * // Top-right. * let x = bezierPoint(x1, x2, x3, x4, 0); * let y = bezierPoint(y1, y2, y3, y4, 0); * circle(x, y, 5); * * // Center. * x = bezierPoint(x1, x2, x3, x4, 0.5); * y = bezierPoint(y1, y2, y3, y4, 0.5); * circle(x, y, 5); * * // Bottom-left. * x = bezierPoint(x1, x2, x3, x4, 1); * y = bezierPoint(y1, y2, y3, y4, 1); * circle(x, y, 5); * * describe('A black s-curve on a gray square. The endpoints and center of the curve are marked with white circles.'); * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100); * * describe('A black s-curve on a gray square. A white circle moves back and forth along the curve.'); * } * * function draw() { * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 85; * let x2 = 10; * let x3 = 90; * let x4 = 15; * let y1 = 20; * let y2 = 10; * let y3 = 90; * let y4 = 80; * * // Draw the curve. * noFill(); * bezier(x1, y1, x2, y2, x3, y3, x4, y4); * * // Calculate the circle's coordinates. * let t = 0.5 * sin(frameCount * 0.01) + 0.5; * let x = bezierPoint(x1, x2, x3, x4, t); * let y = bezierPoint(y1, y2, y3, y4, t); * * // Draw the circle. * fill(255); * circle(x, y, 5); * } * </code> * </div> */ function bezierPoint(a: number, b: number, c: number, d: number, t: number): number; /** * Calculates coordinates along a line that's tangent to a Bézier curve.Tangent lines skim the surface of a curve. A tangent line's slope equals * the curve's slope at the point where it intersects.`bezierTangent()` calculates coordinates along a tangent line using the * Bézier curve's anchor and control points. It expects points in the same * order as the bezier() function. `bezierTangent()` * works one axis at a time. Passing the anchor and control points' * x-coordinates will calculate the x-coordinate of a point on the tangent * line. Passing the anchor and control points' y-coordinates will calculate * the y-coordinate of a point on the tangent line.The first parameter, `a`, is the coordinate of the first anchor point.The second and third parameters, `b` and `c`, are the coordinates of the * control points.The fourth parameter, `d`, is the coordinate of the last anchor point.The fifth parameter, `t`, is the amount to interpolate along the curve. 0 * is the first anchor point, 1 is the second anchor point, and 0.5 is halfway * between them. * * @param coordinate of first anchor point. * @param coordinate of first control point. * @param coordinate of second control point. * @param coordinate of second anchor point. * @param amount to interpolate between 0 and 1. * @return coordinate of a point on the tangent line. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 85; * let x2 = 10; * let x3 = 90; * let x4 = 15; * let y1 = 20; * let y2 = 10; * let y3 = 90; * let y4 = 80; * * // Style the curve. * noFill(); * * // Draw the curve. * bezier(x1, y1, x2, y2, x3, y3, x4, y4); * * // Draw tangents along the curve's path. * fill(255); * * // Top-right circle. * stroke(0); * let x = bezierPoint(x1, x2, x3, x4, 0); * let y = bezierPoint(y1, y2, y3, y4, 0); * circle(x, y, 5); * * // Top-right tangent line. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * let tx = 0.1 * bezierTangent(x1, x2, x3, x4, 0); * let ty = 0.1 * bezierTangent(y1, y2, y3, y4, 0); * line(x + tx, y + ty, x - tx, y - ty); * * // Center circle. * stroke(0); * x = bezierPoint(x1, x2, x3, x4, 0.5); * y = bezierPoint(y1, y2, y3, y4, 0.5); * circle(x, y, 5); * * // Center tangent line. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * tx = 0.1 * bezierTangent(x1, x2, x3, x4, 0.5); * ty = 0.1 * bezierTangent(y1, y2, y3, y4, 0.5); * line(x + tx, y + ty, x - tx, y - ty); * * // Bottom-left circle. * stroke(0); * x = bezierPoint(x1, x2, x3, x4, 1); * y = bezierPoint(y1, y2, y3, y4, 1); * circle(x, y, 5); * * // Bottom-left tangent. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * tx = 0.1 * bezierTangent(x1, x2, x3, x4, 1); * ty = 0.1 * bezierTangent(y1, y2, y3, y4, 1); * line(x + tx, y + ty, x - tx, y - ty); * * describe( * 'A black s-curve on a gray square. The endpoints and center of the curve are marked with white circles. Red tangent lines extend from the white circles.' * ); * } * </code> * </div> */ function bezierTangent(a: number, b: number, c: number, d: number, t: number): number; /** * Draws a curve using a Catmull-Rom spline.Spline curves can form shapes and curves that slope gently. They’re like * cables that are attached to a set of points. Splines are defined by two * anchor points and two control points.The first two parameters, `x1` and `y1`, set the first control point. This * point isn’t drawn and can be thought of as the curve’s starting point.The next four parameters, `x2`, `y2`, `x3`, and `y3`, set the two anchor * points. The anchor points are the start and end points of the curve’s * visible segment.The seventh and eighth parameters, `x4` and `y4`, set the last control * point. This point isn’t drawn and can be thought of as the curve’s ending * point.Spline curves can also be drawn in 3D using WebGL mode. The 3D version of * `spline()` has twelve arguments because each point has x-, y-, and * z-coordinates. * * @param x-coordinate of the first control point. * @param y-coordinate of the first control point. * @param x-coordinate of the first anchor point. * @param y-coordinate of the first anchor point. * @param x-coordinate of the second anchor point. * @param y-coordinate of the second anchor point. * @param x-coordinate of the second control point. * @param y-coordinate of the second control point. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Draw a black spline curve. * noFill(); * strokeWeight(1); * stroke(0); * spline(5, 26, 73, 24, 73, 61, 15, 65); * * // Draw red spline curves from the anchor points to the control points. * stroke(255, 0, 0); * spline(5, 26, 5, 26, 73, 24, 73, 61); * spline(73, 24, 73, 61, 15, 65, 15, 65); * * // Draw the anchor points in black. * strokeWeight(5); * stroke(0); * point(73, 24); * point(73, 61); * * // Draw the control points in red. * stroke(255, 0, 0); * point(5, 26); * point(15, 65); * * describe( * 'A gray square with a curve drawn in three segments. The curve is a sideways U shape with red segments on top and bottom, and a black segment on the right. The endpoints of all the segments are marked with dots.' * ); * } * </code> * </div> * * <div> * <code> * let x1 = 5; * let y1 = 26; * let isChanging = false; * * function setup() { * createCanvas(100, 100); * * describe( * 'A gray square with a curve drawn in three segments. The curve is a sideways U shape with red segments on top and bottom, and a black segment on the right. The endpoints of all the segments are marked with dots.' * ); * } * * function draw() { * background(200); * * // Draw a black spline curve. * noFill(); * strokeWeight(1); * stroke(0); * spline(x1, y1, 73, 24, 73, 61, 15, 65); * * // Draw red spline curves from the anchor points to the control points. * stroke(255, 0, 0); * spline(x1, y1, x1, y1, 73, 24, 73, 61); * spline(73, 24, 73, 61, 15, 65, 15, 65); * * // Draw the anchor points in black. * strokeWeight(5); * stroke(0); * point(73, 24); * point(73, 61); * * // Draw the control points in red. * stroke(255, 0, 0); * point(x1, y1); * point(15, 65); * } * * // Start changing the first control point if the user clicks near it. * function mousePressed() { * if (dist(mouseX, mouseY, x1, y1) < 20) { * isChanging = true; * } * } * * // Stop changing the first control point when the user releases the mouse. * function mouseReleased() { * isChanging = false; * } * * // Update the first control point while the user drags the mouse. * function mouseDragged() { * if (isChanging === true) { * x1 = mouseX; * y1 = mouseY; * } * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100); * * background('skyblue'); * * // Draw the red balloon. * fill('red'); * spline(-150, 275, 50, 60, 50, 60, 250, 275); * * // Draw the balloon string. * line(50, 60, 50, 80); * * describe('A red balloon in a blue sky.'); * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100, WEBGL); * * describe('A red balloon in a blue sky.'); * } * * function draw() { * background('skyblue'); * * // Rotate around the y-axis. * rotateY(frameCount * 0.01); * * // Draw the red balloon. * fill('red'); * spline(-200, 225, 0, 0, 10, 0, 0, 10, 0, 200, 225, 0); * * // Draw the balloon string. * line(0, 10, 0, 0, 30, 0); * } * </code> * </div> */ function spline(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): void; /** * @param z-coordinate of the first control point. * @param z-coordinate of the first anchor point. * @param z-coordinate of the second anchor point. * @param z-coordinate of the second control point. */ function spline(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number, x3: number, y3: number, z3: number, x4: number, y4: number, z4: number): void; /** * Calculates coordinates along a spline curve using interpolation.`splinePoint()` calculates coordinates along a spline curve using the * anchor and control points. It expects points in the same order as the * spline() function. `splinePoint()` works one axis * at a time. Passing the anchor and control points' x-coordinates will * calculate the x-coordinate of a point on the curve. Passing the anchor and * control points' y-coordinates will calculate the y-coordinate of a point on * the curve.The first parameter, `a`, is the coordinate of the first control point.The second and third parameters, `b` and `c`, are the coordinates of the * anchor points.The fourth parameter, `d`, is the coordinate of the last control point.The fifth parameter, `t`, is the amount to interpolate along the curve. 0 * is the first anchor point, 1 is the second anchor point, and 0.5 is halfway * between them. * * @param coordinate of first anchor point. * @param coordinate of first control point. * @param coordinate of second control point. * @param coordinate of second anchor point. * @param amount to interpolate between 0 and 1. * @return coordinate of a point on the curve. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 5; * let y1 = 26; * let x2 = 73; * let y2 = 24; * let x3 = 73; * let y3 = 61; * let x4 = 15; * let y4 = 65; * * // Draw the curve. * noFill(); * spline(x1, y1, x2, y2, x3, y3, x4, y4); * * // Draw circles along the curve's path. * fill(255); * * // Top. * let x = splinePoint(x1, x2, x3, x4, 0); * let y = splinePoint(y1, y2, y3, y4, 0); * circle(x, y, 5); * * // Center. * x = splinePoint(x1, x2, x3, x4, 0.5); * y = splinePoint(y1, y2, y3, y4, 0.5); * circle(x, y, 5); * * // Bottom. * x = splinePoint(x1, x2, x3, x4, 1); * y = splinePoint(y1, y2, y3, y4, 1); * circle(x, y, 5); * * describe('A black curve on a gray square. The endpoints and center of the curve are marked with white circles.'); * } * </code> * </div> * * <div> * <code> * function setup() { * createCanvas(100, 100); * * describe('A black curve on a gray square. A white circle moves back and forth along the curve.'); * } * * function draw() { * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 5; * let y1 = 26; * let x2 = 73; * let y2 = 24; * let x3 = 73; * let y3 = 61; * let x4 = 15; * let y4 = 65; * * // Draw the curve. * noFill(); * spline(x1, y1, x2, y2, x3, y3, x4, y4); * * // Calculate the circle's coordinates. * let t = 0.5 * sin(frameCount * 0.01) + 0.5; * let x = splinePoint(x1, x2, x3, x4, t); * let y = splinePoint(y1, y2, y3, y4, t); * * // Draw the circle. * fill(255); * circle(x, y, 5); * } * </code> * </div> */ function splinePoint(a: number, b: number, c: number, d: number, t: number): number; /** * Calculates coordinates along a line that's tangent to a spline curve.Tangent lines skim the surface of a curve. A tangent line's slope equals * the curve's slope at the point where it intersects.`splineTangent()` calculates coordinates along a tangent line using the * spline curve's anchor and control points. It expects points in the same * order as the spline() function. `splineTangent()` * works one axis at a time. Passing the anchor and control points' * x-coordinates will calculate the x-coordinate of a point on the tangent * line. Passing the anchor and control points' y-coordinates will calculate * the y-coordinate of a point on the tangent line.The first parameter, `a`, is the coordinate of the first control point.The second and third parameters, `b` and `c`, are the coordinates of the * anchor points.The fourth parameter, `d`, is the coordinate of the last control point.The fifth parameter, `t`, is the amount to interpolate along the curve. 0 * is the first anchor point, 1 is the second anchor point, and 0.5 is halfway * between them. * * @param coordinate of first control point. * @param coordinate of first anchor point. * @param coordinate of second anchor point. * @param coordinate of second control point. * @param amount to interpolate between 0 and 1. * @return coordinate of a point on the tangent line. * @example <div> * <code> * function setup() { * createCanvas(100, 100); * * background(200); * * // Set the coordinates for the curve's anchor and control points. * let x1 = 5; * let y1 = 26; * let x2 = 73; * let y2 = 24; * let x3 = 73; * let y3 = 61; * let x4 = 15; * let y4 = 65; * * // Draw the curve. * noFill(); * spline(x1, y1, x2, y2, x3, y3, x4, y4); * * // Draw tangents along the curve's path. * fill(255); * * // Top circle. * stroke(0); * let x = splinePoint(x1, x2, x3, x4, 0); * let y = splinePoint(y1, y2, y3, y4, 0); * circle(x, y, 5); * * // Top tangent line. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * let tx = 0.2 * splineTangent(x1, x2, x3, x4, 0); * let ty = 0.2 * splineTangent(y1, y2, y3, y4, 0); * line(x + tx, y + ty, x - tx, y - ty); * * // Center circle. * stroke(0); * x = splinePoint(x1, x2, x3, x4, 0.5); * y = splinePoint(y1, y2, y3, y4, 0.5); * circle(x, y, 5); * * // Center tangent line. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * tx = 0.2 * splineTangent(x1, x2, x3, x4, 0.5); * ty = 0.2 * splineTangent(y1, y2, y3, y4, 0.5); * line(x + tx, y + ty, x - tx, y - ty); * * // Bottom circle. * stroke(0); * x = splinePoint(x1, x2, x3, x4, 1); * y = splinePoint(y1, y2, y3, y4, 1); * circle(x, y, 5); * * // Bottom tangent line. * // Scale the tangent point to draw a shorter line. * stroke(255, 0, 0); * tx = 0.2 * splineTangent(x1, x2, x3, x4, 1); * ty = 0.2 * splineTangent(y1, y2, y3, y4, 1); * line(x + tx, y + ty, x - tx, y - ty); * * describe( * 'A black curve on a gray square. A white circle moves back and forth along the curve.' * ); * } * </code> * </div> */ function splineTangent(a: number, b: number, c: number, d: number, t: number): number; } export default function curves(p5: any, fn: any): void;