diff --git a/.eslintrc b/.eslintrc index 64a6179ce3..06f30aada5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,6 +12,9 @@ "expect": true, "sinon": true }, + "parserOptions": { + "ecmaVersion": 2017 + }, "extends": ["eslint:recommended", "prettier"], "plugins": ["prettier"], "rules": { diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..28393e20bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,12 @@ +blank_issues_enabled: false + +contact_links: + - name: 🌸 p5.js Issues + url: https://github.com/processing/p5.js/issues + about: Report issues with the p5.js here. + - name: 🖥️ Web Editor Issues + url: https://github.com/processing/p5.js-web-editor/issues + about: Report issues with the p5.js web editor here. + - name: 💬 Forum + url: https://discourse.processing.org/c/p5js + about: Have other questions about using p5.js? Ask them here! \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/discussion.yml b/.github/ISSUE_TEMPLATE/discussion.yml new file mode 100644 index 0000000000..05f979a0ef --- /dev/null +++ b/.github/ISSUE_TEMPLATE/discussion.yml @@ -0,0 +1,10 @@ +name: 💭 Discussion +description: This template is for starting a discussion. +labels: [ Discussion ] +body: + - type: textarea + attributes: + label: Topic + description: What do you want to discuss with the group? + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000000..1c04f0342b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,36 @@ +name: 🌱 New Feature Request +description: Request a new feature be added. +labels: [ Feature Request ] +body: + - type: textarea + attributes: + label: Increasing Access + description: How would this new feature help [increase access](https://github.com/processing/p5.js/blob/main/contributor_docs/access.md) to p5.js? (If you're not sure, you can type "Unsure" here and let others from the community offer their thoughts.) + validations: + required: true + + - type: dropdown + attributes: + label: Most appropriate sub-area of p5.js? + options: + - Home + - Download + - Donate + - Get Started + - Reference + - Libraries + - Learn + - Teach + - Examples + - Books + - Community + - Showcase + - Other (specify if possible) + validations: + required: true + + - type: textarea + attributes: + label: Feature request details + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/found-a-bug.yml b/.github/ISSUE_TEMPLATE/found-a-bug.yml new file mode 100644 index 0000000000..c22a05d40a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/found-a-bug.yml @@ -0,0 +1,76 @@ +name: "🐛 Found a Bug" +description: Report p5.js website bugs (broken or incorrect behaviour). +labels: [ Bug ] +body: + - type: markdown + attributes: + value: | + - Please make sure to [search for existing issues](https://github.com/processing/p5.js-website/issues) before filing a new one! + - If the bug is related to **translation**, please report it in [Improve Translation](https://github.com/processing/p5.js-website/issues/new?assignees=&labels=translation&template=improve-translation.yml). + + - type: dropdown + attributes: + label: Most appropriate sections of the p5.js website? + options: + - Reference + - Examples + - Libraries + - Learn + - Teach + - Other (specify if possible) + validations: + required: true + + - type: dropdown + attributes: + label: What is your operating system? + options: + - Windows + - Mac OS + - Linux + - Android + - iOS + - Other (specify if possible) + validations: + required: false + + - type: input + attributes: + label: Web browser and version + description: | + In the address bar, on Chrome enter `chrome://version`, on Firefox enter `about:support`. On Safari, use `About Safari`. + validations: + required: false + + - type: textarea + attributes: + label: Actual Behavior + placeholder: What is currently happening. + validations: + required: true + + - type: textarea + attributes: + label: Expected Behavior + description: | + If you want to include screenshots, paste them into the markdown editor below. + placeholder: What were you expecting? + validations: + required: true + + - type: textarea + attributes: + label: Steps to reproduce + description: | + - Add steps to reproduce bugs or add information on the place where the feature should be implemented. + - Add links to a sample deployment or code. + validations: + required: true + + - type: input + attributes: + label: Would you like to work on the issue? + description: | + Please let us know if you can work on it or the issue should be assigned to someone else. + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/improve-translation.yml b/.github/ISSUE_TEMPLATE/improve-translation.yml new file mode 100644 index 0000000000..fe031e7d5a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/improve-translation.yml @@ -0,0 +1,33 @@ +name: "🌐 Improve Translation" +description: Make a suggestion or report a problem about the translation of p5.js website. +labels: [ Translation ] +body: + - type: markdown + attributes: + value: | + Please make sure to [search for existing issues](https://github.com/processing/p5.js-website/issues) before filing a new one! + + - type: input + attributes: + label: Language + description: | + Which language page is the problem? Or translate into a new language? + validations: + required: true + + - type: textarea + attributes: + label: What improvement are you suggesting? + description: | + - Please give as much detail as possible to help us understand the change. + - What is the expected outcome? + validations: + required: true + + - type: input + attributes: + label: Would you like to work on the issue? + description: | + Please let us know if you can work on it or the issue should be assigned to someone else. + validations: + required: true diff --git a/.github/issue_template.md b/.github/issue_template.md deleted file mode 100644 index ecd93e3f51..0000000000 --- a/.github/issue_template.md +++ /dev/null @@ -1,19 +0,0 @@ -**Actual Behaviour** - - - - **Expected Behaviour** - - - - **Steps to reproduce it** - - - - **Screenshots of the issue** - - - - **Would you like to work on the issue?** - - diff --git a/.github/workflows/update-documentation.yml b/.github/workflows/update-documentation.yml index 23be42e374..7eaa90d85a 100644 --- a/.github/workflows/update-documentation.yml +++ b/.github/workflows/update-documentation.yml @@ -29,6 +29,16 @@ jobs: run: | echo ::set-output name=VERSION::${P5JS_REF/refs\/tags\//} echo ::set-output name=SHA::${P5JS_SHA} + - name: Get latest p5.min.js build + uses: suisei-cn/actions-download-file@v1 + with: + url: https://github.com/processing/p5.js/releases/download/${{github.event.client_payload.ref}}/p5.min.js + target: src/assets/js/ + - name: Get latest p5.sound.min.js build + uses: suisei-cn/actions-download-file@v1 + with: + url: https://github.com/processing/p5.js/releases/download/${{github.event.client_payload.ref}}/p5.sound.min.js + target: src/assets/js/ - name: Commit changes uses: EndBug/add-and-commit@v4 with: diff --git a/.github/workflows/update-translation-files.yml b/.github/workflows/update-translation-files.yml index f01ef3967f..db86a0a7bd 100644 --- a/.github/workflows/update-translation-files.yml +++ b/.github/workflows/update-translation-files.yml @@ -20,9 +20,9 @@ jobs: node-version: 12.x - name: npm install run: npm install - - name: Update json files - run: | - npm run grunt update-json-i18n-files + # - name: Update json files + # run: | + # npm run grunt update-json-i18n-files - name: Update yaml files run: | npm run grunt update-yaml-i18n-files diff --git a/Gruntfile.js b/Gruntfile.js index e17104a143..3411683a84 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -11,7 +11,6 @@ const fs = require('fs').promises; const fse = require('fs-extra'); const git = require('simple-git'); const pkg = require('./package.json'); -const update_i18n = require('./updatei18nFiles.js'); const mozjpeg = require('imagemin-mozjpeg'); const pngquant = require('imagemin-pngquant'); @@ -116,7 +115,7 @@ module.exports = function(grunt) { }, { pattern: ':base', - replacement: function () { + replacement: function() { var check = this.basename.lastIndexOf(this.language.toLowerCase()); if (check > -1) { return this.basename.substring(0, check - 1); @@ -154,14 +153,17 @@ module.exports = function(grunt) { images: { options: { optimizationLevel: 2, - use: [mozjpeg({quality: 70}), pngquant()] //plugins for jpeg & png image compression + //plugins for jpeg & png image compression + use: [mozjpeg({ quality: 70 }), pngquant()] }, - files: [{ - expand: true, - cwd: '<%= config.src %>/assets/img', - src: ['**/*.{png,jpg,gif,svg,ico}'], - dest: '<%= config.dist %>/assets/img/' - }] + files: [ + { + expand: true, + cwd: '<%= config.src %>/assets/img', + src: ['**/*.{png,jpg,gif,svg,ico}'], + dest: '<%= config.dist %>/assets/img/' + } + ] } }, @@ -186,16 +188,18 @@ module.exports = function(grunt) { annotation: '<%= config.dist %>/assets/css/maps/' }, processors: [ - require('autoprefixer')({browsers: [ - 'Android 2.3', - 'Android >= 4', - 'Chrome >= 20', - 'Firefox >= 24', - 'Explorer >= 8', - 'iOS >= 6', - 'Opera >= 12', - 'Safari >= 6' - ]}), + require('autoprefixer')({ + browsers: [ + 'Android 2.3', + 'Android >= 4', + 'Chrome >= 20', + 'Firefox >= 24', + 'Explorer >= 8', + 'iOS >= 6', + 'Opera >= 12', + 'Safari >= 6' + ] + }), require('cssnano')() ] }, @@ -376,43 +380,22 @@ module.exports = function(grunt) { const version = require('./src/templates/pages/reference/data.json').project.version; - fs.readFile('./src/data/data.yml').then((str) => { - const data = yaml.safeLoad(str); - data.version = version; - - const dump = yaml.safeDump(data); + fs.readFile('./src/data/data.yml') + .then(str => { + const data = yaml.safeLoad(str); + data.version = version; - return fs.writeFile('./src/data/data.yml', dump); - }).then(() => { - done(); - }); - }); + const dump = yaml.safeDump(data); - // runs the updateJSON() function from update18nFiles.js - // is run by the update-translation-files workflow every time one of them is modified - grunt.registerTask('update-json-i18n-files', function() { - const JSONfiles_URL = 'src/data/reference/'; - const lang = pkg.languages.filter(v => v !== 'en'); - lang.forEach(langCode => { - update_i18n.updateJSON( - JSONfiles_URL + 'en.json', - JSONfiles_URL + langCode + '.json' - ); - }); + return fs.writeFile('./src/data/data.yml', dump); + }) + .then(() => { + done(); + }); }); - // runs the updateYAML() function from update18nFiles.js - // is run by the update-translation-files workflow every time one of them is modified - grunt.registerTask('update-yaml-i18n-files', function() { - const YAMLfiles_URL = 'src/data/'; - const lang = pkg.languages.filter(v => v !== 'en'); - lang.forEach(langCode => { - update_i18n.updateYAML( - YAMLfiles_URL + 'en.yml', - YAMLfiles_URL + langCode + '.yml' - ); - }); - }); + // Load modular tasks from the tasks folder + grunt.loadTasks('tasks'); grunt.loadNpmTasks('grunt-exec'); grunt.loadNpmTasks('grunt-assemble'); @@ -421,6 +404,12 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-requirejs'); grunt.loadNpmTasks('grunt-html'); + // i18n tracking task + grunt.registerTask('i18n', function() { + var done = this.async(); + require('./i18n.js')(done); + }); + grunt.registerTask('make_tmp_dir', function() { const tmp_path = 'tmp/p5.js'; fse.mkdirpSync(tmp_path); @@ -462,7 +451,8 @@ module.exports = function(grunt) { 'clone_p5js_repo', 'generate_dataJSON', 'move_dataJSON', - 'generate_enJSON' + 'generate_enJSON', + // 'json-to-fluent' ]); // multi-tasks: collections of other tasks @@ -484,12 +474,6 @@ module.exports = function(grunt) { 'postcss' ]); - // i18n tracking task - grunt.registerTask('i18n', function() { - var done = this.async(); - require('./i18n.js')(done); - }); - // runs tasks in order grunt.registerTask('build', [ 'update-version', @@ -497,6 +481,7 @@ module.exports = function(grunt) { 'clean', 'requirejs:yuidoc_theme', 'requirejs', + // 'fluent-to-json', 'copy', 'optimize', 'assemble', diff --git a/README.md b/README.md index ba1ea3301d..742ac6bc7e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://travis-ci.com/processing/p5.js-website.svg?branch=master)](https://travis-ci.com/processing/p5.js-website) +[![Test and Deploy Status](https://github.com/processing/p5.js-website/actions/workflows/deploy.yaml/badge.svg)](https://github.com/processing/p5.js-website/actions/workflows/deploy.yaml) # p5js website @@ -10,12 +10,45 @@ If you discover a bug or have an idea for a new feature you'd like to add, begin We recognize all types of contributions. This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Add yourself to the [p5.js repository readme](https://github.com/processing/p5.js/blob/main/README.md#contributors) by following the [instructions here](https://github.com/processing/p5.js/issues/2309)! +## Stewards +Stewards are contributors that are particularly involved, familiar, or responsive to certain areas of the project. Their role is to help provide context and guidance to others working on p5.js website. If you have a question about contributing to a particular area, you can tag the listed steward in an issue or pull request. They may also weigh in on feature requests and guide the overall direction of their area, with the input of the community. You can read more about the organization of the project at [contributor_docs/organization.md](https://github.com/processing/p5.js/blob/main/contributor_docs/organization.md). + +✨**Anyone interested can volunteer to be a steward!** ✨There are no specific requirements for expertise, just an interest in actively learning and participating. We can start with **1-3 stewards for each area**. If you’re familiar with one or more areas of p5.js website, please reply to [this issue](https://github.com/processing/p5.js-website/issues/1220) to volunteer as a steward! + +Once added, a steward's username will remain in the [stewards section of the readme](https://github.com/processing/p5.js-website#stewards) until they request to be removed. If a steward is unresponsive for an extended period of time, we may ping them to ask about their status. And you can always take a break as a steward and come back! + +### Website Steward(s) + +| Area | Steward(s) | +| ---------------------------- | -------------------------------------------------------- | +| Overall | [@Qianqianye](https://github.com/Qianqianye), [@limzykenneth](https://github.com/limzykenneth) | +| Reference | [@Divyansh013](https://github.com/Divyansh013) | +| Example | GSoC 2022: [@Malayvasa](https://github.com/Malayvasa) (Contributor), [@tyler-yin](https://github.com/tyler-yin)(Mentor); [@3ru](https://github.com/3ru) | +| Teach | GSoC 2022: [@Gracia-zhang](https://github.com/Gracia-zhang) (Contributor), [@yinhwa](https://github.com/yinhwa)(Mentor); [@SarveshLimaye](https://github.com/SarveshLimaye)| +| Showcase | GSoC 2022: [@anniezhengg](https://github.com/anniezhengg) (Contributor), [@raclim](https://github.com/raclim)(Mentor) | +| Learn | [@nickmcintyre](https://github.com/nickmcintyre) | +| Libraries | [@Qianqianye](https://github.com/Qianqianye) | +| Community/Books/Social Media | [@Qianqianye](https://github.com/Qianqianye) | +| Contributor Docs | SoD 2022: [@limzykenneth](https://github.com/limzykenneth) | +| Other suggested area? | | + +### Translation Steward(s) +| Language | Steward(s) | +| -------- | ------------------------- | +| Overall |[@Qianqianye](https://github.com/Qianqianye), [@limzykenneth](https://github.com/limzykenneth) | +| Spanish |[@Guirdo](https://github.com/Guirdo), [@Andreu-G](https://github.com/Andreu-G) | +| Chinese | [@unicar9](https://github.com/unicar9), [@Gracia-zhang](https://github.com/Gracia-zhang), [@pentalei](https://github.com/pentalei) | +| Korean | [@yinhwa](https://github.com/yinhwa), [@almchung](https://github.com/almchung), [@jhongover9000](https://github.com/jhongover9000), [@sssueing](https://github.com/sssueing), [@GeryGeryGery](https://github.com/GeryGeryGery), [@sosunnyproject](https://github.com/sosunnyproject) | +| Hindi | [@adarrssh](https://github.com/adarrssh), [@Divyansh013](https://github.com/Divyansh013), [@deepchauhan](https://github.com/deepchauhan), [@SarveshLimaye](https://github.com/SarveshLimaye)| + +Other Language Steward(s): +* Portuguese: [@raphaelavelar](https://github.com/raphaelavelar) ## Setup -0. Ensure Java is installed. Not installed? Head over to https://java.oracle.com +0. Ensure Java is installed. Not installed? Head over to [Java](https://www.oracle.com/java/technologies/downloads/) for installation. 1. Install [node.js](https://nodejs.org/en/download/). -2. [Clone this repository](https://help.github.com/articles/cloning-a-repository/). +2. Clone this repo by typing ```git clone https://github.com/processing/p5.js-website/``` in terminal. 3. Navigate to the `p5.js-website` directory in the terminal and type `npm install`. ## Running @@ -52,4 +85,9 @@ If you've contributed to this website (or any other part of the p5.js project), ## Externally hosted language versions * [https://p5js.jp](https://p5js.jp/) - 日本語 (Japanese), translated and hosted by [Katsuya Endoh](https://enkatsu.org/) +* [https://p5js-unofficial-french-translation.vercel.app](https://p5js-unofficial-french-translation.vercel.app) - French, translated and hosted by [LEMIBANDDEXARI](https://github.com/LEMIBANDDEXARI/p5js-unofficial-french-translation) + +Regarding website translation, we are rolling out new languages slowly to be absolutely sure that we can support the full translation and maintenance of each language. We want to avoid the situation where we have many languages and it's beyond our means to support. So for this reason, we are holding now with Spanish, Chinese, Korean, and Hindi and getting those fully complete before we take on others. + +We very much welcome translations that are hosted elsewhere. For example, https://p5js.jp/ - 日本語 (Japanese), translated and hosted by [Katsuya Endoh](https://enkatsu.org/). Please feel free to translate any of the website content and host it on an external blog or site. All of the website content is licensed under Creative Commons which makes it possible to reuse this content for non-commercial purposes if it is credited. We would be happy to share links and make connections so others can find and use this material. diff --git a/contributor_docs/Adding_examples.md b/contributor_docs/Adding_examples.md index b7428e0435..d9879d75a3 100644 --- a/contributor_docs/Adding_examples.md +++ b/contributor_docs/Adding_examples.md @@ -35,6 +35,7 @@ Examples help demonstrate different programming concepts and functionality of th /* * @name Your Example Name Here (This shows up on the examples page as well.) * @frame 710,400 (optional) + * @arialabel If there is a frame, add more context to its relation to the description and code for users interacting with your example with a screen reader. * @description Write a description of your example here. This gets displayed * on the page underneath your example. You can use

to add a line * break. Please limit lines to 80 columns (total characters) long. diff --git a/contributor_docs/i18n_contribution.md b/contributor_docs/i18n_contribution.md index ae3d329d6d..8e967255db 100644 --- a/contributor_docs/i18n_contribution.md +++ b/contributor_docs/i18n_contribution.md @@ -2,6 +2,8 @@ If you want to contribute with p5.js website translations, you are in the right place. The translation of the p5.js website to languages other than English is part of its internationalization - abbreviated [*i18n*](https://en.wikipedia.org/wiki/Internationalization_and_localization) - process. You can improve content that has been already translated - the reference, examples or other pages within the website - or start a new language translation. +Regarding website translation, we are rolling out new languages slowly to be absolutely sure that we can support the full translation and maintenance of each language. We want to avoid the situation where we have many languages and it's beyond our means to support. So for this reason, we are holding now with the translations we already have on our website (Spanish, Chinese, Korean, and Hindi) and getting those fully completed and updated before we take on others. If we begin with the language you’ve proposed, we will certainly be in touch. However, we very much welcome translations that are hosted elsewhere. Please feel free to translate any of the website content and host it on an external blog or site. All of the website content is licensed under Creative Commons which makes it possible to reuse this content for non-commercial purposes if it is credited. We would be happy to share links and make connections so others can find and use this material. + ## Table of Contents * [How the website works](#how-the-website-works) diff --git a/dist/git-pull.php b/dist/git-pull.php index e9356e6d7b..72f45af97d 100644 --- a/dist/git-pull.php +++ b/dist/git-pull.php @@ -1,5 +1,5 @@ \ No newline at end of file +echo system('git pull https://github.com/processing/p5.js-website.git gh-pages'); +?> diff --git a/getenJSON.js b/getenJSON.js index 3fa92ad9c7..5eeeebaeb7 100644 --- a/getenJSON.js +++ b/getenJSON.js @@ -14,7 +14,7 @@ function getenJSON() { // static strings for (var sstr in staticStringsJSON) { - enJSON[sstr] = staticStringsJSON[sstr]; + enJSON[sstr] = staticStringsJSON[sstr].trim(); } // modules @@ -61,7 +61,7 @@ function buildClassObj(p5Class) { } if (p5Class.return) { - classObj['returns'] = buildReturnObj(p5Class.return); + classObj['returns'] = buildReturnObj(p5Class.return).trim(); } if (p5Class.params) { @@ -77,7 +77,7 @@ function buildItemObj(p5Item) { itemObj['description'] = getParagraphs(p5Item.description); } if (p5Item.return) { - itemObj['returns'] = buildReturnObj(p5Item.return); + itemObj['returns'] = buildReturnObj(p5Item.return).trim(); } if (p5Item.itemtype === 'method') { @@ -135,7 +135,8 @@ function getText(str) { return str .trim() .replace(/

|<\/p>|
/g, '') - .replace(/\n|\s+/g, ' '); + .replace(/\n|\s+/g, ' ') + .trim(); } // returns an array containing the 'clean' versions of the text in the

tags of the input text @@ -145,7 +146,8 @@ function getParagraphs(text) { .replace(/<\/p>|
/g, '') .replace(/\n|\s+/g, ' ') .split(/

/) - .filter(x => x.length > 0); + .filter(x => x.length > 0) + .map(x => x.trim()); } module.exports = getenJSON; diff --git a/i18n-tracking.yml b/i18n-tracking.yml index 86e83d4d60..4392b987f3 100644 --- a/i18n-tracking.yml +++ b/i18n-tracking.yml @@ -1,118 +1,93 @@ es: src/data/en.yml: - line 1517: ' Woman speaks at a podium in an auditorium while three participants sit on' - line 1527: ' , advancing the code, documentation, and community outreach tools and' - line 1528: ' exploring the current landscape of the p5.js programming environment.' - line 1537: ' output1' - line 1545: ' , testing early implementations of softCompile, OSC interfacing and added' - line 1546: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' - line 1547: ' environment! Created by Ted Davis.' - line 1548: ' output4' - line 1549: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' - line 1550: ' with shawné michaelain holloway and LaJuné McMillian.' - line 1551: ' output5' - line 1552: ' output6' - line 1553: ' output6-1' - line 1554: ' output6-2' - line 1555: ' output7' - line 1556: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' - line 1557: ' Jon Chambers.' - line 1558: ' output8' - line 1559: ' output8-1' - line 1560: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' - line 1561: ' Ye, Dorothy R. Santos, and Yasheng She.' - line 1562: ' output9' - line 1563: ' output9-1' - line 1564: ' output10' - line 1565: ' An overhaul of the p5.js website for accessibility. Including updates for' - line 1566: ' screen reader accessibility, and improvements to the home, download, getting' - line 1567: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' - line 1568: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' - line 1569: ' McCarthy, and Evelyn Masso.' - line 1570: ' output11' - line 1571: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' - line 1572: ' Sona Lee, Ted Davis, and Carlos Garcia.' - line 1573: ' output12' - line 1574: ' output13' - line 1575: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' - line 1576: ' Tarakajian and Luca Damasco.' - line 1577: ' output14' - line 1578: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' - line 1579: ' Lauren Valley.' - line 1580: ' output15' - line 1581: ' 2019cc_1' - line 1582: ' 2019cc_2' - line 1583: ' 2019cc_3' - line 1584: ' 2019cc_4' - line 1585: ' 2019cc_5' - line 1586: ' 2019cc_6' - line 1587: ' 2019cc_7' - line 1588: ' 2019cc_8' - line 1589: ' 2019cc_9' - line 1590: ' Participant speaks at a podium in front of projected text about the problem' - line 1591: ' with anonymyzing data' - line 1592: ' 2019cc_10' - line 1593: ' Person with a microphone speaking to fellow participants in front of text' - line 1594: ' that reads p5.js will not add any new features except those that increase' - line 1595: ' access' - line 1596: ' 2019cc_11' - line 1597: ' 2019cc_12' - line 1598: ' 2019cc_13' - line 1599: ' 2019cc_14' - line 1600: ' 2019cc_15' - line 1601: ' Woman with microphone speaking to fellow participants with the text sacred' - line 1602: ' boundaries in the projection behind her' - line 1603: ' 2019cc_16' - line 1604: ' Overhead view of participants listening to a panel of people with an image' - line 1605: ' of a 3d rendered man on it' - line 1606: ' 2019cc_17' - line 1607: ' Participants sit around a table with their laptops and observe code on a' - line 1608: ' screen' - line 1609: ' 2019cc_18' - line 1610: ' 2019cc_19' - line 1611: ' 2019cc_20' - line 1612: ' 2019cc_21' - line 1613: ' 2019cc_22' - line 1614: ' Participants sitting around a large U shaped table looking towards the front' - line 1615: ' of the classroom' - line 1616: ' 2019cc_23' - line 1617: ' Man sitting in front of the classroom speaking energetically into a' - line 1618: ' microphone' - line 1619: ' 2019cc_24' - line 1620: ' Group photo of participants smiling enthusiastically with their hands in the' - line 1621: ' air' - line 1622: ' 2019cc_25' - line 1123: ' p5.collide2D provides tools for calculating collision detection for 2D' - line 1124: ' geometry with p5.js.' - line 1125: ' p5.createloop' - line 1126: ' p5.dimensions' - line 1127: ' p5.dimensions extends p5.js'' vector functions to work in any number of' - line 1128: ' dimensions.' - line 1129: ' p5.EasyCam' - line 1130: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' - line 1131: ' contributions by Thomas Diewald.' - line 1132: ' p5.experience' - line 1133: ' Extensive library for p5.js that adds additional event-listening' - line 1134: ' functionality for creating canvas-based web applications.' - line 97: ' p1xh1' - line 96: ' start-creating' - line 114: ' acknowledge that not everyone has the time, financial means, or capacity to' - line 113: ' political opinion, age, skill level, occupation, and background. We' - line 115: ' actively participate, but we recognize and encourage involvement of all' - line 102: ' software, and the tools to learn it, should be accessible to everyone.' - line 103: ' p1x2' - line 104: ' Using the metaphor of a sketch, p5.js has a full set of drawing' - line 105: ' functionality. However, you’re not limited to your drawing canvas. You can' - line 256: ' you would like to use the minified version (compressed for faster page' - line 251: ' download9' - line 269: ' environment4' - line 265: ' environment1' - line 266: ' environmentlink' - line 267: ' environment2' - line 268: ' environment3' - line 275: ' environment8' - line 276: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' - line 277: ' that your html and js files are located in. On the left sidebar, you should' + line 883: ' p5.fab' + line 875: ' no setup required.' + line 871: ' p5.input' + line 872: ' ui' + line 873: ' p5.web-serial' + line 874: ' A p5.js library for using the Web Serial API to access devices like Arduino, ' + line 876: ' p5.wasm.core' + line 877: ' p5.videorecorder' + line 878: ' p5.mapper' + line 879: ' p5.mapper is a projection mapping library for p5.js. This library makes it ' + line 880: ' easy to code and keystone interactive, algorithmic sketches.' + line 881: ' p5.teach' + line 882: ' A beginner friendly math animation library for p5.js. Created with mentorship ' + line 85: ' under the terms of the ' + line 26: footer6 + line 25: footer2 + line 27: footer4 + line 31: footer8 + line 32: footer9 + line 28: footer5 + line 29: footer6 + line 30: footer7 + line 1174: ' The Summer 2021 Showcase' + line 288: ' to the index.html containing your p5.js sketch.' + line 297: ' file and the embed.html file for the sketch.' + line 306: ' be' + line 310: ' stylesheet)' + line 319: ' was ported to P5 by Kelly Chang. If you find any errors or have comments,' + line 330: ' background(255); // Setting the background to white' + line 331: ' stroke(0); // Setting the outline (stroke) to black' + line 332: ' fill(150); // Setting the interior of a shape (fill) to grey' + line 340: ' black. Also, remember not to eliminate both—with' + line 349: ' percentage). You can do this by specifying a custom' + line 358: ' want to use the' + line 363: ' and the bottom right corner). The mode here is' + line 374: ' Using p5.js, this book introduces and demonstrates the reflexive practice' + line 375: ' of aesthetic programming, engaging with learning to program as a way to' + line 376: ' understand and question existing technological objects and paradigms,' + line 385: ' p5.js work or your own to be featured here! If Google is not available in your region, please email chankati@usc.edu to submit!' + line 394: ' environments.' + line 398: ' better connect the p5.js learner and educator communities around the world.' + line 407: ' examples.' + line 415: ' links available in' + line 261: ' the' + line 270: ' particular topics. Check out the' + line 279: ' of the p5js site. The file called index.hbs is the' + line 442: ' .pdf format, all hosted publicly on GitHub.' + line 1536: ' teach-case2-image-alt' + line 1544: ' teach-case4-image-alt' + line 1552: ' teach-case6-image-alt' + line 1560: ' teach-case8-image-alt' + line 1568: ' teach-case9-image-alt' + line 1576: ' teach-case11-image-alt' + line 1584: ' teach-case12-image-alt' + line 1123: ' book-6-title' + line 1124: ' book-6-authors' + line 1125: ' book-6-publisher' + line 1126: ' book-6-pages' + line 1127: ' book-6-type' + line 1128: ' book-6-description' + line 1129: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' + line 1130: ' of aesthetic programming, engaging with learning to program as a way to ' + line 1131: ' understand and question existing technological objects and paradigms, ' + line 1132: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' + line 1133: ' book-6-order-a' + line 1134: ' book-6-order-b' + line 162: ' library in your html. To learn more visit ' + line 163: ' library in your html. To learn more visit ' + line 164: ' your-first-sketch7' + line 97: ' get-started-button' + line 96: ' get-started7' + line 114: ' environment15' + line 113: ' environment14' + line 115: ' environment16' + line 102: ' download8' + line 103: ' download9' + line 104: ' download10' + line 105: ' download11' + line 256: ' , the organization that supports p5.js.' + line 251: ' We need your help! p5.js is free, open-source software. We want to make our community as open' + line 269: ' Your donation supports software development for p5.js, education resources' + line 265: ' and inclusive as possible. You can support this work by making a donation to' + line 266: ' the ' + line 267: ' support-2' + line 268: ' , the organization that supports p5.js. We need your help!' + line 275: ' support-3' + line 276: ' support-4' + line 277: ' support-5' line 37: Editor line 55: footer5 line 123: ' p3xh2' @@ -121,7 +96,7 @@ es: line 128: ' p3xp5' line 59: tagline4 line 136: ' p4xp6' - line 243: ' get-started-button' + line 243: ' settingUp-title' line 62: tagline7 line 45: Books line 34: Language-Settings @@ -149,101 +124,90 @@ es: line 127: ' p3xp4' line 137: ' sketch_credits' line 138: ' sketch_info' - line 271: ' environment6' - line 272: ' If you are a screen reader user and not using the p5 web editor, you may' - line 273: ' want to use' - line 282: ' edit it.' - line 283: ' environment10' - line 284: ' environment11' - line 285: ' Open the index.html file in your browser by double clicking on it in your' - line 286: ' file manager or type' - line 287: ' environment12' - line 288: ' environment14' - line 289: ' environment15' - line 290: ' environment16' - line 291: ' environment13' - line 292: ' your-first-sketch-title' - line 293: ' your-first-sketch-intro1' - line 294: ' your-first-sketch-intro2' - line 295: ' your-first-sketch-intro3' - line 296: ' your-first-sketch-intro4' - line 297: ' your-first-sketch1' - line 298: ' your-first-sketch2' - line 299: ' your-first-sketch3' - line 300: ' your-first-sketch4' - line 301: ' The line you just added draws an ellipse, with its center 50 pixels over' - line 302: ' from the left and 50 pixels down from the top, with a width and height of 80' - line 303: ' pixels.' - line 304: ' your-first-sketch5' - line 305: ' your-first-sketch6' - line 306: ' If you are using a screen reader, you must turn on the accessible outputs in' - line 307: ' the p5 online editor, outside the editor you must add the accessibility' - line 308: ' library in your html. To learn more visit ' - line 309: ' your-first-sketch7' - line 310: ' your-first-sketch8' - line 311: ' If you''ve typed everything correctly, this will appear in the display' - line 312: ' window' - line 313: ' your-first-sketch9' - line 314: ' your-first-sketch10' - line 315: ' If nothing appears, the editor may be having trouble understanding what' - line 316: ' you’ve typed. If this happens, make sure that you''ve copied the example code' - line 317: ' exactly' - line 318: ' between each of them, the line should end with a semicolon, and ellipse has' - line 319: ' to be spelled correctly.' - line 320: ' your-first-sketch11' - line 321: ' One of the most difficult things about getting started with programming is' - line 322: ' that you have to be very specific about the syntax. The browser isn''t always' - line 323: ' smart enough to know what you mean, and can be quite fussy about the' - line 324: ' placement of punctuation. You''ll get used to it with a little practice. In' - line 325: ' the bottom left of the editor you will find the console section. Here, you' - line 326: ' can find messages from the editor with details about any errors it' - line 327: ' encounters.' - line 328: ' your-first-sketch12' - line 329: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' - line 330: ' last example to try this' - line 331: ' your-first-sketch13' - line 332: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' - line 333: ' and then starts drawing white circles at the position of the mouse. When a' - line 334: ' mouse button is pressed, the circle color changes to black. Run the code,' - line 335: ' move the mouse, and click to experience it.' - line 336: ' your-first-sketch14' - line 337: ' first-sketch-heading1' - line 338: ' first-sketch-heading2' - line 339: ' first-sketch-heading3' - line 340: ' what-next-title' - line 341: ' learn1' - line 342: ' learn2' - line 343: ' learn3' - line 344: ' learn4' - line 345: ' learn5' - line 346: ' learn6' - line 347: ' learn7' - line 348: ' learn8' - line 349: ' learn9' - line 350: ' learn10' - line 351: ' reference1' - line 352: ' reference2' - line 353: ' reference3' - line 354: ' learn11' - line 355: ' learn12' - line 356: ' processing-transition1' + line 271: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' + line 272: ' that your html and js files are located in. On the left sidebar, you should' + line 273: ' find the folder name at the top, with a list of the files contained in the' + line 282: ' environment12' + line 283: ' environment13' + line 284: ' your-first-sketch-title' + line 285: ' your-first-sketch-intro1' + line 286: ' your-first-sketch-intro2' + line 287: ' your-first-sketch-intro3' + line 289: ' your-first-sketch1' + line 290: ' your-first-sketch2' + line 291: ' your-first-sketch3' + line 292: ' your-first-sketch4' + line 293: ' The line you just added draws an ellipse, with its center 50 pixels over' + line 294: ' from the left and 50 pixels down from the top, with a width and height of 80' + line 295: ' pixels.' + line 296: ' your-first-sketch5' + line 298: ' If you are using a screen reader, you must turn on the accessible outputs in' + line 299: ' the p5 online editor, outside the editor you must add the accessibility' + line 300: ' library in your html. To learn more visit' + line 301: ' your-first-sketch7' + line 302: ' your-first-sketch8' + line 303: ' If you''ve typed everything correctly, this will appear in the display' + line 304: ' window' + line 305: ' your-first-sketch9' + line 307: ' If nothing appears, the editor may be having trouble understanding what' + line 308: ' you’ve typed. If this happens, make sure that you''ve copied the example code' + line 309: ' exactly' + line 311: ' to be spelled correctly.' + line 312: ' your-first-sketch11' + line 313: ' One of the most difficult things about getting started with programming is' + line 314: ' that you have to be very specific about the syntax. The browser isn''t always' + line 315: ' smart enough to know what you mean, and can be quite fussy about the' + line 316: ' placement of punctuation. You''ll get used to it with a little practice. In' + line 317: ' the bottom left of the editor you will find the console section. Here, you' + line 318: ' can find messages from the editor with details about any errors it' + line 320: ' your-first-sketch12' + line 321: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' + line 322: ' last example to try this' + line 323: ' your-first-sketch13' + line 324: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' + line 325: ' and then starts drawing white circles at the position of the mouse. When a' + line 326: ' mouse button is pressed, the circle color changes to black. Run the code,' + line 327: ' move the mouse, and click to experience it.' + line 328: ' your-first-sketch14' + line 329: ' first-sketch-heading1' + line 333: ' learn1' + line 334: ' learn2' + line 335: ' learn3' + line 336: ' learn4' + line 337: ' learn5' + line 338: ' learn6' + line 339: ' learn7' + line 341: ' learn9' + line 342: ' learn10' + line 343: ' reference1' + line 344: ' reference2' + line 345: ' reference3' + line 346: ' learn11' + line 347: ' learn12' + line 348: ' processing-transition1' + line 350: ' processing-transition3' + line 351: ' processing-transition4' + line 352: ' book1' + line 353: ' Parts of this tutorial were adapted from the book, Getting Started with' + line 354: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' + line 355: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' + line 356: ' Contributors Conference.' line 44: Examples line 57: tagline2 line 146: ' copyright-title' line 231: ' get-started-title' line 240: ' . If you would like to work on the the desktop version of p5.js you can' - line 258: ' download5' - line 281: ' Click on your sketch.js file and it will open on the right where you can' + line 258: ' download7' + line 281: ' file manager or type' line 54: footer4 line 110: ' We are a community of, and in solidarity with, people from every gender' line 239: ' get-started6' - line 259: ' Alternatively, you can link to a p5.js file hosted online. All versions of' - line 274: ' environment7' - line 875: ' Make sure your embed.html file has the correct paths to the p5 libraries of' + line 259: ' environment-title' + line 274: ' folder directly below.' line 233: ' This page walks you through setting up a p5.js project and making your first' line 234: ' sketch.' - line 244: ' settingUp-title' - line 245: ' download-title' + line 244: ' download-title' + line 245: ' hosted-title' line 50: footerxh1 line 98: ' p1x1' line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making' @@ -254,1318 +218,16 @@ es: line 46: Community line 133: ' p4xp3' line 134: ' p4xp4' - line 357: ' processing-transition2' - line 358: ' processing-transition3' - line 359: ' processing-transition4' - line 360: ' book1' - line 361: ' Parts of this tutorial were adapted from the book, Getting Started with' - line 362: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' - line 363: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' - line 364: ' Contributors Conference.' - line 33: Skip-To-Content - line 47: Contribute - line 48: Forum - line 49: Showcase - line 51: footer1 - line 52: footer2 - line 53: footer3 - line 58: tagline3 - line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' - line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' - line 107: ' text, input, video, webcam, and sound.' - line 108: ' p2xh2' - line 130: ' p4xh2' - line 131: ' p4xp1' - line 132: ' p4xp2' - line 135: ' p4xp5' - line 147: ' copyright1' - line 149: ' under the terms of the' - line 150: ' copyright2' - line 151: ' copyright3' - line 152: ' copyright4' - line 232: ' get-started1' - line 235: ' get-started2' - line 236: ' get-started3' - line 237: ' get-started4' - line 238: ' get-started5' - line 241: ' scroll down to' - line 242: ' get-started7' - line 246: ' hosted-title' - line 247: ' download1' - line 248: ' download2' - line 249: ' download3' - line 250: ' download8' - line 252: ' download10' - line 253: ' download11' - line 254: ' download4' - line 255: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' - line 257: ' loading), change the link to p5.min.js.' - line 260: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' - line 261: ' of these versions in the' - line 262: ' download6' - line 263: ' download7' - line 264: ' environment-title' - line 270: ' environment5' - line 278: ' find the folder name at the top, with a list of the files contained in the' - line 279: ' folder directly below.' - line 280: ' environment9' - line 444: ' Download' - line 445: ' download-intro' - line 446: ' Welcome! While titled "Download" this page actually contains a collection of' - line 447: ' links to either download the library or begin working with it online. We''ve' - line 448: ' tried to order things to reflect what a beginner might want first, to' - line 449: ' resources that more experienced programmers may be looking for.' - line 450: ' editor-title' - line 451: ' p5.js-editor' - line 452: ' p5.js-editor-intro' - line 453: ' This link redirects you to the p5.js Editor online so you can begin using' - line 454: ' p5.js immediately.' - line 455: ' editor-includes' - line 456: ' complete-library-title' - line 457: ' complete-library-intro1' - line 458: ' This is a download containing the p5.js library file, the p5.sound addon,' - line 459: ' and an example project. It does not contain an editor. Visit' - line 460: ' complete-library-intro2' - line 461: ' complete-library-intro3' - line 462: ' p5.js-complete' - line 463: ' includes-1' - line 464: ' includes-2' - line 465: ' includes-3' - line 466: ' single-files-title' - line 467: ' single-files-intro' - line 468: ' These are downloads or links to the p5.js library file. No additional' - line 469: ' contents are included.' - line 470: ' single-file' - line 471: ' p5.js-uncompressed' - line 472: ' compressed' - line 473: ' link' - line 474: ' statically-hosted-file' - line 475: ' etc-title' - line 476: ' older-releases' - line 477: ' github-repository' - line 478: ' report-bugs' - line 479: ' supported-browsers' - line 480: ' support-title' - line 481: ' support-options' - line 482: ' support-1' - line 483: ' We need your help! p5.js is free, open-source software. We want to make our community as open' - line 484: ' and inclusive as possible. You can support this work by making a donation to' - line 485: ' the ' - line 486: ' support-2' - line 487: ' , the organization that supports p5.js.' - line 488: ' Your donation supports software development for p5.js, education resources' - line 489: ' like code examples and tutorials,' - line 490: ' support-3' - line 491: ' support-4' - line 492: ' support-5' - line 493: ' support-17' - line 494: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 495: ' Pittsburgh (Image credit' - line 496: ' support-18' - line 497: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' - line 498: ' workshops in London (Image credit' - line 499: ' support-19' - line 500: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' - line 501: ' Kira Simon-Kennedy)' - line 502: ' support-20' - line 503: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 504: ' (Image credit' - line 505: ' support-21' - line 506: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' - line 507: ' credit' - line 508: ' support-22' - line 509: ' support-23' - line 510: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 511: ' (Image credit' - line 512: ' support-24' - line 513: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' - line 514: ' workshop led by Taeyoon Choi (Image credit' - line 515: ' support-25' - line 516: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 517: ' Pittsburgh (Image credit' - line 518: ' support-26' - line 519: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' - line 520: ' International Center of Photography (Image credit' - line 521: ' Photography)' - line 522: ' support-27' - line 523: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' - line 524: ' Montoya-Moraga (Image credit' - line 525: ' support-28' - line 526: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' - line 527: ' led by Taeyoon Choi (Image credit' - line 528: ' support-29' - line 529: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' - line 530: ' Angeles (Image credit' - line 531: ' support-30' - line 532: ' support-31' - line 533: ' support-32' - line 534: ' support-33' - line 535: ' support-17-alt' - line 536: ' support-18-alt' - line 537: ' support-19-alt' - line 538: ' support-20-alt' - line 539: ' support-21-alt' - line 540: ' support-22-alt' - line 541: ' support-23-alt' - line 542: ' support-24-alt' - line 543: ' support-25-alt' - line 544: ' support-26-alt' - line 545: ' support-27-alt' - line 546: ' support-28-alt' - line 547: ' support-29-alt' - line 548: ' support-30-alt' - line 549: ' support-31-alt' - line 729: ' teach-title2' - line 730: ' learn1' - line 731: ' These tutorials provide more in-depth or step-by-step overviews of' - line 732: ' particular topics. Check out the ' - line 733: ' learn2' - line 734: ' learn3' - line 735: ' introduction-to-p5js-title' - line 736: ' hello-p5js-title' - line 737: ' hello-p5js' - line 738: ' This short video will introduce you to the library and what you can do with' - line 739: ' it.' - line 740: ' getting-started-title' - line 741: ' getting-started' - line 742: ' Welcome to p5.js!
This introduction covers the basics of setting up a' - line 743: ' p5.js project.' - line 744: ' p5js-overview-title' - line 745: ' p5js-overview' - line 746: ' p5js-processing-title' - line 747: ' p5js-processing' - line 748: ' The main differences between the two, and how to convert from one to the' - line 749: ' other.' - line 750: ' p5-screen-reader-title' - line 751: ' p5-screen-reader' - line 752: ' using-local-server-title' - line 753: ' using-local-server' - line 754: ' p5js-wiki-title' - line 755: ' p5js-wiki' - line 756: ' connecting-p5js-title' - line 757: ' creating-libraries-title' - line 758: ' creating-libraries' - line 759: ' nodejs-and-socketio-title' - line 760: ' nodejs-and-socketio' - line 761: ' programming-topics-title' - line 762: ' beyond-the-canvas-title' - line 763: ' beyond-the-canvas' - line 764: ' 3d-webgl-title' - line 765: ' 3d-webgl' - line 766: ' color-title' - line 767: ' color' - line 768: ' coordinate-system-and-shapes-title' - line 769: ' coordinate-system-and-shapes' - line 770: ' interactivity-title' - line 771: ' interactivity' - line 772: ' program-flow-title' - line 773: ' program-flow' - line 774: ' curves-title' - line 775: ' curves' - line 776: ' An introduction to the three types of curves in p5.js' - line 777: ' and Bézier curves.' - line 778: ' becoming-a-better-programmer-title' - line 779: ' debugging-title' - line 780: ' debugging' - line 781: ' optimizing-title' - line 782: ' optimizing' - line 783: ' A tutorial of tips and tricks for optimizing your code to make it run faster' - line 784: ' and smoother.' - line 785: ' test-driven-development-title' - line 786: ' test-driven-development' - line 787: ' Save yourself from agony on install day. What is unit testing and how to use' - line 788: ' it? By Andy Timmons.' - line 789: ' contributing-to-the-community-title' - line 790: ' development-title' - line 791: ' development' - line 792: ' looking-inside-title' - line 793: ' looking-inside' - line 794: ' A friendly intro to the file structure and tools for p5.js development, by' - line 795: ' Luisa Pereira.' - line 796: ' writing-tutorial-title' - line 797: ' writing-tutorial' - line 798: ' writing-a-tutorial-title' - line 799: ' writing-a-tutorial-author' - line 800: ' writing-a-tutorial-1' - line 801: ' We invite educators, contributors and general enthusiasts to contribute p5js' - line 802: ' tutorials. The p5js project makes creative coding and open source' - line 803: ' development more accessible to a diverse community and we are excited to' - line 804: ' publish tutorials on all aspects of the development process. Our learning' - line 805: ' materials so far include guides on learning p5, programming technique and' - line 806: ' how to contribute to an open source project.' - line 807: ' writing-a-tutorial-2' - line 808: ' We welcome new written tutorial contributions and this guide outlines the' - line 809: ' steps of how to propose, prepare and contribute.' - line 810: ' writing-a-tutorial-how-start-title' - line 811: ' writing-a-tutorial-how-start-1' - line 812: ' writing-a-tutorial-how-start-2' - line 813: ' writing-a-tutorial-how-start-3' - line 814: ' that outlines in progress tutorials. If your topic is listed as in progress,' - line 815: ' perhaps you can add to work being done and contribute to preparing existing' - line 816: ' work for publication so please reach out to us.' - line 817: ' writing-a-tutorial-how-start-4' - line 818: ' If your topic is not already covered and is not listed as in progress,' - line 819: ' please write a few sentences on what you propose to cover and email us this' - line 820: ' description at education@p5js.org.' - line 821: ' writing-a-tutorial-how-prepare-title' - line 822: ' writing-a-tutorial-how-prepare-1' - line 823: ' When your tutorial is ready for publication, please follow these steps to' - line 824: ' prepare your content for the p5js website.' - line 825: ' writing-a-tutorial-how-prepare-2' - line 826: ' writing-a-tutorial-how-prepare-3' - line 827: ' writing-a-tutorial-how-prepare-4' - line 828: ' writing-a-tutorial-how-prepare-5' - line 829: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' - line 830: ' of the p5js site. The file called index.hbs is the ' - line 831: ' writing-a-tutorial-how-prepare-6' - line 832: ' writing-a-tutorial-how-prepare-7' - line 833: ' writing-a-tutorial-how-prepare-8' - line 834: ' writing-a-tutorial-how-prepare-9' - line 835: ' tags on the page, with formatting defined by the <h1> and <h2>' - line 836: ' tags, the <p> paragraph tags as is done shown on the' - line 837: ' writing-a-tutorial-how-prepare-10' - line 838: ' writing-a-tutorial-how-prepare-11' - line 839: ' If your tutorial contains images, they are to be placed in the assets folder' - line 840: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' - line 841: ' shown below.' - line 842: ' writing-a-tutorial-how-prepare-12' - line 843: ' writing-a-tutorial-embedding-title' - line 844: ' writing-a-tutorial-embedding-1' - line 845: ' Using p5js means you can illustrate your tutorial with animated, interactive' - line 846: ' or editable code examples to demonstrate programming concepts. Your examples' - line 847: ' should be prepared as p5.js sketches and can be embedded into the tutorial' - line 848: ' in two ways.' - line 849: ' writing-a-tutorial-embedding-2' - line 850: ' writing-a-tutorial-embedding-3' - line 851: ' writing-a-tutorial-embedding-4' - line 852: ' writing-a-tutorial-embedding-5' - line 853: ' writing-a-tutorial-embedding-6' - line 854: ' writing-a-tutorial-embedding-7' - line 855: ' writing-a-tutorial-embedding-8' - line 856: ' writing-a-tutorial-embedding-9' - line 857: ' writing-a-tutorial-embedding-10' - line 858: ' If the example is to be animated and/or interactive but not editable. The' - line 859: ' p5.js sketch should be embedded into the page as an iframe as described' - line 860: ' below.' - line 861: ' writing-a-tutorial-iframe-title' - line 862: ' writing-a-tutorial-iframe-1' - line 863: ' An iframe is like creating a window through which you can explore another' - line 864: ' page, sandboxed from the rest of your page. In this case it will be a window' - line 865: ' to the index.html containing your p5.js sketch. ' - line 866: ' writing-a-tutorial-iframe-2' - line 867: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' - line 868: ' folder labelled with the name of your sketch as shown in the screenshot.' - line 869: ' This is where all the images and p5 sketches linked by iframe should be' - line 870: ' stored.' - line 871: ' writing-a-tutorial-iframe-3' - line 872: ' In the subfolders containing your p5 examples there should be a sketch.js' - line 873: ' file and the embed.html file for the sketch. ' - line 874: ' writing-a-tutorial-iframe-4' - line 876: ' the site. If your file structure is the same as above, the path to the p5.js' - line 877: ' library should be "../../../js/p5.min.js".' - line 878: ' writing-a-tutorial-iframe-5' - line 879: ' You can then embed the p5js index files as iframes in the .hbs file that' - line 880: ' contains your tutorial content. The embed code for the iframe would then' - line 881: ' be' - line 882: ' writing-a-tutorial-iframe-6' - line 883: ' Styling for the iframe (this could directly into the post or in a' - line 884: ' stylesheet)' - line 885: ' writing-a-tutorial-iframe-7' - line 886: ' writing-a-tutorial-iframe-8' - line 887: ' writing-a-tutorial-iframe-9' - line 888: ' One thing to note is that you need to manually set the size of the iframe,' - line 889: ' so it works best if things are a standard size.' - line 890: ' writing-a-tutorial-iframe-10' - line 891: ' Also note that the links to the p5.js library files do not happen from the' - line 892: ' .eps page with all the tutorial content. Instead they will be located in the' - line 893: ' html page that is rendering your sketch (in this case, called embed.html).' - line 894: ' writing-a-tutorial-iframe-11' - line 895: ' writing-a-tutorial-embed-iframe-12' - line 896: ' writing-a-tutorial-finishing-title' - line 897: ' writing-a-tutorial-finishing-1' - line 898: ' Once your have finished writing your tutorial and your content has been' - line 899: ' given the thumbs up. Fork the p5.js website repository, prepare your content' - line 900: ' as described above and then issue a pull request to the p5.js website' - line 901: ' repository so we can publish your contribution!' - line 902: ' writing-a-tutorial-finishing-2' - line 903: ' color-description1' - line 904: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' - line 905: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' - line 906: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' - line 907: ' color-description2' - line 908: ' color-p1x1' - line 909: ' In the digital world, when we want to talk about a color, precision is' - line 910: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' - line 911: ' Color, rather, is defined as a range of numbers. Let''s start with the' - line 912: ' simplest case' - line 913: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' - line 914: ' gray ranging from black to white.' - line 915: ' color-p2x1' - line 916: ' color-p2x2' - line 917: ' color-p2x3' - line 918: ' color-p2x4' - line 919: ' color-code1' - line 920: ' background(255); // Setting the background to white ' - line 921: ' stroke(0); // Setting the outline (stroke) to black ' - line 922: ' fill(150); // Setting the interior of a shape (fill) to grey ' - line 923: ' rect(50,50,75,100); // Drawing the rectangle' - line 924: ' color-p3x1' - line 925: ' color-p3x2' - line 926: ' color-p3x3' - line 927: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' - line 928: ' important to remember that 0 is not "nothing", but rather denotes the color' - line 929: ' black. Also, remember not to eliminate both—with ' - line 930: ' color-p3x4' - line 931: ' color-p3x5' - line 932: ' color-p4x1' - line 933: ' In addition, if we draw two shapes, p5.js will always use the most recently' - line 934: ' specified stroke and fill, reading the code from top to bottom.' - line 935: ' color-rgb-title' - line 936: ' color-rgb-p1x1' - line 937: ' Remember finger painting? By mixing three "primary" colors, any color could' - line 938: ' be generated. Swirling all colors together resulted in a muddy brown. The' - line 939: ' more paint you added, the darker it got. Digital colors are also constructed' - line 940: ' by mixing three primary colors, but it works differently from paint. First,' - line 941: ' the primaries are different' - line 942: ' with color on the screen, you are mixing light, not paint, so the mixing' - line 943: ' rules are different as well.' - line 944: ' color-rgb-li1' - line 945: ' color-rgb-li2' - line 946: ' color-rgb-li3' - line 947: ' color-rgb-li4' - line 948: ' color-rgb-li5' - line 949: ' color-rgb-p2x1' - line 950: ' This assumes that the colors are all as bright as possible, but of course,' - line 951: ' you have a range of color available, so some red plus some green plus some' - line 952: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' - line 953: ' While this may take some getting used to, the more you program and' - line 954: ' experiment with RGB color, the more it will become instinctive, much like' - line 955: ' swirling colors with your fingers. And of course you can''t say "Mix some red' - line 956: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' - line 957: ' the individual color elements are expressed as ranges from 0 (none of that' - line 958: ' color) to 255 (as much as possible), and they are listed in the order R, G,' - line 959: ' and B. You will get the hang of RGB color mixing through experimentation,' - line 960: ' but next we will cover some code using some common colors.' - line 961: ' color-transparency-title' - line 962: ' color-transparency-p1x1' - line 963: ' In addition to the red, green, and blue components of each color, there is' - line 964: ' an additional optional fourth component, referred to as the color''s "alpha".' - line 965: ' Alpha means transparency and is particularly useful when you want to draw' - line 966: ' elements that appear partially see-through on top of one another. The alpha' - line 967: ' values for an image are sometimes referred to collectively as the "alpha' - line 968: ' channel" of an image.' - line 969: ' color-transparency-p2x1' - line 970: ' It is important to realize that pixels are not literally transparent, this' - line 971: ' is simply a convenient illusion that is accomplished by blending colors.' - line 972: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' - line 973: ' one to a percentage of another, creating the optical perception of blending.' - line 974: ' (If you are interested in programming "rose-colored" glasses, this is where' - line 975: ' you would begin.)' - line 976: ' color-transparency-p3x1' - line 977: ' Alpha values also range from 0 to 255, with 0 being completely transparent' - line 978: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' - line 979: ' color-custom-ranges-title' - line 980: ' color-custom-ranges-p1x1' - line 981: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' - line 982: ' in p5.js, in fact, it allows us to think about color any way we like. For' - line 983: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' - line 984: ' percentage). You can do this by specifying a custom ' - line 985: ' color-custom-ranges-p2x1' - line 986: ' The above function says' - line 987: ' green, and blue. The range of RGB values will be from 0 to 100."' - line 988: ' color-custom-ranges-p3x1' - line 989: ' Although it is rarely convenient to do so, you can also have different' - line 990: ' ranges for each color component' - line 991: ' color-custom-ranges-p4x1' - line 992: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' - line 993: ' from 0 to 10, and alpha from 0 to 255."' - line 994: ' color-custom-ranges-p5x1' - line 995: ' Finally, while you will likely only need RGB color for all of your' - line 996: ' programming needs, you can also specify colors in the HSB (hue, saturation,' - line 997: ' and brightness) mode. Without getting into too much detail, HSB color works' - line 998: ' as follows' - line 999: ' color-custom-ranges-li1x1' - line 1000: ' color-custom-ranges-li1x2' - line 1001: ' color-custom-ranges-li2x1' - line 1002: ' color-custom-ranges-li2x2' - line 1003: ' color-custom-ranges-li3x1' - line 1004: ' color-custom-ranges-li3x2' - line 1005: ' color-custom-ranges-p6x1' - line 1006: ' color-custom-ranges-p6x2' - line 1007: ' coordinate-system-description1' - line 1008: ' coordinate-system-description2' - line 1009: ' coordinate-system-description3' - line 1010: ' coordinate-system-description4' - line 1011: ' coordinate-system-description5' - line 1012: ' coordinate-system-description-title' - line 1013: ' coordinate-system-description-p1x1' - line 1014: ' Before we begin programming with p5, we must first channel our eighth grade' - line 1015: ' selves, pull out a piece of graph paper, and draw a line. The shortest' - line 1016: ' distance between two points is a good old fashioned line, and this is where' - line 1017: ' we begin, with two points on that graph paper.' - line 1018: ' coordinate-system-description-p2x1' - line 1019: ' The above figure shows a line between point A (1,0) and point B (4,5). If' - line 1020: ' you wanted to direct a friend of yours to draw that same line, you would' - line 1021: ' give them a shout and say "draw a line from the point one-zero to the point' - line 1022: ' four-five, please." Well, for the moment, imagine your friend was a computer' - line 1023: ' and you wanted to instruct this digital pal to display that same line on its' - line 1024: ' screen. The same command applies (only this time you can skip the' - line 1025: ' pleasantries and you will be required to employ a precise formatting). Here,' - line 1026: ' the instruction will look like this' - line 1027: ' coordinate-system-description-p3x1' - line 1028: ' Even without having studied the syntax of writing code, the above statement' - line 1029: ' should make a fair amount of sense. We are providing a command (which we' - line 1030: ' will refer to as a "function") for the machine to follow entitled "line." In' - line 1031: ' addition, we are specifying some arguments for how that line should be' - line 1032: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' - line 1033: ' code as a sentence, the function is a verb and the arguments are the objects' - line 1034: ' of the sentence. The code sentence also ends with a semicolon instead of a' - line 1035: ' period.' - line 1036: ' coordinate-system-description-p4x1' - line 1037: ' The key here is to realize that the computer screen is nothing more than a' - line 1038: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' - line 1039: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' - line 1040: ' location of a point in space. And it is our job to specify what shapes and' - line 1041: ' colors should appear at these pixel coordinates.' - line 1042: ' coordinate-system-description-p5x1' - line 1043: ' Nevertheless, there is a catch here. The graph paper from eighth grade' - line 1044: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' - line 1045: ' pointing up and the x-axis pointing to the right (in the positive direction,' - line 1046: ' negative down and to the left). The coordinate system for pixels in a' - line 1047: ' computer window, however, is reversed along the y-axis. (0,0) can be found' - line 1048: ' at the top left with the positive direction to the right horizontally and' - line 1049: ' down vertically.' - line 1050: ' coordinate-system-simple-shapes-title' - line 1051: ' coordinate-system-simple-shapes-p1x1' - line 1052: ' The vast majority of p5 programming examples are visual in nature. These' - line 1053: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' - line 1054: ' begin by looking at four primitive shapes.' - line 1055: ' coordinate-system-simple-shapes-p2x1' - line 1056: ' For each shape, we will ask ourselves what information is required to' - line 1057: ' specify the location and size (and later color) of that shape and learn how' - line 1058: ' p5 expects to receive that information. In each of the diagrams below, we''ll' - line 1059: ' assume a window with a width of 100 pixels and height of 100 pixels.' - line 1060: ' coordinate-system-simple-shapes-p3x1' - line 1061: ' coordinate-system-simple-shapes-p3x2' - line 1062: ' coordinate-system-simple-shapes-p4x1' - line 1063: ' coordinate-system-simple-shapes-p4x2' - line 1064: ' coordinate-system-simple-shapes-p5x1' - line 1065: ' coordinate-system-simple-shapes-p5x2' - line 1066: ' , things become a bit more complicated. In p5, a rectangle is specified by' - line 1067: ' the coordinate for the top left corner of the rectangle, as well as its' - line 1068: ' width and height.' - line 1069: ' coordinate-system-simple-shapes-p6x1' - line 1070: ' A second way to draw a rectangle involves specifying the centerpoint, along' - line 1071: ' with width and height. If we prefer this method, we first indicate that we' - line 1072: ' want to use the ' - line 1073: ' coordinate-system-simple-shapes-p6x2' - line 1074: ' coordinate-system-simple-shapes-p7x1' - line 1075: ' Finally, we can also draw a rectangle with two points (the top left corner' - line 1076: ' and the bottom right corner). The mode here is ' - line 1077: ' coordinate-system-simple-shapes-p7x2' - line 1078: ' coordinate-system-simple-shapes-p8x1' - line 1079: ' coordinate-system-simple-shapes-p8x2' - line 1080: ' coordinate-system-simple-shapes-p8x3' - line 1081: ' coordinate-system-simple-shapes-p8x4' - line 1082: ' coordinate-system-simple-shapes-p8x5' - line 1083: ' coordinate-system-simple-shapes-p8x6' - line 1084: ' coordinate-system-simple-shapes-p9x1' - line 1085: ' Now let''s look at what some code with shapes in more complete form, with' - line 1086: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' - line 1087: ' to specify the width and height of the canvas.' - line 1088: ' teach-desc' - line 1089: test-tutorial - line 1147: ' p5.localmessage provides a simple interface to send messages locally from' - line 1148: ' one sketch to another for easy multi-window sketching!' - line 1149: ' marching' - line 1150: ' mappa' - line 1151: ' Mappa provides a set of tools for working with static maps, tile maps, and' - line 1152: ' geo-data. Useful when building geolocation-based visual representations.' - line 1153: ' ml5.js' - line 1154: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' - line 1155: ' learning algorithms and models in the browser.' - line 1156: ' p5.play' - line 1157: ' p5.play provides sprites, animations, input and collision functions for' - line 1158: ' games and gamelike applications.' - line 1159: ' p5.particle' - line 1160: ' The Particle and Fountain objects can be used to create data-driven effects' - line 1161: ' that are defined through user structures or JSON input and user-draw' - line 1162: ' functions.' - line 1163: ' p5.Riso' - line 1164: ' p5.Riso is a library for generating files suitable for Risograph printing.' - line 1165: ' It helps turn your sketches into multi-color prints.' - line 1166: ' rita.js' - line 1167: ' RiTa.js provides a set of natural language processing objects for generative' - line 1168: ' literature.' - line 1169: ' Rotating knobs' - line 1170: ' p5.scenemanager' - line 1171: ' p5.SceneManager helps you create sketches with multiple states / scenes.' - line 1172: ' Each scene is a like a sketch within the main sketch.' - line 1173: ' p5.screenPosition' - line 1174: ' p5.scribble' - line 1175: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' - line 1176: ' on a port of the original Processing library' - line 1177: ' p5.serial' - line 1178: ' p5.serial enables serial communication between devices that support serial' - line 1179: ' (RS-232) and p5 sketches running in the browser.' - line 1180: ' Shape5' - line 1181: ' Shape5 is a 2D primative library for elementary students who are learning to' - line 1182: ' code for the first time.' - line 1183: ' p5.shape.js' - line 1184: ' p5.speech' - line 1185: ' p5.speech provides simple, clear access to the Web Speech and Speech' - line 1186: ' Recognition APIs, allowing for the easy creation of sketches that can talk' - line 1187: ' and listen.' - line 1188: ' p5.start2d.js' - line 1189: ' p5.tiledmap' - line 1190: ' p5.tiledmap provides drawing and helper functions to include maps in your' - line 1191: ' sketches.' - line 1192: ' p5.touchgui' - line 1193: ' tramontana' - line 1194: ' Tramontana is a platform for easily use many devices (iOS, Android,' - line 1195: ' tramontana Board, ...) to create interactive environments, interactive' - line 1196: ' spaces or just prototype experiences at scale and in space.' - line 1197: ' vida' - line 1198: ' Vida is a simple library that adds camera (or video) based motion detection' - line 1199: ' and blob tracking functionality to p5js.' - line 1200: ' p5.voronoi' - line 1201: ' p5.voronoi provides a set of tools to draw and utilize voronoi diagrams in' - line 1202: ' your p5.js sketches.' - line 1203: ' p5.xr' - line 1204: ' p5.3D' - line 1205: ' using-a-library-title' - line 1206: ' using-a-library1' - line 1207: ' A p5.js library can be any JavaScript code that extends or adds to the p5.js' - line 1208: ' core functionality. There are two categories of libraries. Core libraries (' - line 1209: ' using-a-library3' - line 1210: ' ) are part of the p5.js distribution, while contributed libraries are' - line 1211: ' developed, owned, and maintained by members of the p5.js community.' - line 1212: ' using-a-library4' - line 1213: ' To include a library in your sketch, link it into your HTML file, after you' - line 1214: ' have linked in p5.js. An example HTML file might look like this' - line 1215: ' create-your-own-title' - line 1216: ' create-your-own1' - line 1217: ' create-your-own2' - line 1218: ' create-your-own3' - line 1219: ' create-your-own4' - line 1220: ' If you have created a library and would like to have it included on this' - line 1221: ' page, submit this form!' - line 1222: '>>>>>>> ded715d43dd9dd191404d8e380ba23112f647160' - line 1420: ' notes3' - line 1421: ' notes4' - line 1422: ' notes5' - line 1423: ' contribute-title' - line 1424: ' contribute1' - line 1425: ' Our community is always looking for enthusiasts to help in all different' - line 1426: ' ways.' - line 1427: ' develop-title' - line 1428: ' develop1' - line 1429: ' develop2' - line 1430: ' develop3' - line 1431: ' develop4' - line 1432: ' develop5' - line 1433: ' document-title' - line 1434: ' document1' - line 1435: ' document2' - line 1436: ' document3' - line 1437: ' document4' - line 1438: ' document5' - line 1439: ' teach-title' - line 1440: ' teach1' - line 1441: ' create-title' - line 1442: ' create1' - line 1443: ' create2' - line 1444: ' create3' - line 1445: ' donate-title' - line 1446: ' donate1' - line 1447: ' donate2' - line 1448: ' donate3' - line 1449: ' contributors-conference-title' - line 1450: ' contributors-conference1' - line 1451: ' While most work happens online, we also convene IRL. We''ve had two' - line 1452: ' contributors conferences held at the' - line 1453: ' contributors-conference2' - line 1454: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' - line 1455: ' developers, educators, and got together to advance the p5.js project.' - line 1456: ' participants-title' - line 1457: ' support-title' - line 1458: ' support1' - line 1459: ' support2' - line 1460: ' at Carnegie Mellon University, an academic laboratory for atypical,' - line 1461: ' anti-disciplinary, and inter-institutional research at the intersections of' - line 1462: ' arts, science, technology, and culture.' - line 1463: ' support3' - line 1464: ' support4' - line 1465: ' support5' - line 1466: ' support6' - line 1467: ' mailing-list-title' - line 1468: ' mailing-list-1' - line 1469: ' Enter your email address to receive occasional updates from the Processing' - line 1470: ' Foundation.' - line 1471: ' 2015contributors-conference-title' - line 1472: ' 2015contributors-conference-date' - line 1473: ' 2015contributors-conference1' - line 1474: ' 2015contributors-conference2' - line 1475: ' , advancing the code, documentation, and community outreach tools of the' - line 1476: ' p5.js programming environment. Participants came from as far away as Hong' - line 1477: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' - line 1478: ' professionals in the fields of creative technology, interaction design, and' - line 1479: ' new-media arts, but the group also included a half-dozen undergraduate and' - line 1480: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' - line 1481: ' 2015contributors-conference3' - line 1482: ' 2015contributors-conference-diversity-title' - line 1483: ' 2015contributors-conference-diversity1' - line 1484: ' Alongside technical development, one of the main focuses of this conference' - line 1485: ' was outreach, community, and diversity. The conference began with a panel' - line 1486: ' 2015contributors-conference-diversity2' - line 1487: ' Diversity' - line 1488: ' the Internet' - line 1489: ' 2015contributors-conference-diversity3' - line 1490: ' 2015contributors-conference-diversity4' - line 1491: ' 2015contributors-conference-diversity5' - line 1492: ' 2015contributors-conference-diversity6' - line 1493: ' 2015contributors-conference-diversity7' - line 1494: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' - line 1495: ' Mellon University. Speakers included' - line 1496: ' 2015contributors-conference-diversity8' - line 1497: ' 2015contributors-conference-diversity9' - line 1498: ' 2015cc_1' - line 1499: ' 2015cc_2' - line 1500: ' 2015cc_3' - line 1501: ' 2015cc_4' - line 1502: ' Woman expressively speaks into a microphone while two male collaborators' - line 1503: ' look on' - line 1504: ' 2015cc_5' - line 1505: ' 2015cc_6' - line 1506: ' 2015cc_7' - line 1507: ' Participants sit in a circle around a white board with sticky notes on it' - line 1508: ' while a female student speaks into a microphone' - line 1509: ' 2015cc_8' - line 1510: ' Participants sit around a table looking at each others laptops and compare' - line 1511: ' code' - line 1512: ' 2015cc_9' - line 1513: ' 2015cc_10' - line 1514: ' Woman speaking into a microphone about valuing different skill sets while a' - line 1515: ' group of participants with laptops look at her powerpoint in a classroom' - line 1516: ' 2015cc_11' - line 1518: ' the stage and another three are skyping in on the stage screen' - line 1519: ' 2015cc_12' - line 1520: ' 2015cc_13' - line 1521: ' 2015cc_14' - line 1522: ' 2015cc_15' - line 1523: ' 2019contributors-conference-title' - line 1524: ' 2019contributors-conference-date' - line 1525: ' 2019contributors-conference1' - line 1526: ' 2019contributors-conference2' - line 1529: ' Comprising a diverse range of participants within the fields of creative' - line 1530: ' technology, interaction design, and new media arts, the conference was aimed' - line 1531: ' at fostering dialogue through a multidisciplinary lens. Working groups' - line 1532: ' focused on several topic areas' - line 1533: ' Landscape of Creative Tech; and Internationalization.' - line 1534: ' 2019contributors-conference3' - line 1535: ' 2019contributors-conference4' - line 1536: ' outputs' - line 1538: ' . An implementation of highly flexible triangle, square, hexagon, and' - line 1539: ' octagon girds for p5.js. Created by Aren Davey.' - line 1540: ' output2' - line 1541: ' . A set of template files for building a multi-device, multiplayer game' - line 1542: ' where multiple clients can connect to a specified host page. Created by L05.' - line 1543: ' output3' - line 1544: ' output3-1' - line 1666: ' books-title' - line 1667: ' book-1-title' - line 1668: ' book-1-authors' - line 1712: ' book-4-order-b' - line 1713: ' book-5-title' - line 1714: ' book-5-authors' - line 1715: ' book-5-publisher' - line 1716: ' book-5-pages' - line 1717: ' book-5-type' - line 1718: ' book-5-description' - line 1719: ' Learn coding from scratch in a highly engaging and visual manner using the' - line 1720: ' vastly popular JavaScript with the programming library p5.js. The skills you' - line 1721: ' will acquire from this book are highly transferable to a myriad of' - line 1722: ' industries and can be used towards building web applications, programmable' - line 1723: ' robots, or generative art.' - line 1724: ' book-5-order-a' - line 1725: ' book-5-order-b' - line 1726: ' book-6-title' - line 1727: ' book-6-authors' - line 1728: ' book-6-publisher' - line 1729: ' book-6-pages' - line 1730: ' book-6-type' - line 1731: ' book-6-description' - line 1732: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' - line 1733: ' of aesthetic programming, engaging with learning to program as a way to ' - line 1734: ' understand and question existing technological objects and paradigms, ' - line 1735: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' - line 1736: ' book-6-order-a' - line 1737: ' book-6-order-b' - line 1766: ' Examples' - line 1767: ' back-examples' - line 1768: ' Structure' - line 1769: ' Form' - line 1770: ' Data' - line 1771: ' Arrays' - line 2005: ' creator-from-roni-cantor' - line 2006: ' project-links' - line 2007: ' project-links-text-1-roni-cantor' - line 2008: ' project-links-text-2-roni-cantor' - line 2009: ' project-q-1-1' - line 2010: ' project-q-1-2' - line 2011: ' project-a-1-1-roni-cantor' - line 2012: ' I just graduated from Ryerson University''s New Media program. Coming from 4' - line 2013: ' years of coding and making robots, I decided to take a break and play with' - line 2014: ' some more traditional forms of art—while still coding and playing with' - line 2015: ' robots.' - line 2016: ' project-a-1-2-roni-cantor' - line 2017: ' project-a-1-3-roni-cantor' - line 2018: ' project-a-1-4-roni-cantor' - line 2019: ' project-q-2' - line 2020: ' project-a-2-1-roni-cantor' - line 2021: ' I used p5.js in this project to generate the sine wave and lerp (linear' - line 2022: ' interpolation) formulas and display the visuals in the' - line 2023: ' project-a-2-2-roni-cantor' - line 2024: ' . I then used a feature in my code that exported my programmed graphic into' - line 2025: ' an' - line 2026: ' project-a-2-3-roni-cantor' - line 2027: ' project-a-2-4-roni-cantor' - line 2028: ' —so that it understood where to draw the lines that I programmed. I sent' - line 2029: ' this information to the plotter with a program called' - line 2030: ' project-a-2-5-roni-cantor' - line 2031: ' project-q-3' - line 2032: ' project-a-3-roni-cantor' - line 2033: ' project-q-4' - line 2034: ' Did you face any challenges working on this project? If so, how did you' - line 2035: ' overcome them?' - line 2036: ' project-a-4-roni-cantor' - line 2037: ' It was my first time using p5.js, Inkscape, and a plotter! I really' - line 2038: ' benefited from the people around me who had used p5 before, as well as' - line 2039: ' online guides and forums.' - line 2040: ' project-q-5' - line 2041: ' project-a-5-roni-cantor' - line 2042: ' project-q-6' - line 2043: ' project-a-6-roni-cantor' - line 2044: ' project-resources' - line 2045: ' creator-from-qianqian' - line 2046: ' interview-link-qianqian' - line 2047: ' project-a-1-1-qianqian' - line 2048: ' project-a-1-2-qianqian' - line 2049: ' My partner introduced me to p5.js, which I learned mainly by watching free' - line 2050: ' online video tutorials. My first p5.js project was drawing some shapes with' - line 2051: ' different colors.' - line 2052: ' project-a-2-1-qianqian' - line 2053: ' This project started with an idea of teaching my mom, who lives in China and' - line 2054: ' doesn’t speak English, to code with p5.js. This project was difficult on' - line 2055: ' multiple levels, and I wanted to start by identifying the main reasons why' - line 2056: ' it’s more challenging for someone like my mother to learn to code—primarily' - line 2057: ' due to the lack of free creative coding education resources. Most of the' - line 2058: ' free resources to learn creative coding are unavailable in China. The p5.js' - line 2059: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' - line 2060: ' inaccessible in China because of internet censorship.' - line 2061: ' project-a-2-2-qianqian' - line 2062: ' project-a-2-3-qianqian' - line 2063: ' , but the more I watched coding tutorials online, the more I realized how' - line 2064: ' difficult it is to find other womxn and people of color teaching coding,' - line 2065: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' - line 2066: ' creative coding.' - line 2067: ' project-a-2-4-qianqian' - line 2068: ' I am working on opening up the video channels to other Chinese creatives who' - line 2069: ' want to contribute to the educational resource together, like interviews and' - line 2070: ' guest tutorials. If you are interested in teaching/talking about creative' - line 2071: ' coding in Mandarin, HMU!' - line 2072: ' project-a-3-1-qianqian' - line 2073: ' project-a-3-2-qianqian' - line 2074: ' project-a-4-1-qianqian' - line 2075: ' Learning to code in a second language was difficult and the lack of' - line 2076: ' community made this process even harder. I hope to speak from my experience' - line 2077: ' as a beginner and someone who once felt like an outsider to the creative' - line 2078: ' coding and video tutorial world.' - line 2079: ' project-a-4-2-qianqian' - line 2080: ' I spend a lot of time researching the latest technology for my videos. In' - line 2081: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' - line 2082: ' encourage others that it doesn’t take a lot of expensive gears to get' - line 2083: ' started making instructional videos.' - line 2084: ' project-a-4-3-qianqian' - line 2085: ' Another issue I came across was my own fear of putting myself online. I' - line 2086: ' first had to get over my anxiety of making mistakes in the videos or' - line 2087: ' receiving negative comments online. Often womxn and people of color are' - line 2088: ' targets for online harassment. I’m hoping to help set an example for other' - line 2089: ' womxn and people of color that it’s ok to put yourselves online and' - line 2090: ' strengthen your communities by sharing your knowledge. Eventually, we will' - line 2091: ' be able to stop online harassment by creating strong diverse communities.' - line 2092: ' project-a-5-1-qianqian' - line 2093: ' project-a-5-2-qianqian' - line 2094: ' creator-from-phuong' - line 2095: ' project-a-1-1-phuong' - line 2096: ' link-1-phuong' - line 2097: ' link-2-phuong' - line 2098: ' link-3-phuong' - line 2099: ' project-a-1-2-phuong' - line 2100: ' project-a-1-3-phuong' - line 2101: ' I was taking a course at the School of Machines in Berlin this summer' - line 2102: ' called! "' - line 2103: ' project-a-1-4-phuong' - line 2104: ' project-a-2-1-phuong' - line 2105: ' I used p5.js to work on the visual part of the game. The animation sprites' - line 2106: ' for Airi and the ghosts were drawn on an iPad app called' - line 2107: ' project-a-2-2-phuong' - line 2108: ' project-a-2-3-phuong' - line 2109: ' project-a-2-4-phuong' - line 2110: ' p5-sketch-by-chjno-phuong' - line 2111: ' project-a-2-5-phuong' - line 2112: ' . I set a condition so whenever the word "pew" or a mouse click was' - line 2113: ' detected, the scrolling speed would change to make an illusion of Airi' - line 2114: ' flying up. When the user does not do anything, the scrolling speed is' - line 2115: ' negative, which makes it look like Airi is falling down.' - line 2116: ' project-a-2-6-phuong' - line 2117: ' project-a-2-7-phuong' - line 2118: ' project-a-3-1-phuong' - line 2119: ' I really love how easily you can create, manipulate, and delete HTML blocks' - line 2120: ' and classes with the' - line 2121: ' project-a-3-2-phuong' - line 2122: ' project-a-3-3-phuong' - line 2123: ' project-a-3-4-phuong' - line 2124: ' project-a-4-1-phuong' - line 2125: ' There were a lot of challenges simply because p5.js was something new to me.' - line 2126: ' I did not work much with JavaScript in general before. Reading documentation' - line 2127: ' and searching for similar examples helped a lot.' - line 2128: ' project-a-5-1-phuong' - line 2129: ' school-of-machines-phuong' - line 2130: ' project-a-5-2-phuong' - line 2131: ' ! They try hard to connect the most creative people in the world and they do' - line 2132: ' it well so far. ❤️' - line 2133: ' pronouns-male' - line 2134: ' creator-from-chung' - line 2135: ' link-1-casey-louise' - line 2136: ' link-2-casey-louise' - line 2137: ' link-1-chung' - line 2138: ' link-2-chung' - line 2139: ' link-3-chung' - line 2140: ' project-a-1-1-chung' - line 2141: ' I am a graphic designer and a faculty member at Maryland Institute College' - line 2142: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' - line 2143: ' and motion graphics.' - line 2144: ' project-a-1-2-chung' - line 2145: ' project-a-1-3-chung' - line 2146: ' project-a-2-1-chung' - line 2147: ' This summer, I gave myself a challenge of making typographic posters with' - line 2148: ' coding, and this is one of the posters I made. I didn’t know until very' - line 2149: ' recently that I could use motion sensor data with p5.js. I was also watching' - line 2150: ' dan-shiffman-matterjs-tutorial' - line 2151: ' project-a-2-2-chung' - line 2152: ' project-a-3-1-chung' - line 2153: ' There are many things I love about p5.js such as the online community and' - line 2154: ' beginner friendliness. What I really like right now is the' - line 2155: ' project-a-3-2-chung' - line 2156: ' , with which I can not only work online for myself but also share URLs' - line 2157: ' quickly in the present mode. For this project in particular, I had to do a' - line 2158: ' lot of testing on my phone, and it was much easier and quicker than' - line 2159: ' committing to GitHub.' - line 2160: ' project-a-4-1-chung' - line 2161: ' project-a-4-2-chung' - line 2162: ' project-a-4-3-chung' - line 2163: ' project-a-5-1-chung' - line 2164: ' As mentioned above, if you want to render out frames and video files out of' - line 2165: ' p5.js sketches, check out my' - line 2166: ' project-a-5-2-chung' - line 2167: ' creator-from-casey-louise' - line 2168: ' project-a-1-1-casey-louise' - line 2169: ' Casey' - line 2170: ' interactive spaces, physical and digital.' - line 2171: ' project-a-1-2-casey-louise' - line 2172: ' Louise' - line 2173: ' interactive spaces based on sensor technologies.' - line 2174: ' project-a-1-3-casey-louise' - line 2175: ' Casey' - line 2176: ' I had been dabbling in' - line 2177: ' project-a-1-4-casey-louise' - line 2178: ' project-a-1-5-casey-louise' - line 2179: ' Louise' - line 2180: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' - line 2181: ' me.' - line 2182: ' project-a-2-1-casey-louise' - line 2183: ' Casey' - line 2184: ' curious if I could use them in p5.js. Then I heard about a grant for open' - line 2185: ' source, storytelling, and learning resource projects at ITP called' - line 2186: ' project-a-2-2-casey-louise' - line 2187: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' - line 2188: ' decided to figure out how they''re implemented in p5.js and create a resource' - line 2189: ' for others to learn. When I told Louise about the project, she was' - line 2190: ' immediately excited about learning and teaching shaders in p5.js. She''s been' - line 2191: ' great about making sure the project is a learning resource and not just a' - line 2192: ' collection of examples.' - line 2193: ' project-a-3-1-casey-louise' - line 2194: ' project-a-3-2-casey-louise' - line 2195: ' project-a-3-3-casey-louise' - line 2196: ' project-a-3-4-casey-louise' - line 2197: ' project-a-3-5-casey-louise' - line 2198: ' project-a-4-1-casey-louise' - line 2199: ' Casey' - line 2200: ' reaching out to amazing people, asking questions, and asking for permission' - line 2201: ' to use their examples in our project.' - line 2202: ' adam-ferris-repo-casey-louise' - line 2203: ' project-a-4-2-casey-louise' - line 2204: ' project-a-4-3-casey-louise' - line 2205: ' project-a-4-4-casey-louise' - line 2206: ' webgl-casey-louise' - line 2207: ' project-a-4-5-casey-louise' - line 2208: ' project-a-4-6-casey-louise' - line 2209: ' Louise' - line 2210: ' Luckily, there were some very well-documented examples on GitHub by Adam' - line 2211: ' Ferriss. Our aim was to do so in a way that a complete beginner can' - line 2212: ' understand how to implement it, so it was as much a technical challenge as' - line 2213: ' it was a challenge in teaching code to strangers and beginners. Here we drew' - line 2214: ' inspiration from the way the' - line 2215: ' openframeworks-book-casey-louise' - line 2216: ' project-a-4-7-casey-louise' - line 2217: ' project-a-5-1-casey-louise' - line 2218: ' project-a-5-2-casey-louise' - line 2219: ' pronouns-nonbinary' - line 2220: ' creator-from-moon' - line 2221: ' posters-by' - line 2222: ' project-a-1-1-moon' - line 2223: ' Moon' - line 2224: ' summer, I taught a graphic design course in the University of Georgia' - line 2225: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' - line 2226: ' planning to teach and to study digital platforms at UGA.' - line 2227: ' project-a-1-2-moon' - line 2228: ' project-a-1-3-moon' - line 2229: ' project-a-1-4-moon' - line 2230: ' pcd-la-moon' - line 2231: ' project-a-1-5-moon' - line 2232: ' . They helped me with the tools and logics of p5.js. It was an excellent' - line 2233: ' teaching and learning experience.' - line 2234: ' project-a-2-1-moon' - line 2235: ' codetrain-moon' - line 2236: ' project-a-2-2-moon' - line 2237: ' p5-reference-moon' - line 2238: ' project-a-2-3-moon' - line 2239: ' project-a-3-1-moon' - line 2240: ' project-a-3-2-moon' - line 2241: ' project-a-3-3-moon' - line 2242: ' project-a-3-4-moon' - line 2243: ' . I was able to use and to teach this tool to visualize various ideas about' - line 2244: ' time in motion.' - line 2245: ' project-a-4-1-moon' - line 2246: ' It was challenging for me, a beginner, to understand the overall structure' - line 2247: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' - line 2248: ' couple of times, and then I drew a chart to memorize and to teach the way I' - line 2249: ' understood the p5.js structure and code with strong constraints I set up. It' - line 2250: ' was an excellent teaching and learning experience.' - line 2251: ' project-a-5-1-moon' - line 2252: ' project-a-5-2-moon' - line 2253: teach - line 2254: ' teach-title2' - line 2255: ' teach-intro1' - line 2256: ' Every teaching has its own unique goals, messages, conditions, and' - line 2257: ' environments. ' - line 2258: ' teach-intro2' - line 2259: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' - line 2260: ' better connect the p5.js learner and educator communities around the world. ' - line 2261: ' teach-intro3' - line 2262: ' teach-intro4' - line 2263: ' teach-heading' - line 2264: ' teach-search-filter' - line 2265: ' teach-filter1' - line 2266: ' teach-filter1-label1' - line 2267: ' teach-filter1-label2' - line 2268: ' teach-filter1-label3' - line 2269: ' teach-filter1-label4' - line 2270: ' teach-filter1-label5' - line 2271: ' teach-filter1-label6' - line 2272: ' teach-filter1-label7' - line 2273: ' teach-filter1-label8' - line 2274: ' teach-filter1-label9' - line 2275: ' teach-filter1-label10' - line 2276: ' teach-filter1-label11' - line 2277: ' teach-filter1-label12' - line 2278: ' teach-filter1-label13' - line 2279: ' teach-filter1-label14' - line 2280: ' teach-filter1-label15' - line 2281: ' teach-filter1-label16' - line 2282: ' teach-filter2' - line 2283: ' teach-filter2-label1' - line 2284: ' teach-filter2-label2' - line 2285: ' teach-filter2-label3' - line 2286: ' teach-filter2-label4' - line 2287: ' teach-filter2-label5' - line 2288: ' teach-filter2-label6' - line 2289: ' teach-filter2-label7' - line 2290: ' teach-filter3' - line 2291: ' teach-filter4' - line 2292: ' teach-filter4-label1' - line 2293: ' teach-filter4-label2' - line 2294: ' teach-filter4-label3' - line 2295: ' teach-case-subtitle1' - line 2296: ' teach-case-subtitle2' - line 2297: ' teach-case-subtitle3' - line 2298: ' teach-case-subtitle4' - line 2299: ' teach-case-subtitle5' - line 2300: ' teach-case1-title' - line 2301: ' teach-case1-lead-name' - line 2302: ' teach-case1-content1' - line 2303: ' teach-case1-content1-1' - line 2304: ' teach-case1-content2' - line 2305: ' teach-case1-content3' - line 2306: ' teach-case1-content4' - line 2307: ' To introduce a new public to programming through fun and compelling' - line 2308: ' examples. ' - line 2309: ' teach-case1-content5' - line 2310: ' Method' - line 2311: ' each times. The students were using (Ubuntu) machines with the p5.js web' - line 2312: ' editor. I was teaching using a video projector as well as a board.' - line 2313: ' teach-case1-content5-1' - line 2314: ' Materials' - line 2315: ' links available in ' - line 2316: ' teach-case2-title' - line 2317: ' Making The Thing that Makes the Thing' - line 2318: ' with p5.js' - line 2319: ' teach-case2-lead-name' - line 2320: ' teach-case2-content1' - line 2321: ' teach-case2-content1-1' - line 2322: ' teach-case2-content2' - line 2323: ' Our participants included art/design students & professionals, creative' - line 2324: ' coding enthusiasts. We had close to 50 participants.' - line 2325: ' teach-case2-content3' - line 2326: ' teach-case2-content4' - line 2327: ' To explore generative art & design and recreate some classical works' - line 2328: ' with p5.js. ' - line 2329: ' teach-case2-content5' - line 2330: ' teach-case2-content5-1' - line 2331: ' teach-case2-content5-2' - line 2332: ' teach-case2-content5-3' - line 2333: ' teach-case2-content5-4' - line 2334: ' teach-case2-content5-5' - line 2335: ' teach-case3-title' - line 2336: ' teach-case3-lead-name' - line 2337: ' teach-case3-speech' - line 2338: ' teach-case3-content1' - line 2339: ' teach-case3-content1-1' - line 2340: ' teach-case3-content2' - line 2341: ' Our participants included art/design students & professionals, creative' - line 2342: ' coding enthusiasts. We had close to 50 participants.' - line 2343: ' teach-case3-content3' - line 2344: ' teach-case3-content4' - line 2345: ' To build a teacher and student community around p5 for middle and high' - line 2346: ' school.' - line 2347: ' teach-case3-content5' - line 2348: ' A half-day of workshop led by volunteer teachers. We saw lots of different' - line 2349: ' methods and materials. Most used some sort of slides or documentation, some' - line 2350: ' live coding using an editor, with work time for participant to remix.' - line 2351: ' teach-case3-content5-1' - line 2352: ' teach-case3-content5-2' - line 2353: ' teach-case3-content5-3' - line 2354: ' teach-case4-title' - line 2355: ' teach-case4-lead-name' - line 2356: ' teach-case4-speech' - line 2357: ' teach-case4-content1' - line 2358: ' teach-case4-content1-1' - line 2359: ' teach-case4-content2' - line 2360: ' I had around 16 students in the workshop, and a team including 3 people from' - line 2361: ' the PlusCode festival, and one person at the venue.' - line 2362: ' teach-case4-content3' - line 2363: ' teach-case4-content4' - line 2364: ' Introduction to beginners and artists of graphic web programming and open' - line 2365: ' source, using p5.js, in Spanish ' - line 2366: ' teach-case4-content5' - line 2367: ' teach-case4-content5-1' - line 2368: ' teach-case4-content5-2' - line 2369: ' teach-case4-content5-3' - line 2370: ' teach-case4-content5-4' - line 2371: ' teach-case5-title' - line 2372: ' teach-case5-lead-name' - line 2373: ' teach-case5-speech' - line 2374: ' My greatest source of uncertainty in developing the workshop was whether it' - line 2375: ' was trying to teach art to programmers or to teach programming to artists.' - line 2376: ' teach-case5-content1' - line 2377: ' teach-case5-content1-1' - line 2378: ' teach-case5-content1-2' - line 2379: ' teach-case5-content1-3' - line 2380: ' teach-case5-content2' - line 2381: ' teach-case5-content3' - line 2382: ' teach-case5-content4' - line 2383: ' To introduce p5.js to artists with little or no programming experience and' - line 2384: ' to suggest one way an analogue practice can migrate to a digital form.' - line 2385: ' teach-case5-content5' - line 2386: ' A printed workbook with activities that used the p5.js web editor to show' - line 2387: ' how translate an physical drawing into a digital drawing.' - line 2388: ' teach-case5-content5-1' - line 2389: ' teach-case5-content5-2' - line 2390: ' teach-case5-content5-3' - line 2391: ' teach-case6-title' - line 2392: ' teach-case6-lead-name' - line 2393: ' teach-case6-speech' - line 2394: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' - line 2395: ' your everyday life!' - line 2396: ' teach-case6-content1' - line 2397: ' teach-case6-content1-1' - line 2398: ' teach-case6-content2' - line 2399: ' teach-case6-content3' - line 2400: ' teach-case6-content4' - line 2401: ' teach-case6-content5' - line 2402: ' teach-case6-content5-1' - line 2403: ' teach-case6-content5-2' - line 2404: ' teach-case6-content5-3' - line 2405: ' teach-case6-content5-4' - line 2406: ' teach-case6-content5-5' - line 2407: ' teach-case7-title' - line 2408: ' teach-case7-lead-name' - line 2409: ' teach-case7-speech' - line 2410: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' - line 2411: ' to give it a try!' - line 2412: ' teach-case7-content1' - line 2413: ' teach-case7-content1-1' - line 2414: ' teach-case7-content2' - line 2415: ' teach-case7-content3' - line 2416: ' teach-case7-content4' - line 2417: ' teach-case7-content5' - line 2418: ' teach-case7-content5-1' - line 2419: ' teach-case8-title' - line 2420: ' teach-case8-lead-name' - line 2421: ' teach-case8-content1' - line 2422: ' teach-case8-content1-1' - line 2423: ' teach-case8-content2' - line 2424: ' teach-case8-content3' - line 2425: ' teach-case8-content4' - line 2426: ' teach-case8-content5' - line 2427: ' teach-case8-content5-1' - line 2428: ' teach-case8-content5-2' - line 2429: ' teach-case9-title' - line 2430: ' teach-case9-lead-name' - line 2431: ' teach-case9-content1' - line 2432: ' teach-case9-content1-1' - line 2433: ' teach-case9-content2' - line 2434: ' Students at Interactive Telecommunications Program, New York University. 16' - line 2435: ' people.' - line 2436: ' teach-case9-content3' - line 2437: ' teach-case9-content4' - line 2438: ' The goal of this class is to learn and understand common machine learning' - line 2439: ' techniques and apply them to generate creative outputs in the browser using' - line 2440: ' ml5.js and p5.js.' - line 2441: ' teach-case9-content5' - line 2442: ' This class is a mix of lectures, coding sessions, group discussions, and' - line 2443: ' presentations. I used ' - line 2444: ' teach-case9-content5-1' - line 2445: ' teach-case9-content5-2' - line 2446: ' teach-case9-content5-3' - line 2447: ' teach-case10-title' - line 2448: ' teach-case10-lead-name' - line 2449: ' teach-case10-content1' - line 2450: ' teach-case10-content3' - line 2451: ' teach-case10-content4' - line 2452: ' Introduce learners (potentially with no coding experiences at all) to the' - line 2453: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' - line 2454: ' and enable them to pursue own projects in a safe environment.' - line 2455: ' teach-case10-content5' - line 2456: ' p5.js source code (for the introductory project), JavaScript source code' - line 2457: ' (illustrating some basic JavaScript functionalities), accompanying slides in' - line 2458: ' .pdf format, all hosted publicly on GitHub. ' - line 2459: ' teach-case10-content5-1' - line 2460: ' teach-case10-content5-2' - line 2461: ' teach-case11-title' - line 2462: ' teach-case11-lead-name' - line 2463: ' teach-case11-content1' - line 2464: ' teach-case11-content1-1' - line 2465: ' teach-case11-content2' - line 2466: ' teach-case11-content3' - line 2467: ' teach-case11-content4' - line 2468: ' Over the course of three workshops, we will draw and create patterns using' - line 2469: ' p5.js, an open-source graphical library; we will learn and apply' - line 2470: ' computational concepts to transform patterns and finally, we will bring a' - line 2471: ' weaving to life with electronic microcontrollers.' - line 2472: ' teach-case11-content5' - line 2473: ' teach-case11-content5-1' - line 2474: ' Materials' - line 2475: ' pattern weaving tool.' - line 2476: ' teach-case11-content5-2' - line 2477: ' teach-case11-content5-3' - line 2478: ' teach-case11-content5-4' - line 2479: ' teach-case11-content5-5' - line 2480: ' teach-case12-title' - line 2481: ' teach-case12-lead-name' - line 2482: ' teach-case12-speech' - line 2483: ' I''m working on a new series of coding class for Disabled students in South' - line 2484: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2485: ' workshops in December 2020. The project is supported by the Open Society' - line 2486: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2487: ' Center.' - line 2488: ' teach-case12-content1' - line 2489: ' teach-case12-content1-1' - line 2490: ' teach-case12-content2' - line 2491: ' teach-case12-content3' - line 2492: ' teach-case12-content4' - line 2493: ' To help Deaf and Hard of Hearing students learn about computer programming' - line 2494: ' through playful exercises. To make ASL tutorial of basic coding concepts.' - line 2495: ' teach-case12-content5' - line 2496: ' We used p5.js Web editor and code examples on the website. We also used' - line 2497: ' dice, playing cards and various paper tools to help students learn about' - line 2498: ' coding concepts.' - line 2499: ' teach-case12-content5-1' - line 2500: ' teach-case12-content5-2' - line 2501: ' teach-case13-title' - line 2502: ' teach-case13-lead-name' - line 2503: ' teach-case13-speech' - line 2504: ' I''m working on a new series of coding class for Disabled students in South' - line 2505: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2506: ' workshops in December 2020. The project is supported by the Open Society' - line 2507: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2508: ' Center.' - line 2509: ' teach-case13-content1' - line 2510: ' teach-case13-content1-1' - line 2511: ' teach-case13-content2' - line 2512: ' teach-case13-content3' - line 2513: ' teach-case13-content4' - line 2514: ' Get creatives, designers, artists and other people who don''t typically use code introduced to p5.js.' - line 2515: ' teach-case13-content5' - line 2516: ' Website, p5.js editor.' - line 2517: ' teach-case13-content5-1' - line 2540: ' teach-case14-title' - line 2541: ' teach-case14-lead-name' - line 2542: ' teach-case14-speech' - line 2543: ' The Smarter Home / 더 똑똑한 집 American Arts Incubator Workshop reimagines smart homes of the future.' - line 2544: ' teach-case14-content1' - line 2545: ' teach-case14-content1-1' - line 2546: ' teach-case14-content1-2' - line 2547: ' teach-case14-content2' - line 2548: ' teach-case14-content3' - line 2549: ' teach-case14-content4' - line 2550: ' To reimagine smart homes of the future, with such technologies as p5.js and ml5.js. Spending a lot of time talking about the increasing role technology is playing at home and in Korean society,' - line 2551: ' the workshop aimed to offer a vision of a smarter home driven by the participants'' critical optimism for the future. ' - line 2552: ' teach-case14-content5' - line 2553: ' p5.js, p5 web editor, ml5.js, and installations. ' - line 2554: ' teach-case14-content5-1' - line 2555: ' 1) We set out to prototype the concept of a “smarter home”, trying to bring technology into personal space on our own terms.' - line 2556: ' teach-case14-content5-2' - line 2557: ' 2) Breaking into four teams, each selected an issue to address through a room they would create within our larger home structure.' - line 1623: ' teach-case17-speech' - line 1624: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 1625: ' teach-case17-content1' - line 1626: ' teach-case17-content1-1' - line 1627: ' teach-case17-content2' - line 1628: ' teach-case17-content3' - line 1629: ' teach-case17-content4' - line 1630: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 1631: ' teach-case17-content5' - line 1632: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 1633: ' teach-case17-content5-1' - line 162: ' library in your html. To learn more visit ' - line 163: ' library in your html. To learn more visit ' - line 164: ' your-first-sketch7' line 141: ' project-a-2-5-phuong' line 144: ' project-a-2-7-phuong' line 64: ' color-p3x3' line 70: ' color-rgb-p1x1' line 87: ' color-custom-ranges-p2x1' line 24: footer1 - line 25: footer2 - line 26: footer3 - line 27: footer4 line 77: ' color-rgb-p2x1' line 82: ' color-transparency-p2x1' line 139: ' project-a-2-7-phuong' line 76: ' color-transparency-p1x1' - line 31: tagline7 line 63: ' hosted-title' line 75: ' download9' line 140: ' learn5' @@ -1575,6 +237,12 @@ es: line 159: ' processing-transition1' line 160: ' processing-transition2' line 161: ' processing-transition3' + line 357: ' link-2-chung' + line 359: ' project-a-1-1-chung' + line 360: ' project-a-1-2-chung' + line 361: ' project-a-1-3-chung' + line 362: ' project-a-2-1-chung' + line 364: ' project-a-2-2-chung' line 365: ' project-a-3-1-chung' line 366: ' project-a-3-2-chung' line 367: ' project-a-4-1-chung' @@ -1584,9 +252,6 @@ es: line 371: ' project-a-5-2-chung' line 372: '' line 373: ' creator-from-casey-louise' - line 374: ' project-a-1-1-casey-louise' - line 375: ' project-a-1-2-casey-louise' - line 376: ' project-a-1-3-casey-louise' line 377: ' project-a-1-4-casey-louise' line 378: ' project-a-1-5-casey-louise' line 379: ' project-a-2-1-casey-louise' @@ -1595,7 +260,6 @@ es: line 382: ' project-a-3-2-casey-louise' line 383: ' project-a-3-3-casey-louise' line 384: ' project-a-3-4-casey-louise' - line 385: ' project-a-3-5-casey-louise' line 386: ' project-a-4-1-casey-louise' line 387: ' adam-ferris-repo-casey-louise' line 388: ' project-a-4-2-casey-louise' @@ -1604,11 +268,9 @@ es: line 391: ' webgl-casey-louise' line 392: ' project-a-4-5-casey-louise' line 393: ' project-a-4-6-casey-louise' - line 394: ' openframeworks-book-casey-louise' line 395: ' project-a-4-7-casey-louise' line 396: ' project-a-5-1-casey-louise' line 397: ' project-a-5-2-casey-louise' - line 398: '' line 399: ' pronouns-nonbinary' line 400: ' creator-from-moon' line 401: ' posters-by' @@ -1617,7 +279,6 @@ es: line 404: ' project-a-1-3-moon' line 405: ' project-a-1-4-moon' line 406: ' pcd-la-moon' - line 407: ' project-a-1-5-moon' line 408: ' project-a-2-1-moon' line 409: ' codetrain-moon' line 410: ' project-a-2-2-moon' @@ -1625,7 +286,6 @@ es: line 412: ' project-a-2-3-moon' line 413: ' project-a-3-1-moon' line 414: ' project-a-3-2-moon' - line 415: ' project-a-3-3-moon' line 416: ' project-a-3-4-moon' line 417: ' project-a-4-1-moon' line 418: ' project-a-5-1-moon' @@ -1655,25 +315,594 @@ es: line 67: ' sketch_info' line 22: footer1 line 23: footer2 - line 32: ' download-intro' line 65: ' color-rgb-p1x1' line 72: ' color-rgb-p2x1' - line 85: ' color-custom-ranges-p4x1' - line 28: footer5 line 81: ' color-transparency-p1x1' line 90: ' color-custom-ranges-p4x1' line 153: ' project-a-4-7-casey-louise' + line 33: Skip-To-Content + line 47: Contribute + line 48: Forum + line 49: Showcase + line 51: footer1 + line 52: footer2 + line 53: footer3 + line 58: tagline3 + line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' + line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' + line 107: ' text, input, video, webcam, and sound.' + line 108: ' p2xh2' + line 130: ' p4xh2' + line 131: ' p4xp1' + line 132: ' p4xp2' + line 135: ' p4xp5' + line 147: ' copyright1' + line 149: ' under the terms of the' + line 150: ' copyright2' + line 151: ' copyright3' + line 152: ' copyright4' + line 232: ' get-started1' + line 235: ' get-started2' + line 236: ' get-started3' + line 237: ' get-started4' + line 238: ' get-started5' + line 241: ' scroll down to' + line 242: ' get-started7' + line 246: ' download1' + line 247: ' download2' + line 248: ' download3' + line 249: ' download4' + line 250: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' + line 252: ' loading), change the link to p5.min.js.' + line 253: ' download5' + line 254: ' Alternatively, you can link to a p5.js file hosted online. All versions of' + line 255: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' + line 257: ' download6' + line 260: ' environment1' + line 262: ' environment2' + line 263: ' environment3' + line 264: ' environment4' + line 278: ' environment10' + line 280: ' Open the index.html file in your browser by double clicking on it in your' line 436: ' Download' line 437: ' download-intro' line 438: ' Welcome! While titled "Download" this page actually contains a collection of' line 439: ' links to either download the library or begin working with it online. We''ve' line 440: ' tried to order things to reflect what a beginner might want first, to' line 441: ' resources that more experienced programmers may be looking for.' - line 442: ' editor-title' line 443: ' p5.js-editor' + line 444: ' p5.js-editor-intro' + line 445: ' This link redirects you to the p5.js Editor online so you can begin using' + line 446: ' p5.js immediately.' + line 447: ' editor-includes' + line 448: ' complete-library-title' + line 449: ' complete-library-intro1' + line 450: ' This is a download containing the p5.js library file, the p5.sound addon,' + line 451: ' and an example project. It does not contain an editor. Visit' + line 452: ' complete-library-intro2' + line 453: ' complete-library-intro3' + line 454: ' p5.js-complete' + line 455: ' includes-1' + line 456: ' includes-2' + line 457: ' includes-3' + line 458: ' single-files-title' + line 459: ' single-files-intro' + line 460: ' These are downloads or links to the p5.js library file. No additional' + line 461: ' contents are included.' + line 462: ' single-file' + line 463: ' p5.js-uncompressed' + line 464: ' compressed' + line 465: ' link' + line 466: ' statically-hosted-file' + line 467: ' etc-title' + line 468: ' older-releases' + line 469: ' github-repository' + line 470: ' report-bugs' + line 471: ' supported-browsers' + line 472: ' support-title' + line 473: ' support-options' + line 474: ' support-1' + line 475: ' p5.js is free, open-source software. We want to make our community as open' + line 476: ' and inclusive as possible. You can support this work by' + line 477: ' support-2' + line 478: ' support-3' + line 479: ' support-4' + line 480: ' support-5' + line 481: ' support-6' + line 482: ' support-7' + line 483: ' support-8' + line 484: ' support-9' + line 485: ' support-10' + line 486: ' support-11' + line 487: ' support-12' + line 488: ' Your membership supports software development (for p5.js, Processing,' + line 489: ' Processing.py, Processing for Android and ARM devices, education resources' + line 490: ' like code examples and tutorials,' + line 491: ' support-13' + line 492: ' support-14' + line 493: ' support-15' + line 494: ' support-16' + line 495: ' support-17' + line 496: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 497: ' Pittsburgh (Image credit' + line 498: ' support-18' + line 499: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' + line 500: ' workshops in London (Image credit' + line 501: ' support-19' + line 502: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' + line 503: ' Kira Simon-Kennedy)' + line 504: ' support-20' + line 505: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 506: ' (Image credit' + line 507: ' support-21' + line 508: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' + line 509: ' credit' + line 510: ' support-22' + line 511: ' support-23' + line 512: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 513: ' (Image credit' + line 514: ' support-24' + line 515: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' + line 516: ' workshop led by Taeyoon Choi (Image credit' + line 517: ' support-25' + line 518: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 519: ' Pittsburgh (Image credit' + line 520: ' support-26' + line 521: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' + line 522: ' International Center of Photography (Image credit' + line 523: ' Photography)' + line 524: ' support-27' + line 525: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' + line 526: ' Montoya-Moraga (Image credit' + line 527: ' support-28' + line 528: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' + line 529: ' led by Taeyoon Choi (Image credit' + line 530: ' support-29' + line 531: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' + line 532: ' Angeles (Image credit' + line 533: ' support-30' + line 534: ' support-31' + line 535: ' support-32' + line 536: ' support-33' + line 537: ' support-17-alt' + line 538: ' support-18-alt' + line 539: ' support-19-alt' + line 540: ' support-20-alt' + line 541: ' support-21-alt' + line 542: ' support-22-alt' + line 543: ' support-23-alt' + line 544: ' support-24-alt' + line 545: ' support-25-alt' + line 546: ' support-26-alt' + line 547: ' support-27-alt' + line 548: ' support-28-alt' + line 549: ' support-29-alt' line 550: ' support-30-alt' line 551: ' support-31-alt' + line 729: ' learn-title' + line 730: ' teach-title2' + line 731: ' learn1' + line 732: ' These tutorials provide more in-depth or step-by-step overviews of' + line 733: ' particular topics. Check out the ' + line 734: ' learn2' + line 735: ' learn3' + line 736: ' introduction-to-p5js-title' + line 737: ' hello-p5js-title' + line 738: ' hello-p5js' + line 739: ' This short video will introduce you to the library and what you can do with' + line 740: ' it.' + line 741: ' getting-started-title' + line 742: ' getting-started' + line 743: ' Welcome to p5.js!
This introduction covers the basics of setting up a' + line 744: ' p5.js project.' + line 745: ' p5js-overview-title' + line 746: ' p5js-overview' + line 747: ' p5js-processing-title' + line 748: ' p5js-processing' + line 749: ' The main differences between the two, and how to convert from one to the' + line 750: ' other.' + line 751: ' p5-screen-reader-title' + line 752: ' p5-screen-reader' + line 753: ' using-local-server-title' + line 754: ' using-local-server' + line 755: ' p5js-wiki-title' + line 756: ' p5js-wiki' + line 757: ' connecting-p5js-title' + line 758: ' creating-libraries-title' + line 759: ' creating-libraries' + line 760: ' nodejs-and-socketio-title' + line 761: ' nodejs-and-socketio' + line 762: ' programming-topics-title' + line 763: ' beyond-the-canvas-title' + line 764: ' beyond-the-canvas' + line 765: ' 3d-webgl-title' + line 766: ' 3d-webgl' + line 767: ' color-title' + line 768: ' color' + line 769: ' coordinate-system-and-shapes-title' + line 770: ' coordinate-system-and-shapes' + line 771: ' interactivity-title' + line 772: ' interactivity' + line 773: ' program-flow-title' + line 774: ' program-flow' + line 775: ' curves-title' + line 776: ' curves' + line 777: ' An introduction to the three types of curves in p5.js' + line 778: ' and Bézier curves.' + line 779: ' becoming-a-better-programmer-title' + line 780: ' debugging-title' + line 781: ' debugging' + line 782: ' optimizing-title' + line 783: ' optimizing' + line 784: ' A tutorial of tips and tricks for optimizing your code to make it run faster' + line 785: ' and smoother.' + line 786: ' test-driven-development-title' + line 787: ' test-driven-development' + line 788: ' Save yourself from agony on install day. What is unit testing and how to use' + line 789: ' it? By Andy Timmons.' + line 790: ' contributing-to-the-community-title' + line 791: ' development-title' + line 792: ' development' + line 793: ' looking-inside-title' + line 794: ' looking-inside' + line 795: ' A friendly intro to the file structure and tools for p5.js development, by' + line 796: ' Luisa Pereira.' + line 797: ' writing-tutorial-title' + line 798: ' writing-tutorial' + line 799: ' writing-a-tutorial-title' + line 800: ' writing-a-tutorial-author' + line 801: ' writing-a-tutorial-1' + line 802: ' We invite educators, contributors and general enthusiasts to contribute p5js' + line 803: ' tutorials. The p5js project makes creative coding and open source' + line 804: ' development more accessible to a diverse community and we are excited to' + line 805: ' publish tutorials on all aspects of the development process. Our learning' + line 806: ' materials so far include guides on learning p5, programming technique and' + line 807: ' how to contribute to an open source project.' + line 808: ' writing-a-tutorial-2' + line 809: ' We welcome new written tutorial contributions and this guide outlines the' + line 810: ' steps of how to propose, prepare and contribute.' + line 811: ' writing-a-tutorial-how-start-title' + line 812: ' writing-a-tutorial-how-start-1' + line 813: ' writing-a-tutorial-how-start-2' + line 814: ' writing-a-tutorial-how-start-3' + line 815: ' that outlines in progress tutorials. If your topic is listed as in progress,' + line 816: ' perhaps you can add to work being done and contribute to preparing existing' + line 817: ' work for publication so please reach out to us.' + line 818: ' writing-a-tutorial-how-start-4' + line 819: ' If your topic is not already covered and is not listed as in progress,' + line 820: ' please write a few sentences on what you propose to cover and email us this' + line 821: ' description at education@p5js.org.' + line 822: ' writing-a-tutorial-how-prepare-title' + line 823: ' writing-a-tutorial-how-prepare-1' + line 824: ' When your tutorial is ready for publication, please follow these steps to' + line 825: ' prepare your content for the p5js website.' + line 826: ' writing-a-tutorial-how-prepare-2' + line 827: ' writing-a-tutorial-how-prepare-3' + line 828: ' writing-a-tutorial-how-prepare-4' + line 829: ' writing-a-tutorial-how-prepare-5' + line 830: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' + line 831: ' of the p5js site. The file called index.hbs is the ' + line 832: ' writing-a-tutorial-how-prepare-6' + line 833: ' writing-a-tutorial-how-prepare-7' + line 834: ' writing-a-tutorial-how-prepare-8' + line 835: ' writing-a-tutorial-how-prepare-9' + line 836: ' tags on the page, with formatting defined by the <h1> and <h2>' + line 837: ' tags, the <p> paragraph tags as is done shown on the' + line 838: ' writing-a-tutorial-how-prepare-10' + line 839: ' writing-a-tutorial-how-prepare-11' + line 840: ' If your tutorial contains images, they are to be placed in the assets folder' + line 841: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' + line 842: ' shown below.' + line 843: ' writing-a-tutorial-how-prepare-12' + line 844: ' writing-a-tutorial-embedding-title' + line 845: ' writing-a-tutorial-embedding-1' + line 846: ' Using p5js means you can illustrate your tutorial with animated, interactive' + line 847: ' or editable code examples to demonstrate programming concepts. Your examples' + line 848: ' should be prepared as p5.js sketches and can be embedded into the tutorial' + line 849: ' in two ways.' + line 850: ' writing-a-tutorial-embedding-2' + line 851: ' writing-a-tutorial-embedding-3' + line 852: ' writing-a-tutorial-embedding-4' + line 853: ' writing-a-tutorial-embedding-5' + line 854: ' writing-a-tutorial-embedding-6' + line 855: ' writing-a-tutorial-embedding-7' + line 856: ' writing-a-tutorial-embedding-8' + line 857: ' writing-a-tutorial-embedding-9' + line 858: ' writing-a-tutorial-embedding-10' + line 859: ' If the example is to be animated and/or interactive but not editable. The' + line 860: ' p5.js sketch should be embedded into the page as an iframe as described' + line 861: ' below.' + line 862: ' writing-a-tutorial-iframe-title' + line 863: ' writing-a-tutorial-iframe-1' + line 864: ' An iframe is like creating a window through which you can explore another' + line 865: ' page, sandboxed from the rest of your page. In this case it will be a window' + line 866: ' to the index.html containing your p5.js sketch. ' + line 867: ' writing-a-tutorial-iframe-2' + line 868: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' + line 869: ' folder labelled with the name of your sketch as shown in the screenshot.' + line 870: ' This is where all the images and p5 sketches linked by iframe should be' + line 884: ' Styling for the iframe (this could directly into the post or in a' + line 885: ' stylesheet)' + line 886: ' writing-a-tutorial-iframe-7' + line 887: ' writing-a-tutorial-iframe-8' + line 888: ' writing-a-tutorial-iframe-9' + line 889: ' One thing to note is that you need to manually set the size of the iframe,' + line 890: ' so it works best if things are a standard size.' + line 891: ' writing-a-tutorial-iframe-10' + line 892: ' Also note that the links to the p5.js library files do not happen from the' + line 893: ' .eps page with all the tutorial content. Instead they will be located in the' + line 894: ' html page that is rendering your sketch (in this case, called embed.html).' + line 895: ' writing-a-tutorial-iframe-11' + line 896: ' writing-a-tutorial-embed-iframe-12' + line 897: ' writing-a-tutorial-finishing-title' + line 898: ' writing-a-tutorial-finishing-1' + line 899: ' Once your have finished writing your tutorial and your content has been' + line 900: ' given the thumbs up. Fork the p5.js website repository, prepare your content' + line 901: ' as described above and then issue a pull request to the p5.js website' + line 902: ' repository so we can publish your contribution!' + line 903: ' writing-a-tutorial-finishing-2' + line 904: ' color-description1' + line 905: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' + line 906: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' + line 907: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' + line 908: ' color-description2' + line 909: ' color-p1x1' + line 910: ' In the digital world, when we want to talk about a color, precision is' + line 911: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' + line 912: ' Color, rather, is defined as a range of numbers. Let''s start with the' + line 913: ' simplest case' + line 914: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' + line 915: ' gray ranging from black to white.' + line 916: ' color-p2x1' + line 917: ' color-p2x2' + line 918: ' color-p2x3' + line 919: ' color-p2x4' + line 920: ' color-code1' + line 921: ' background(255); // Setting the background to white ' + line 922: ' stroke(0); // Setting the outline (stroke) to black ' + line 923: ' fill(150); // Setting the interior of a shape (fill) to grey ' + line 924: ' rect(50,50,75,100); // Drawing the rectangle' + line 925: ' color-p3x1' + line 926: ' color-p3x2' + line 927: ' color-p3x3' + line 928: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' + line 929: ' important to remember that 0 is not "nothing", but rather denotes the color' + line 930: ' black. Also, remember not to eliminate both—with ' + line 931: ' color-p3x4' + line 932: ' color-p3x5' + line 933: ' color-p4x1' + line 934: ' In addition, if we draw two shapes, p5.js will always use the most recently' + line 935: ' specified stroke and fill, reading the code from top to bottom.' + line 936: ' color-rgb-title' + line 937: ' color-rgb-p1x1' + line 938: ' Remember finger painting? By mixing three "primary" colors, any color could' + line 939: ' be generated. Swirling all colors together resulted in a muddy brown. The' + line 940: ' more paint you added, the darker it got. Digital colors are also constructed' + line 941: ' by mixing three primary colors, but it works differently from paint. First,' + line 942: ' the primaries are different' + line 943: ' with color on the screen, you are mixing light, not paint, so the mixing' + line 944: ' rules are different as well.' + line 945: ' color-rgb-li1' + line 946: ' color-rgb-li2' + line 947: ' color-rgb-li3' + line 948: ' color-rgb-li4' + line 949: ' color-rgb-li5' + line 950: ' color-rgb-p2x1' + line 951: ' This assumes that the colors are all as bright as possible, but of course,' + line 952: ' you have a range of color available, so some red plus some green plus some' + line 953: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' + line 954: ' While this may take some getting used to, the more you program and' + line 955: ' experiment with RGB color, the more it will become instinctive, much like' + line 956: ' swirling colors with your fingers. And of course you can''t say "Mix some red' + line 957: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' + line 958: ' the individual color elements are expressed as ranges from 0 (none of that' + line 959: ' color) to 255 (as much as possible), and they are listed in the order R, G,' + line 960: ' and B. You will get the hang of RGB color mixing through experimentation,' + line 961: ' but next we will cover some code using some common colors.' + line 962: ' color-transparency-title' + line 963: ' color-transparency-p1x1' + line 964: ' In addition to the red, green, and blue components of each color, there is' + line 965: ' an additional optional fourth component, referred to as the color''s "alpha".' + line 966: ' Alpha means transparency and is particularly useful when you want to draw' + line 967: ' elements that appear partially see-through on top of one another. The alpha' + line 968: ' values for an image are sometimes referred to collectively as the "alpha' + line 969: ' channel" of an image.' + line 970: ' color-transparency-p2x1' + line 971: ' It is important to realize that pixels are not literally transparent, this' + line 972: ' is simply a convenient illusion that is accomplished by blending colors.' + line 973: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' + line 974: ' one to a percentage of another, creating the optical perception of blending.' + line 975: ' (If you are interested in programming "rose-colored" glasses, this is where' + line 976: ' you would begin.)' + line 977: ' color-transparency-p3x1' + line 978: ' Alpha values also range from 0 to 255, with 0 being completely transparent' + line 979: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' + line 980: ' color-custom-ranges-title' + line 981: ' color-custom-ranges-p1x1' + line 982: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' + line 983: ' in p5.js, in fact, it allows us to think about color any way we like. For' + line 984: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' + line 985: ' percentage). You can do this by specifying a custom ' + line 986: ' color-custom-ranges-p2x1' + line 987: ' The above function says' + line 988: ' green, and blue. The range of RGB values will be from 0 to 100."' + line 989: ' color-custom-ranges-p3x1' + line 990: ' Although it is rarely convenient to do so, you can also have different' + line 991: ' ranges for each color component' + line 992: ' color-custom-ranges-p4x1' + line 993: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' + line 994: ' from 0 to 10, and alpha from 0 to 255."' + line 995: ' color-custom-ranges-p5x1' + line 996: ' Finally, while you will likely only need RGB color for all of your' + line 997: ' programming needs, you can also specify colors in the HSB (hue, saturation,' + line 998: ' and brightness) mode. Without getting into too much detail, HSB color works' + line 999: ' as follows' + line 1000: ' color-custom-ranges-li1x1' + line 1001: ' color-custom-ranges-li1x2' + line 1002: ' color-custom-ranges-li2x1' + line 1003: ' color-custom-ranges-li2x2' + line 1004: ' color-custom-ranges-li3x1' + line 1005: ' color-custom-ranges-li3x2' + line 1006: ' color-custom-ranges-p6x1' + line 1007: ' color-custom-ranges-p6x2' + line 1008: ' coordinate-system-description1' + line 1009: ' coordinate-system-description2' + line 1010: ' coordinate-system-description3' + line 1011: ' coordinate-system-description4' + line 1012: ' coordinate-system-description5' + line 1013: ' coordinate-system-description-title' + line 1014: ' coordinate-system-description-p1x1' + line 1015: ' Before we begin programming with p5, we must first channel our eighth grade' + line 1016: ' selves, pull out a piece of graph paper, and draw a line. The shortest' + line 1017: ' distance between two points is a good old fashioned line, and this is where' + line 1018: ' we begin, with two points on that graph paper.' + line 1019: ' coordinate-system-description-p2x1' + line 1020: ' The above figure shows a line between point A (1,0) and point B (4,5). If' + line 1021: ' you wanted to direct a friend of yours to draw that same line, you would' + line 1022: ' give them a shout and say "draw a line from the point one-zero to the point' + line 1023: ' four-five, please." Well, for the moment, imagine your friend was a computer' + line 1024: ' and you wanted to instruct this digital pal to display that same line on its' + line 1025: ' screen. The same command applies (only this time you can skip the' + line 1026: ' pleasantries and you will be required to employ a precise formatting). Here,' + line 1027: ' the instruction will look like this' + line 1028: ' coordinate-system-description-p3x1' + line 1029: ' Even without having studied the syntax of writing code, the above statement' + line 1030: ' should make a fair amount of sense. We are providing a command (which we' + line 1031: ' will refer to as a "function") for the machine to follow entitled "line." In' + line 1032: ' addition, we are specifying some arguments for how that line should be' + line 1033: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' + line 1034: ' code as a sentence, the function is a verb and the arguments are the objects' + line 1035: ' of the sentence. The code sentence also ends with a semicolon instead of a' + line 1036: ' period.' + line 1037: ' coordinate-system-description-p4x1' + line 1038: ' The key here is to realize that the computer screen is nothing more than a' + line 1039: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' + line 1040: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' + line 1041: ' location of a point in space. And it is our job to specify what shapes and' + line 1042: ' colors should appear at these pixel coordinates.' + line 1043: ' coordinate-system-description-p5x1' + line 1044: ' Nevertheless, there is a catch here. The graph paper from eighth grade' + line 1045: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' + line 1046: ' pointing up and the x-axis pointing to the right (in the positive direction,' + line 1047: ' negative down and to the left). The coordinate system for pixels in a' + line 1048: ' computer window, however, is reversed along the y-axis. (0,0) can be found' + line 1049: ' at the top left with the positive direction to the right horizontally and' + line 1050: ' down vertically.' + line 1051: ' coordinate-system-simple-shapes-title' + line 1052: ' coordinate-system-simple-shapes-p1x1' + line 1053: ' The vast majority of p5 programming examples are visual in nature. These' + line 1054: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' + line 1055: ' begin by looking at four primitive shapes.' + line 1056: ' coordinate-system-simple-shapes-p2x1' + line 1057: ' For each shape, we will ask ourselves what information is required to' + line 1058: ' specify the location and size (and later color) of that shape and learn how' + line 1059: ' p5 expects to receive that information. In each of the diagrams below, we''ll' + line 1060: ' assume a window with a width of 100 pixels and height of 100 pixels.' + line 1061: ' coordinate-system-simple-shapes-p3x1' + line 1062: ' coordinate-system-simple-shapes-p3x2' + line 1063: ' coordinate-system-simple-shapes-p4x1' + line 1064: ' coordinate-system-simple-shapes-p4x2' + line 1065: ' coordinate-system-simple-shapes-p5x1' + line 1066: ' coordinate-system-simple-shapes-p5x2' + line 1067: ' , things become a bit more complicated. In p5, a rectangle is specified by' + line 1068: ' the coordinate for the top left corner of the rectangle, as well as its' + line 1069: ' width and height.' + line 1070: ' coordinate-system-simple-shapes-p6x1' + line 1071: ' A second way to draw a rectangle involves specifying the centerpoint, along' + line 1072: ' with width and height. If we prefer this method, we first indicate that we' + line 1073: ' want to use the ' + line 1074: ' coordinate-system-simple-shapes-p6x2' + line 1075: ' coordinate-system-simple-shapes-p7x1' + line 1076: ' Finally, we can also draw a rectangle with two points (the top left corner' + line 1077: ' and the bottom right corner). The mode here is ' + line 1078: ' coordinate-system-simple-shapes-p7x2' + line 1079: ' coordinate-system-simple-shapes-p8x1' + line 1080: ' coordinate-system-simple-shapes-p8x2' + line 1081: ' coordinate-system-simple-shapes-p8x3' + line 1082: ' coordinate-system-simple-shapes-p8x4' + line 1083: ' coordinate-system-simple-shapes-p8x5' + line 1084: ' coordinate-system-simple-shapes-p8x6' + line 1085: ' coordinate-system-simple-shapes-p9x1' + line 1086: ' Now let''s look at what some code with shapes in more complete form, with' + line 1087: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' + line 1088: ' to specify the width and height of the canvas.' + line 1089: ' teach-desc' line 1090: test-tutorial + line 1147: ' Libraries' + line 1148: ' core-libraries' + line 1149: ' community-libraries' + line 1150: ' libraries-created-by' + line 1151: ' p5.sound' + line 1152: ' p5.sound extends p5 with Web Audio functionality including audio input,' + line 1153: ' playback, analysis and synthesis.' + line 1154: ' p5.accessibility' + line 1155: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' + line 1156: ' and visually impaired.' + line 1157: ' asciiart' + line 1158: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' + line 1159: ' p5js.' + line 1160: ' p5.ble' + line 1161: ' A Javascript library that enables communication between BLE devices and p5' + line 1162: ' sketches.' + line 1163: ' blizard.js' + line 1164: ' p5.bots' + line 1165: ' With p5.bots you can interact with your Arduino (or other microprocessor)' + line 1166: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' + line 1167: ' drive LEDs, motors, and more!' + line 1168: ' p5.clickable' + line 1169: ' p5.cmyk.js' + line 1170: ' p5.collide2D' + line 1171: ' p5.collide2D provides tools for calculating collision detection for 2D' + line 1172: ' geometry with p5.js.' + line 1173: ' p5.createloop' + line 1175: ' p5.dimensions extends p5.js'' vector functions to work in any number of' + line 1176: ' dimensions.' + line 1177: ' p5.EasyCam' + line 1178: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' + line 1179: ' contributions by Thomas Diewald.' + line 1180: ' p5.experience' + line 1181: ' Extensive library for p5.js that adds additional event-listening' + line 1182: ' functionality for creating canvas-based web applications.' + line 1183: ' p5.func' + line 1184: ' p5.func is a p5 extension that provides new objects and utilities for' + line 1185: ' function generation in the time, frequency, and spatial domains.' + line 1186: ' p5.geolocation' + line 1187: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' + line 1188: ' geofencing user locations for p5.js.' + line 1189: ' p5.gibber' + line 1190: ' grafica.js' + line 1191: ' grafica.js lets you add simple but highly configurable 2D plots to your' + line 1192: ' p5.js sketches.' + line 1193: ' p5.gui' + line 1194: ' p5.localmessage' + line 1195: ' p5.localmessage provides a simple interface to send messages locally from' + line 1196: ' one sketch to another for easy multi-window sketching!' + line 1197: ' marching' + line 1198: ' mappa' + line 1199: ' Mappa provides a set of tools for working with static maps, tile maps, and' + line 1200: ' geo-data. Useful when building geolocation-based visual representations.' + line 1201: ' ml5.js' + line 1202: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' + line 1203: ' learning algorithms and models in the browser.' + line 1204: ' p5.play' + line 1205: ' p5.play provides sprites, animations, input and collision functions for' + line 1206: ' games and gamelike applications.' + line 1207: ' p5.particle' + line 1208: ' The Particle and Fountain objects can be used to create data-driven effects' + line 1209: ' that are defined through user structures or JSON input and user-draw' + line 1210: ' functions.' + line 1211: ' p5.Riso' + line 1212: ' p5.Riso is a library for generating files suitable for Risograph printing.' + line 1213: ' It helps turn your sketches into multi-color prints.' + line 1214: ' rita.js' + line 1215: ' RiTa.js provides a set of natural language processing objects for generative' + line 1216: ' literature.' + line 1217: ' Rotating knobs' + line 1218: ' p5.scenemanager' + line 1219: ' p5.SceneManager helps you create sketches with multiple states / scenes.' + line 1220: ' Each scene is a like a sketch within the main sketch.' + line 1221: ' p5.screenPosition' + line 1222: ' p5.scribble' line 1223: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' line 1224: ' on a port of the original Processing library' line 1225: ' p5.serial' @@ -1720,6 +949,213 @@ es: line 1266: ' create-your-own4' line 1267: ' If you have created a library and would like to have it included on this' line 1268: ' page, submit this form!' + line 1420: ' community-title' + line 1421: ' community-statement-title' + line 1422: ' community-statement1' + line 1423: ' p5.js is a community interested in exploring the creation of art and design' + line 1424: ' with technology.' + line 1425: ' community-statement2' + line 1426: ' We are a community of, and in solidarity with, people from every gender' + line 1427: ' identity and expression, sexual orientation, race, ethnicity, language,' + line 1428: ' neuro-type, size, ability, class, religion, culture, subculture, political' + line 1429: ' opinion, age, skill level, occupation, and background. We acknowledge that' + line 1430: ' not everyone has the time, financial means, or capacity to actively' + line 1431: ' participate, but we recognize and encourage involvement of all kinds. We' + line 1432: ' facilitate and foster access and empowerment. We are all learners.' + line 1433: ' community-statement3' + line 1434: ' We like these hashtags' + line 1435: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' + line 1436: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' + line 1437: ' course).' + line 1438: ' in-practice-title' + line 1439: ' in-practice1' + line 1440: ' in-practice2' + line 1441: ' We insist on actively engaging with requests for feedback regardless of' + line 1442: ' their complexity.' + line 1443: ' in-practice3' + line 1444: ' We welcome newcomers and prioritize the education of others. We strive to' + line 1445: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' + line 1446: ' that newcomers are just as valuable in this effort as experts.' + line 1447: ' in-practice4' + line 1448: ' We consistently make the effort to actively recognize and validate multiple' + line 1449: ' types of contributions.' + line 1450: ' in-practice5' + line 1451: ' in-times-conflict-title' + line 1452: ' in-times-conflict1' + line 1453: ' in-times-conflict2' + line 1454: ' in-times-conflict3' + line 1455: ' We admit when we''re wrong, apologize, and accept responsibility for our' + line 1456: ' actions.' + line 1457: ' in-times-conflict4' + line 1458: ' in-times-conflict5' + line 1459: ' in-times-conflict6' + line 1460: ' in-times-conflict7' + line 1461: ' in-the-future-title' + line 1462: ' in-the-future1' + line 1463: ' notes-title' + line 1464: ' notes1' + line 1465: ' notes2' + line 1466: ' notes3' + line 1467: ' notes4' + line 1468: ' notes5' + line 1469: ' contribute-title' + line 1470: ' contribute1' + line 1471: ' Our community is always looking for enthusiasts to help in all different' + line 1472: ' ways.' + line 1473: ' develop-title' + line 1474: ' develop1' + line 1475: ' develop2' + line 1476: ' develop3' + line 1477: ' develop4' + line 1478: ' develop5' + line 1479: ' document-title' + line 1480: ' document1' + line 1481: ' document2' + line 1482: ' document3' + line 1483: ' document4' + line 1484: ' document5' + line 1485: ' teach-title' + line 1486: ' teach1' + line 1487: ' create-title' + line 1488: ' create1' + line 1489: ' create2' + line 1490: ' create3' + line 1491: ' donate-title' + line 1492: ' donate1' + line 1493: ' donate2' + line 1494: ' donate3' + line 1495: ' contributors-conference-title' + line 1496: ' contributors-conference1' + line 1497: ' While most work happens online, we also convene IRL. We''ve had two' + line 1498: ' contributors conferences held at the' + line 1499: ' contributors-conference2' + line 1500: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' + line 1501: ' developers, educators, and got together to advance the p5.js project.' + line 1502: ' participants-title' + line 1503: ' support-title' + line 1504: ' support1' + line 1505: ' support2' + line 1506: ' at Carnegie Mellon University, an academic laboratory for atypical,' + line 1507: ' anti-disciplinary, and inter-institutional research at the intersections of' + line 1508: ' arts, science, technology, and culture.' + line 1509: ' support3' + line 1510: ' support4' + line 1511: ' support5' + line 1512: ' support6' + line 1513: ' mailing-list-title' + line 1514: ' mailing-list-1' + line 1515: ' Enter your email address to receive occasional updates from the Processing' + line 1516: ' Foundation.' + line 1517: ' 2015contributors-conference-title' + line 1518: ' 2015contributors-conference-date' + line 1519: ' 2015contributors-conference1' + line 1520: ' 2015contributors-conference2' + line 1521: ' , advancing the code, documentation, and community outreach tools of the' + line 1522: ' p5.js programming environment. Participants came from as far away as Hong' + line 1523: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' + line 1524: ' professionals in the fields of creative technology, interaction design, and' + line 1525: ' new-media arts, but the group also included a half-dozen undergraduate and' + line 1526: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' + line 1527: ' 2015contributors-conference3' + line 1528: ' 2015contributors-conference-diversity-title' + line 1529: ' 2015contributors-conference-diversity1' + line 1530: ' Alongside technical development, one of the main focuses of this conference' + line 1531: ' was outreach, community, and diversity. The conference began with a panel' + line 1532: ' 2015contributors-conference-diversity2' + line 1533: ' Diversity' + line 1534: ' the Internet' + line 1535: ' 2015contributors-conference-diversity3' + line 1537: ' 2015contributors-conference-diversity5' + line 1538: ' 2015contributors-conference-diversity6' + line 1539: ' 2015contributors-conference-diversity7' + line 1540: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' + line 1541: ' Mellon University. Speakers included' + line 1542: ' 2015contributors-conference-diversity8' + line 1543: ' 2015contributors-conference-diversity9' + line 1545: ' 2015cc_2' + line 1546: ' 2015cc_3' + line 1547: ' 2015cc_4' + line 1548: ' Woman expressively speaks into a microphone while two male collaborators' + line 1549: ' look on' + line 1550: ' 2015cc_5' + line 1551: ' 2015cc_6' + line 1553: ' Participants sit in a circle around a white board with sticky notes on it' + line 1554: ' while a female student speaks into a microphone' + line 1555: ' 2015cc_8' + line 1556: ' Participants sit around a table looking at each others laptops and compare' + line 1557: ' code' + line 1558: ' 2015cc_9' + line 1559: ' 2015cc_10' + line 1561: ' group of participants with laptops look at her powerpoint in a classroom' + line 1562: ' 2015cc_11' + line 1563: ' Woman speaks at a podium in an auditorium while three participants sit on' + line 1564: ' the stage and another three are skyping in on the stage screen' + line 1565: ' 2015cc_12' + line 1566: ' 2015cc_13' + line 1567: ' 2015cc_14' + line 1569: ' 2019contributors-conference-title' + line 1570: ' 2019contributors-conference-date' + line 1571: ' 2019contributors-conference1' + line 1572: ' 2019contributors-conference2' + line 1573: ' , advancing the code, documentation, and community outreach tools and' + line 1574: ' exploring the current landscape of the p5.js programming environment.' + line 1575: ' Comprising a diverse range of participants within the fields of creative' + line 1577: ' at fostering dialogue through a multidisciplinary lens. Working groups' + line 1578: ' focused on several topic areas' + line 1579: ' Landscape of Creative Tech; and Internationalization.' + line 1580: ' 2019contributors-conference3' + line 1581: ' 2019contributors-conference4' + line 1582: ' outputs' + line 1583: ' output1' + line 1585: ' octagon girds for p5.js. Created by Aren Davey.' + line 1586: ' output2' + line 1587: ' . A set of template files for building a multi-device, multiplayer game' + line 1588: ' where multiple clients can connect to a specified host page. Created by L05.' + line 1589: ' output3' + line 1590: ' output3-1' + line 1591: ' , testing early implementations of softCompile, OSC interfacing and added' + line 1592: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' + line 1593: ' environment! Created by Ted Davis.' + line 1594: ' output4' + line 1595: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' + line 1596: ' with shawné michaelain holloway and LaJuné McMillian.' + line 1597: ' output5' + line 1598: ' output6' + line 1599: ' output6-1' + line 1600: ' output6-2' + line 1601: ' output7' + line 1602: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' + line 1603: ' Jon Chambers.' + line 1604: ' output8' + line 1605: ' output8-1' + line 1606: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' + line 1607: ' Ye, Dorothy R. Santos, and Yasheng She.' + line 1608: ' output9' + line 1609: ' output9-1' + line 1610: ' output10' + line 1611: ' An overhaul of the p5.js website for accessibility. Including updates for' + line 1612: ' screen reader accessibility, and improvements to the home, download, getting' + line 1613: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' + line 1614: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' + line 1615: ' McCarthy, and Evelyn Masso.' + line 1616: ' output11' + line 1617: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' + line 1618: ' Sona Lee, Ted Davis, and Carlos Garcia.' + line 1619: ' output12' + line 1620: ' output13' + line 1621: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' + line 1622: ' Tarakajian and Luca Damasco.' + line 1623: ' output14' + line 1624: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' + line 1625: ' Lauren Valley.' + line 1626: ' output15' + line 1627: ' 2019cc_1' + line 1628: ' 2019cc_2' + line 1629: ' 2019cc_3' + line 1630: ' 2019cc_4' + line 1631: ' 2019cc_5' + line 1632: ' 2019cc_6' + line 1633: ' 2019cc_7' line 1634: ' 2019cc_8' line 1635: ' 2019cc_9' line 1636: ' Participant speaks at a podium in front of projected text about the problem' @@ -1752,6 +1188,35 @@ es: line 1663: ' Man sitting in front of the classroom speaking energetically into a' line 1664: ' microphone' line 1665: ' 2019cc_24' + line 1666: ' Group photo of participants smiling enthusiastically with their hands in the' + line 1667: ' air' + line 1668: ' 2019cc_25' + line 1712: ' books-title' + line 1713: ' book-1-title' + line 1714: ' book-1-authors' + line 1715: ' book-1-publisher' + line 1716: ' book-1-pages' + line 1717: ' book-1-type' + line 1718: ' book-1-description' + line 1719: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1720: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1721: ' using JavaScript and HTML.' + line 1722: ' book-1-order-a' + line 1723: ' book-1-order-b' + line 1724: ' book-2-title' + line 1725: ' book-2-authors' + line 1726: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' + line 1727: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' + line 1728: ' book-2-publisher' + line 1729: ' book-2-pages' + line 1730: ' book-2-type' + line 1731: ' book-2-description' + line 1732: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1733: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1734: ' using JavaScript and HTML.' + line 1735: ' book-2-order-a' + line 1736: ' book-2-order-b' + line 1737: ' book-3-title' line 1738: ' book-3-authors' line 1739: ' book-3-publisher' line 1740: ' book-3-pages' @@ -1780,6 +1245,12 @@ es: line 1763: ' book-5-type' line 1764: ' book-5-description' line 1765: ' Learn coding from scratch in a highly engaging and visual manner using the' + line 1766: ' vastly popular JavaScript with the programming library p5.js. The skills you' + line 1767: ' will acquire from this book are highly transferable to a myriad of' + line 1768: ' industries and can be used towards building web applications, programmable' + line 1769: ' robots, or generative art.' + line 1770: ' book-5-order-a' + line 1771: ' book-5-order-b' line 1800: ' Examples' line 1801: ' back-examples' line 1802: ' Structure' @@ -1807,6 +1278,519 @@ es: line 1824: ' Mobile' line 1825: ' Hello_P5' line 1829: ' Reference' + line 2005: ' showcase-title' + line 2006: ' showcase-intro1' + line 2007: ' showcase-intro2' + line 2008: ' showcase-intro3' + line 2009: ' We''re celebrating how people are using p5.js to make creative work,' + line 2010: ' learning, and open source more interesting and inclusive. Together, we make' + line 2011: ' community. During Summer 2019, we asked a few creators to share more about' + line 2012: ' how they''ve used p5.js through different projects and pieces.' + line 2013: ' showcase-intro4' + line 2014: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' + line 2015: ' p5.js work or your own to be featured here!' + line 2016: ' nominate-project' + line 2017: ' showcase-featuring' + line 2018: ' project-tag-art' + line 2019: ' project-tag-design' + line 2020: ' project-tag-code' + line 2021: ' project-tag-curriculum' + line 2022: ' project-tag-documentation' + line 2023: ' project-tag-game' + line 2024: ' project-tag-library' + line 2025: ' project-tag-organizing' + line 2026: ' project-tag-tool' + line 2027: ' project-tag-tutorial' + line 2028: ' project-roni' + line 2029: ' credit-roni' + line 2030: ' description-roni' + line 2031: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' + line 2032: ' plotter and pens.' + line 2033: ' project-phuong' + line 2034: ' credit-phuong' + line 2035: ' description-phuong' + line 2036: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' + line 2037: ' encourage people to get out of their comfort zone and feel more confident' + line 2038: ' about themselves regardless of what they do and how they look or sound.' + line 2039: ' project-daein' + line 2040: ' credit-daein' + line 2041: ' description-daein' + line 2042: ' An interactive typographic poster that uses a mobile device''s motion sensor' + line 2043: ' with p5.js.' + line 2044: ' project-qianqian' + line 2045: ' credit-qianqian' + line 2046: ' description-qianqian' + line 2047: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' + line 2048: ' and technology, including p5.js tutorials for beginners. Available on' + line 2049: ' YouTube, Instagram, Bilibili, and TikTok.' + line 2050: ' project-casey-louise' + line 2051: ' credit-casey-louise' + line 2052: ' description-casey-louise' + line 2053: ' project-moon-xin' + line 2054: ' credit-moon-xin' + line 2055: ' description-moon-xin' + line 2056: ' Browser-based moving posters that use graphical systems, transformation' + line 2057: ' methods, and p5.js to address the connotations of a word less than 8' + line 2058: ' letters. Designed by students for a graphic design course (Visual Narrative' + line 2059: ' Systems) at the University of Georgia.' + line 2060: ' created-by' + line 2061: ' pronouns-female' + line 2062: ' creator-from-roni-cantor' + line 2063: ' project-links' + line 2064: ' project-links-text-1-roni-cantor' + line 2065: ' project-links-text-2-roni-cantor' + line 2066: ' project-q-1-1' + line 2067: ' project-q-1-2' + line 2068: ' project-a-1-1-roni-cantor' + line 2069: ' I just graduated from Ryerson University''s New Media program. Coming from 4' + line 2070: ' years of coding and making robots, I decided to take a break and play with' + line 2071: ' some more traditional forms of art—while still coding and playing with' + line 2072: ' robots.' + line 2073: ' project-a-1-2-roni-cantor' + line 2074: ' project-a-1-3-roni-cantor' + line 2075: ' project-a-1-4-roni-cantor' + line 2076: ' project-q-2' + line 2077: ' project-a-2-1-roni-cantor' + line 2078: ' I used p5.js in this project to generate the sine wave and lerp (linear' + line 2079: ' interpolation) formulas and display the visuals in the' + line 2080: ' project-a-2-2-roni-cantor' + line 2081: ' . I then used a feature in my code that exported my programmed graphic into' + line 2082: ' an' + line 2083: ' project-a-2-3-roni-cantor' + line 2084: ' project-a-2-4-roni-cantor' + line 2085: ' —so that it understood where to draw the lines that I programmed. I sent' + line 2086: ' this information to the plotter with a program called' + line 2087: ' project-a-2-5-roni-cantor' + line 2088: ' project-q-3' + line 2089: ' project-a-3-roni-cantor' + line 2090: ' project-q-4' + line 2091: ' Did you face any challenges working on this project? If so, how did you' + line 2092: ' overcome them?' + line 2093: ' project-a-4-roni-cantor' + line 2094: ' It was my first time using p5.js, Inkscape, and a plotter! I really' + line 2095: ' benefited from the people around me who had used p5 before, as well as' + line 2096: ' online guides and forums.' + line 2097: ' project-q-5' + line 2098: ' project-a-5-roni-cantor' + line 2099: ' project-q-6' + line 2100: ' project-a-6-roni-cantor' + line 2101: ' project-resources' + line 2102: ' creator-from-qianqian' + line 2103: ' interview-link-qianqian' + line 2104: ' project-a-1-1-qianqian' + line 2105: ' project-a-1-2-qianqian' + line 2106: ' My partner introduced me to p5.js, which I learned mainly by watching free' + line 2107: ' online video tutorials. My first p5.js project was drawing some shapes with' + line 2108: ' different colors.' + line 2109: ' project-a-2-1-qianqian' + line 2110: ' This project started with an idea of teaching my mom, who lives in China and' + line 2111: ' doesn’t speak English, to code with p5.js. This project was difficult on' + line 2112: ' multiple levels, and I wanted to start by identifying the main reasons why' + line 2113: ' it’s more challenging for someone like my mother to learn to code—primarily' + line 2114: ' due to the lack of free creative coding education resources. Most of the' + line 2115: ' free resources to learn creative coding are unavailable in China. The p5.js' + line 2116: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' + line 2117: ' inaccessible in China because of internet censorship.' + line 2118: ' project-a-2-2-qianqian' + line 2119: ' project-a-2-3-qianqian' + line 2120: ' , but the more I watched coding tutorials online, the more I realized how' + line 2121: ' difficult it is to find other womxn and people of color teaching coding,' + line 2122: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' + line 2123: ' creative coding.' + line 2124: ' project-a-2-4-qianqian' + line 2125: ' I am working on opening up the video channels to other Chinese creatives who' + line 2126: ' want to contribute to the educational resource together, like interviews and' + line 2127: ' guest tutorials. If you are interested in teaching/talking about creative' + line 2128: ' coding in Mandarin, HMU!' + line 2129: ' project-a-3-1-qianqian' + line 2130: ' project-a-3-2-qianqian' + line 2131: ' project-a-4-1-qianqian' + line 2132: ' Learning to code in a second language was difficult and the lack of' + line 2133: ' community made this process even harder. I hope to speak from my experience' + line 2134: ' as a beginner and someone who once felt like an outsider to the creative' + line 2135: ' coding and video tutorial world.' + line 2136: ' project-a-4-2-qianqian' + line 2137: ' I spend a lot of time researching the latest technology for my videos. In' + line 2138: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' + line 2139: ' encourage others that it doesn’t take a lot of expensive gears to get' + line 2140: ' started making instructional videos.' + line 2141: ' project-a-4-3-qianqian' + line 2142: ' Another issue I came across was my own fear of putting myself online. I' + line 2143: ' first had to get over my anxiety of making mistakes in the videos or' + line 2144: ' receiving negative comments online. Often womxn and people of color are' + line 2145: ' targets for online harassment. I’m hoping to help set an example for other' + line 2146: ' womxn and people of color that it’s ok to put yourselves online and' + line 2147: ' strengthen your communities by sharing your knowledge. Eventually, we will' + line 2148: ' be able to stop online harassment by creating strong diverse communities.' + line 2149: ' project-a-5-1-qianqian' + line 2150: ' project-a-5-2-qianqian' + line 2151: ' creator-from-phuong' + line 2152: ' project-a-1-1-phuong' + line 2153: ' link-1-phuong' + line 2154: ' link-2-phuong' + line 2155: ' link-3-phuong' + line 2156: ' project-a-1-2-phuong' + line 2157: ' project-a-1-3-phuong' + line 2158: ' I was taking a course at the School of Machines in Berlin this summer' + line 2159: ' called! "' + line 2160: ' project-a-1-4-phuong' + line 2161: ' project-a-2-1-phuong' + line 2162: ' I used p5.js to work on the visual part of the game. The animation sprites' + line 2163: ' for Airi and the ghosts were drawn on an iPad app called' + line 2164: ' project-a-2-2-phuong' + line 2165: ' project-a-2-3-phuong' + line 2166: ' project-a-2-4-phuong' + line 2167: ' p5-sketch-by-chjno-phuong' + line 2168: ' project-a-2-5-phuong' + line 2169: ' . I set a condition so whenever the word "pew" or a mouse click was' + line 2170: ' detected, the scrolling speed would change to make an illusion of Airi' + line 2171: ' flying up. When the user does not do anything, the scrolling speed is' + line 2172: ' negative, which makes it look like Airi is falling down.' + line 2173: ' project-a-2-6-phuong' + line 2174: ' project-a-2-7-phuong' + line 2175: ' project-a-3-1-phuong' + line 2176: ' I really love how easily you can create, manipulate, and delete HTML blocks' + line 2177: ' and classes with the' + line 2178: ' project-a-3-2-phuong' + line 2179: ' project-a-3-3-phuong' + line 2180: ' project-a-3-4-phuong' + line 2181: ' project-a-4-1-phuong' + line 2182: ' There were a lot of challenges simply because p5.js was something new to me.' + line 2183: ' I did not work much with JavaScript in general before. Reading documentation' + line 2184: ' and searching for similar examples helped a lot.' + line 2185: ' project-a-5-1-phuong' + line 2186: ' school-of-machines-phuong' + line 2187: ' project-a-5-2-phuong' + line 2188: ' ! They try hard to connect the most creative people in the world and they do' + line 2189: ' it well so far. ❤️' + line 2190: ' pronouns-male' + line 2191: ' creator-from-chung' + line 2192: ' link-1-casey-louise' + line 2193: ' link-2-casey-louise' + line 2194: ' link-1-chung' + line 2195: ' link-2-chung' + line 2196: ' link-3-chung' + line 2197: ' project-a-1-1-chung' + line 2198: ' I am a graphic designer and a faculty member at Maryland Institute College' + line 2199: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' + line 2200: ' and motion graphics.' + line 2201: ' project-a-1-2-chung' + line 2202: ' project-a-1-3-chung' + line 2203: ' project-a-2-1-chung' + line 2204: ' This summer, I gave myself a challenge of making typographic posters with' + line 2205: ' coding, and this is one of the posters I made. I didn’t know until very' + line 2206: ' recently that I could use motion sensor data with p5.js. I was also watching' + line 2207: ' dan-shiffman-matterjs-tutorial' + line 2208: ' project-a-2-2-chung' + line 2209: ' project-a-3-1-chung' + line 2210: ' There are many things I love about p5.js such as the online community and' + line 2211: ' beginner friendliness. What I really like right now is the' + line 2212: ' project-a-3-2-chung' + line 2213: ' , with which I can not only work online for myself but also share URLs' + line 2214: ' quickly in the present mode. For this project in particular, I had to do a' + line 2215: ' lot of testing on my phone, and it was much easier and quicker than' + line 2216: ' committing to GitHub.' + line 2217: ' project-a-4-1-chung' + line 2218: ' project-a-4-2-chung' + line 2219: ' project-a-4-3-chung' + line 2220: ' project-a-5-1-chung' + line 2221: ' As mentioned above, if you want to render out frames and video files out of' + line 2222: ' p5.js sketches, check out my' + line 2223: ' project-a-5-2-chung' + line 2224: ' creator-from-casey-louise' + line 2225: ' project-a-1-1-casey-louise' + line 2226: ' Casey' + line 2227: ' interactive spaces, physical and digital.' + line 2228: ' project-a-1-2-casey-louise' + line 2229: ' Louise' + line 2230: ' interactive spaces based on sensor technologies.' + line 2231: ' project-a-1-3-casey-louise' + line 2232: ' Casey' + line 2233: ' I had been dabbling in' + line 2234: ' project-a-1-4-casey-louise' + line 2235: ' project-a-1-5-casey-louise' + line 2236: ' Louise' + line 2237: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' + line 2238: ' me.' + line 2239: ' project-a-2-1-casey-louise' + line 2240: ' Casey' + line 2241: ' curious if I could use them in p5.js. Then I heard about a grant for open' + line 2242: ' source, storytelling, and learning resource projects at ITP called' + line 2243: ' project-a-2-2-casey-louise' + line 2244: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' + line 2245: ' decided to figure out how they''re implemented in p5.js and create a resource' + line 2246: ' for others to learn. When I told Louise about the project, she was' + line 2247: ' immediately excited about learning and teaching shaders in p5.js. She''s been' + line 2248: ' great about making sure the project is a learning resource and not just a' + line 2249: ' collection of examples.' + line 2250: ' project-a-3-1-casey-louise' + line 2251: ' project-a-3-2-casey-louise' + line 2252: ' project-a-3-3-casey-louise' + line 2253: ' project-a-3-4-casey-louise' + line 2254: ' project-a-3-5-casey-louise' + line 2255: ' project-a-4-1-casey-louise' + line 2256: ' Casey' + line 2257: ' reaching out to amazing people, asking questions, and asking for permission' + line 2258: ' to use their examples in our project.' + line 2259: ' adam-ferris-repo-casey-louise' + line 2260: ' project-a-4-2-casey-louise' + line 2261: ' project-a-4-3-casey-louise' + line 2262: ' project-a-4-4-casey-louise' + line 2263: ' webgl-casey-louise' + line 2264: ' project-a-4-5-casey-louise' + line 2265: ' project-a-4-6-casey-louise' + line 2266: ' Louise' + line 2267: ' Luckily, there were some very well-documented examples on GitHub by Adam' + line 2268: ' Ferriss. Our aim was to do so in a way that a complete beginner can' + line 2269: ' understand how to implement it, so it was as much a technical challenge as' + line 2270: ' it was a challenge in teaching code to strangers and beginners. Here we drew' + line 2271: ' inspiration from the way the' + line 2272: ' openframeworks-book-casey-louise' + line 2273: ' project-a-4-7-casey-louise' + line 2274: ' project-a-5-1-casey-louise' + line 2275: ' project-a-5-2-casey-louise' + line 2276: ' pronouns-nonbinary' + line 2277: ' creator-from-moon' + line 2278: ' posters-by' + line 2279: ' project-a-1-1-moon' + line 2280: ' Moon' + line 2281: ' summer, I taught a graphic design course in the University of Georgia' + line 2282: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' + line 2283: ' planning to teach and to study digital platforms at UGA.' + line 2284: ' project-a-1-2-moon' + line 2285: ' project-a-1-3-moon' + line 2286: ' project-a-1-4-moon' + line 2287: ' pcd-la-moon' + line 2288: ' project-a-1-5-moon' + line 2289: ' . They helped me with the tools and logics of p5.js. It was an excellent' + line 2290: ' teaching and learning experience.' + line 2291: ' project-a-2-1-moon' + line 2292: ' codetrain-moon' + line 2293: ' project-a-2-2-moon' + line 2294: ' p5-reference-moon' + line 2295: ' project-a-2-3-moon' + line 2296: ' project-a-3-1-moon' + line 2297: ' project-a-3-2-moon' + line 2298: ' project-a-3-3-moon' + line 2299: ' project-a-3-4-moon' + line 2300: ' . I was able to use and to teach this tool to visualize various ideas about' + line 2301: ' time in motion.' + line 2302: ' project-a-4-1-moon' + line 2303: ' It was challenging for me, a beginner, to understand the overall structure' + line 2304: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' + line 2305: ' couple of times, and then I drew a chart to memorize and to teach the way I' + line 2306: ' understood the p5.js structure and code with strong constraints I set up. It' + line 2307: ' was an excellent teaching and learning experience.' + line 2308: ' project-a-5-1-moon' + line 2309: ' project-a-5-2-moon' + line 2310: teach + line 2311: ' teach-title2' + line 2312: ' teach-intro1' + line 2313: ' Every teaching has its own unique goals, messages, conditions, and' + line 2314: ' environments. ' + line 2315: ' teach-intro2' + line 2316: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' + line 2317: ' better connect the p5.js learner and educator communities around the world. ' + line 2318: ' teach-intro3' + line 2319: ' teach-intro4' + line 2320: ' teach-heading' + line 2321: ' teach-search-filter' + line 2322: ' teach-filter1' + line 2323: ' teach-filter1-label1' + line 2324: ' teach-filter1-label2' + line 2325: ' teach-filter1-label3' + line 2326: ' teach-filter1-label4' + line 2327: ' teach-filter1-label5' + line 2328: ' teach-filter1-label6' + line 2329: ' teach-filter1-label7' + line 2330: ' teach-filter1-label8' + line 2331: ' teach-filter1-label9' + line 2332: ' teach-filter1-label10' + line 2333: ' teach-filter1-label11' + line 2334: ' teach-filter1-label12' + line 2335: ' teach-filter1-label13' + line 2336: ' teach-filter1-label14' + line 2337: ' teach-filter1-label15' + line 2338: ' teach-filter1-label16' + line 2339: ' teach-filter2' + line 2340: ' teach-filter2-label1' + line 2341: ' teach-filter2-label2' + line 2342: ' teach-filter2-label3' + line 2343: ' teach-filter2-label4' + line 2344: ' teach-filter2-label5' + line 2345: ' teach-filter2-label6' + line 2346: ' teach-filter2-label7' + line 2347: ' teach-filter3' + line 2348: ' teach-filter4' + line 2349: ' teach-filter4-label1' + line 2350: ' teach-filter4-label2' + line 2351: ' teach-filter4-label3' + line 2352: ' teach-case-subtitle1' + line 2353: ' teach-case-subtitle2' + line 2354: ' teach-case-subtitle3' + line 2355: ' teach-case-subtitle4' + line 2356: ' teach-case-subtitle5' + line 2357: ' teach-case1-title' + line 2358: ' teach-case1-lead-name' + line 2359: ' teach-case1-content1' + line 2360: ' teach-case1-content1-1' + line 2361: ' teach-case1-content2' + line 2362: ' teach-case1-content3' + line 2363: ' teach-case1-content4' + line 2364: ' To introduce a new public to programming through fun and compelling' + line 2365: ' examples. ' + line 2366: ' teach-case1-content5' + line 2367: ' Method' + line 2368: ' each times. The students were using (Ubuntu) machines with the p5.js web' + line 2369: ' editor. I was teaching using a video projector as well as a board.' + line 2370: ' teach-case1-content5-1' + line 2371: ' Materials' + line 2372: ' links available in ' + line 2373: ' teach-case2-title' + line 2374: ' Making The Thing that Makes the Thing' + line 2375: ' with p5.js' + line 2376: ' teach-case2-lead-name' + line 2377: ' teach-case2-content1' + line 2378: ' teach-case2-content1-1' + line 2379: ' teach-case2-content2' + line 2380: ' Our participants included art/design students & professionals, creative' + line 2381: ' coding enthusiasts. We had close to 50 participants.' + line 2382: ' teach-case2-content3' + line 2383: ' teach-case2-content4' + line 2384: ' To explore generative art & design and recreate some classical works' + line 2385: ' with p5.js. ' + line 2386: ' teach-case2-content5' + line 2387: ' teach-case2-content5-1' + line 2388: ' teach-case2-content5-2' + line 2389: ' teach-case2-content5-3' + line 2390: ' teach-case2-content5-4' + line 2391: ' teach-case2-content5-5' + line 2392: ' teach-case3-title' + line 2393: ' teach-case3-lead-name' + line 2394: ' teach-case3-speech' + line 2395: ' teach-case3-content1' + line 2396: ' teach-case3-content1-1' + line 2397: ' teach-case3-content2' + line 2398: ' Our participants included art/design students & professionals, creative' + line 2399: ' coding enthusiasts. We had close to 50 participants.' + line 2400: ' teach-case3-content3' + line 2401: ' teach-case3-content4' + line 2402: ' To build a teacher and student community around p5 for middle and high' + line 2403: ' school.' + line 2404: ' teach-case3-content5' + line 2405: ' A half-day of workshop led by volunteer teachers. We saw lots of different' + line 2406: ' methods and materials. Most used some sort of slides or documentation, some' + line 2407: ' live coding using an editor, with work time for participant to remix.' + line 2408: ' teach-case3-content5-1' + line 2409: ' teach-case3-content5-2' + line 2410: ' teach-case3-content5-3' + line 2411: ' teach-case4-title' + line 2412: ' teach-case4-lead-name' + line 2413: ' teach-case4-speech' + line 2414: ' teach-case4-content1' + line 2415: ' teach-case4-content1-1' + line 2416: ' teach-case4-content2' + line 2417: ' I had around 16 students in the workshop, and a team including 3 people from' + line 2418: ' the PlusCode festival, and one person at the venue.' + line 2419: ' teach-case4-content3' + line 2420: ' teach-case4-content4' + line 2421: ' Introduction to beginners and artists of graphic web programming and open' + line 2422: ' source, using p5.js, in Spanish ' + line 2423: ' teach-case4-content5' + line 2424: ' teach-case4-content5-1' + line 2425: ' teach-case4-content5-2' + line 2426: ' teach-case4-content5-3' + line 2427: ' teach-case4-content5-4' + line 2428: ' teach-case5-title' + line 2429: ' teach-case5-lead-name' + line 2430: ' teach-case5-speech' + line 2431: ' My greatest source of uncertainty in developing the workshop was whether it' + line 2432: ' was trying to teach art to programmers or to teach programming to artists.' + line 2433: ' teach-case5-content1' + line 2434: ' teach-case5-content1-1' + line 2435: ' teach-case5-content1-2' + line 2436: ' teach-case5-content1-3' + line 2437: ' teach-case5-content2' + line 2438: ' teach-case5-content3' + line 2439: ' teach-case5-content4' + line 2440: ' To introduce p5.js to artists with little or no programming experience and' + line 2441: ' to suggest one way an analogue practice can migrate to a digital form.' + line 2442: ' teach-case5-content5' + line 2443: ' A printed workbook with activities that used the p5.js web editor to show' + line 2444: ' how translate an physical drawing into a digital drawing.' + line 2445: ' teach-case5-content5-1' + line 2446: ' teach-case5-content5-2' + line 2447: ' teach-case5-content5-3' + line 2448: ' teach-case6-title' + line 2449: ' teach-case6-lead-name' + line 2450: ' teach-case6-speech' + line 2451: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' + line 2452: ' your everyday life!' + line 2453: ' teach-case6-content1' + line 2454: ' teach-case6-content1-1' + line 2455: ' teach-case6-content2' + line 2456: ' teach-case6-content3' + line 2457: ' teach-case6-content4' + line 2458: ' teach-case6-content5' + line 2459: ' teach-case6-content5-1' + line 2460: ' teach-case6-content5-2' + line 2461: ' teach-case6-content5-3' + line 2462: ' teach-case6-content5-4' + line 2463: ' teach-case6-content5-5' + line 2464: ' teach-case7-title' + line 2465: ' teach-case7-lead-name' + line 2466: ' teach-case7-speech' + line 2467: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' + line 2468: ' to give it a try!' + line 2469: ' teach-case7-content1' + line 2470: ' teach-case7-content1-1' + line 2471: ' teach-case7-content2' + line 2472: ' teach-case7-content3' + line 2473: ' teach-case7-content4' + line 2474: ' teach-case7-content5' + line 2475: ' teach-case7-content5-1' + line 2476: ' teach-case8-title' + line 2477: ' teach-case8-lead-name' + line 2478: ' teach-case8-content1' + line 2479: ' teach-case8-content1-1' + line 2480: ' teach-case8-content2' + line 2481: ' teach-case8-content3' + line 2482: ' teach-case8-content4' + line 2483: ' teach-case8-content5' + line 2484: ' teach-case8-content5-1' + line 2485: ' teach-case8-content5-2' + line 2486: ' teach-case9-title' + line 2487: ' teach-case9-lead-name' + line 2488: ' teach-case9-content1' + line 2489: ' teach-case9-content1-1' + line 2490: ' teach-case9-content2' + line 2491: ' Students at Interactive Telecommunications Program, New York University. 16' + line 2492: ' people.' + line 2493: ' teach-case9-content3' + line 2494: ' teach-case9-content4' + line 2495: ' The goal of this class is to learn and understand common machine learning' + line 2496: ' techniques and apply them to generate creative outputs in the browser using' + line 2497: ' ml5.js and p5.js.' + line 2498: ' teach-case9-content5' + line 2499: ' This class is a mix of lectures, coding sessions, group discussions, and' + line 2500: ' presentations. I used ' + line 2501: ' teach-case9-content5-1' + line 2502: ' teach-case9-content5-2' + line 2503: ' teach-case9-content5-3' + line 2504: ' teach-case10-title' + line 2505: ' teach-case10-lead-name' + line 2506: ' teach-case10-content1' + line 2507: ' teach-case10-content3' + line 2508: ' teach-case10-content4' + line 2509: ' Introduce learners (potentially with no coding experiences at all) to the' + line 2510: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' + line 2511: ' and enable them to pursue own projects in a safe environment.' + line 2512: ' teach-case10-content5' + line 2513: ' p5.js source code (for the introductory project), JavaScript source code' + line 2514: ' (illustrating some basic JavaScript functionalities), accompanying slides in' + line 2515: ' .pdf format, all hosted publicly on GitHub. ' + line 2516: ' teach-case10-content5-1' + line 2517: ' teach-case10-content5-2' line 2518: ' teach-case11-title' line 2519: ' teach-case11-lead-name' line 2520: ' teach-case11-content1' @@ -1829,381 +1813,145 @@ es: line 2537: ' teach-case12-title' line 2538: ' teach-case12-lead-name' line 2539: ' teach-case12-speech' + line 2540: ' I''m working on a new series of coding class for Disabled students in South' + line 2541: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' + line 2542: ' workshops in December 2020. The project is supported by the Open Society' + line 2543: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' + line 2544: ' Center.' + line 2545: ' teach-case12-content1' + line 2546: ' teach-case12-content1-1' + line 2547: ' teach-case12-content2' + line 2548: ' teach-case12-content3' + line 2549: ' teach-case12-content4' + line 2550: ' To help Deaf and Hard of Hearing students learn about computer programming' + line 2551: ' through playful exercises. To make ASL tutorial of basic coding concepts.' + line 2552: ' teach-case12-content5' + line 2553: ' We used p5.js Web editor and code examples on the website. We also used' + line 2554: ' dice, playing cards and various paper tools to help students learn about' + line 2555: ' coding concepts.' + line 2556: ' teach-case12-content5-1' + line 2557: ' teach-case12-content5-2' line 598: ' color-custom-ranges-li1x2' line 601: ' color-custom-ranges-li2x2' line 604: ' color-custom-ranges-li3x2' - line 728: ' learn-title' - line 1091: <<<<<<< HEAD - line 1099: '=======' - line 1100: ' Libraries' - line 1101: ' core-libraries' - line 1102: ' community-libraries' - line 1103: ' libraries-created-by' - line 1104: ' p5.sound' - line 1105: ' p5.sound extends p5 with Web Audio functionality including audio input,' - line 1106: ' playback, analysis and synthesis.' - line 1107: ' p5.accessibility' - line 1108: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' - line 1109: ' and visually impaired.' - line 1110: ' asciiart' - line 1111: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' - line 1112: ' p5js.' - line 1113: ' p5.ble' - line 1114: ' A Javascript library that enables communication between BLE devices and p5' - line 1115: ' sketches.' - line 1116: ' p5.bots' - line 1117: ' With p5.bots you can interact with your Arduino (or other microprocessor)' - line 1118: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' - line 1119: ' drive LEDs, motors, and more!' - line 1120: ' p5.clickable' - line 1121: ' p5.cmyk.js' - line 1122: ' p5.collide2D' - line 1135: ' p5.func' - line 1136: ' p5.func is a p5 extension that provides new objects and utilities for' - line 1137: ' function generation in the time, frequency, and spatial domains.' - line 1138: ' p5.geolocation' - line 1139: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' - line 1140: ' geofencing user locations for p5.js.' - line 1141: ' p5.gibber' - line 1142: ' grafica.js' - line 1143: ' grafica.js lets you add simple but highly configurable 2D plots to your' - line 1144: ' p5.js sketches.' - line 1145: ' p5.gui' - line 1146: ' p5.localmessage' - line 1374: ' community-title' - line 1375: ' community-statement-title' - line 1376: ' community-statement1' - line 1377: ' p5.js is a community interested in exploring the creation of art and design' - line 1378: ' with technology.' - line 1379: ' community-statement2' - line 1380: ' We are a community of, and in solidarity with, people from every gender' - line 1381: ' identity and expression, sexual orientation, race, ethnicity, language,' - line 1382: ' neuro-type, size, ability, class, religion, culture, subculture, political' - line 1383: ' opinion, age, skill level, occupation, and background. We acknowledge that' - line 1384: ' not everyone has the time, financial means, or capacity to actively' - line 1385: ' participate, but we recognize and encourage involvement of all kinds. We' - line 1386: ' facilitate and foster access and empowerment. We are all learners.' - line 1387: ' community-statement3' - line 1388: ' We like these hashtags' - line 1389: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' - line 1390: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' - line 1391: ' course).' - line 1392: ' in-practice-title' - line 1393: ' in-practice1' - line 1394: ' in-practice2' - line 1395: ' We insist on actively engaging with requests for feedback regardless of' - line 1396: ' their complexity.' - line 1397: ' in-practice3' - line 1398: ' We welcome newcomers and prioritize the education of others. We strive to' - line 1399: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' - line 1400: ' that newcomers are just as valuable in this effort as experts.' - line 1401: ' in-practice4' - line 1402: ' We consistently make the effort to actively recognize and validate multiple' - line 1403: ' types of contributions.' - line 1404: ' in-practice5' - line 1405: ' in-times-conflict-title' - line 1406: ' in-times-conflict1' - line 1407: ' in-times-conflict2' - line 1408: ' in-times-conflict3' - line 1409: ' We admit when we''re wrong, apologize, and accept responsibility for our' - line 1410: ' actions.' - line 1411: ' in-times-conflict4' - line 1412: ' in-times-conflict5' - line 1413: ' in-times-conflict6' - line 1414: ' in-times-conflict7' - line 1415: ' in-the-future-title' - line 1416: ' in-the-future1' - line 1417: ' notes-title' - line 1418: ' notes1' - line 1419: ' notes2' - line 1669: ' book-1-publisher' - line 1670: ' book-1-pages' - line 1671: ' book-1-type' - line 1672: ' book-1-description' - line 1673: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1674: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1675: ' using JavaScript and HTML.' - line 1676: ' book-1-order-a' - line 1677: ' book-1-order-b' - line 1678: ' book-2-title' - line 1679: ' book-2-authors' - line 1680: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' - line 1681: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' - line 1682: ' book-2-publisher' - line 1683: ' book-2-pages' - line 1684: ' book-2-type' - line 1685: ' book-2-description' - line 1686: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1687: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1688: ' using JavaScript and HTML.' - line 1689: ' book-2-order-a' - line 1690: ' book-2-order-b' - line 1691: ' book-3-title' - line 1692: ' book-3-authors' - line 1693: ' book-3-publisher' - line 1694: ' book-3-pages' - line 1695: ' book-3-type' - line 1696: ' book-3-description' - line 1697: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1698: ' can create everything from interactive typography and textiles to 3D-printed' - line 1699: ' furniture to complex and elegant infographics.' - line 1700: ' book-3-order-a' - line 1701: ' book-3-order-b' - line 1702: ' book-4-title' - line 1703: ' book-4-authors' - line 1704: ' book-4-publisher' - line 1705: ' book-4-pages' - line 1706: ' book-4-type' - line 1707: ' book-4-description' - line 1708: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1709: ' can create everything from interactive typography and textiles to 3D-printed' - line 1710: ' furniture to complex and elegant infographics.' - line 1711: ' book-4-order-a' - line 1772: ' Control' - line 1773: ' Image' - line 1774: ' Color' - line 1775: ' Math' - line 1776: ' Simulate' - line 1777: ' Interaction' - line 1778: ' Objects' - line 1779: ' Lights' - line 1780: ' Motion' - line 1781: ' Instance_Mode' - line 1782: ' Dom' - line 1783: ' Drawing' - line 1784: ' Transform' - line 1785: ' Typography' - line 1786: ' 3D' - line 1787: ' Input' - line 1788: ' Advanced_Data' - line 1789: ' Sound' - line 1790: ' Mobile' - line 1791: ' Hello_P5' - line 1795: ' Reference' - line 1948: ' showcase-title' - line 1949: ' showcase-intro1' - line 1950: ' showcase-intro2' - line 1951: ' showcase-intro3' - line 1952: ' We''re celebrating how people are using p5.js to make creative work,' - line 1953: ' learning, and open source more interesting and inclusive. Together, we make' - line 1954: ' community. During Summer 2019, we asked a few creators to share more about' - line 1955: ' how they''ve used p5.js through different projects and pieces.' - line 1956: ' showcase-intro4' - line 1957: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' - line 1958: ' p5.js work or your own to be featured here!' - line 1959: ' nominate-project' - line 1960: ' showcase-featuring' - line 1961: ' project-tag-art' - line 1962: ' project-tag-design' - line 1963: ' project-tag-code' - line 1964: ' project-tag-curriculum' - line 1965: ' project-tag-documentation' - line 1966: ' project-tag-game' - line 1967: ' project-tag-library' - line 1968: ' project-tag-organizing' - line 1969: ' project-tag-tool' - line 1970: ' project-tag-tutorial' - line 1971: ' project-roni' - line 1972: ' credit-roni' - line 1973: ' description-roni' - line 1974: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' - line 1975: ' plotter and pens.' - line 1976: ' project-phuong' - line 1977: ' credit-phuong' - line 1978: ' description-phuong' - line 1979: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' - line 1980: ' encourage people to get out of their comfort zone and feel more confident' - line 1981: ' about themselves regardless of what they do and how they look or sound.' - line 1982: ' project-daein' - line 1983: ' credit-daein' - line 1984: ' description-daein' - line 1985: ' An interactive typographic poster that uses a mobile device''s motion sensor' - line 1986: ' with p5.js.' - line 1987: ' project-qianqian' - line 1988: ' credit-qianqian' - line 1989: ' description-qianqian' - line 1990: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' - line 1991: ' and technology, including p5.js tutorials for beginners. Available on' - line 1992: ' YouTube, Instagram, Bilibili, and TikTok.' - line 1993: ' project-casey-louise' - line 1994: ' credit-casey-louise' - line 1995: ' description-casey-louise' - line 1996: ' project-moon-xin' - line 1997: ' credit-moon-xin' - line 1998: ' description-moon-xin' - line 1999: ' Browser-based moving posters that use graphical systems, transformation' - line 2000: ' methods, and p5.js to address the connotations of a word less than 8' - line 2001: ' letters. Designed by students for a graphic design course (Visual Narrative' - line 2002: ' Systems) at the University of Georgia.' - line 2003: ' created-by' - line 2004: ' pronouns-female' - line 2558: ' teach-case14-content5-3' - line 2559: ' 3) We incorporated machine learning, audio processing, and computer vision techniques to track and respond to the presence of people. ' - line 2560: ' teach-case14-content5-4' - line 2561: ' 4) Together, these works make one installation, comprised of four interconnected smart rooms that each provoke discussion. ' - line 2562: ' teach-case14-content5-5' - line 2563: ' teach-case15-title' - line 2564: ' teach-case15-lead-name' - line 2565: ' teach-case15-content1' - line 2566: ' L''École de Design Nantes Atlantique, France' - line 2567: ' teach-case15-content1-1' - line 2568: ' teach-case15-content2' - line 2569: ' Students from l''école de design Nantes Atlantique''' - line 2570: ' teach-case15-content3' - line 2571: ' teach-case15-content4' - line 2572: ' To get to know p5.js and its functionalities (DOM, audio, WebGL, etc.) ' - line 2573: ' teach-case15-content5' - line 2574: ' GitHub Readme File' - line 2575: ' teach-case15-content5-1' - line 2576: ' teach-case16-title' - line 2577: ' 50+ Coding Club ' - line 2578: ' teach-case16-lead-name' - line 2579: ' teach-case16-speech' - line 2580: ' This workshop was conducted in line with ''p5 for 50+'' project, with supports from 2020 Processing Foundation fellowship program and Asia Culture Center (ACC).' - line 2581: ' teach-case16-content1' - line 2582: ' teach-case16-content1-1' - line 2583: ' teach-case16-content2' - line 2584: ' teach-case16-content2-1' - line 2585: ' teach-case16-content2-2' - line 2586: ' teach-case16-content3' - line 2587: ' teach-case16-content4' - line 2588: ' Addressing the digital literacy and rights of age 50+ population in a non-English-speaking country,' - line 2589: ' this workshop aimed to lower their physical, lingual, and emotional barriers to learning coding with smartphone-based p5.js editor.' - line 2590: ' teach-case16-content5' - line 2591: ' p5for50+ web app' - line 2592: ' teach-case16-content5-1' - line 2593: ' a smartphone-based web app, with p5.js web editor embedded in it. Created with the editor, the participants'' p5 sketches were printed out and framed on-site, and distributed as their materialized outcomes.' - line 2594: ' teach-case16-content5-2' - line 2595: ' teach-case16-content5-3' - line 2596: ' teach-case16-content5-4' - line 2609: ' teach-case17-title' - line 2610: ' teach-case17-lead-name' - line 2611: ' teach-case17-speech' - line 2612: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 2613: ' teach-case17-content1' - line 2614: ' teach-case17-content1-1' - line 2615: ' teach-case17-content2' - line 2616: ' teach-case17-content3' - line 2617: ' teach-case17-content4' - line 2618: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 2619: ' teach-case17-content5' - line 2620: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 2621: ' teach-case17-content5-1' + line 424: ' with p5.js.' + line 433: ' presentations. I used' + line 84: ' copyright1' +hi: + src/data/en.yml: + line 883: ' p5.fab' + line 26: footer6 + line 25: footer2 + line 27: footer4 + line 28: footer5 + line 29: footer6 + line 30: footer7 + line 31: footer8 + line 32: footer9 + line 85: ' under the terms of the ' + line 84: ' copyright1' + line 871: ' p5.input' + line 872: ' ui' + line 873: ' p5.web-serial' + line 874: ' A p5.js library for using the Web Serial API to access devices like Arduino, ' + line 875: ' no setup required.' + line 876: ' p5.wasm.core' + line 877: ' p5.videorecorder' + line 878: ' p5.mapper' + line 879: ' p5.mapper is a projection mapping library for p5.js. This library makes it ' + line 880: ' easy to code and keystone interactive, algorithmic sketches.' + line 881: ' p5.teach' + line 882: ' A beginner friendly math animation library for p5.js. Created with mentorship ' ko: src/data/en.yml: - line 1517: ' Woman speaks at a podium in an auditorium while three participants sit on' - line 1527: ' , advancing the code, documentation, and community outreach tools and' - line 1528: ' exploring the current landscape of the p5.js programming environment.' - line 1537: ' output1' - line 1545: ' , testing early implementations of softCompile, OSC interfacing and added' - line 1546: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' - line 1547: ' environment! Created by Ted Davis.' - line 1548: ' output4' - line 1549: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' - line 1550: ' with shawné michaelain holloway and LaJuné McMillian.' - line 1551: ' output5' - line 1552: ' output6' - line 1553: ' output6-1' - line 1554: ' output6-2' - line 1555: ' output7' - line 1556: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' - line 1557: ' Jon Chambers.' - line 1558: ' output8' - line 1559: ' output8-1' - line 1560: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' - line 1561: ' Ye, Dorothy R. Santos, and Yasheng She.' - line 1562: ' output9' - line 1563: ' output9-1' - line 1564: ' output10' - line 1565: ' An overhaul of the p5.js website for accessibility. Including updates for' - line 1566: ' screen reader accessibility, and improvements to the home, download, getting' - line 1567: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' - line 1568: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' - line 1569: ' McCarthy, and Evelyn Masso.' - line 1570: ' output11' - line 1571: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' - line 1572: ' Sona Lee, Ted Davis, and Carlos Garcia.' - line 1573: ' output12' - line 1574: ' output13' - line 1575: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' - line 1576: ' Tarakajian and Luca Damasco.' - line 1577: ' output14' - line 1578: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' - line 1579: ' Lauren Valley.' - line 1580: ' output15' - line 1581: ' 2019cc_1' - line 1582: ' 2019cc_2' - line 1583: ' 2019cc_3' - line 1584: ' 2019cc_4' - line 1585: ' 2019cc_5' - line 1586: ' 2019cc_6' - line 1587: ' 2019cc_7' - line 1588: ' 2019cc_8' - line 1589: ' 2019cc_9' - line 1590: ' Participant speaks at a podium in front of projected text about the problem' - line 1591: ' with anonymyzing data' - line 1592: ' 2019cc_10' - line 1593: ' Person with a microphone speaking to fellow participants in front of text' - line 1594: ' that reads p5.js will not add any new features except those that increase' - line 1595: ' access' - line 1596: ' 2019cc_11' - line 1597: ' 2019cc_12' - line 1598: ' 2019cc_13' - line 1599: ' 2019cc_14' - line 1600: ' 2019cc_15' - line 1601: ' Woman with microphone speaking to fellow participants with the text sacred' - line 1602: ' boundaries in the projection behind her' - line 1603: ' 2019cc_16' - line 1604: ' Overhead view of participants listening to a panel of people with an image' - line 1605: ' of a 3d rendered man on it' - line 1606: ' 2019cc_17' - line 1607: ' Participants sit around a table with their laptops and observe code on a' - line 1608: ' screen' - line 1609: ' 2019cc_18' - line 1610: ' 2019cc_19' - line 1611: ' 2019cc_20' - line 1612: ' 2019cc_21' - line 1613: ' 2019cc_22' - line 1614: ' Participants sitting around a large U shaped table looking towards the front' - line 1615: ' of the classroom' - line 1616: ' 2019cc_23' - line 1617: ' Man sitting in front of the classroom speaking energetically into a' - line 1618: ' microphone' - line 1619: ' 2019cc_24' - line 1620: ' Group photo of participants smiling enthusiastically with their hands in the' - line 1621: ' air' - line 1622: ' 2019cc_25' - line 1123: ' p5.collide2D provides tools for calculating collision detection for 2D' - line 1124: ' geometry with p5.js.' - line 1125: ' p5.createloop' - line 1126: ' p5.dimensions' - line 1127: ' p5.dimensions extends p5.js'' vector functions to work in any number of' - line 1128: ' dimensions.' - line 1129: ' p5.EasyCam' - line 1130: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' - line 1131: ' contributions by Thomas Diewald.' - line 1132: ' p5.experience' - line 1133: ' Extensive library for p5.js that adds additional event-listening' - line 1134: ' functionality for creating canvas-based web applications.' - line 97: ' p1xh1' - line 96: ' start-creating' - line 114: ' acknowledge that not everyone has the time, financial means, or capacity to' - line 113: ' political opinion, age, skill level, occupation, and background. We' - line 115: ' actively participate, but we recognize and encourage involvement of all' - line 102: ' software, and the tools to learn it, should be accessible to everyone.' - line 103: ' p1x2' - line 104: ' Using the metaphor of a sketch, p5.js has a full set of drawing' - line 105: ' functionality. However, you’re not limited to your drawing canvas. You can' - line 251: ' download9' - line 256: ' you would like to use the minified version (compressed for faster page' - line 269: ' environment4' - line 265: ' environment1' - line 266: ' environmentlink' - line 267: ' environment2' - line 268: ' environment3' - line 275: ' environment8' - line 276: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' - line 277: ' that your html and js files are located in. On the left sidebar, you should' + line 883: ' p5.fab' + line 875: ' no setup required.' + line 871: ' p5.input' + line 872: ' ui' + line 873: ' p5.web-serial' + line 874: ' A p5.js library for using the Web Serial API to access devices like Arduino, ' + line 876: ' p5.wasm.core' + line 877: ' p5.videorecorder' + line 878: ' p5.mapper' + line 879: ' p5.mapper is a projection mapping library for p5.js. This library makes it ' + line 880: ' easy to code and keystone interactive, algorithmic sketches.' + line 881: ' p5.teach' + line 882: ' A beginner friendly math animation library for p5.js. Created with mentorship ' + line 85: ' under the terms of the ' + line 26: footer6 + line 25: footer2 + line 27: footer4 + line 31: footer8 + line 32: footer9 + line 28: footer5 + line 29: footer6 + line 30: footer7 + line 1174: ' The Summer 2021 Showcase' + line 270: ' particular topics. Check out the' + line 288: ' to the index.html containing your p5.js sketch.' + line 297: ' file and the embed.html file for the sketch.' + line 306: ' be' + line 310: ' stylesheet)' + line 319: ' was ported to P5 by Kelly Chang. If you find any errors or have comments,' + line 330: ' background(255); // Setting the background to white' + line 331: ' stroke(0); // Setting the outline (stroke) to black' + line 332: ' fill(150); // Setting the interior of a shape (fill) to grey' + line 340: ' black. Also, remember not to eliminate both—with' + line 349: ' percentage). You can do this by specifying a custom' + line 358: ' want to use the' + line 363: ' and the bottom right corner). The mode here is' + line 374: ' Using p5.js, this book introduces and demonstrates the reflexive practice' + line 375: ' of aesthetic programming, engaging with learning to program as a way to' + line 376: ' understand and question existing technological objects and paradigms,' + line 385: ' p5.js work or your own to be featured here! If Google is not available in your region, please email chankati@usc.edu to submit!' + line 394: ' environments.' + line 398: ' better connect the p5.js learner and educator communities around the world.' + line 407: ' examples.' + line 415: ' links available in' + line 261: ' the' + line 279: ' of the p5js site. The file called index.hbs is the' + line 442: ' .pdf format, all hosted publicly on GitHub.' + line 1536: ' teach-case2-image-alt' + line 1544: ' teach-case4-image-alt' + line 1552: ' teach-case6-image-alt' + line 1560: ' teach-case8-image-alt' + line 1568: ' teach-case9-image-alt' + line 1576: ' teach-case11-image-alt' + line 1584: ' teach-case12-image-alt' + line 1123: ' book-6-title' + line 1124: ' book-6-authors' + line 1125: ' book-6-publisher' + line 1126: ' book-6-pages' + line 1127: ' book-6-type' + line 1128: ' book-6-description' + line 1129: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' + line 1130: ' of aesthetic programming, engaging with learning to program as a way to ' + line 1131: ' understand and question existing technological objects and paradigms, ' + line 1132: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' + line 1133: ' book-6-order-a' + line 1134: ' book-6-order-b' + line 162: ' library in your html. To learn more visit ' + line 163: ' library in your html. To learn more visit ' + line 164: ' your-first-sketch7' + line 97: ' get-started-button' + line 96: ' get-started7' + line 114: ' environment15' + line 113: ' environment14' + line 115: ' environment16' + line 102: ' download8' + line 103: ' download9' + line 104: ' download10' + line 105: ' download11' + line 251: ' We need your help! p5.js is free, open-source software. We want to make our community as open' + line 256: ' , the organization that supports p5.js.' + line 269: ' Your donation supports software development for p5.js, education resources' + line 265: ' and inclusive as possible. You can support this work by making a donation to' + line 266: ' the ' + line 267: ' support-2' + line 268: ' , the organization that supports p5.js. We need your help!' + line 275: ' support-3' + line 276: ' support-4' + line 277: ' support-5' line 37: Editor line 55: footer5 line 123: ' p3xh2' @@ -2212,7 +1960,7 @@ ko: line 128: ' p3xp5' line 59: tagline4 line 136: ' p4xp6' - line 243: ' get-started-button' + line 243: ' settingUp-title' line 62: tagline7 line 45: Books line 34: Language-Settings @@ -2240,102 +1988,90 @@ ko: line 127: ' p3xp4' line 137: ' sketch_credits' line 138: ' sketch_info' - line 270: ' environment5' - line 271: ' environment6' - line 272: ' If you are a screen reader user and not using the p5 web editor, you may' - line 273: ' want to use' - line 282: ' edit it.' - line 283: ' environment10' - line 284: ' environment11' - line 285: ' Open the index.html file in your browser by double clicking on it in your' - line 286: ' file manager or type' - line 287: ' environment12' - line 288: ' environment14' - line 289: ' environment15' - line 290: ' environment16' - line 291: ' environment13' - line 292: ' your-first-sketch-title' - line 293: ' your-first-sketch-intro1' - line 294: ' your-first-sketch-intro2' - line 295: ' your-first-sketch-intro3' - line 296: ' your-first-sketch-intro4' - line 297: ' your-first-sketch1' - line 298: ' your-first-sketch2' - line 299: ' your-first-sketch3' - line 300: ' your-first-sketch4' - line 301: ' The line you just added draws an ellipse, with its center 50 pixels over' - line 302: ' from the left and 50 pixels down from the top, with a width and height of 80' - line 303: ' pixels.' - line 304: ' your-first-sketch5' - line 305: ' your-first-sketch6' - line 306: ' If you are using a screen reader, you must turn on the accessible outputs in' - line 307: ' the p5 online editor, outside the editor you must add the accessibility' - line 308: ' library in your html. To learn more visit ' - line 309: ' your-first-sketch7' - line 310: ' your-first-sketch8' - line 311: ' If you''ve typed everything correctly, this will appear in the display' - line 312: ' window' - line 313: ' your-first-sketch9' - line 314: ' your-first-sketch10' - line 315: ' If nothing appears, the editor may be having trouble understanding what' - line 316: ' you’ve typed. If this happens, make sure that you''ve copied the example code' - line 317: ' exactly' - line 318: ' between each of them, the line should end with a semicolon, and ellipse has' - line 319: ' to be spelled correctly.' - line 320: ' your-first-sketch11' - line 321: ' One of the most difficult things about getting started with programming is' - line 322: ' that you have to be very specific about the syntax. The browser isn''t always' - line 323: ' smart enough to know what you mean, and can be quite fussy about the' - line 324: ' placement of punctuation. You''ll get used to it with a little practice. In' - line 325: ' the bottom left of the editor you will find the console section. Here, you' - line 326: ' can find messages from the editor with details about any errors it' - line 327: ' encounters.' - line 328: ' your-first-sketch12' - line 329: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' - line 330: ' last example to try this' - line 331: ' your-first-sketch13' - line 332: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' - line 333: ' and then starts drawing white circles at the position of the mouse. When a' - line 334: ' mouse button is pressed, the circle color changes to black. Run the code,' - line 335: ' move the mouse, and click to experience it.' - line 336: ' your-first-sketch14' - line 337: ' first-sketch-heading1' - line 338: ' first-sketch-heading2' - line 339: ' first-sketch-heading3' - line 340: ' what-next-title' - line 341: ' learn1' - line 342: ' learn2' - line 343: ' learn3' - line 344: ' learn4' - line 345: ' learn5' - line 346: ' learn6' - line 347: ' learn7' - line 348: ' learn8' - line 349: ' learn9' - line 350: ' learn10' - line 351: ' reference1' - line 352: ' reference2' - line 353: ' reference3' - line 354: ' learn11' - line 355: ' learn12' - line 356: ' processing-transition1' + line 271: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' + line 272: ' that your html and js files are located in. On the left sidebar, you should' + line 273: ' find the folder name at the top, with a list of the files contained in the' + line 282: ' environment12' + line 283: ' environment13' + line 284: ' your-first-sketch-title' + line 285: ' your-first-sketch-intro1' + line 286: ' your-first-sketch-intro2' + line 287: ' your-first-sketch-intro3' + line 289: ' your-first-sketch1' + line 290: ' your-first-sketch2' + line 291: ' your-first-sketch3' + line 292: ' your-first-sketch4' + line 293: ' The line you just added draws an ellipse, with its center 50 pixels over' + line 294: ' from the left and 50 pixels down from the top, with a width and height of 80' + line 295: ' pixels.' + line 296: ' your-first-sketch5' + line 298: ' If you are using a screen reader, you must turn on the accessible outputs in' + line 299: ' the p5 online editor, outside the editor you must add the accessibility' + line 300: ' library in your html. To learn more visit' + line 301: ' your-first-sketch7' + line 302: ' your-first-sketch8' + line 303: ' If you''ve typed everything correctly, this will appear in the display' + line 304: ' window' + line 305: ' your-first-sketch9' + line 307: ' If nothing appears, the editor may be having trouble understanding what' + line 308: ' you’ve typed. If this happens, make sure that you''ve copied the example code' + line 309: ' exactly' + line 311: ' to be spelled correctly.' + line 312: ' your-first-sketch11' + line 313: ' One of the most difficult things about getting started with programming is' + line 314: ' that you have to be very specific about the syntax. The browser isn''t always' + line 315: ' smart enough to know what you mean, and can be quite fussy about the' + line 316: ' placement of punctuation. You''ll get used to it with a little practice. In' + line 317: ' the bottom left of the editor you will find the console section. Here, you' + line 318: ' can find messages from the editor with details about any errors it' + line 320: ' your-first-sketch12' + line 321: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' + line 322: ' last example to try this' + line 323: ' your-first-sketch13' + line 324: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' + line 325: ' and then starts drawing white circles at the position of the mouse. When a' + line 326: ' mouse button is pressed, the circle color changes to black. Run the code,' + line 327: ' move the mouse, and click to experience it.' + line 328: ' your-first-sketch14' + line 329: ' first-sketch-heading1' + line 333: ' learn1' + line 334: ' learn2' + line 335: ' learn3' + line 336: ' learn4' + line 337: ' learn5' + line 338: ' learn6' + line 339: ' learn7' + line 341: ' learn9' + line 342: ' learn10' + line 343: ' reference1' + line 344: ' reference2' + line 345: ' reference3' + line 346: ' learn11' + line 347: ' learn12' + line 348: ' processing-transition1' + line 350: ' processing-transition3' + line 351: ' processing-transition4' + line 352: ' book1' + line 353: ' Parts of this tutorial were adapted from the book, Getting Started with' + line 354: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' + line 355: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' + line 356: ' Contributors Conference.' line 44: Examples line 57: tagline2 line 146: ' copyright-title' line 231: ' get-started-title' line 240: ' . If you would like to work on the the desktop version of p5.js you can' - line 258: ' download5' - line 281: ' Click on your sketch.js file and it will open on the right where you can' + line 258: ' download7' + line 281: ' file manager or type' line 54: footer4 line 110: ' We are a community of, and in solidarity with, people from every gender' line 239: ' get-started6' - line 259: ' Alternatively, you can link to a p5.js file hosted online. All versions of' - line 274: ' environment7' - line 875: ' Make sure your embed.html file has the correct paths to the p5 libraries of' + line 259: ' environment-title' + line 274: ' folder directly below.' line 233: ' This page walks you through setting up a p5.js project and making your first' line 234: ' sketch.' - line 244: ' settingUp-title' - line 245: ' download-title' + line 244: ' download-title' + line 245: ' hosted-title' line 50: footerxh1 line 98: ' p1x1' line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making' @@ -2346,1317 +2082,16 @@ ko: line 46: Community line 133: ' p4xp3' line 134: ' p4xp4' - line 357: ' processing-transition2' - line 358: ' processing-transition3' - line 359: ' processing-transition4' - line 360: ' book1' - line 361: ' Parts of this tutorial were adapted from the book, Getting Started with' - line 362: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' - line 363: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' - line 364: ' Contributors Conference.' - line 33: Skip-To-Content - line 47: Contribute - line 48: Forum - line 49: Showcase - line 51: footer1 - line 52: footer2 - line 53: footer3 - line 58: tagline3 - line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' - line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' - line 107: ' text, input, video, webcam, and sound.' - line 108: ' p2xh2' - line 130: ' p4xh2' - line 131: ' p4xp1' - line 132: ' p4xp2' - line 135: ' p4xp5' - line 147: ' copyright1' - line 149: ' under the terms of the' - line 150: ' copyright2' - line 151: ' copyright3' - line 152: ' copyright4' - line 232: ' get-started1' - line 235: ' get-started2' - line 236: ' get-started3' - line 237: ' get-started4' - line 238: ' get-started5' - line 241: ' scroll down to' - line 242: ' get-started7' - line 246: ' hosted-title' - line 247: ' download1' - line 248: ' download2' - line 249: ' download3' - line 250: ' download8' - line 252: ' download10' - line 253: ' download11' - line 254: ' download4' - line 255: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' - line 257: ' loading), change the link to p5.min.js.' - line 260: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' - line 261: ' of these versions in the' - line 262: ' download6' - line 263: ' download7' - line 264: ' environment-title' - line 278: ' find the folder name at the top, with a list of the files contained in the' - line 279: ' folder directly below.' - line 280: ' environment9' - line 444: ' Download' - line 445: ' download-intro' - line 446: ' Welcome! While titled "Download" this page actually contains a collection of' - line 447: ' links to either download the library or begin working with it online. We''ve' - line 448: ' tried to order things to reflect what a beginner might want first, to' - line 449: ' resources that more experienced programmers may be looking for.' - line 450: ' editor-title' - line 451: ' p5.js-editor' - line 452: ' p5.js-editor-intro' - line 453: ' This link redirects you to the p5.js Editor online so you can begin using' - line 454: ' p5.js immediately.' - line 455: ' editor-includes' - line 456: ' complete-library-title' - line 457: ' complete-library-intro1' - line 458: ' This is a download containing the p5.js library file, the p5.sound addon,' - line 459: ' and an example project. It does not contain an editor. Visit' - line 460: ' complete-library-intro2' - line 461: ' complete-library-intro3' - line 462: ' p5.js-complete' - line 463: ' includes-1' - line 464: ' includes-2' - line 465: ' includes-3' - line 466: ' single-files-title' - line 467: ' single-files-intro' - line 468: ' These are downloads or links to the p5.js library file. No additional' - line 469: ' contents are included.' - line 470: ' single-file' - line 471: ' p5.js-uncompressed' - line 472: ' compressed' - line 473: ' link' - line 474: ' statically-hosted-file' - line 475: ' etc-title' - line 476: ' older-releases' - line 477: ' github-repository' - line 478: ' report-bugs' - line 479: ' supported-browsers' - line 480: ' support-title' - line 481: ' support-options' - line 482: ' support-1' - line 483: ' We need your help! p5.js is free, open-source software. We want to make our community as open' - line 484: ' and inclusive as possible. You can support this work by making a donation to' - line 485: ' the ' - line 486: ' support-2' - line 487: ' , the organization that supports p5.js.' - line 488: ' Your donation supports software development for p5.js, education resources' - line 489: ' like code examples and tutorials,' - line 490: ' support-3' - line 491: ' support-4' - line 492: ' support-5' - line 493: ' support-17' - line 494: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 495: ' Pittsburgh (Image credit' - line 496: ' support-18' - line 497: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' - line 498: ' workshops in London (Image credit' - line 499: ' support-19' - line 500: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' - line 501: ' Kira Simon-Kennedy)' - line 502: ' support-20' - line 503: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 504: ' (Image credit' - line 505: ' support-21' - line 506: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' - line 507: ' credit' - line 508: ' support-22' - line 509: ' support-23' - line 510: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 511: ' (Image credit' - line 512: ' support-24' - line 513: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' - line 514: ' workshop led by Taeyoon Choi (Image credit' - line 515: ' support-25' - line 516: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 517: ' Pittsburgh (Image credit' - line 518: ' support-26' - line 519: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' - line 520: ' International Center of Photography (Image credit' - line 521: ' Photography)' - line 522: ' support-27' - line 523: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' - line 524: ' Montoya-Moraga (Image credit' - line 525: ' support-28' - line 526: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' - line 527: ' led by Taeyoon Choi (Image credit' - line 528: ' support-29' - line 529: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' - line 530: ' Angeles (Image credit' - line 531: ' support-30' - line 532: ' support-31' - line 533: ' support-32' - line 534: ' support-33' - line 535: ' support-17-alt' - line 536: ' support-18-alt' - line 537: ' support-19-alt' - line 538: ' support-20-alt' - line 539: ' support-21-alt' - line 540: ' support-22-alt' - line 541: ' support-23-alt' - line 542: ' support-24-alt' - line 543: ' support-25-alt' - line 544: ' support-26-alt' - line 545: ' support-27-alt' - line 546: ' support-28-alt' - line 547: ' support-29-alt' - line 548: ' support-30-alt' - line 549: ' support-31-alt' - line 729: ' teach-title2' - line 730: ' learn1' - line 731: ' These tutorials provide more in-depth or step-by-step overviews of' - line 732: ' particular topics. Check out the ' - line 733: ' learn2' - line 734: ' learn3' - line 735: ' introduction-to-p5js-title' - line 736: ' hello-p5js-title' - line 737: ' hello-p5js' - line 738: ' This short video will introduce you to the library and what you can do with' - line 739: ' it.' - line 740: ' getting-started-title' - line 741: ' getting-started' - line 742: ' Welcome to p5.js!
This introduction covers the basics of setting up a' - line 743: ' p5.js project.' - line 744: ' p5js-overview-title' - line 745: ' p5js-overview' - line 746: ' p5js-processing-title' - line 747: ' p5js-processing' - line 748: ' The main differences between the two, and how to convert from one to the' - line 749: ' other.' - line 750: ' p5-screen-reader-title' - line 751: ' p5-screen-reader' - line 752: ' using-local-server-title' - line 753: ' using-local-server' - line 754: ' p5js-wiki-title' - line 755: ' p5js-wiki' - line 756: ' connecting-p5js-title' - line 757: ' creating-libraries-title' - line 758: ' creating-libraries' - line 759: ' nodejs-and-socketio-title' - line 760: ' nodejs-and-socketio' - line 761: ' programming-topics-title' - line 762: ' beyond-the-canvas-title' - line 763: ' beyond-the-canvas' - line 764: ' 3d-webgl-title' - line 765: ' 3d-webgl' - line 766: ' color-title' - line 767: ' color' - line 768: ' coordinate-system-and-shapes-title' - line 769: ' coordinate-system-and-shapes' - line 770: ' interactivity-title' - line 771: ' interactivity' - line 772: ' program-flow-title' - line 773: ' program-flow' - line 774: ' curves-title' - line 775: ' curves' - line 776: ' An introduction to the three types of curves in p5.js' - line 777: ' and Bézier curves.' - line 778: ' becoming-a-better-programmer-title' - line 779: ' debugging-title' - line 780: ' debugging' - line 781: ' optimizing-title' - line 782: ' optimizing' - line 783: ' A tutorial of tips and tricks for optimizing your code to make it run faster' - line 784: ' and smoother.' - line 785: ' test-driven-development-title' - line 786: ' test-driven-development' - line 787: ' Save yourself from agony on install day. What is unit testing and how to use' - line 788: ' it? By Andy Timmons.' - line 789: ' contributing-to-the-community-title' - line 790: ' development-title' - line 791: ' development' - line 792: ' looking-inside-title' - line 793: ' looking-inside' - line 794: ' A friendly intro to the file structure and tools for p5.js development, by' - line 795: ' Luisa Pereira.' - line 796: ' writing-tutorial-title' - line 797: ' writing-tutorial' - line 798: ' writing-a-tutorial-title' - line 799: ' writing-a-tutorial-author' - line 800: ' writing-a-tutorial-1' - line 801: ' We invite educators, contributors and general enthusiasts to contribute p5js' - line 802: ' tutorials. The p5js project makes creative coding and open source' - line 803: ' development more accessible to a diverse community and we are excited to' - line 804: ' publish tutorials on all aspects of the development process. Our learning' - line 805: ' materials so far include guides on learning p5, programming technique and' - line 806: ' how to contribute to an open source project.' - line 807: ' writing-a-tutorial-2' - line 808: ' We welcome new written tutorial contributions and this guide outlines the' - line 809: ' steps of how to propose, prepare and contribute.' - line 810: ' writing-a-tutorial-how-start-title' - line 811: ' writing-a-tutorial-how-start-1' - line 812: ' writing-a-tutorial-how-start-2' - line 813: ' writing-a-tutorial-how-start-3' - line 814: ' that outlines in progress tutorials. If your topic is listed as in progress,' - line 815: ' perhaps you can add to work being done and contribute to preparing existing' - line 816: ' work for publication so please reach out to us.' - line 817: ' writing-a-tutorial-how-start-4' - line 818: ' If your topic is not already covered and is not listed as in progress,' - line 819: ' please write a few sentences on what you propose to cover and email us this' - line 820: ' description at education@p5js.org.' - line 821: ' writing-a-tutorial-how-prepare-title' - line 822: ' writing-a-tutorial-how-prepare-1' - line 823: ' When your tutorial is ready for publication, please follow these steps to' - line 824: ' prepare your content for the p5js website.' - line 825: ' writing-a-tutorial-how-prepare-2' - line 826: ' writing-a-tutorial-how-prepare-3' - line 827: ' writing-a-tutorial-how-prepare-4' - line 828: ' writing-a-tutorial-how-prepare-5' - line 829: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' - line 830: ' of the p5js site. The file called index.hbs is the ' - line 831: ' writing-a-tutorial-how-prepare-6' - line 832: ' writing-a-tutorial-how-prepare-7' - line 833: ' writing-a-tutorial-how-prepare-8' - line 834: ' writing-a-tutorial-how-prepare-9' - line 835: ' tags on the page, with formatting defined by the <h1> and <h2>' - line 836: ' tags, the <p> paragraph tags as is done shown on the' - line 837: ' writing-a-tutorial-how-prepare-10' - line 838: ' writing-a-tutorial-how-prepare-11' - line 839: ' If your tutorial contains images, they are to be placed in the assets folder' - line 840: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' - line 841: ' shown below.' - line 842: ' writing-a-tutorial-how-prepare-12' - line 843: ' writing-a-tutorial-embedding-title' - line 844: ' writing-a-tutorial-embedding-1' - line 845: ' Using p5js means you can illustrate your tutorial with animated, interactive' - line 846: ' or editable code examples to demonstrate programming concepts. Your examples' - line 847: ' should be prepared as p5.js sketches and can be embedded into the tutorial' - line 848: ' in two ways.' - line 849: ' writing-a-tutorial-embedding-2' - line 850: ' writing-a-tutorial-embedding-3' - line 851: ' writing-a-tutorial-embedding-4' - line 852: ' writing-a-tutorial-embedding-5' - line 853: ' writing-a-tutorial-embedding-6' - line 854: ' writing-a-tutorial-embedding-7' - line 855: ' writing-a-tutorial-embedding-8' - line 856: ' writing-a-tutorial-embedding-9' - line 857: ' writing-a-tutorial-embedding-10' - line 858: ' If the example is to be animated and/or interactive but not editable. The' - line 859: ' p5.js sketch should be embedded into the page as an iframe as described' - line 860: ' below.' - line 861: ' writing-a-tutorial-iframe-title' - line 862: ' writing-a-tutorial-iframe-1' - line 863: ' An iframe is like creating a window through which you can explore another' - line 864: ' page, sandboxed from the rest of your page. In this case it will be a window' - line 865: ' to the index.html containing your p5.js sketch. ' - line 866: ' writing-a-tutorial-iframe-2' - line 867: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' - line 868: ' folder labelled with the name of your sketch as shown in the screenshot.' - line 869: ' This is where all the images and p5 sketches linked by iframe should be' - line 870: ' stored.' - line 871: ' writing-a-tutorial-iframe-3' - line 872: ' In the subfolders containing your p5 examples there should be a sketch.js' - line 873: ' file and the embed.html file for the sketch. ' - line 874: ' writing-a-tutorial-iframe-4' - line 876: ' the site. If your file structure is the same as above, the path to the p5.js' - line 877: ' library should be "../../../js/p5.min.js".' - line 878: ' writing-a-tutorial-iframe-5' - line 879: ' You can then embed the p5js index files as iframes in the .hbs file that' - line 880: ' contains your tutorial content. The embed code for the iframe would then' - line 881: ' be' - line 882: ' writing-a-tutorial-iframe-6' - line 883: ' Styling for the iframe (this could directly into the post or in a' - line 884: ' stylesheet)' - line 885: ' writing-a-tutorial-iframe-7' - line 886: ' writing-a-tutorial-iframe-8' - line 887: ' writing-a-tutorial-iframe-9' - line 888: ' One thing to note is that you need to manually set the size of the iframe,' - line 889: ' so it works best if things are a standard size.' - line 890: ' writing-a-tutorial-iframe-10' - line 891: ' Also note that the links to the p5.js library files do not happen from the' - line 892: ' .eps page with all the tutorial content. Instead they will be located in the' - line 893: ' html page that is rendering your sketch (in this case, called embed.html).' - line 894: ' writing-a-tutorial-iframe-11' - line 895: ' writing-a-tutorial-embed-iframe-12' - line 896: ' writing-a-tutorial-finishing-title' - line 897: ' writing-a-tutorial-finishing-1' - line 898: ' Once your have finished writing your tutorial and your content has been' - line 899: ' given the thumbs up. Fork the p5.js website repository, prepare your content' - line 900: ' as described above and then issue a pull request to the p5.js website' - line 901: ' repository so we can publish your contribution!' - line 902: ' writing-a-tutorial-finishing-2' - line 903: ' color-description1' - line 904: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' - line 905: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' - line 906: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' - line 907: ' color-description2' - line 908: ' color-p1x1' - line 909: ' In the digital world, when we want to talk about a color, precision is' - line 910: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' - line 911: ' Color, rather, is defined as a range of numbers. Let''s start with the' - line 912: ' simplest case' - line 913: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' - line 914: ' gray ranging from black to white.' - line 915: ' color-p2x1' - line 916: ' color-p2x2' - line 917: ' color-p2x3' - line 918: ' color-p2x4' - line 919: ' color-code1' - line 920: ' background(255); // Setting the background to white ' - line 921: ' stroke(0); // Setting the outline (stroke) to black ' - line 922: ' fill(150); // Setting the interior of a shape (fill) to grey ' - line 923: ' rect(50,50,75,100); // Drawing the rectangle' - line 924: ' color-p3x1' - line 925: ' color-p3x2' - line 926: ' color-p3x3' - line 927: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' - line 928: ' important to remember that 0 is not "nothing", but rather denotes the color' - line 929: ' black. Also, remember not to eliminate both—with ' - line 930: ' color-p3x4' - line 931: ' color-p3x5' - line 932: ' color-p4x1' - line 933: ' In addition, if we draw two shapes, p5.js will always use the most recently' - line 934: ' specified stroke and fill, reading the code from top to bottom.' - line 935: ' color-rgb-title' - line 936: ' color-rgb-p1x1' - line 937: ' Remember finger painting? By mixing three "primary" colors, any color could' - line 938: ' be generated. Swirling all colors together resulted in a muddy brown. The' - line 939: ' more paint you added, the darker it got. Digital colors are also constructed' - line 940: ' by mixing three primary colors, but it works differently from paint. First,' - line 941: ' the primaries are different' - line 942: ' with color on the screen, you are mixing light, not paint, so the mixing' - line 943: ' rules are different as well.' - line 944: ' color-rgb-li1' - line 945: ' color-rgb-li2' - line 946: ' color-rgb-li3' - line 947: ' color-rgb-li4' - line 948: ' color-rgb-li5' - line 949: ' color-rgb-p2x1' - line 950: ' This assumes that the colors are all as bright as possible, but of course,' - line 951: ' you have a range of color available, so some red plus some green plus some' - line 952: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' - line 953: ' While this may take some getting used to, the more you program and' - line 954: ' experiment with RGB color, the more it will become instinctive, much like' - line 955: ' swirling colors with your fingers. And of course you can''t say "Mix some red' - line 956: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' - line 957: ' the individual color elements are expressed as ranges from 0 (none of that' - line 958: ' color) to 255 (as much as possible), and they are listed in the order R, G,' - line 959: ' and B. You will get the hang of RGB color mixing through experimentation,' - line 960: ' but next we will cover some code using some common colors.' - line 961: ' color-transparency-title' - line 962: ' color-transparency-p1x1' - line 963: ' In addition to the red, green, and blue components of each color, there is' - line 964: ' an additional optional fourth component, referred to as the color''s "alpha".' - line 965: ' Alpha means transparency and is particularly useful when you want to draw' - line 966: ' elements that appear partially see-through on top of one another. The alpha' - line 967: ' values for an image are sometimes referred to collectively as the "alpha' - line 968: ' channel" of an image.' - line 969: ' color-transparency-p2x1' - line 970: ' It is important to realize that pixels are not literally transparent, this' - line 971: ' is simply a convenient illusion that is accomplished by blending colors.' - line 972: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' - line 973: ' one to a percentage of another, creating the optical perception of blending.' - line 974: ' (If you are interested in programming "rose-colored" glasses, this is where' - line 975: ' you would begin.)' - line 976: ' color-transparency-p3x1' - line 977: ' Alpha values also range from 0 to 255, with 0 being completely transparent' - line 978: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' - line 979: ' color-custom-ranges-title' - line 980: ' color-custom-ranges-p1x1' - line 981: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' - line 982: ' in p5.js, in fact, it allows us to think about color any way we like. For' - line 983: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' - line 984: ' percentage). You can do this by specifying a custom ' - line 985: ' color-custom-ranges-p2x1' - line 986: ' The above function says' - line 987: ' green, and blue. The range of RGB values will be from 0 to 100."' - line 988: ' color-custom-ranges-p3x1' - line 989: ' Although it is rarely convenient to do so, you can also have different' - line 990: ' ranges for each color component' - line 991: ' color-custom-ranges-p4x1' - line 992: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' - line 993: ' from 0 to 10, and alpha from 0 to 255."' - line 994: ' color-custom-ranges-p5x1' - line 995: ' Finally, while you will likely only need RGB color for all of your' - line 996: ' programming needs, you can also specify colors in the HSB (hue, saturation,' - line 997: ' and brightness) mode. Without getting into too much detail, HSB color works' - line 998: ' as follows' - line 999: ' color-custom-ranges-li1x1' - line 1000: ' color-custom-ranges-li1x2' - line 1001: ' color-custom-ranges-li2x1' - line 1002: ' color-custom-ranges-li2x2' - line 1003: ' color-custom-ranges-li3x1' - line 1004: ' color-custom-ranges-li3x2' - line 1005: ' color-custom-ranges-p6x1' - line 1006: ' color-custom-ranges-p6x2' - line 1007: ' coordinate-system-description1' - line 1008: ' coordinate-system-description2' - line 1009: ' coordinate-system-description3' - line 1010: ' coordinate-system-description4' - line 1011: ' coordinate-system-description5' - line 1012: ' coordinate-system-description-title' - line 1013: ' coordinate-system-description-p1x1' - line 1014: ' Before we begin programming with p5, we must first channel our eighth grade' - line 1015: ' selves, pull out a piece of graph paper, and draw a line. The shortest' - line 1016: ' distance between two points is a good old fashioned line, and this is where' - line 1017: ' we begin, with two points on that graph paper.' - line 1018: ' coordinate-system-description-p2x1' - line 1019: ' The above figure shows a line between point A (1,0) and point B (4,5). If' - line 1020: ' you wanted to direct a friend of yours to draw that same line, you would' - line 1021: ' give them a shout and say "draw a line from the point one-zero to the point' - line 1022: ' four-five, please." Well, for the moment, imagine your friend was a computer' - line 1023: ' and you wanted to instruct this digital pal to display that same line on its' - line 1024: ' screen. The same command applies (only this time you can skip the' - line 1025: ' pleasantries and you will be required to employ a precise formatting). Here,' - line 1026: ' the instruction will look like this' - line 1027: ' coordinate-system-description-p3x1' - line 1028: ' Even without having studied the syntax of writing code, the above statement' - line 1029: ' should make a fair amount of sense. We are providing a command (which we' - line 1030: ' will refer to as a "function") for the machine to follow entitled "line." In' - line 1031: ' addition, we are specifying some arguments for how that line should be' - line 1032: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' - line 1033: ' code as a sentence, the function is a verb and the arguments are the objects' - line 1034: ' of the sentence. The code sentence also ends with a semicolon instead of a' - line 1035: ' period.' - line 1036: ' coordinate-system-description-p4x1' - line 1037: ' The key here is to realize that the computer screen is nothing more than a' - line 1038: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' - line 1039: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' - line 1040: ' location of a point in space. And it is our job to specify what shapes and' - line 1041: ' colors should appear at these pixel coordinates.' - line 1042: ' coordinate-system-description-p5x1' - line 1043: ' Nevertheless, there is a catch here. The graph paper from eighth grade' - line 1044: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' - line 1045: ' pointing up and the x-axis pointing to the right (in the positive direction,' - line 1046: ' negative down and to the left). The coordinate system for pixels in a' - line 1047: ' computer window, however, is reversed along the y-axis. (0,0) can be found' - line 1048: ' at the top left with the positive direction to the right horizontally and' - line 1049: ' down vertically.' - line 1050: ' coordinate-system-simple-shapes-title' - line 1051: ' coordinate-system-simple-shapes-p1x1' - line 1052: ' The vast majority of p5 programming examples are visual in nature. These' - line 1053: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' - line 1054: ' begin by looking at four primitive shapes.' - line 1055: ' coordinate-system-simple-shapes-p2x1' - line 1056: ' For each shape, we will ask ourselves what information is required to' - line 1057: ' specify the location and size (and later color) of that shape and learn how' - line 1058: ' p5 expects to receive that information. In each of the diagrams below, we''ll' - line 1059: ' assume a window with a width of 100 pixels and height of 100 pixels.' - line 1060: ' coordinate-system-simple-shapes-p3x1' - line 1061: ' coordinate-system-simple-shapes-p3x2' - line 1062: ' coordinate-system-simple-shapes-p4x1' - line 1063: ' coordinate-system-simple-shapes-p4x2' - line 1064: ' coordinate-system-simple-shapes-p5x1' - line 1065: ' coordinate-system-simple-shapes-p5x2' - line 1066: ' , things become a bit more complicated. In p5, a rectangle is specified by' - line 1067: ' the coordinate for the top left corner of the rectangle, as well as its' - line 1068: ' width and height.' - line 1069: ' coordinate-system-simple-shapes-p6x1' - line 1070: ' A second way to draw a rectangle involves specifying the centerpoint, along' - line 1071: ' with width and height. If we prefer this method, we first indicate that we' - line 1072: ' want to use the ' - line 1073: ' coordinate-system-simple-shapes-p6x2' - line 1074: ' coordinate-system-simple-shapes-p7x1' - line 1075: ' Finally, we can also draw a rectangle with two points (the top left corner' - line 1076: ' and the bottom right corner). The mode here is ' - line 1077: ' coordinate-system-simple-shapes-p7x2' - line 1078: ' coordinate-system-simple-shapes-p8x1' - line 1079: ' coordinate-system-simple-shapes-p8x2' - line 1080: ' coordinate-system-simple-shapes-p8x3' - line 1081: ' coordinate-system-simple-shapes-p8x4' - line 1082: ' coordinate-system-simple-shapes-p8x5' - line 1083: ' coordinate-system-simple-shapes-p8x6' - line 1084: ' coordinate-system-simple-shapes-p9x1' - line 1085: ' Now let''s look at what some code with shapes in more complete form, with' - line 1086: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' - line 1087: ' to specify the width and height of the canvas.' - line 1088: ' teach-desc' - line 1089: test-tutorial - line 1147: ' p5.localmessage provides a simple interface to send messages locally from' - line 1148: ' one sketch to another for easy multi-window sketching!' - line 1149: ' marching' - line 1150: ' mappa' - line 1151: ' Mappa provides a set of tools for working with static maps, tile maps, and' - line 1152: ' geo-data. Useful when building geolocation-based visual representations.' - line 1153: ' ml5.js' - line 1154: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' - line 1155: ' learning algorithms and models in the browser.' - line 1156: ' p5.play' - line 1157: ' p5.play provides sprites, animations, input and collision functions for' - line 1158: ' games and gamelike applications.' - line 1159: ' p5.particle' - line 1160: ' The Particle and Fountain objects can be used to create data-driven effects' - line 1161: ' that are defined through user structures or JSON input and user-draw' - line 1162: ' functions.' - line 1163: ' p5.Riso' - line 1164: ' p5.Riso is a library for generating files suitable for Risograph printing.' - line 1165: ' It helps turn your sketches into multi-color prints.' - line 1166: ' rita.js' - line 1167: ' RiTa.js provides a set of natural language processing objects for generative' - line 1168: ' literature.' - line 1169: ' Rotating knobs' - line 1170: ' p5.scenemanager' - line 1171: ' p5.SceneManager helps you create sketches with multiple states / scenes.' - line 1172: ' Each scene is a like a sketch within the main sketch.' - line 1173: ' p5.screenPosition' - line 1174: ' p5.scribble' - line 1175: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' - line 1176: ' on a port of the original Processing library' - line 1177: ' p5.serial' - line 1178: ' p5.serial enables serial communication between devices that support serial' - line 1179: ' (RS-232) and p5 sketches running in the browser.' - line 1180: ' Shape5' - line 1181: ' Shape5 is a 2D primative library for elementary students who are learning to' - line 1182: ' code for the first time.' - line 1183: ' p5.shape.js' - line 1184: ' p5.speech' - line 1185: ' p5.speech provides simple, clear access to the Web Speech and Speech' - line 1186: ' Recognition APIs, allowing for the easy creation of sketches that can talk' - line 1187: ' and listen.' - line 1188: ' p5.start2d.js' - line 1189: ' p5.tiledmap' - line 1190: ' p5.tiledmap provides drawing and helper functions to include maps in your' - line 1191: ' sketches.' - line 1192: ' p5.touchgui' - line 1193: ' tramontana' - line 1194: ' Tramontana is a platform for easily use many devices (iOS, Android,' - line 1195: ' tramontana Board, ...) to create interactive environments, interactive' - line 1196: ' spaces or just prototype experiences at scale and in space.' - line 1197: ' vida' - line 1198: ' Vida is a simple library that adds camera (or video) based motion detection' - line 1199: ' and blob tracking functionality to p5js.' - line 1200: ' p5.voronoi' - line 1201: ' p5.voronoi provides a set of tools to draw and utilize voronoi diagrams in' - line 1202: ' your p5.js sketches.' - line 1203: ' p5.xr' - line 1204: ' p5.3D' - line 1205: ' using-a-library-title' - line 1206: ' using-a-library1' - line 1207: ' A p5.js library can be any JavaScript code that extends or adds to the p5.js' - line 1208: ' core functionality. There are two categories of libraries. Core libraries (' - line 1209: ' using-a-library3' - line 1210: ' ) are part of the p5.js distribution, while contributed libraries are' - line 1211: ' developed, owned, and maintained by members of the p5.js community.' - line 1212: ' using-a-library4' - line 1213: ' To include a library in your sketch, link it into your HTML file, after you' - line 1214: ' have linked in p5.js. An example HTML file might look like this' - line 1215: ' create-your-own-title' - line 1216: ' create-your-own1' - line 1217: ' create-your-own2' - line 1218: ' create-your-own3' - line 1219: ' create-your-own4' - line 1220: ' If you have created a library and would like to have it included on this' - line 1221: ' page, submit this form!' - line 1222: '>>>>>>> ded715d43dd9dd191404d8e380ba23112f647160' - line 1420: ' notes3' - line 1421: ' notes4' - line 1422: ' notes5' - line 1423: ' contribute-title' - line 1424: ' contribute1' - line 1425: ' Our community is always looking for enthusiasts to help in all different' - line 1426: ' ways.' - line 1427: ' develop-title' - line 1428: ' develop1' - line 1429: ' develop2' - line 1430: ' develop3' - line 1431: ' develop4' - line 1432: ' develop5' - line 1433: ' document-title' - line 1434: ' document1' - line 1435: ' document2' - line 1436: ' document3' - line 1437: ' document4' - line 1438: ' document5' - line 1439: ' teach-title' - line 1440: ' teach1' - line 1441: ' create-title' - line 1442: ' create1' - line 1443: ' create2' - line 1444: ' create3' - line 1445: ' donate-title' - line 1446: ' donate1' - line 1447: ' donate2' - line 1448: ' donate3' - line 1449: ' contributors-conference-title' - line 1450: ' contributors-conference1' - line 1451: ' While most work happens online, we also convene IRL. We''ve had two' - line 1452: ' contributors conferences held at the' - line 1453: ' contributors-conference2' - line 1454: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' - line 1455: ' developers, educators, and got together to advance the p5.js project.' - line 1456: ' participants-title' - line 1457: ' support-title' - line 1458: ' support1' - line 1459: ' support2' - line 1460: ' at Carnegie Mellon University, an academic laboratory for atypical,' - line 1461: ' anti-disciplinary, and inter-institutional research at the intersections of' - line 1462: ' arts, science, technology, and culture.' - line 1463: ' support3' - line 1464: ' support4' - line 1465: ' support5' - line 1466: ' support6' - line 1467: ' mailing-list-title' - line 1468: ' mailing-list-1' - line 1469: ' Enter your email address to receive occasional updates from the Processing' - line 1470: ' Foundation.' - line 1471: ' 2015contributors-conference-title' - line 1472: ' 2015contributors-conference-date' - line 1473: ' 2015contributors-conference1' - line 1474: ' 2015contributors-conference2' - line 1475: ' , advancing the code, documentation, and community outreach tools of the' - line 1476: ' p5.js programming environment. Participants came from as far away as Hong' - line 1477: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' - line 1478: ' professionals in the fields of creative technology, interaction design, and' - line 1479: ' new-media arts, but the group also included a half-dozen undergraduate and' - line 1480: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' - line 1481: ' 2015contributors-conference3' - line 1482: ' 2015contributors-conference-diversity-title' - line 1483: ' 2015contributors-conference-diversity1' - line 1484: ' Alongside technical development, one of the main focuses of this conference' - line 1485: ' was outreach, community, and diversity. The conference began with a panel' - line 1486: ' 2015contributors-conference-diversity2' - line 1487: ' Diversity' - line 1488: ' the Internet' - line 1489: ' 2015contributors-conference-diversity3' - line 1490: ' 2015contributors-conference-diversity4' - line 1491: ' 2015contributors-conference-diversity5' - line 1492: ' 2015contributors-conference-diversity6' - line 1493: ' 2015contributors-conference-diversity7' - line 1494: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' - line 1495: ' Mellon University. Speakers included' - line 1496: ' 2015contributors-conference-diversity8' - line 1497: ' 2015contributors-conference-diversity9' - line 1498: ' 2015cc_1' - line 1499: ' 2015cc_2' - line 1500: ' 2015cc_3' - line 1501: ' 2015cc_4' - line 1502: ' Woman expressively speaks into a microphone while two male collaborators' - line 1503: ' look on' - line 1504: ' 2015cc_5' - line 1505: ' 2015cc_6' - line 1506: ' 2015cc_7' - line 1507: ' Participants sit in a circle around a white board with sticky notes on it' - line 1508: ' while a female student speaks into a microphone' - line 1509: ' 2015cc_8' - line 1510: ' Participants sit around a table looking at each others laptops and compare' - line 1511: ' code' - line 1512: ' 2015cc_9' - line 1513: ' 2015cc_10' - line 1514: ' Woman speaking into a microphone about valuing different skill sets while a' - line 1515: ' group of participants with laptops look at her powerpoint in a classroom' - line 1516: ' 2015cc_11' - line 1518: ' the stage and another three are skyping in on the stage screen' - line 1519: ' 2015cc_12' - line 1520: ' 2015cc_13' - line 1521: ' 2015cc_14' - line 1522: ' 2015cc_15' - line 1523: ' 2019contributors-conference-title' - line 1524: ' 2019contributors-conference-date' - line 1525: ' 2019contributors-conference1' - line 1526: ' 2019contributors-conference2' - line 1529: ' Comprising a diverse range of participants within the fields of creative' - line 1530: ' technology, interaction design, and new media arts, the conference was aimed' - line 1531: ' at fostering dialogue through a multidisciplinary lens. Working groups' - line 1532: ' focused on several topic areas' - line 1533: ' Landscape of Creative Tech; and Internationalization.' - line 1534: ' 2019contributors-conference3' - line 1535: ' 2019contributors-conference4' - line 1536: ' outputs' - line 1538: ' . An implementation of highly flexible triangle, square, hexagon, and' - line 1539: ' octagon girds for p5.js. Created by Aren Davey.' - line 1540: ' output2' - line 1541: ' . A set of template files for building a multi-device, multiplayer game' - line 1542: ' where multiple clients can connect to a specified host page. Created by L05.' - line 1543: ' output3' - line 1544: ' output3-1' - line 1666: ' books-title' - line 1667: ' book-1-title' - line 1668: ' book-1-authors' - line 1712: ' book-4-order-b' - line 1713: ' book-5-title' - line 1714: ' book-5-authors' - line 1715: ' book-5-publisher' - line 1716: ' book-5-pages' - line 1717: ' book-5-type' - line 1718: ' book-5-description' - line 1719: ' Learn coding from scratch in a highly engaging and visual manner using the' - line 1720: ' vastly popular JavaScript with the programming library p5.js. The skills you' - line 1721: ' will acquire from this book are highly transferable to a myriad of' - line 1722: ' industries and can be used towards building web applications, programmable' - line 1723: ' robots, or generative art.' - line 1724: ' book-5-order-a' - line 1725: ' book-5-order-b' - line 1726: ' book-6-title' - line 1727: ' book-6-authors' - line 1728: ' book-6-publisher' - line 1729: ' book-6-pages' - line 1730: ' book-6-type' - line 1731: ' book-6-description' - line 1732: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' - line 1733: ' of aesthetic programming, engaging with learning to program as a way to ' - line 1734: ' understand and question existing technological objects and paradigms, ' - line 1735: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' - line 1736: ' book-6-order-a' - line 1737: ' book-6-order-b' - line 1766: ' Examples' - line 1767: ' back-examples' - line 1768: ' Structure' - line 1769: ' Form' - line 1770: ' Data' - line 1771: ' Arrays' - line 2005: ' creator-from-roni-cantor' - line 2006: ' project-links' - line 2007: ' project-links-text-1-roni-cantor' - line 2008: ' project-links-text-2-roni-cantor' - line 2009: ' project-q-1-1' - line 2010: ' project-q-1-2' - line 2011: ' project-a-1-1-roni-cantor' - line 2012: ' I just graduated from Ryerson University''s New Media program. Coming from 4' - line 2013: ' years of coding and making robots, I decided to take a break and play with' - line 2014: ' some more traditional forms of art—while still coding and playing with' - line 2015: ' robots.' - line 2016: ' project-a-1-2-roni-cantor' - line 2017: ' project-a-1-3-roni-cantor' - line 2018: ' project-a-1-4-roni-cantor' - line 2019: ' project-q-2' - line 2020: ' project-a-2-1-roni-cantor' - line 2021: ' I used p5.js in this project to generate the sine wave and lerp (linear' - line 2022: ' interpolation) formulas and display the visuals in the' - line 2023: ' project-a-2-2-roni-cantor' - line 2024: ' . I then used a feature in my code that exported my programmed graphic into' - line 2025: ' an' - line 2026: ' project-a-2-3-roni-cantor' - line 2027: ' project-a-2-4-roni-cantor' - line 2028: ' —so that it understood where to draw the lines that I programmed. I sent' - line 2029: ' this information to the plotter with a program called' - line 2030: ' project-a-2-5-roni-cantor' - line 2031: ' project-q-3' - line 2032: ' project-a-3-roni-cantor' - line 2033: ' project-q-4' - line 2034: ' Did you face any challenges working on this project? If so, how did you' - line 2035: ' overcome them?' - line 2036: ' project-a-4-roni-cantor' - line 2037: ' It was my first time using p5.js, Inkscape, and a plotter! I really' - line 2038: ' benefited from the people around me who had used p5 before, as well as' - line 2039: ' online guides and forums.' - line 2040: ' project-q-5' - line 2041: ' project-a-5-roni-cantor' - line 2042: ' project-q-6' - line 2043: ' project-a-6-roni-cantor' - line 2044: ' project-resources' - line 2045: ' creator-from-qianqian' - line 2046: ' interview-link-qianqian' - line 2047: ' project-a-1-1-qianqian' - line 2048: ' project-a-1-2-qianqian' - line 2049: ' My partner introduced me to p5.js, which I learned mainly by watching free' - line 2050: ' online video tutorials. My first p5.js project was drawing some shapes with' - line 2051: ' different colors.' - line 2052: ' project-a-2-1-qianqian' - line 2053: ' This project started with an idea of teaching my mom, who lives in China and' - line 2054: ' doesn’t speak English, to code with p5.js. This project was difficult on' - line 2055: ' multiple levels, and I wanted to start by identifying the main reasons why' - line 2056: ' it’s more challenging for someone like my mother to learn to code—primarily' - line 2057: ' due to the lack of free creative coding education resources. Most of the' - line 2058: ' free resources to learn creative coding are unavailable in China. The p5.js' - line 2059: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' - line 2060: ' inaccessible in China because of internet censorship.' - line 2061: ' project-a-2-2-qianqian' - line 2062: ' project-a-2-3-qianqian' - line 2063: ' , but the more I watched coding tutorials online, the more I realized how' - line 2064: ' difficult it is to find other womxn and people of color teaching coding,' - line 2065: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' - line 2066: ' creative coding.' - line 2067: ' project-a-2-4-qianqian' - line 2068: ' I am working on opening up the video channels to other Chinese creatives who' - line 2069: ' want to contribute to the educational resource together, like interviews and' - line 2070: ' guest tutorials. If you are interested in teaching/talking about creative' - line 2071: ' coding in Mandarin, HMU!' - line 2072: ' project-a-3-1-qianqian' - line 2073: ' project-a-3-2-qianqian' - line 2074: ' project-a-4-1-qianqian' - line 2075: ' Learning to code in a second language was difficult and the lack of' - line 2076: ' community made this process even harder. I hope to speak from my experience' - line 2077: ' as a beginner and someone who once felt like an outsider to the creative' - line 2078: ' coding and video tutorial world.' - line 2079: ' project-a-4-2-qianqian' - line 2080: ' I spend a lot of time researching the latest technology for my videos. In' - line 2081: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' - line 2082: ' encourage others that it doesn’t take a lot of expensive gears to get' - line 2083: ' started making instructional videos.' - line 2084: ' project-a-4-3-qianqian' - line 2085: ' Another issue I came across was my own fear of putting myself online. I' - line 2086: ' first had to get over my anxiety of making mistakes in the videos or' - line 2087: ' receiving negative comments online. Often womxn and people of color are' - line 2088: ' targets for online harassment. I’m hoping to help set an example for other' - line 2089: ' womxn and people of color that it’s ok to put yourselves online and' - line 2090: ' strengthen your communities by sharing your knowledge. Eventually, we will' - line 2091: ' be able to stop online harassment by creating strong diverse communities.' - line 2092: ' project-a-5-1-qianqian' - line 2093: ' project-a-5-2-qianqian' - line 2094: ' creator-from-phuong' - line 2095: ' project-a-1-1-phuong' - line 2096: ' link-1-phuong' - line 2097: ' link-2-phuong' - line 2098: ' link-3-phuong' - line 2099: ' project-a-1-2-phuong' - line 2100: ' project-a-1-3-phuong' - line 2101: ' I was taking a course at the School of Machines in Berlin this summer' - line 2102: ' called! "' - line 2103: ' project-a-1-4-phuong' - line 2104: ' project-a-2-1-phuong' - line 2105: ' I used p5.js to work on the visual part of the game. The animation sprites' - line 2106: ' for Airi and the ghosts were drawn on an iPad app called' - line 2107: ' project-a-2-2-phuong' - line 2108: ' project-a-2-3-phuong' - line 2109: ' project-a-2-4-phuong' - line 2110: ' p5-sketch-by-chjno-phuong' - line 2111: ' project-a-2-5-phuong' - line 2112: ' . I set a condition so whenever the word "pew" or a mouse click was' - line 2113: ' detected, the scrolling speed would change to make an illusion of Airi' - line 2114: ' flying up. When the user does not do anything, the scrolling speed is' - line 2115: ' negative, which makes it look like Airi is falling down.' - line 2116: ' project-a-2-6-phuong' - line 2117: ' project-a-2-7-phuong' - line 2118: ' project-a-3-1-phuong' - line 2119: ' I really love how easily you can create, manipulate, and delete HTML blocks' - line 2120: ' and classes with the' - line 2121: ' project-a-3-2-phuong' - line 2122: ' project-a-3-3-phuong' - line 2123: ' project-a-3-4-phuong' - line 2124: ' project-a-4-1-phuong' - line 2125: ' There were a lot of challenges simply because p5.js was something new to me.' - line 2126: ' I did not work much with JavaScript in general before. Reading documentation' - line 2127: ' and searching for similar examples helped a lot.' - line 2128: ' project-a-5-1-phuong' - line 2129: ' school-of-machines-phuong' - line 2130: ' project-a-5-2-phuong' - line 2131: ' ! They try hard to connect the most creative people in the world and they do' - line 2132: ' it well so far. ❤️' - line 2133: ' pronouns-male' - line 2134: ' creator-from-chung' - line 2135: ' link-1-casey-louise' - line 2136: ' link-2-casey-louise' - line 2137: ' link-1-chung' - line 2138: ' link-2-chung' - line 2139: ' link-3-chung' - line 2140: ' project-a-1-1-chung' - line 2141: ' I am a graphic designer and a faculty member at Maryland Institute College' - line 2142: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' - line 2143: ' and motion graphics.' - line 2144: ' project-a-1-2-chung' - line 2145: ' project-a-1-3-chung' - line 2146: ' project-a-2-1-chung' - line 2147: ' This summer, I gave myself a challenge of making typographic posters with' - line 2148: ' coding, and this is one of the posters I made. I didn’t know until very' - line 2149: ' recently that I could use motion sensor data with p5.js. I was also watching' - line 2150: ' dan-shiffman-matterjs-tutorial' - line 2151: ' project-a-2-2-chung' - line 2152: ' project-a-3-1-chung' - line 2153: ' There are many things I love about p5.js such as the online community and' - line 2154: ' beginner friendliness. What I really like right now is the' - line 2155: ' project-a-3-2-chung' - line 2156: ' , with which I can not only work online for myself but also share URLs' - line 2157: ' quickly in the present mode. For this project in particular, I had to do a' - line 2158: ' lot of testing on my phone, and it was much easier and quicker than' - line 2159: ' committing to GitHub.' - line 2160: ' project-a-4-1-chung' - line 2161: ' project-a-4-2-chung' - line 2162: ' project-a-4-3-chung' - line 2163: ' project-a-5-1-chung' - line 2164: ' As mentioned above, if you want to render out frames and video files out of' - line 2165: ' p5.js sketches, check out my' - line 2166: ' project-a-5-2-chung' - line 2167: ' creator-from-casey-louise' - line 2168: ' project-a-1-1-casey-louise' - line 2169: ' Casey' - line 2170: ' interactive spaces, physical and digital.' - line 2171: ' project-a-1-2-casey-louise' - line 2172: ' Louise' - line 2173: ' interactive spaces based on sensor technologies.' - line 2174: ' project-a-1-3-casey-louise' - line 2175: ' Casey' - line 2176: ' I had been dabbling in' - line 2177: ' project-a-1-4-casey-louise' - line 2178: ' project-a-1-5-casey-louise' - line 2179: ' Louise' - line 2180: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' - line 2181: ' me.' - line 2182: ' project-a-2-1-casey-louise' - line 2183: ' Casey' - line 2184: ' curious if I could use them in p5.js. Then I heard about a grant for open' - line 2185: ' source, storytelling, and learning resource projects at ITP called' - line 2186: ' project-a-2-2-casey-louise' - line 2187: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' - line 2188: ' decided to figure out how they''re implemented in p5.js and create a resource' - line 2189: ' for others to learn. When I told Louise about the project, she was' - line 2190: ' immediately excited about learning and teaching shaders in p5.js. She''s been' - line 2191: ' great about making sure the project is a learning resource and not just a' - line 2192: ' collection of examples.' - line 2193: ' project-a-3-1-casey-louise' - line 2194: ' project-a-3-2-casey-louise' - line 2195: ' project-a-3-3-casey-louise' - line 2196: ' project-a-3-4-casey-louise' - line 2197: ' project-a-3-5-casey-louise' - line 2198: ' project-a-4-1-casey-louise' - line 2199: ' Casey' - line 2200: ' reaching out to amazing people, asking questions, and asking for permission' - line 2201: ' to use their examples in our project.' - line 2202: ' adam-ferris-repo-casey-louise' - line 2203: ' project-a-4-2-casey-louise' - line 2204: ' project-a-4-3-casey-louise' - line 2205: ' project-a-4-4-casey-louise' - line 2206: ' webgl-casey-louise' - line 2207: ' project-a-4-5-casey-louise' - line 2208: ' project-a-4-6-casey-louise' - line 2209: ' Louise' - line 2210: ' Luckily, there were some very well-documented examples on GitHub by Adam' - line 2211: ' Ferriss. Our aim was to do so in a way that a complete beginner can' - line 2212: ' understand how to implement it, so it was as much a technical challenge as' - line 2213: ' it was a challenge in teaching code to strangers and beginners. Here we drew' - line 2214: ' inspiration from the way the' - line 2215: ' openframeworks-book-casey-louise' - line 2216: ' project-a-4-7-casey-louise' - line 2217: ' project-a-5-1-casey-louise' - line 2218: ' project-a-5-2-casey-louise' - line 2219: ' pronouns-nonbinary' - line 2220: ' creator-from-moon' - line 2221: ' posters-by' - line 2222: ' project-a-1-1-moon' - line 2223: ' Moon' - line 2224: ' summer, I taught a graphic design course in the University of Georgia' - line 2225: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' - line 2226: ' planning to teach and to study digital platforms at UGA.' - line 2227: ' project-a-1-2-moon' - line 2228: ' project-a-1-3-moon' - line 2229: ' project-a-1-4-moon' - line 2230: ' pcd-la-moon' - line 2231: ' project-a-1-5-moon' - line 2232: ' . They helped me with the tools and logics of p5.js. It was an excellent' - line 2233: ' teaching and learning experience.' - line 2234: ' project-a-2-1-moon' - line 2235: ' codetrain-moon' - line 2236: ' project-a-2-2-moon' - line 2237: ' p5-reference-moon' - line 2238: ' project-a-2-3-moon' - line 2239: ' project-a-3-1-moon' - line 2240: ' project-a-3-2-moon' - line 2241: ' project-a-3-3-moon' - line 2242: ' project-a-3-4-moon' - line 2243: ' . I was able to use and to teach this tool to visualize various ideas about' - line 2244: ' time in motion.' - line 2245: ' project-a-4-1-moon' - line 2246: ' It was challenging for me, a beginner, to understand the overall structure' - line 2247: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' - line 2248: ' couple of times, and then I drew a chart to memorize and to teach the way I' - line 2249: ' understood the p5.js structure and code with strong constraints I set up. It' - line 2250: ' was an excellent teaching and learning experience.' - line 2251: ' project-a-5-1-moon' - line 2252: ' project-a-5-2-moon' - line 2253: teach - line 2254: ' teach-title2' - line 2255: ' teach-intro1' - line 2256: ' Every teaching has its own unique goals, messages, conditions, and' - line 2257: ' environments. ' - line 2258: ' teach-intro2' - line 2259: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' - line 2260: ' better connect the p5.js learner and educator communities around the world. ' - line 2261: ' teach-intro3' - line 2262: ' teach-intro4' - line 2263: ' teach-heading' - line 2264: ' teach-search-filter' - line 2265: ' teach-filter1' - line 2266: ' teach-filter1-label1' - line 2267: ' teach-filter1-label2' - line 2268: ' teach-filter1-label3' - line 2269: ' teach-filter1-label4' - line 2270: ' teach-filter1-label5' - line 2271: ' teach-filter1-label6' - line 2272: ' teach-filter1-label7' - line 2273: ' teach-filter1-label8' - line 2274: ' teach-filter1-label9' - line 2275: ' teach-filter1-label10' - line 2276: ' teach-filter1-label11' - line 2277: ' teach-filter1-label12' - line 2278: ' teach-filter1-label13' - line 2279: ' teach-filter1-label14' - line 2280: ' teach-filter1-label15' - line 2281: ' teach-filter1-label16' - line 2282: ' teach-filter2' - line 2283: ' teach-filter2-label1' - line 2284: ' teach-filter2-label2' - line 2285: ' teach-filter2-label3' - line 2286: ' teach-filter2-label4' - line 2287: ' teach-filter2-label5' - line 2288: ' teach-filter2-label6' - line 2289: ' teach-filter2-label7' - line 2290: ' teach-filter3' - line 2291: ' teach-filter4' - line 2292: ' teach-filter4-label1' - line 2293: ' teach-filter4-label2' - line 2294: ' teach-filter4-label3' - line 2295: ' teach-case-subtitle1' - line 2296: ' teach-case-subtitle2' - line 2297: ' teach-case-subtitle3' - line 2298: ' teach-case-subtitle4' - line 2299: ' teach-case-subtitle5' - line 2300: ' teach-case1-title' - line 2301: ' teach-case1-lead-name' - line 2302: ' teach-case1-content1' - line 2303: ' teach-case1-content1-1' - line 2304: ' teach-case1-content2' - line 2305: ' teach-case1-content3' - line 2306: ' teach-case1-content4' - line 2307: ' To introduce a new public to programming through fun and compelling' - line 2308: ' examples. ' - line 2309: ' teach-case1-content5' - line 2310: ' Method' - line 2311: ' each times. The students were using (Ubuntu) machines with the p5.js web' - line 2312: ' editor. I was teaching using a video projector as well as a board.' - line 2313: ' teach-case1-content5-1' - line 2314: ' Materials' - line 2315: ' links available in ' - line 2316: ' teach-case2-title' - line 2317: ' Making The Thing that Makes the Thing' - line 2318: ' with p5.js' - line 2319: ' teach-case2-lead-name' - line 2320: ' teach-case2-content1' - line 2321: ' teach-case2-content1-1' - line 2322: ' teach-case2-content2' - line 2323: ' Our participants included art/design students & professionals, creative' - line 2324: ' coding enthusiasts. We had close to 50 participants.' - line 2325: ' teach-case2-content3' - line 2326: ' teach-case2-content4' - line 2327: ' To explore generative art & design and recreate some classical works' - line 2328: ' with p5.js. ' - line 2329: ' teach-case2-content5' - line 2330: ' teach-case2-content5-1' - line 2331: ' teach-case2-content5-2' - line 2332: ' teach-case2-content5-3' - line 2333: ' teach-case2-content5-4' - line 2334: ' teach-case2-content5-5' - line 2335: ' teach-case3-title' - line 2336: ' teach-case3-lead-name' - line 2337: ' teach-case3-speech' - line 2338: ' teach-case3-content1' - line 2339: ' teach-case3-content1-1' - line 2340: ' teach-case3-content2' - line 2341: ' Our participants included art/design students & professionals, creative' - line 2342: ' coding enthusiasts. We had close to 50 participants.' - line 2343: ' teach-case3-content3' - line 2344: ' teach-case3-content4' - line 2345: ' To build a teacher and student community around p5 for middle and high' - line 2346: ' school.' - line 2347: ' teach-case3-content5' - line 2348: ' A half-day of workshop led by volunteer teachers. We saw lots of different' - line 2349: ' methods and materials. Most used some sort of slides or documentation, some' - line 2350: ' live coding using an editor, with work time for participant to remix.' - line 2351: ' teach-case3-content5-1' - line 2352: ' teach-case3-content5-2' - line 2353: ' teach-case3-content5-3' - line 2354: ' teach-case4-title' - line 2355: ' teach-case4-lead-name' - line 2356: ' teach-case4-speech' - line 2357: ' teach-case4-content1' - line 2358: ' teach-case4-content1-1' - line 2359: ' teach-case4-content2' - line 2360: ' I had around 16 students in the workshop, and a team including 3 people from' - line 2361: ' the PlusCode festival, and one person at the venue.' - line 2362: ' teach-case4-content3' - line 2363: ' teach-case4-content4' - line 2364: ' Introduction to beginners and artists of graphic web programming and open' - line 2365: ' source, using p5.js, in Spanish ' - line 2366: ' teach-case4-content5' - line 2367: ' teach-case4-content5-1' - line 2368: ' teach-case4-content5-2' - line 2369: ' teach-case4-content5-3' - line 2370: ' teach-case4-content5-4' - line 2371: ' teach-case5-title' - line 2372: ' teach-case5-lead-name' - line 2373: ' teach-case5-speech' - line 2374: ' My greatest source of uncertainty in developing the workshop was whether it' - line 2375: ' was trying to teach art to programmers or to teach programming to artists.' - line 2376: ' teach-case5-content1' - line 2377: ' teach-case5-content1-1' - line 2378: ' teach-case5-content1-2' - line 2379: ' teach-case5-content1-3' - line 2380: ' teach-case5-content2' - line 2381: ' teach-case5-content3' - line 2382: ' teach-case5-content4' - line 2383: ' To introduce p5.js to artists with little or no programming experience and' - line 2384: ' to suggest one way an analogue practice can migrate to a digital form.' - line 2385: ' teach-case5-content5' - line 2386: ' A printed workbook with activities that used the p5.js web editor to show' - line 2387: ' how translate an physical drawing into a digital drawing.' - line 2388: ' teach-case5-content5-1' - line 2389: ' teach-case5-content5-2' - line 2390: ' teach-case5-content5-3' - line 2391: ' teach-case6-title' - line 2392: ' teach-case6-lead-name' - line 2393: ' teach-case6-speech' - line 2394: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' - line 2395: ' your everyday life!' - line 2396: ' teach-case6-content1' - line 2397: ' teach-case6-content1-1' - line 2398: ' teach-case6-content2' - line 2399: ' teach-case6-content3' - line 2400: ' teach-case6-content4' - line 2401: ' teach-case6-content5' - line 2402: ' teach-case6-content5-1' - line 2403: ' teach-case6-content5-2' - line 2404: ' teach-case6-content5-3' - line 2405: ' teach-case6-content5-4' - line 2406: ' teach-case6-content5-5' - line 2407: ' teach-case7-title' - line 2408: ' teach-case7-lead-name' - line 2409: ' teach-case7-speech' - line 2410: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' - line 2411: ' to give it a try!' - line 2412: ' teach-case7-content1' - line 2413: ' teach-case7-content1-1' - line 2414: ' teach-case7-content2' - line 2415: ' teach-case7-content3' - line 2416: ' teach-case7-content4' - line 2417: ' teach-case7-content5' - line 2418: ' teach-case7-content5-1' - line 2419: ' teach-case8-title' - line 2420: ' teach-case8-lead-name' - line 2421: ' teach-case8-content1' - line 2422: ' teach-case8-content1-1' - line 2423: ' teach-case8-content2' - line 2424: ' teach-case8-content3' - line 2425: ' teach-case8-content4' - line 2426: ' teach-case8-content5' - line 2427: ' teach-case8-content5-1' - line 2428: ' teach-case8-content5-2' - line 2429: ' teach-case9-title' - line 2430: ' teach-case9-lead-name' - line 2431: ' teach-case9-content1' - line 2432: ' teach-case9-content1-1' - line 2433: ' teach-case9-content2' - line 2434: ' Students at Interactive Telecommunications Program, New York University. 16' - line 2435: ' people.' - line 2436: ' teach-case9-content3' - line 2437: ' teach-case9-content4' - line 2438: ' The goal of this class is to learn and understand common machine learning' - line 2439: ' techniques and apply them to generate creative outputs in the browser using' - line 2440: ' ml5.js and p5.js.' - line 2441: ' teach-case9-content5' - line 2442: ' This class is a mix of lectures, coding sessions, group discussions, and' - line 2443: ' presentations. I used ' - line 2444: ' teach-case9-content5-1' - line 2445: ' teach-case9-content5-2' - line 2446: ' teach-case9-content5-3' - line 2447: ' teach-case10-title' - line 2448: ' teach-case10-lead-name' - line 2449: ' teach-case10-content1' - line 2450: ' teach-case10-content3' - line 2451: ' teach-case10-content4' - line 2452: ' Introduce learners (potentially with no coding experiences at all) to the' - line 2453: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' - line 2454: ' and enable them to pursue own projects in a safe environment.' - line 2455: ' teach-case10-content5' - line 2456: ' p5.js source code (for the introductory project), JavaScript source code' - line 2457: ' (illustrating some basic JavaScript functionalities), accompanying slides in' - line 2458: ' .pdf format, all hosted publicly on GitHub. ' - line 2459: ' teach-case10-content5-1' - line 2460: ' teach-case10-content5-2' - line 2461: ' teach-case11-title' - line 2462: ' teach-case11-lead-name' - line 2463: ' teach-case11-content1' - line 2464: ' teach-case11-content1-1' - line 2465: ' teach-case11-content2' - line 2466: ' teach-case11-content3' - line 2467: ' teach-case11-content4' - line 2468: ' Over the course of three workshops, we will draw and create patterns using' - line 2469: ' p5.js, an open-source graphical library; we will learn and apply' - line 2470: ' computational concepts to transform patterns and finally, we will bring a' - line 2471: ' weaving to life with electronic microcontrollers.' - line 2472: ' teach-case11-content5' - line 2473: ' teach-case11-content5-1' - line 2474: ' Materials' - line 2475: ' pattern weaving tool.' - line 2476: ' teach-case11-content5-2' - line 2477: ' teach-case11-content5-3' - line 2478: ' teach-case11-content5-4' - line 2479: ' teach-case11-content5-5' - line 2480: ' teach-case12-title' - line 2481: ' teach-case12-lead-name' - line 2482: ' teach-case12-speech' - line 2483: ' I''m working on a new series of coding class for Disabled students in South' - line 2484: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2485: ' workshops in December 2020. The project is supported by the Open Society' - line 2486: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2487: ' Center.' - line 2488: ' teach-case12-content1' - line 2489: ' teach-case12-content1-1' - line 2490: ' teach-case12-content2' - line 2491: ' teach-case12-content3' - line 2492: ' teach-case12-content4' - line 2493: ' To help Deaf and Hard of Hearing students learn about computer programming' - line 2494: ' through playful exercises. To make ASL tutorial of basic coding concepts.' - line 2495: ' teach-case12-content5' - line 2496: ' We used p5.js Web editor and code examples on the website. We also used' - line 2497: ' dice, playing cards and various paper tools to help students learn about' - line 2498: ' coding concepts.' - line 2499: ' teach-case12-content5-1' - line 2500: ' teach-case12-content5-2' - line 2501: ' teach-case13-title' - line 2502: ' teach-case13-lead-name' - line 2503: ' teach-case13-speech' - line 2504: ' I''m working on a new series of coding class for Disabled students in South' - line 2505: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2506: ' workshops in December 2020. The project is supported by the Open Society' - line 2507: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2508: ' Center.' - line 2509: ' teach-case13-content1' - line 2510: ' teach-case13-content1-1' - line 2511: ' teach-case13-content2' - line 2512: ' teach-case13-content3' - line 2513: ' teach-case13-content4' - line 2514: ' Get creatives, designers, artists and other people who don''t typically use code introduced to p5.js.' - line 2515: ' teach-case13-content5' - line 2516: ' Website, p5.js editor.' - line 2517: ' teach-case13-content5-1' - line 2540: ' teach-case14-title' - line 2541: ' teach-case14-lead-name' - line 2542: ' teach-case14-speech' - line 2543: ' The Smarter Home / 더 똑똑한 집 American Arts Incubator Workshop reimagines smart homes of the future.' - line 2544: ' teach-case14-content1' - line 2545: ' teach-case14-content1-1' - line 2546: ' teach-case14-content1-2' - line 2547: ' teach-case14-content2' - line 2548: ' teach-case14-content3' - line 2549: ' teach-case14-content4' - line 2550: ' To reimagine smart homes of the future, with such technologies as p5.js and ml5.js. Spending a lot of time talking about the increasing role technology is playing at home and in Korean society,' - line 2551: ' the workshop aimed to offer a vision of a smarter home driven by the participants'' critical optimism for the future. ' - line 2552: ' teach-case14-content5' - line 2553: ' p5.js, p5 web editor, ml5.js, and installations. ' - line 2554: ' teach-case14-content5-1' - line 2555: ' 1) We set out to prototype the concept of a “smarter home”, trying to bring technology into personal space on our own terms.' - line 2556: ' teach-case14-content5-2' - line 2557: ' 2) Breaking into four teams, each selected an issue to address through a room they would create within our larger home structure.' - line 1623: ' teach-case17-speech' - line 1624: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 1625: ' teach-case17-content1' - line 1626: ' teach-case17-content1-1' - line 1627: ' teach-case17-content2' - line 1628: ' teach-case17-content3' - line 1629: ' teach-case17-content4' - line 1630: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 1631: ' teach-case17-content5' - line 1632: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 1633: ' teach-case17-content5-1' - line 162: ' library in your html. To learn more visit ' - line 163: ' library in your html. To learn more visit ' - line 164: ' your-first-sketch7' line 141: ' project-a-2-5-phuong' line 144: ' project-a-2-7-phuong' line 64: ' color-p3x3' line 70: ' color-rgb-p1x1' line 87: ' color-custom-ranges-p2x1' line 24: footer1 - line 25: footer2 - line 26: footer3 - line 27: footer4 line 77: ' color-rgb-p2x1' line 82: ' color-transparency-p2x1' line 139: ' project-a-2-7-phuong' line 76: ' color-transparency-p1x1' - line 31: tagline7 line 63: ' hosted-title' line 75: ' download9' line 140: ' learn5' @@ -3666,6 +2101,12 @@ ko: line 159: ' processing-transition1' line 160: ' processing-transition2' line 161: ' processing-transition3' + line 357: ' link-2-chung' + line 359: ' project-a-1-1-chung' + line 360: ' project-a-1-2-chung' + line 361: ' project-a-1-3-chung' + line 362: ' project-a-2-1-chung' + line 364: ' project-a-2-2-chung' line 365: ' project-a-3-1-chung' line 366: ' project-a-3-2-chung' line 367: ' project-a-4-1-chung' @@ -3675,9 +2116,6 @@ ko: line 371: ' project-a-5-2-chung' line 372: '' line 373: ' creator-from-casey-louise' - line 374: ' project-a-1-1-casey-louise' - line 375: ' project-a-1-2-casey-louise' - line 376: ' project-a-1-3-casey-louise' line 377: ' project-a-1-4-casey-louise' line 378: ' project-a-1-5-casey-louise' line 379: ' project-a-2-1-casey-louise' @@ -3686,7 +2124,6 @@ ko: line 382: ' project-a-3-2-casey-louise' line 383: ' project-a-3-3-casey-louise' line 384: ' project-a-3-4-casey-louise' - line 385: ' project-a-3-5-casey-louise' line 386: ' project-a-4-1-casey-louise' line 387: ' adam-ferris-repo-casey-louise' line 388: ' project-a-4-2-casey-louise' @@ -3695,11 +2132,9 @@ ko: line 391: ' webgl-casey-louise' line 392: ' project-a-4-5-casey-louise' line 393: ' project-a-4-6-casey-louise' - line 394: ' openframeworks-book-casey-louise' line 395: ' project-a-4-7-casey-louise' line 396: ' project-a-5-1-casey-louise' line 397: ' project-a-5-2-casey-louise' - line 398: '' line 399: ' pronouns-nonbinary' line 400: ' creator-from-moon' line 401: ' posters-by' @@ -3708,7 +2143,6 @@ ko: line 404: ' project-a-1-3-moon' line 405: ' project-a-1-4-moon' line 406: ' pcd-la-moon' - line 407: ' project-a-1-5-moon' line 408: ' project-a-2-1-moon' line 409: ' codetrain-moon' line 410: ' project-a-2-2-moon' @@ -3716,7 +2150,6 @@ ko: line 412: ' project-a-2-3-moon' line 413: ' project-a-3-1-moon' line 414: ' project-a-3-2-moon' - line 415: ' project-a-3-3-moon' line 416: ' project-a-3-4-moon' line 417: ' project-a-4-1-moon' line 418: ' project-a-5-1-moon' @@ -3746,25 +2179,594 @@ ko: line 67: ' sketch_info' line 22: footer1 line 23: footer2 - line 32: ' download-intro' line 65: ' color-rgb-p1x1' line 72: ' color-rgb-p2x1' - line 85: ' color-custom-ranges-p4x1' - line 28: footer5 line 81: ' color-transparency-p1x1' line 90: ' color-custom-ranges-p4x1' line 153: ' project-a-4-7-casey-louise' + line 33: Skip-To-Content + line 47: Contribute + line 48: Forum + line 49: Showcase + line 51: footer1 + line 52: footer2 + line 53: footer3 + line 58: tagline3 + line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' + line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' + line 107: ' text, input, video, webcam, and sound.' + line 108: ' p2xh2' + line 130: ' p4xh2' + line 131: ' p4xp1' + line 132: ' p4xp2' + line 135: ' p4xp5' + line 147: ' copyright1' + line 149: ' under the terms of the' + line 150: ' copyright2' + line 151: ' copyright3' + line 152: ' copyright4' + line 232: ' get-started1' + line 235: ' get-started2' + line 236: ' get-started3' + line 237: ' get-started4' + line 238: ' get-started5' + line 241: ' scroll down to' + line 242: ' get-started7' + line 246: ' download1' + line 247: ' download2' + line 248: ' download3' + line 249: ' download4' + line 250: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' + line 252: ' loading), change the link to p5.min.js.' + line 253: ' download5' + line 254: ' Alternatively, you can link to a p5.js file hosted online. All versions of' + line 255: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' + line 257: ' download6' + line 260: ' environment1' + line 262: ' environment2' + line 263: ' environment3' + line 264: ' environment4' + line 278: ' environment10' + line 280: ' Open the index.html file in your browser by double clicking on it in your' line 436: ' Download' line 437: ' download-intro' line 438: ' Welcome! While titled "Download" this page actually contains a collection of' line 439: ' links to either download the library or begin working with it online. We''ve' line 440: ' tried to order things to reflect what a beginner might want first, to' line 441: ' resources that more experienced programmers may be looking for.' - line 442: ' editor-title' line 443: ' p5.js-editor' + line 444: ' p5.js-editor-intro' + line 445: ' This link redirects you to the p5.js Editor online so you can begin using' + line 446: ' p5.js immediately.' + line 447: ' editor-includes' + line 448: ' complete-library-title' + line 449: ' complete-library-intro1' + line 450: ' This is a download containing the p5.js library file, the p5.sound addon,' + line 451: ' and an example project. It does not contain an editor. Visit' + line 452: ' complete-library-intro2' + line 453: ' complete-library-intro3' + line 454: ' p5.js-complete' + line 455: ' includes-1' + line 456: ' includes-2' + line 457: ' includes-3' + line 458: ' single-files-title' + line 459: ' single-files-intro' + line 460: ' These are downloads or links to the p5.js library file. No additional' + line 461: ' contents are included.' + line 462: ' single-file' + line 463: ' p5.js-uncompressed' + line 464: ' compressed' + line 465: ' link' + line 466: ' statically-hosted-file' + line 467: ' etc-title' + line 468: ' older-releases' + line 469: ' github-repository' + line 470: ' report-bugs' + line 471: ' supported-browsers' + line 472: ' support-title' + line 473: ' support-options' + line 474: ' support-1' + line 475: ' p5.js is free, open-source software. We want to make our community as open' + line 476: ' and inclusive as possible. You can support this work by' + line 477: ' support-2' + line 478: ' support-3' + line 479: ' support-4' + line 480: ' support-5' + line 481: ' support-6' + line 482: ' support-7' + line 483: ' support-8' + line 484: ' support-9' + line 485: ' support-10' + line 486: ' support-11' + line 487: ' support-12' + line 488: ' Your membership supports software development (for p5.js, Processing,' + line 489: ' Processing.py, Processing for Android and ARM devices, education resources' + line 490: ' like code examples and tutorials,' + line 491: ' support-13' + line 492: ' support-14' + line 493: ' support-15' + line 494: ' support-16' + line 495: ' support-17' + line 496: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 497: ' Pittsburgh (Image credit' + line 498: ' support-18' + line 499: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' + line 500: ' workshops in London (Image credit' + line 501: ' support-19' + line 502: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' + line 503: ' Kira Simon-Kennedy)' + line 504: ' support-20' + line 505: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 506: ' (Image credit' + line 507: ' support-21' + line 508: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' + line 509: ' credit' + line 510: ' support-22' + line 511: ' support-23' + line 512: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 513: ' (Image credit' + line 514: ' support-24' + line 515: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' + line 516: ' workshop led by Taeyoon Choi (Image credit' + line 517: ' support-25' + line 518: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 519: ' Pittsburgh (Image credit' + line 520: ' support-26' + line 521: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' + line 522: ' International Center of Photography (Image credit' + line 523: ' Photography)' + line 524: ' support-27' + line 525: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' + line 526: ' Montoya-Moraga (Image credit' + line 527: ' support-28' + line 528: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' + line 529: ' led by Taeyoon Choi (Image credit' + line 530: ' support-29' + line 531: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' + line 532: ' Angeles (Image credit' + line 533: ' support-30' + line 534: ' support-31' + line 535: ' support-32' + line 536: ' support-33' + line 537: ' support-17-alt' + line 538: ' support-18-alt' + line 539: ' support-19-alt' + line 540: ' support-20-alt' + line 541: ' support-21-alt' + line 542: ' support-22-alt' + line 543: ' support-23-alt' + line 544: ' support-24-alt' + line 545: ' support-25-alt' + line 546: ' support-26-alt' + line 547: ' support-27-alt' + line 548: ' support-28-alt' + line 549: ' support-29-alt' line 550: ' support-30-alt' line 551: ' support-31-alt' + line 729: ' learn-title' + line 730: ' teach-title2' + line 731: ' learn1' + line 732: ' These tutorials provide more in-depth or step-by-step overviews of' + line 733: ' particular topics. Check out the ' + line 734: ' learn2' + line 735: ' learn3' + line 736: ' introduction-to-p5js-title' + line 737: ' hello-p5js-title' + line 738: ' hello-p5js' + line 739: ' This short video will introduce you to the library and what you can do with' + line 740: ' it.' + line 741: ' getting-started-title' + line 742: ' getting-started' + line 743: ' Welcome to p5.js!
This introduction covers the basics of setting up a' + line 744: ' p5.js project.' + line 745: ' p5js-overview-title' + line 746: ' p5js-overview' + line 747: ' p5js-processing-title' + line 748: ' p5js-processing' + line 749: ' The main differences between the two, and how to convert from one to the' + line 750: ' other.' + line 751: ' p5-screen-reader-title' + line 752: ' p5-screen-reader' + line 753: ' using-local-server-title' + line 754: ' using-local-server' + line 755: ' p5js-wiki-title' + line 756: ' p5js-wiki' + line 757: ' connecting-p5js-title' + line 758: ' creating-libraries-title' + line 759: ' creating-libraries' + line 760: ' nodejs-and-socketio-title' + line 761: ' nodejs-and-socketio' + line 762: ' programming-topics-title' + line 763: ' beyond-the-canvas-title' + line 764: ' beyond-the-canvas' + line 765: ' 3d-webgl-title' + line 766: ' 3d-webgl' + line 767: ' color-title' + line 768: ' color' + line 769: ' coordinate-system-and-shapes-title' + line 770: ' coordinate-system-and-shapes' + line 771: ' interactivity-title' + line 772: ' interactivity' + line 773: ' program-flow-title' + line 774: ' program-flow' + line 775: ' curves-title' + line 776: ' curves' + line 777: ' An introduction to the three types of curves in p5.js' + line 778: ' and Bézier curves.' + line 779: ' becoming-a-better-programmer-title' + line 780: ' debugging-title' + line 781: ' debugging' + line 782: ' optimizing-title' + line 783: ' optimizing' + line 784: ' A tutorial of tips and tricks for optimizing your code to make it run faster' + line 785: ' and smoother.' + line 786: ' test-driven-development-title' + line 787: ' test-driven-development' + line 788: ' Save yourself from agony on install day. What is unit testing and how to use' + line 789: ' it? By Andy Timmons.' + line 790: ' contributing-to-the-community-title' + line 791: ' development-title' + line 792: ' development' + line 793: ' looking-inside-title' + line 794: ' looking-inside' + line 795: ' A friendly intro to the file structure and tools for p5.js development, by' + line 796: ' Luisa Pereira.' + line 797: ' writing-tutorial-title' + line 798: ' writing-tutorial' + line 799: ' writing-a-tutorial-title' + line 800: ' writing-a-tutorial-author' + line 801: ' writing-a-tutorial-1' + line 802: ' We invite educators, contributors and general enthusiasts to contribute p5js' + line 803: ' tutorials. The p5js project makes creative coding and open source' + line 804: ' development more accessible to a diverse community and we are excited to' + line 805: ' publish tutorials on all aspects of the development process. Our learning' + line 806: ' materials so far include guides on learning p5, programming technique and' + line 807: ' how to contribute to an open source project.' + line 808: ' writing-a-tutorial-2' + line 809: ' We welcome new written tutorial contributions and this guide outlines the' + line 810: ' steps of how to propose, prepare and contribute.' + line 811: ' writing-a-tutorial-how-start-title' + line 812: ' writing-a-tutorial-how-start-1' + line 813: ' writing-a-tutorial-how-start-2' + line 814: ' writing-a-tutorial-how-start-3' + line 815: ' that outlines in progress tutorials. If your topic is listed as in progress,' + line 816: ' perhaps you can add to work being done and contribute to preparing existing' + line 817: ' work for publication so please reach out to us.' + line 818: ' writing-a-tutorial-how-start-4' + line 819: ' If your topic is not already covered and is not listed as in progress,' + line 820: ' please write a few sentences on what you propose to cover and email us this' + line 821: ' description at education@p5js.org.' + line 822: ' writing-a-tutorial-how-prepare-title' + line 823: ' writing-a-tutorial-how-prepare-1' + line 824: ' When your tutorial is ready for publication, please follow these steps to' + line 825: ' prepare your content for the p5js website.' + line 826: ' writing-a-tutorial-how-prepare-2' + line 827: ' writing-a-tutorial-how-prepare-3' + line 828: ' writing-a-tutorial-how-prepare-4' + line 829: ' writing-a-tutorial-how-prepare-5' + line 830: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' + line 831: ' of the p5js site. The file called index.hbs is the ' + line 832: ' writing-a-tutorial-how-prepare-6' + line 833: ' writing-a-tutorial-how-prepare-7' + line 834: ' writing-a-tutorial-how-prepare-8' + line 835: ' writing-a-tutorial-how-prepare-9' + line 836: ' tags on the page, with formatting defined by the <h1> and <h2>' + line 837: ' tags, the <p> paragraph tags as is done shown on the' + line 838: ' writing-a-tutorial-how-prepare-10' + line 839: ' writing-a-tutorial-how-prepare-11' + line 840: ' If your tutorial contains images, they are to be placed in the assets folder' + line 841: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' + line 842: ' shown below.' + line 843: ' writing-a-tutorial-how-prepare-12' + line 844: ' writing-a-tutorial-embedding-title' + line 845: ' writing-a-tutorial-embedding-1' + line 846: ' Using p5js means you can illustrate your tutorial with animated, interactive' + line 847: ' or editable code examples to demonstrate programming concepts. Your examples' + line 848: ' should be prepared as p5.js sketches and can be embedded into the tutorial' + line 849: ' in two ways.' + line 850: ' writing-a-tutorial-embedding-2' + line 851: ' writing-a-tutorial-embedding-3' + line 852: ' writing-a-tutorial-embedding-4' + line 853: ' writing-a-tutorial-embedding-5' + line 854: ' writing-a-tutorial-embedding-6' + line 855: ' writing-a-tutorial-embedding-7' + line 856: ' writing-a-tutorial-embedding-8' + line 857: ' writing-a-tutorial-embedding-9' + line 858: ' writing-a-tutorial-embedding-10' + line 859: ' If the example is to be animated and/or interactive but not editable. The' + line 860: ' p5.js sketch should be embedded into the page as an iframe as described' + line 861: ' below.' + line 862: ' writing-a-tutorial-iframe-title' + line 863: ' writing-a-tutorial-iframe-1' + line 864: ' An iframe is like creating a window through which you can explore another' + line 865: ' page, sandboxed from the rest of your page. In this case it will be a window' + line 866: ' to the index.html containing your p5.js sketch. ' + line 867: ' writing-a-tutorial-iframe-2' + line 868: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' + line 869: ' folder labelled with the name of your sketch as shown in the screenshot.' + line 870: ' This is where all the images and p5 sketches linked by iframe should be' + line 884: ' Styling for the iframe (this could directly into the post or in a' + line 885: ' stylesheet)' + line 886: ' writing-a-tutorial-iframe-7' + line 887: ' writing-a-tutorial-iframe-8' + line 888: ' writing-a-tutorial-iframe-9' + line 889: ' One thing to note is that you need to manually set the size of the iframe,' + line 890: ' so it works best if things are a standard size.' + line 891: ' writing-a-tutorial-iframe-10' + line 892: ' Also note that the links to the p5.js library files do not happen from the' + line 893: ' .eps page with all the tutorial content. Instead they will be located in the' + line 894: ' html page that is rendering your sketch (in this case, called embed.html).' + line 895: ' writing-a-tutorial-iframe-11' + line 896: ' writing-a-tutorial-embed-iframe-12' + line 897: ' writing-a-tutorial-finishing-title' + line 898: ' writing-a-tutorial-finishing-1' + line 899: ' Once your have finished writing your tutorial and your content has been' + line 900: ' given the thumbs up. Fork the p5.js website repository, prepare your content' + line 901: ' as described above and then issue a pull request to the p5.js website' + line 902: ' repository so we can publish your contribution!' + line 903: ' writing-a-tutorial-finishing-2' + line 904: ' color-description1' + line 905: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' + line 906: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' + line 907: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' + line 908: ' color-description2' + line 909: ' color-p1x1' + line 910: ' In the digital world, when we want to talk about a color, precision is' + line 911: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' + line 912: ' Color, rather, is defined as a range of numbers. Let''s start with the' + line 913: ' simplest case' + line 914: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' + line 915: ' gray ranging from black to white.' + line 916: ' color-p2x1' + line 917: ' color-p2x2' + line 918: ' color-p2x3' + line 919: ' color-p2x4' + line 920: ' color-code1' + line 921: ' background(255); // Setting the background to white ' + line 922: ' stroke(0); // Setting the outline (stroke) to black ' + line 923: ' fill(150); // Setting the interior of a shape (fill) to grey ' + line 924: ' rect(50,50,75,100); // Drawing the rectangle' + line 925: ' color-p3x1' + line 926: ' color-p3x2' + line 927: ' color-p3x3' + line 928: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' + line 929: ' important to remember that 0 is not "nothing", but rather denotes the color' + line 930: ' black. Also, remember not to eliminate both—with ' + line 931: ' color-p3x4' + line 932: ' color-p3x5' + line 933: ' color-p4x1' + line 934: ' In addition, if we draw two shapes, p5.js will always use the most recently' + line 935: ' specified stroke and fill, reading the code from top to bottom.' + line 936: ' color-rgb-title' + line 937: ' color-rgb-p1x1' + line 938: ' Remember finger painting? By mixing three "primary" colors, any color could' + line 939: ' be generated. Swirling all colors together resulted in a muddy brown. The' + line 940: ' more paint you added, the darker it got. Digital colors are also constructed' + line 941: ' by mixing three primary colors, but it works differently from paint. First,' + line 942: ' the primaries are different' + line 943: ' with color on the screen, you are mixing light, not paint, so the mixing' + line 944: ' rules are different as well.' + line 945: ' color-rgb-li1' + line 946: ' color-rgb-li2' + line 947: ' color-rgb-li3' + line 948: ' color-rgb-li4' + line 949: ' color-rgb-li5' + line 950: ' color-rgb-p2x1' + line 951: ' This assumes that the colors are all as bright as possible, but of course,' + line 952: ' you have a range of color available, so some red plus some green plus some' + line 953: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' + line 954: ' While this may take some getting used to, the more you program and' + line 955: ' experiment with RGB color, the more it will become instinctive, much like' + line 956: ' swirling colors with your fingers. And of course you can''t say "Mix some red' + line 957: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' + line 958: ' the individual color elements are expressed as ranges from 0 (none of that' + line 959: ' color) to 255 (as much as possible), and they are listed in the order R, G,' + line 960: ' and B. You will get the hang of RGB color mixing through experimentation,' + line 961: ' but next we will cover some code using some common colors.' + line 962: ' color-transparency-title' + line 963: ' color-transparency-p1x1' + line 964: ' In addition to the red, green, and blue components of each color, there is' + line 965: ' an additional optional fourth component, referred to as the color''s "alpha".' + line 966: ' Alpha means transparency and is particularly useful when you want to draw' + line 967: ' elements that appear partially see-through on top of one another. The alpha' + line 968: ' values for an image are sometimes referred to collectively as the "alpha' + line 969: ' channel" of an image.' + line 970: ' color-transparency-p2x1' + line 971: ' It is important to realize that pixels are not literally transparent, this' + line 972: ' is simply a convenient illusion that is accomplished by blending colors.' + line 973: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' + line 974: ' one to a percentage of another, creating the optical perception of blending.' + line 975: ' (If you are interested in programming "rose-colored" glasses, this is where' + line 976: ' you would begin.)' + line 977: ' color-transparency-p3x1' + line 978: ' Alpha values also range from 0 to 255, with 0 being completely transparent' + line 979: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' + line 980: ' color-custom-ranges-title' + line 981: ' color-custom-ranges-p1x1' + line 982: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' + line 983: ' in p5.js, in fact, it allows us to think about color any way we like. For' + line 984: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' + line 985: ' percentage). You can do this by specifying a custom ' + line 986: ' color-custom-ranges-p2x1' + line 987: ' The above function says' + line 988: ' green, and blue. The range of RGB values will be from 0 to 100."' + line 989: ' color-custom-ranges-p3x1' + line 990: ' Although it is rarely convenient to do so, you can also have different' + line 991: ' ranges for each color component' + line 992: ' color-custom-ranges-p4x1' + line 993: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' + line 994: ' from 0 to 10, and alpha from 0 to 255."' + line 995: ' color-custom-ranges-p5x1' + line 996: ' Finally, while you will likely only need RGB color for all of your' + line 997: ' programming needs, you can also specify colors in the HSB (hue, saturation,' + line 998: ' and brightness) mode. Without getting into too much detail, HSB color works' + line 999: ' as follows' + line 1000: ' color-custom-ranges-li1x1' + line 1001: ' color-custom-ranges-li1x2' + line 1002: ' color-custom-ranges-li2x1' + line 1003: ' color-custom-ranges-li2x2' + line 1004: ' color-custom-ranges-li3x1' + line 1005: ' color-custom-ranges-li3x2' + line 1006: ' color-custom-ranges-p6x1' + line 1007: ' color-custom-ranges-p6x2' + line 1008: ' coordinate-system-description1' + line 1009: ' coordinate-system-description2' + line 1010: ' coordinate-system-description3' + line 1011: ' coordinate-system-description4' + line 1012: ' coordinate-system-description5' + line 1013: ' coordinate-system-description-title' + line 1014: ' coordinate-system-description-p1x1' + line 1015: ' Before we begin programming with p5, we must first channel our eighth grade' + line 1016: ' selves, pull out a piece of graph paper, and draw a line. The shortest' + line 1017: ' distance between two points is a good old fashioned line, and this is where' + line 1018: ' we begin, with two points on that graph paper.' + line 1019: ' coordinate-system-description-p2x1' + line 1020: ' The above figure shows a line between point A (1,0) and point B (4,5). If' + line 1021: ' you wanted to direct a friend of yours to draw that same line, you would' + line 1022: ' give them a shout and say "draw a line from the point one-zero to the point' + line 1023: ' four-five, please." Well, for the moment, imagine your friend was a computer' + line 1024: ' and you wanted to instruct this digital pal to display that same line on its' + line 1025: ' screen. The same command applies (only this time you can skip the' + line 1026: ' pleasantries and you will be required to employ a precise formatting). Here,' + line 1027: ' the instruction will look like this' + line 1028: ' coordinate-system-description-p3x1' + line 1029: ' Even without having studied the syntax of writing code, the above statement' + line 1030: ' should make a fair amount of sense. We are providing a command (which we' + line 1031: ' will refer to as a "function") for the machine to follow entitled "line." In' + line 1032: ' addition, we are specifying some arguments for how that line should be' + line 1033: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' + line 1034: ' code as a sentence, the function is a verb and the arguments are the objects' + line 1035: ' of the sentence. The code sentence also ends with a semicolon instead of a' + line 1036: ' period.' + line 1037: ' coordinate-system-description-p4x1' + line 1038: ' The key here is to realize that the computer screen is nothing more than a' + line 1039: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' + line 1040: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' + line 1041: ' location of a point in space. And it is our job to specify what shapes and' + line 1042: ' colors should appear at these pixel coordinates.' + line 1043: ' coordinate-system-description-p5x1' + line 1044: ' Nevertheless, there is a catch here. The graph paper from eighth grade' + line 1045: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' + line 1046: ' pointing up and the x-axis pointing to the right (in the positive direction,' + line 1047: ' negative down and to the left). The coordinate system for pixels in a' + line 1048: ' computer window, however, is reversed along the y-axis. (0,0) can be found' + line 1049: ' at the top left with the positive direction to the right horizontally and' + line 1050: ' down vertically.' + line 1051: ' coordinate-system-simple-shapes-title' + line 1052: ' coordinate-system-simple-shapes-p1x1' + line 1053: ' The vast majority of p5 programming examples are visual in nature. These' + line 1054: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' + line 1055: ' begin by looking at four primitive shapes.' + line 1056: ' coordinate-system-simple-shapes-p2x1' + line 1057: ' For each shape, we will ask ourselves what information is required to' + line 1058: ' specify the location and size (and later color) of that shape and learn how' + line 1059: ' p5 expects to receive that information. In each of the diagrams below, we''ll' + line 1060: ' assume a window with a width of 100 pixels and height of 100 pixels.' + line 1061: ' coordinate-system-simple-shapes-p3x1' + line 1062: ' coordinate-system-simple-shapes-p3x2' + line 1063: ' coordinate-system-simple-shapes-p4x1' + line 1064: ' coordinate-system-simple-shapes-p4x2' + line 1065: ' coordinate-system-simple-shapes-p5x1' + line 1066: ' coordinate-system-simple-shapes-p5x2' + line 1067: ' , things become a bit more complicated. In p5, a rectangle is specified by' + line 1068: ' the coordinate for the top left corner of the rectangle, as well as its' + line 1069: ' width and height.' + line 1070: ' coordinate-system-simple-shapes-p6x1' + line 1071: ' A second way to draw a rectangle involves specifying the centerpoint, along' + line 1072: ' with width and height. If we prefer this method, we first indicate that we' + line 1073: ' want to use the ' + line 1074: ' coordinate-system-simple-shapes-p6x2' + line 1075: ' coordinate-system-simple-shapes-p7x1' + line 1076: ' Finally, we can also draw a rectangle with two points (the top left corner' + line 1077: ' and the bottom right corner). The mode here is ' + line 1078: ' coordinate-system-simple-shapes-p7x2' + line 1079: ' coordinate-system-simple-shapes-p8x1' + line 1080: ' coordinate-system-simple-shapes-p8x2' + line 1081: ' coordinate-system-simple-shapes-p8x3' + line 1082: ' coordinate-system-simple-shapes-p8x4' + line 1083: ' coordinate-system-simple-shapes-p8x5' + line 1084: ' coordinate-system-simple-shapes-p8x6' + line 1085: ' coordinate-system-simple-shapes-p9x1' + line 1086: ' Now let''s look at what some code with shapes in more complete form, with' + line 1087: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' + line 1088: ' to specify the width and height of the canvas.' + line 1089: ' teach-desc' line 1090: test-tutorial + line 1147: ' Libraries' + line 1148: ' core-libraries' + line 1149: ' community-libraries' + line 1150: ' libraries-created-by' + line 1151: ' p5.sound' + line 1152: ' p5.sound extends p5 with Web Audio functionality including audio input,' + line 1153: ' playback, analysis and synthesis.' + line 1154: ' p5.accessibility' + line 1155: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' + line 1156: ' and visually impaired.' + line 1157: ' asciiart' + line 1158: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' + line 1159: ' p5js.' + line 1160: ' p5.ble' + line 1161: ' A Javascript library that enables communication between BLE devices and p5' + line 1162: ' sketches.' + line 1163: ' blizard.js' + line 1164: ' p5.bots' + line 1165: ' With p5.bots you can interact with your Arduino (or other microprocessor)' + line 1166: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' + line 1167: ' drive LEDs, motors, and more!' + line 1168: ' p5.clickable' + line 1169: ' p5.cmyk.js' + line 1170: ' p5.collide2D' + line 1171: ' p5.collide2D provides tools for calculating collision detection for 2D' + line 1172: ' geometry with p5.js.' + line 1173: ' p5.createloop' + line 1175: ' p5.dimensions extends p5.js'' vector functions to work in any number of' + line 1176: ' dimensions.' + line 1177: ' p5.EasyCam' + line 1178: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' + line 1179: ' contributions by Thomas Diewald.' + line 1180: ' p5.experience' + line 1181: ' Extensive library for p5.js that adds additional event-listening' + line 1182: ' functionality for creating canvas-based web applications.' + line 1183: ' p5.func' + line 1184: ' p5.func is a p5 extension that provides new objects and utilities for' + line 1185: ' function generation in the time, frequency, and spatial domains.' + line 1186: ' p5.geolocation' + line 1187: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' + line 1188: ' geofencing user locations for p5.js.' + line 1189: ' p5.gibber' + line 1190: ' grafica.js' + line 1191: ' grafica.js lets you add simple but highly configurable 2D plots to your' + line 1192: ' p5.js sketches.' + line 1193: ' p5.gui' + line 1194: ' p5.localmessage' + line 1195: ' p5.localmessage provides a simple interface to send messages locally from' + line 1196: ' one sketch to another for easy multi-window sketching!' + line 1197: ' marching' + line 1198: ' mappa' + line 1199: ' Mappa provides a set of tools for working with static maps, tile maps, and' + line 1200: ' geo-data. Useful when building geolocation-based visual representations.' + line 1201: ' ml5.js' + line 1202: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' + line 1203: ' learning algorithms and models in the browser.' + line 1204: ' p5.play' + line 1205: ' p5.play provides sprites, animations, input and collision functions for' + line 1206: ' games and gamelike applications.' + line 1207: ' p5.particle' + line 1208: ' The Particle and Fountain objects can be used to create data-driven effects' + line 1209: ' that are defined through user structures or JSON input and user-draw' + line 1210: ' functions.' + line 1211: ' p5.Riso' + line 1212: ' p5.Riso is a library for generating files suitable for Risograph printing.' + line 1213: ' It helps turn your sketches into multi-color prints.' + line 1214: ' rita.js' + line 1215: ' RiTa.js provides a set of natural language processing objects for generative' + line 1216: ' literature.' + line 1217: ' Rotating knobs' + line 1218: ' p5.scenemanager' + line 1219: ' p5.SceneManager helps you create sketches with multiple states / scenes.' + line 1220: ' Each scene is a like a sketch within the main sketch.' + line 1221: ' p5.screenPosition' + line 1222: ' p5.scribble' line 1223: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' line 1224: ' on a port of the original Processing library' line 1225: ' p5.serial' @@ -3811,6 +2813,213 @@ ko: line 1266: ' create-your-own4' line 1267: ' If you have created a library and would like to have it included on this' line 1268: ' page, submit this form!' + line 1420: ' community-title' + line 1421: ' community-statement-title' + line 1422: ' community-statement1' + line 1423: ' p5.js is a community interested in exploring the creation of art and design' + line 1424: ' with technology.' + line 1425: ' community-statement2' + line 1426: ' We are a community of, and in solidarity with, people from every gender' + line 1427: ' identity and expression, sexual orientation, race, ethnicity, language,' + line 1428: ' neuro-type, size, ability, class, religion, culture, subculture, political' + line 1429: ' opinion, age, skill level, occupation, and background. We acknowledge that' + line 1430: ' not everyone has the time, financial means, or capacity to actively' + line 1431: ' participate, but we recognize and encourage involvement of all kinds. We' + line 1432: ' facilitate and foster access and empowerment. We are all learners.' + line 1433: ' community-statement3' + line 1434: ' We like these hashtags' + line 1435: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' + line 1436: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' + line 1437: ' course).' + line 1438: ' in-practice-title' + line 1439: ' in-practice1' + line 1440: ' in-practice2' + line 1441: ' We insist on actively engaging with requests for feedback regardless of' + line 1442: ' their complexity.' + line 1443: ' in-practice3' + line 1444: ' We welcome newcomers and prioritize the education of others. We strive to' + line 1445: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' + line 1446: ' that newcomers are just as valuable in this effort as experts.' + line 1447: ' in-practice4' + line 1448: ' We consistently make the effort to actively recognize and validate multiple' + line 1449: ' types of contributions.' + line 1450: ' in-practice5' + line 1451: ' in-times-conflict-title' + line 1452: ' in-times-conflict1' + line 1453: ' in-times-conflict2' + line 1454: ' in-times-conflict3' + line 1455: ' We admit when we''re wrong, apologize, and accept responsibility for our' + line 1456: ' actions.' + line 1457: ' in-times-conflict4' + line 1458: ' in-times-conflict5' + line 1459: ' in-times-conflict6' + line 1460: ' in-times-conflict7' + line 1461: ' in-the-future-title' + line 1462: ' in-the-future1' + line 1463: ' notes-title' + line 1464: ' notes1' + line 1465: ' notes2' + line 1466: ' notes3' + line 1467: ' notes4' + line 1468: ' notes5' + line 1469: ' contribute-title' + line 1470: ' contribute1' + line 1471: ' Our community is always looking for enthusiasts to help in all different' + line 1472: ' ways.' + line 1473: ' develop-title' + line 1474: ' develop1' + line 1475: ' develop2' + line 1476: ' develop3' + line 1477: ' develop4' + line 1478: ' develop5' + line 1479: ' document-title' + line 1480: ' document1' + line 1481: ' document2' + line 1482: ' document3' + line 1483: ' document4' + line 1484: ' document5' + line 1485: ' teach-title' + line 1486: ' teach1' + line 1487: ' create-title' + line 1488: ' create1' + line 1489: ' create2' + line 1490: ' create3' + line 1491: ' donate-title' + line 1492: ' donate1' + line 1493: ' donate2' + line 1494: ' donate3' + line 1495: ' contributors-conference-title' + line 1496: ' contributors-conference1' + line 1497: ' While most work happens online, we also convene IRL. We''ve had two' + line 1498: ' contributors conferences held at the' + line 1499: ' contributors-conference2' + line 1500: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' + line 1501: ' developers, educators, and got together to advance the p5.js project.' + line 1502: ' participants-title' + line 1503: ' support-title' + line 1504: ' support1' + line 1505: ' support2' + line 1506: ' at Carnegie Mellon University, an academic laboratory for atypical,' + line 1507: ' anti-disciplinary, and inter-institutional research at the intersections of' + line 1508: ' arts, science, technology, and culture.' + line 1509: ' support3' + line 1510: ' support4' + line 1511: ' support5' + line 1512: ' support6' + line 1513: ' mailing-list-title' + line 1514: ' mailing-list-1' + line 1515: ' Enter your email address to receive occasional updates from the Processing' + line 1516: ' Foundation.' + line 1517: ' 2015contributors-conference-title' + line 1518: ' 2015contributors-conference-date' + line 1519: ' 2015contributors-conference1' + line 1520: ' 2015contributors-conference2' + line 1521: ' , advancing the code, documentation, and community outreach tools of the' + line 1522: ' p5.js programming environment. Participants came from as far away as Hong' + line 1523: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' + line 1524: ' professionals in the fields of creative technology, interaction design, and' + line 1525: ' new-media arts, but the group also included a half-dozen undergraduate and' + line 1526: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' + line 1527: ' 2015contributors-conference3' + line 1528: ' 2015contributors-conference-diversity-title' + line 1529: ' 2015contributors-conference-diversity1' + line 1530: ' Alongside technical development, one of the main focuses of this conference' + line 1531: ' was outreach, community, and diversity. The conference began with a panel' + line 1532: ' 2015contributors-conference-diversity2' + line 1533: ' Diversity' + line 1534: ' the Internet' + line 1535: ' 2015contributors-conference-diversity3' + line 1537: ' 2015contributors-conference-diversity5' + line 1538: ' 2015contributors-conference-diversity6' + line 1539: ' 2015contributors-conference-diversity7' + line 1540: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' + line 1541: ' Mellon University. Speakers included' + line 1542: ' 2015contributors-conference-diversity8' + line 1543: ' 2015contributors-conference-diversity9' + line 1545: ' 2015cc_2' + line 1546: ' 2015cc_3' + line 1547: ' 2015cc_4' + line 1548: ' Woman expressively speaks into a microphone while two male collaborators' + line 1549: ' look on' + line 1550: ' 2015cc_5' + line 1551: ' 2015cc_6' + line 1553: ' Participants sit in a circle around a white board with sticky notes on it' + line 1554: ' while a female student speaks into a microphone' + line 1555: ' 2015cc_8' + line 1556: ' Participants sit around a table looking at each others laptops and compare' + line 1557: ' code' + line 1558: ' 2015cc_9' + line 1559: ' 2015cc_10' + line 1561: ' group of participants with laptops look at her powerpoint in a classroom' + line 1562: ' 2015cc_11' + line 1563: ' Woman speaks at a podium in an auditorium while three participants sit on' + line 1564: ' the stage and another three are skyping in on the stage screen' + line 1565: ' 2015cc_12' + line 1566: ' 2015cc_13' + line 1567: ' 2015cc_14' + line 1569: ' 2019contributors-conference-title' + line 1570: ' 2019contributors-conference-date' + line 1571: ' 2019contributors-conference1' + line 1572: ' 2019contributors-conference2' + line 1573: ' , advancing the code, documentation, and community outreach tools and' + line 1574: ' exploring the current landscape of the p5.js programming environment.' + line 1575: ' Comprising a diverse range of participants within the fields of creative' + line 1577: ' at fostering dialogue through a multidisciplinary lens. Working groups' + line 1578: ' focused on several topic areas' + line 1579: ' Landscape of Creative Tech; and Internationalization.' + line 1580: ' 2019contributors-conference3' + line 1581: ' 2019contributors-conference4' + line 1582: ' outputs' + line 1583: ' output1' + line 1585: ' octagon girds for p5.js. Created by Aren Davey.' + line 1586: ' output2' + line 1587: ' . A set of template files for building a multi-device, multiplayer game' + line 1588: ' where multiple clients can connect to a specified host page. Created by L05.' + line 1589: ' output3' + line 1590: ' output3-1' + line 1591: ' , testing early implementations of softCompile, OSC interfacing and added' + line 1592: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' + line 1593: ' environment! Created by Ted Davis.' + line 1594: ' output4' + line 1595: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' + line 1596: ' with shawné michaelain holloway and LaJuné McMillian.' + line 1597: ' output5' + line 1598: ' output6' + line 1599: ' output6-1' + line 1600: ' output6-2' + line 1601: ' output7' + line 1602: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' + line 1603: ' Jon Chambers.' + line 1604: ' output8' + line 1605: ' output8-1' + line 1606: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' + line 1607: ' Ye, Dorothy R. Santos, and Yasheng She.' + line 1608: ' output9' + line 1609: ' output9-1' + line 1610: ' output10' + line 1611: ' An overhaul of the p5.js website for accessibility. Including updates for' + line 1612: ' screen reader accessibility, and improvements to the home, download, getting' + line 1613: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' + line 1614: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' + line 1615: ' McCarthy, and Evelyn Masso.' + line 1616: ' output11' + line 1617: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' + line 1618: ' Sona Lee, Ted Davis, and Carlos Garcia.' + line 1619: ' output12' + line 1620: ' output13' + line 1621: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' + line 1622: ' Tarakajian and Luca Damasco.' + line 1623: ' output14' + line 1624: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' + line 1625: ' Lauren Valley.' + line 1626: ' output15' + line 1627: ' 2019cc_1' + line 1628: ' 2019cc_2' + line 1629: ' 2019cc_3' + line 1630: ' 2019cc_4' + line 1631: ' 2019cc_5' + line 1632: ' 2019cc_6' + line 1633: ' 2019cc_7' line 1634: ' 2019cc_8' line 1635: ' 2019cc_9' line 1636: ' Participant speaks at a podium in front of projected text about the problem' @@ -3843,6 +3052,35 @@ ko: line 1663: ' Man sitting in front of the classroom speaking energetically into a' line 1664: ' microphone' line 1665: ' 2019cc_24' + line 1666: ' Group photo of participants smiling enthusiastically with their hands in the' + line 1667: ' air' + line 1668: ' 2019cc_25' + line 1712: ' books-title' + line 1713: ' book-1-title' + line 1714: ' book-1-authors' + line 1715: ' book-1-publisher' + line 1716: ' book-1-pages' + line 1717: ' book-1-type' + line 1718: ' book-1-description' + line 1719: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1720: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1721: ' using JavaScript and HTML.' + line 1722: ' book-1-order-a' + line 1723: ' book-1-order-b' + line 1724: ' book-2-title' + line 1725: ' book-2-authors' + line 1726: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' + line 1727: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' + line 1728: ' book-2-publisher' + line 1729: ' book-2-pages' + line 1730: ' book-2-type' + line 1731: ' book-2-description' + line 1732: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1733: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1734: ' using JavaScript and HTML.' + line 1735: ' book-2-order-a' + line 1736: ' book-2-order-b' + line 1737: ' book-3-title' line 1738: ' book-3-authors' line 1739: ' book-3-publisher' line 1740: ' book-3-pages' @@ -3871,6 +3109,12 @@ ko: line 1763: ' book-5-type' line 1764: ' book-5-description' line 1765: ' Learn coding from scratch in a highly engaging and visual manner using the' + line 1766: ' vastly popular JavaScript with the programming library p5.js. The skills you' + line 1767: ' will acquire from this book are highly transferable to a myriad of' + line 1768: ' industries and can be used towards building web applications, programmable' + line 1769: ' robots, or generative art.' + line 1770: ' book-5-order-a' + line 1771: ' book-5-order-b' line 1800: ' Examples' line 1801: ' back-examples' line 1802: ' Structure' @@ -3898,6 +3142,519 @@ ko: line 1824: ' Mobile' line 1825: ' Hello_P5' line 1829: ' Reference' + line 2005: ' showcase-title' + line 2006: ' showcase-intro1' + line 2007: ' showcase-intro2' + line 2008: ' showcase-intro3' + line 2009: ' We''re celebrating how people are using p5.js to make creative work,' + line 2010: ' learning, and open source more interesting and inclusive. Together, we make' + line 2011: ' community. During Summer 2019, we asked a few creators to share more about' + line 2012: ' how they''ve used p5.js through different projects and pieces.' + line 2013: ' showcase-intro4' + line 2014: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' + line 2015: ' p5.js work or your own to be featured here!' + line 2016: ' nominate-project' + line 2017: ' showcase-featuring' + line 2018: ' project-tag-art' + line 2019: ' project-tag-design' + line 2020: ' project-tag-code' + line 2021: ' project-tag-curriculum' + line 2022: ' project-tag-documentation' + line 2023: ' project-tag-game' + line 2024: ' project-tag-library' + line 2025: ' project-tag-organizing' + line 2026: ' project-tag-tool' + line 2027: ' project-tag-tutorial' + line 2028: ' project-roni' + line 2029: ' credit-roni' + line 2030: ' description-roni' + line 2031: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' + line 2032: ' plotter and pens.' + line 2033: ' project-phuong' + line 2034: ' credit-phuong' + line 2035: ' description-phuong' + line 2036: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' + line 2037: ' encourage people to get out of their comfort zone and feel more confident' + line 2038: ' about themselves regardless of what they do and how they look or sound.' + line 2039: ' project-daein' + line 2040: ' credit-daein' + line 2041: ' description-daein' + line 2042: ' An interactive typographic poster that uses a mobile device''s motion sensor' + line 2043: ' with p5.js.' + line 2044: ' project-qianqian' + line 2045: ' credit-qianqian' + line 2046: ' description-qianqian' + line 2047: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' + line 2048: ' and technology, including p5.js tutorials for beginners. Available on' + line 2049: ' YouTube, Instagram, Bilibili, and TikTok.' + line 2050: ' project-casey-louise' + line 2051: ' credit-casey-louise' + line 2052: ' description-casey-louise' + line 2053: ' project-moon-xin' + line 2054: ' credit-moon-xin' + line 2055: ' description-moon-xin' + line 2056: ' Browser-based moving posters that use graphical systems, transformation' + line 2057: ' methods, and p5.js to address the connotations of a word less than 8' + line 2058: ' letters. Designed by students for a graphic design course (Visual Narrative' + line 2059: ' Systems) at the University of Georgia.' + line 2060: ' created-by' + line 2061: ' pronouns-female' + line 2062: ' creator-from-roni-cantor' + line 2063: ' project-links' + line 2064: ' project-links-text-1-roni-cantor' + line 2065: ' project-links-text-2-roni-cantor' + line 2066: ' project-q-1-1' + line 2067: ' project-q-1-2' + line 2068: ' project-a-1-1-roni-cantor' + line 2069: ' I just graduated from Ryerson University''s New Media program. Coming from 4' + line 2070: ' years of coding and making robots, I decided to take a break and play with' + line 2071: ' some more traditional forms of art—while still coding and playing with' + line 2072: ' robots.' + line 2073: ' project-a-1-2-roni-cantor' + line 2074: ' project-a-1-3-roni-cantor' + line 2075: ' project-a-1-4-roni-cantor' + line 2076: ' project-q-2' + line 2077: ' project-a-2-1-roni-cantor' + line 2078: ' I used p5.js in this project to generate the sine wave and lerp (linear' + line 2079: ' interpolation) formulas and display the visuals in the' + line 2080: ' project-a-2-2-roni-cantor' + line 2081: ' . I then used a feature in my code that exported my programmed graphic into' + line 2082: ' an' + line 2083: ' project-a-2-3-roni-cantor' + line 2084: ' project-a-2-4-roni-cantor' + line 2085: ' —so that it understood where to draw the lines that I programmed. I sent' + line 2086: ' this information to the plotter with a program called' + line 2087: ' project-a-2-5-roni-cantor' + line 2088: ' project-q-3' + line 2089: ' project-a-3-roni-cantor' + line 2090: ' project-q-4' + line 2091: ' Did you face any challenges working on this project? If so, how did you' + line 2092: ' overcome them?' + line 2093: ' project-a-4-roni-cantor' + line 2094: ' It was my first time using p5.js, Inkscape, and a plotter! I really' + line 2095: ' benefited from the people around me who had used p5 before, as well as' + line 2096: ' online guides and forums.' + line 2097: ' project-q-5' + line 2098: ' project-a-5-roni-cantor' + line 2099: ' project-q-6' + line 2100: ' project-a-6-roni-cantor' + line 2101: ' project-resources' + line 2102: ' creator-from-qianqian' + line 2103: ' interview-link-qianqian' + line 2104: ' project-a-1-1-qianqian' + line 2105: ' project-a-1-2-qianqian' + line 2106: ' My partner introduced me to p5.js, which I learned mainly by watching free' + line 2107: ' online video tutorials. My first p5.js project was drawing some shapes with' + line 2108: ' different colors.' + line 2109: ' project-a-2-1-qianqian' + line 2110: ' This project started with an idea of teaching my mom, who lives in China and' + line 2111: ' doesn’t speak English, to code with p5.js. This project was difficult on' + line 2112: ' multiple levels, and I wanted to start by identifying the main reasons why' + line 2113: ' it’s more challenging for someone like my mother to learn to code—primarily' + line 2114: ' due to the lack of free creative coding education resources. Most of the' + line 2115: ' free resources to learn creative coding are unavailable in China. The p5.js' + line 2116: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' + line 2117: ' inaccessible in China because of internet censorship.' + line 2118: ' project-a-2-2-qianqian' + line 2119: ' project-a-2-3-qianqian' + line 2120: ' , but the more I watched coding tutorials online, the more I realized how' + line 2121: ' difficult it is to find other womxn and people of color teaching coding,' + line 2122: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' + line 2123: ' creative coding.' + line 2124: ' project-a-2-4-qianqian' + line 2125: ' I am working on opening up the video channels to other Chinese creatives who' + line 2126: ' want to contribute to the educational resource together, like interviews and' + line 2127: ' guest tutorials. If you are interested in teaching/talking about creative' + line 2128: ' coding in Mandarin, HMU!' + line 2129: ' project-a-3-1-qianqian' + line 2130: ' project-a-3-2-qianqian' + line 2131: ' project-a-4-1-qianqian' + line 2132: ' Learning to code in a second language was difficult and the lack of' + line 2133: ' community made this process even harder. I hope to speak from my experience' + line 2134: ' as a beginner and someone who once felt like an outsider to the creative' + line 2135: ' coding and video tutorial world.' + line 2136: ' project-a-4-2-qianqian' + line 2137: ' I spend a lot of time researching the latest technology for my videos. In' + line 2138: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' + line 2139: ' encourage others that it doesn’t take a lot of expensive gears to get' + line 2140: ' started making instructional videos.' + line 2141: ' project-a-4-3-qianqian' + line 2142: ' Another issue I came across was my own fear of putting myself online. I' + line 2143: ' first had to get over my anxiety of making mistakes in the videos or' + line 2144: ' receiving negative comments online. Often womxn and people of color are' + line 2145: ' targets for online harassment. I’m hoping to help set an example for other' + line 2146: ' womxn and people of color that it’s ok to put yourselves online and' + line 2147: ' strengthen your communities by sharing your knowledge. Eventually, we will' + line 2148: ' be able to stop online harassment by creating strong diverse communities.' + line 2149: ' project-a-5-1-qianqian' + line 2150: ' project-a-5-2-qianqian' + line 2151: ' creator-from-phuong' + line 2152: ' project-a-1-1-phuong' + line 2153: ' link-1-phuong' + line 2154: ' link-2-phuong' + line 2155: ' link-3-phuong' + line 2156: ' project-a-1-2-phuong' + line 2157: ' project-a-1-3-phuong' + line 2158: ' I was taking a course at the School of Machines in Berlin this summer' + line 2159: ' called! "' + line 2160: ' project-a-1-4-phuong' + line 2161: ' project-a-2-1-phuong' + line 2162: ' I used p5.js to work on the visual part of the game. The animation sprites' + line 2163: ' for Airi and the ghosts were drawn on an iPad app called' + line 2164: ' project-a-2-2-phuong' + line 2165: ' project-a-2-3-phuong' + line 2166: ' project-a-2-4-phuong' + line 2167: ' p5-sketch-by-chjno-phuong' + line 2168: ' project-a-2-5-phuong' + line 2169: ' . I set a condition so whenever the word "pew" or a mouse click was' + line 2170: ' detected, the scrolling speed would change to make an illusion of Airi' + line 2171: ' flying up. When the user does not do anything, the scrolling speed is' + line 2172: ' negative, which makes it look like Airi is falling down.' + line 2173: ' project-a-2-6-phuong' + line 2174: ' project-a-2-7-phuong' + line 2175: ' project-a-3-1-phuong' + line 2176: ' I really love how easily you can create, manipulate, and delete HTML blocks' + line 2177: ' and classes with the' + line 2178: ' project-a-3-2-phuong' + line 2179: ' project-a-3-3-phuong' + line 2180: ' project-a-3-4-phuong' + line 2181: ' project-a-4-1-phuong' + line 2182: ' There were a lot of challenges simply because p5.js was something new to me.' + line 2183: ' I did not work much with JavaScript in general before. Reading documentation' + line 2184: ' and searching for similar examples helped a lot.' + line 2185: ' project-a-5-1-phuong' + line 2186: ' school-of-machines-phuong' + line 2187: ' project-a-5-2-phuong' + line 2188: ' ! They try hard to connect the most creative people in the world and they do' + line 2189: ' it well so far. ❤️' + line 2190: ' pronouns-male' + line 2191: ' creator-from-chung' + line 2192: ' link-1-casey-louise' + line 2193: ' link-2-casey-louise' + line 2194: ' link-1-chung' + line 2195: ' link-2-chung' + line 2196: ' link-3-chung' + line 2197: ' project-a-1-1-chung' + line 2198: ' I am a graphic designer and a faculty member at Maryland Institute College' + line 2199: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' + line 2200: ' and motion graphics.' + line 2201: ' project-a-1-2-chung' + line 2202: ' project-a-1-3-chung' + line 2203: ' project-a-2-1-chung' + line 2204: ' This summer, I gave myself a challenge of making typographic posters with' + line 2205: ' coding, and this is one of the posters I made. I didn’t know until very' + line 2206: ' recently that I could use motion sensor data with p5.js. I was also watching' + line 2207: ' dan-shiffman-matterjs-tutorial' + line 2208: ' project-a-2-2-chung' + line 2209: ' project-a-3-1-chung' + line 2210: ' There are many things I love about p5.js such as the online community and' + line 2211: ' beginner friendliness. What I really like right now is the' + line 2212: ' project-a-3-2-chung' + line 2213: ' , with which I can not only work online for myself but also share URLs' + line 2214: ' quickly in the present mode. For this project in particular, I had to do a' + line 2215: ' lot of testing on my phone, and it was much easier and quicker than' + line 2216: ' committing to GitHub.' + line 2217: ' project-a-4-1-chung' + line 2218: ' project-a-4-2-chung' + line 2219: ' project-a-4-3-chung' + line 2220: ' project-a-5-1-chung' + line 2221: ' As mentioned above, if you want to render out frames and video files out of' + line 2222: ' p5.js sketches, check out my' + line 2223: ' project-a-5-2-chung' + line 2224: ' creator-from-casey-louise' + line 2225: ' project-a-1-1-casey-louise' + line 2226: ' Casey' + line 2227: ' interactive spaces, physical and digital.' + line 2228: ' project-a-1-2-casey-louise' + line 2229: ' Louise' + line 2230: ' interactive spaces based on sensor technologies.' + line 2231: ' project-a-1-3-casey-louise' + line 2232: ' Casey' + line 2233: ' I had been dabbling in' + line 2234: ' project-a-1-4-casey-louise' + line 2235: ' project-a-1-5-casey-louise' + line 2236: ' Louise' + line 2237: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' + line 2238: ' me.' + line 2239: ' project-a-2-1-casey-louise' + line 2240: ' Casey' + line 2241: ' curious if I could use them in p5.js. Then I heard about a grant for open' + line 2242: ' source, storytelling, and learning resource projects at ITP called' + line 2243: ' project-a-2-2-casey-louise' + line 2244: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' + line 2245: ' decided to figure out how they''re implemented in p5.js and create a resource' + line 2246: ' for others to learn. When I told Louise about the project, she was' + line 2247: ' immediately excited about learning and teaching shaders in p5.js. She''s been' + line 2248: ' great about making sure the project is a learning resource and not just a' + line 2249: ' collection of examples.' + line 2250: ' project-a-3-1-casey-louise' + line 2251: ' project-a-3-2-casey-louise' + line 2252: ' project-a-3-3-casey-louise' + line 2253: ' project-a-3-4-casey-louise' + line 2254: ' project-a-3-5-casey-louise' + line 2255: ' project-a-4-1-casey-louise' + line 2256: ' Casey' + line 2257: ' reaching out to amazing people, asking questions, and asking for permission' + line 2258: ' to use their examples in our project.' + line 2259: ' adam-ferris-repo-casey-louise' + line 2260: ' project-a-4-2-casey-louise' + line 2261: ' project-a-4-3-casey-louise' + line 2262: ' project-a-4-4-casey-louise' + line 2263: ' webgl-casey-louise' + line 2264: ' project-a-4-5-casey-louise' + line 2265: ' project-a-4-6-casey-louise' + line 2266: ' Louise' + line 2267: ' Luckily, there were some very well-documented examples on GitHub by Adam' + line 2268: ' Ferriss. Our aim was to do so in a way that a complete beginner can' + line 2269: ' understand how to implement it, so it was as much a technical challenge as' + line 2270: ' it was a challenge in teaching code to strangers and beginners. Here we drew' + line 2271: ' inspiration from the way the' + line 2272: ' openframeworks-book-casey-louise' + line 2273: ' project-a-4-7-casey-louise' + line 2274: ' project-a-5-1-casey-louise' + line 2275: ' project-a-5-2-casey-louise' + line 2276: ' pronouns-nonbinary' + line 2277: ' creator-from-moon' + line 2278: ' posters-by' + line 2279: ' project-a-1-1-moon' + line 2280: ' Moon' + line 2281: ' summer, I taught a graphic design course in the University of Georgia' + line 2282: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' + line 2283: ' planning to teach and to study digital platforms at UGA.' + line 2284: ' project-a-1-2-moon' + line 2285: ' project-a-1-3-moon' + line 2286: ' project-a-1-4-moon' + line 2287: ' pcd-la-moon' + line 2288: ' project-a-1-5-moon' + line 2289: ' . They helped me with the tools and logics of p5.js. It was an excellent' + line 2290: ' teaching and learning experience.' + line 2291: ' project-a-2-1-moon' + line 2292: ' codetrain-moon' + line 2293: ' project-a-2-2-moon' + line 2294: ' p5-reference-moon' + line 2295: ' project-a-2-3-moon' + line 2296: ' project-a-3-1-moon' + line 2297: ' project-a-3-2-moon' + line 2298: ' project-a-3-3-moon' + line 2299: ' project-a-3-4-moon' + line 2300: ' . I was able to use and to teach this tool to visualize various ideas about' + line 2301: ' time in motion.' + line 2302: ' project-a-4-1-moon' + line 2303: ' It was challenging for me, a beginner, to understand the overall structure' + line 2304: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' + line 2305: ' couple of times, and then I drew a chart to memorize and to teach the way I' + line 2306: ' understood the p5.js structure and code with strong constraints I set up. It' + line 2307: ' was an excellent teaching and learning experience.' + line 2308: ' project-a-5-1-moon' + line 2309: ' project-a-5-2-moon' + line 2310: teach + line 2311: ' teach-title2' + line 2312: ' teach-intro1' + line 2313: ' Every teaching has its own unique goals, messages, conditions, and' + line 2314: ' environments. ' + line 2315: ' teach-intro2' + line 2316: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' + line 2317: ' better connect the p5.js learner and educator communities around the world. ' + line 2318: ' teach-intro3' + line 2319: ' teach-intro4' + line 2320: ' teach-heading' + line 2321: ' teach-search-filter' + line 2322: ' teach-filter1' + line 2323: ' teach-filter1-label1' + line 2324: ' teach-filter1-label2' + line 2325: ' teach-filter1-label3' + line 2326: ' teach-filter1-label4' + line 2327: ' teach-filter1-label5' + line 2328: ' teach-filter1-label6' + line 2329: ' teach-filter1-label7' + line 2330: ' teach-filter1-label8' + line 2331: ' teach-filter1-label9' + line 2332: ' teach-filter1-label10' + line 2333: ' teach-filter1-label11' + line 2334: ' teach-filter1-label12' + line 2335: ' teach-filter1-label13' + line 2336: ' teach-filter1-label14' + line 2337: ' teach-filter1-label15' + line 2338: ' teach-filter1-label16' + line 2339: ' teach-filter2' + line 2340: ' teach-filter2-label1' + line 2341: ' teach-filter2-label2' + line 2342: ' teach-filter2-label3' + line 2343: ' teach-filter2-label4' + line 2344: ' teach-filter2-label5' + line 2345: ' teach-filter2-label6' + line 2346: ' teach-filter2-label7' + line 2347: ' teach-filter3' + line 2348: ' teach-filter4' + line 2349: ' teach-filter4-label1' + line 2350: ' teach-filter4-label2' + line 2351: ' teach-filter4-label3' + line 2352: ' teach-case-subtitle1' + line 2353: ' teach-case-subtitle2' + line 2354: ' teach-case-subtitle3' + line 2355: ' teach-case-subtitle4' + line 2356: ' teach-case-subtitle5' + line 2357: ' teach-case1-title' + line 2358: ' teach-case1-lead-name' + line 2359: ' teach-case1-content1' + line 2360: ' teach-case1-content1-1' + line 2361: ' teach-case1-content2' + line 2362: ' teach-case1-content3' + line 2363: ' teach-case1-content4' + line 2364: ' To introduce a new public to programming through fun and compelling' + line 2365: ' examples. ' + line 2366: ' teach-case1-content5' + line 2367: ' Method' + line 2368: ' each times. The students were using (Ubuntu) machines with the p5.js web' + line 2369: ' editor. I was teaching using a video projector as well as a board.' + line 2370: ' teach-case1-content5-1' + line 2371: ' Materials' + line 2372: ' links available in ' + line 2373: ' teach-case2-title' + line 2374: ' Making The Thing that Makes the Thing' + line 2375: ' with p5.js' + line 2376: ' teach-case2-lead-name' + line 2377: ' teach-case2-content1' + line 2378: ' teach-case2-content1-1' + line 2379: ' teach-case2-content2' + line 2380: ' Our participants included art/design students & professionals, creative' + line 2381: ' coding enthusiasts. We had close to 50 participants.' + line 2382: ' teach-case2-content3' + line 2383: ' teach-case2-content4' + line 2384: ' To explore generative art & design and recreate some classical works' + line 2385: ' with p5.js. ' + line 2386: ' teach-case2-content5' + line 2387: ' teach-case2-content5-1' + line 2388: ' teach-case2-content5-2' + line 2389: ' teach-case2-content5-3' + line 2390: ' teach-case2-content5-4' + line 2391: ' teach-case2-content5-5' + line 2392: ' teach-case3-title' + line 2393: ' teach-case3-lead-name' + line 2394: ' teach-case3-speech' + line 2395: ' teach-case3-content1' + line 2396: ' teach-case3-content1-1' + line 2397: ' teach-case3-content2' + line 2398: ' Our participants included art/design students & professionals, creative' + line 2399: ' coding enthusiasts. We had close to 50 participants.' + line 2400: ' teach-case3-content3' + line 2401: ' teach-case3-content4' + line 2402: ' To build a teacher and student community around p5 for middle and high' + line 2403: ' school.' + line 2404: ' teach-case3-content5' + line 2405: ' A half-day of workshop led by volunteer teachers. We saw lots of different' + line 2406: ' methods and materials. Most used some sort of slides or documentation, some' + line 2407: ' live coding using an editor, with work time for participant to remix.' + line 2408: ' teach-case3-content5-1' + line 2409: ' teach-case3-content5-2' + line 2410: ' teach-case3-content5-3' + line 2411: ' teach-case4-title' + line 2412: ' teach-case4-lead-name' + line 2413: ' teach-case4-speech' + line 2414: ' teach-case4-content1' + line 2415: ' teach-case4-content1-1' + line 2416: ' teach-case4-content2' + line 2417: ' I had around 16 students in the workshop, and a team including 3 people from' + line 2418: ' the PlusCode festival, and one person at the venue.' + line 2419: ' teach-case4-content3' + line 2420: ' teach-case4-content4' + line 2421: ' Introduction to beginners and artists of graphic web programming and open' + line 2422: ' source, using p5.js, in Spanish ' + line 2423: ' teach-case4-content5' + line 2424: ' teach-case4-content5-1' + line 2425: ' teach-case4-content5-2' + line 2426: ' teach-case4-content5-3' + line 2427: ' teach-case4-content5-4' + line 2428: ' teach-case5-title' + line 2429: ' teach-case5-lead-name' + line 2430: ' teach-case5-speech' + line 2431: ' My greatest source of uncertainty in developing the workshop was whether it' + line 2432: ' was trying to teach art to programmers or to teach programming to artists.' + line 2433: ' teach-case5-content1' + line 2434: ' teach-case5-content1-1' + line 2435: ' teach-case5-content1-2' + line 2436: ' teach-case5-content1-3' + line 2437: ' teach-case5-content2' + line 2438: ' teach-case5-content3' + line 2439: ' teach-case5-content4' + line 2440: ' To introduce p5.js to artists with little or no programming experience and' + line 2441: ' to suggest one way an analogue practice can migrate to a digital form.' + line 2442: ' teach-case5-content5' + line 2443: ' A printed workbook with activities that used the p5.js web editor to show' + line 2444: ' how translate an physical drawing into a digital drawing.' + line 2445: ' teach-case5-content5-1' + line 2446: ' teach-case5-content5-2' + line 2447: ' teach-case5-content5-3' + line 2448: ' teach-case6-title' + line 2449: ' teach-case6-lead-name' + line 2450: ' teach-case6-speech' + line 2451: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' + line 2452: ' your everyday life!' + line 2453: ' teach-case6-content1' + line 2454: ' teach-case6-content1-1' + line 2455: ' teach-case6-content2' + line 2456: ' teach-case6-content3' + line 2457: ' teach-case6-content4' + line 2458: ' teach-case6-content5' + line 2459: ' teach-case6-content5-1' + line 2460: ' teach-case6-content5-2' + line 2461: ' teach-case6-content5-3' + line 2462: ' teach-case6-content5-4' + line 2463: ' teach-case6-content5-5' + line 2464: ' teach-case7-title' + line 2465: ' teach-case7-lead-name' + line 2466: ' teach-case7-speech' + line 2467: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' + line 2468: ' to give it a try!' + line 2469: ' teach-case7-content1' + line 2470: ' teach-case7-content1-1' + line 2471: ' teach-case7-content2' + line 2472: ' teach-case7-content3' + line 2473: ' teach-case7-content4' + line 2474: ' teach-case7-content5' + line 2475: ' teach-case7-content5-1' + line 2476: ' teach-case8-title' + line 2477: ' teach-case8-lead-name' + line 2478: ' teach-case8-content1' + line 2479: ' teach-case8-content1-1' + line 2480: ' teach-case8-content2' + line 2481: ' teach-case8-content3' + line 2482: ' teach-case8-content4' + line 2483: ' teach-case8-content5' + line 2484: ' teach-case8-content5-1' + line 2485: ' teach-case8-content5-2' + line 2486: ' teach-case9-title' + line 2487: ' teach-case9-lead-name' + line 2488: ' teach-case9-content1' + line 2489: ' teach-case9-content1-1' + line 2490: ' teach-case9-content2' + line 2491: ' Students at Interactive Telecommunications Program, New York University. 16' + line 2492: ' people.' + line 2493: ' teach-case9-content3' + line 2494: ' teach-case9-content4' + line 2495: ' The goal of this class is to learn and understand common machine learning' + line 2496: ' techniques and apply them to generate creative outputs in the browser using' + line 2497: ' ml5.js and p5.js.' + line 2498: ' teach-case9-content5' + line 2499: ' This class is a mix of lectures, coding sessions, group discussions, and' + line 2500: ' presentations. I used ' + line 2501: ' teach-case9-content5-1' + line 2502: ' teach-case9-content5-2' + line 2503: ' teach-case9-content5-3' + line 2504: ' teach-case10-title' + line 2505: ' teach-case10-lead-name' + line 2506: ' teach-case10-content1' + line 2507: ' teach-case10-content3' + line 2508: ' teach-case10-content4' + line 2509: ' Introduce learners (potentially with no coding experiences at all) to the' + line 2510: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' + line 2511: ' and enable them to pursue own projects in a safe environment.' + line 2512: ' teach-case10-content5' + line 2513: ' p5.js source code (for the introductory project), JavaScript source code' + line 2514: ' (illustrating some basic JavaScript functionalities), accompanying slides in' + line 2515: ' .pdf format, all hosted publicly on GitHub. ' + line 2516: ' teach-case10-content5-1' + line 2517: ' teach-case10-content5-2' line 2518: ' teach-case11-title' line 2519: ' teach-case11-lead-name' line 2520: ' teach-case11-content1' @@ -3920,381 +3677,120 @@ ko: line 2537: ' teach-case12-title' line 2538: ' teach-case12-lead-name' line 2539: ' teach-case12-speech' + line 2540: ' I''m working on a new series of coding class for Disabled students in South' + line 2541: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' + line 2542: ' workshops in December 2020. The project is supported by the Open Society' + line 2543: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' + line 2544: ' Center.' + line 2545: ' teach-case12-content1' + line 2546: ' teach-case12-content1-1' + line 2547: ' teach-case12-content2' + line 2548: ' teach-case12-content3' + line 2549: ' teach-case12-content4' + line 2550: ' To help Deaf and Hard of Hearing students learn about computer programming' + line 2551: ' through playful exercises. To make ASL tutorial of basic coding concepts.' + line 2552: ' teach-case12-content5' + line 2553: ' We used p5.js Web editor and code examples on the website. We also used' + line 2554: ' dice, playing cards and various paper tools to help students learn about' + line 2555: ' coding concepts.' + line 2556: ' teach-case12-content5-1' + line 2557: ' teach-case12-content5-2' line 598: ' color-custom-ranges-li1x2' line 601: ' color-custom-ranges-li2x2' line 604: ' color-custom-ranges-li3x2' - line 728: ' learn-title' - line 1091: <<<<<<< HEAD - line 1099: '=======' - line 1100: ' Libraries' - line 1101: ' core-libraries' - line 1102: ' community-libraries' - line 1103: ' libraries-created-by' - line 1104: ' p5.sound' - line 1105: ' p5.sound extends p5 with Web Audio functionality including audio input,' - line 1106: ' playback, analysis and synthesis.' - line 1107: ' p5.accessibility' - line 1108: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' - line 1109: ' and visually impaired.' - line 1110: ' asciiart' - line 1111: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' - line 1112: ' p5js.' - line 1113: ' p5.ble' - line 1114: ' A Javascript library that enables communication between BLE devices and p5' - line 1115: ' sketches.' - line 1116: ' p5.bots' - line 1117: ' With p5.bots you can interact with your Arduino (or other microprocessor)' - line 1118: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' - line 1119: ' drive LEDs, motors, and more!' - line 1120: ' p5.clickable' - line 1121: ' p5.cmyk.js' - line 1122: ' p5.collide2D' - line 1135: ' p5.func' - line 1136: ' p5.func is a p5 extension that provides new objects and utilities for' - line 1137: ' function generation in the time, frequency, and spatial domains.' - line 1138: ' p5.geolocation' - line 1139: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' - line 1140: ' geofencing user locations for p5.js.' - line 1141: ' p5.gibber' - line 1142: ' grafica.js' - line 1143: ' grafica.js lets you add simple but highly configurable 2D plots to your' - line 1144: ' p5.js sketches.' - line 1145: ' p5.gui' - line 1146: ' p5.localmessage' - line 1374: ' community-title' - line 1375: ' community-statement-title' - line 1376: ' community-statement1' - line 1377: ' p5.js is a community interested in exploring the creation of art and design' - line 1378: ' with technology.' - line 1379: ' community-statement2' - line 1380: ' We are a community of, and in solidarity with, people from every gender' - line 1381: ' identity and expression, sexual orientation, race, ethnicity, language,' - line 1382: ' neuro-type, size, ability, class, religion, culture, subculture, political' - line 1383: ' opinion, age, skill level, occupation, and background. We acknowledge that' - line 1384: ' not everyone has the time, financial means, or capacity to actively' - line 1385: ' participate, but we recognize and encourage involvement of all kinds. We' - line 1386: ' facilitate and foster access and empowerment. We are all learners.' - line 1387: ' community-statement3' - line 1388: ' We like these hashtags' - line 1389: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' - line 1390: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' - line 1391: ' course).' - line 1392: ' in-practice-title' - line 1393: ' in-practice1' - line 1394: ' in-practice2' - line 1395: ' We insist on actively engaging with requests for feedback regardless of' - line 1396: ' their complexity.' - line 1397: ' in-practice3' - line 1398: ' We welcome newcomers and prioritize the education of others. We strive to' - line 1399: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' - line 1400: ' that newcomers are just as valuable in this effort as experts.' - line 1401: ' in-practice4' - line 1402: ' We consistently make the effort to actively recognize and validate multiple' - line 1403: ' types of contributions.' - line 1404: ' in-practice5' - line 1405: ' in-times-conflict-title' - line 1406: ' in-times-conflict1' - line 1407: ' in-times-conflict2' - line 1408: ' in-times-conflict3' - line 1409: ' We admit when we''re wrong, apologize, and accept responsibility for our' - line 1410: ' actions.' - line 1411: ' in-times-conflict4' - line 1412: ' in-times-conflict5' - line 1413: ' in-times-conflict6' - line 1414: ' in-times-conflict7' - line 1415: ' in-the-future-title' - line 1416: ' in-the-future1' - line 1417: ' notes-title' - line 1418: ' notes1' - line 1419: ' notes2' - line 1669: ' book-1-publisher' - line 1670: ' book-1-pages' - line 1671: ' book-1-type' - line 1672: ' book-1-description' - line 1673: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1674: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1675: ' using JavaScript and HTML.' - line 1676: ' book-1-order-a' - line 1677: ' book-1-order-b' - line 1678: ' book-2-title' - line 1679: ' book-2-authors' - line 1680: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' - line 1681: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' - line 1682: ' book-2-publisher' - line 1683: ' book-2-pages' - line 1684: ' book-2-type' - line 1685: ' book-2-description' - line 1686: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1687: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1688: ' using JavaScript and HTML.' - line 1689: ' book-2-order-a' - line 1690: ' book-2-order-b' - line 1691: ' book-3-title' - line 1692: ' book-3-authors' - line 1693: ' book-3-publisher' - line 1694: ' book-3-pages' - line 1695: ' book-3-type' - line 1696: ' book-3-description' - line 1697: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1698: ' can create everything from interactive typography and textiles to 3D-printed' - line 1699: ' furniture to complex and elegant infographics.' - line 1700: ' book-3-order-a' - line 1701: ' book-3-order-b' - line 1702: ' book-4-title' - line 1703: ' book-4-authors' - line 1704: ' book-4-publisher' - line 1705: ' book-4-pages' - line 1706: ' book-4-type' - line 1707: ' book-4-description' - line 1708: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1709: ' can create everything from interactive typography and textiles to 3D-printed' - line 1710: ' furniture to complex and elegant infographics.' - line 1711: ' book-4-order-a' - line 1772: ' Control' - line 1773: ' Image' - line 1774: ' Color' - line 1775: ' Math' - line 1776: ' Simulate' - line 1777: ' Interaction' - line 1778: ' Objects' - line 1779: ' Lights' - line 1780: ' Motion' - line 1781: ' Instance_Mode' - line 1782: ' Dom' - line 1783: ' Drawing' - line 1784: ' Transform' - line 1785: ' Typography' - line 1786: ' 3D' - line 1787: ' Input' - line 1788: ' Advanced_Data' - line 1789: ' Sound' - line 1790: ' Mobile' - line 1791: ' Hello_P5' - line 1795: ' Reference' - line 1948: ' showcase-title' - line 1949: ' showcase-intro1' - line 1950: ' showcase-intro2' - line 1951: ' showcase-intro3' - line 1952: ' We''re celebrating how people are using p5.js to make creative work,' - line 1953: ' learning, and open source more interesting and inclusive. Together, we make' - line 1954: ' community. During Summer 2019, we asked a few creators to share more about' - line 1955: ' how they''ve used p5.js through different projects and pieces.' - line 1956: ' showcase-intro4' - line 1957: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' - line 1958: ' p5.js work or your own to be featured here!' - line 1959: ' nominate-project' - line 1960: ' showcase-featuring' - line 1961: ' project-tag-art' - line 1962: ' project-tag-design' - line 1963: ' project-tag-code' - line 1964: ' project-tag-curriculum' - line 1965: ' project-tag-documentation' - line 1966: ' project-tag-game' - line 1967: ' project-tag-library' - line 1968: ' project-tag-organizing' - line 1969: ' project-tag-tool' - line 1970: ' project-tag-tutorial' - line 1971: ' project-roni' - line 1972: ' credit-roni' - line 1973: ' description-roni' - line 1974: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' - line 1975: ' plotter and pens.' - line 1976: ' project-phuong' - line 1977: ' credit-phuong' - line 1978: ' description-phuong' - line 1979: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' - line 1980: ' encourage people to get out of their comfort zone and feel more confident' - line 1981: ' about themselves regardless of what they do and how they look or sound.' - line 1982: ' project-daein' - line 1983: ' credit-daein' - line 1984: ' description-daein' - line 1985: ' An interactive typographic poster that uses a mobile device''s motion sensor' - line 1986: ' with p5.js.' - line 1987: ' project-qianqian' - line 1988: ' credit-qianqian' - line 1989: ' description-qianqian' - line 1990: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' - line 1991: ' and technology, including p5.js tutorials for beginners. Available on' - line 1992: ' YouTube, Instagram, Bilibili, and TikTok.' - line 1993: ' project-casey-louise' - line 1994: ' credit-casey-louise' - line 1995: ' description-casey-louise' - line 1996: ' project-moon-xin' - line 1997: ' credit-moon-xin' - line 1998: ' description-moon-xin' - line 1999: ' Browser-based moving posters that use graphical systems, transformation' - line 2000: ' methods, and p5.js to address the connotations of a word less than 8' - line 2001: ' letters. Designed by students for a graphic design course (Visual Narrative' - line 2002: ' Systems) at the University of Georgia.' - line 2003: ' created-by' - line 2004: ' pronouns-female' - line 2558: ' teach-case14-content5-3' - line 2559: ' 3) We incorporated machine learning, audio processing, and computer vision techniques to track and respond to the presence of people. ' - line 2560: ' teach-case14-content5-4' - line 2561: ' 4) Together, these works make one installation, comprised of four interconnected smart rooms that each provoke discussion. ' - line 2562: ' teach-case14-content5-5' - line 2563: ' teach-case15-title' - line 2564: ' teach-case15-lead-name' - line 2565: ' teach-case15-content1' - line 2566: ' L''École de Design Nantes Atlantique, France' - line 2567: ' teach-case15-content1-1' - line 2568: ' teach-case15-content2' - line 2569: ' Students from l''école de design Nantes Atlantique''' - line 2570: ' teach-case15-content3' - line 2571: ' teach-case15-content4' - line 2572: ' To get to know p5.js and its functionalities (DOM, audio, WebGL, etc.) ' - line 2573: ' teach-case15-content5' - line 2574: ' GitHub Readme File' - line 2575: ' teach-case15-content5-1' - line 2576: ' teach-case16-title' - line 2577: ' 50+ Coding Club ' - line 2578: ' teach-case16-lead-name' - line 2579: ' teach-case16-speech' - line 2580: ' This workshop was conducted in line with ''p5 for 50+'' project, with supports from 2020 Processing Foundation fellowship program and Asia Culture Center (ACC).' - line 2581: ' teach-case16-content1' - line 2582: ' teach-case16-content1-1' - line 2583: ' teach-case16-content2' - line 2584: ' teach-case16-content2-1' - line 2585: ' teach-case16-content2-2' - line 2586: ' teach-case16-content3' - line 2587: ' teach-case16-content4' - line 2588: ' Addressing the digital literacy and rights of age 50+ population in a non-English-speaking country,' - line 2589: ' this workshop aimed to lower their physical, lingual, and emotional barriers to learning coding with smartphone-based p5.js editor.' - line 2590: ' teach-case16-content5' - line 2591: ' p5for50+ web app' - line 2592: ' teach-case16-content5-1' - line 2593: ' a smartphone-based web app, with p5.js web editor embedded in it. Created with the editor, the participants'' p5 sketches were printed out and framed on-site, and distributed as their materialized outcomes.' - line 2594: ' teach-case16-content5-2' - line 2595: ' teach-case16-content5-3' - line 2596: ' teach-case16-content5-4' - line 2609: ' teach-case17-title' - line 2610: ' teach-case17-lead-name' - line 2611: ' teach-case17-speech' - line 2612: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 2613: ' teach-case17-content1' - line 2614: ' teach-case17-content1-1' - line 2615: ' teach-case17-content2' - line 2616: ' teach-case17-content3' - line 2617: ' teach-case17-content4' - line 2618: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 2619: ' teach-case17-content5' - line 2620: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 2621: ' teach-case17-content5-1' + line 424: ' with p5.js.' + line 433: ' presentations. I used' + line 84: ' copyright1' zh-Hans: src/data/en.yml: - line 1517: ' Woman speaks at a podium in an auditorium while three participants sit on' - line 1527: ' , advancing the code, documentation, and community outreach tools and' - line 1528: ' exploring the current landscape of the p5.js programming environment.' - line 1537: ' output1' - line 1545: ' , testing early implementations of softCompile, OSC interfacing and added' - line 1546: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' - line 1547: ' environment! Created by Ted Davis.' - line 1548: ' output4' - line 1549: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' - line 1550: ' with shawné michaelain holloway and LaJuné McMillian.' - line 1551: ' output5' - line 1552: ' output6' - line 1553: ' output6-1' - line 1554: ' output6-2' - line 1555: ' output7' - line 1556: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' - line 1557: ' Jon Chambers.' - line 1558: ' output8' - line 1559: ' output8-1' - line 1560: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' - line 1561: ' Ye, Dorothy R. Santos, and Yasheng She.' - line 1562: ' output9' - line 1563: ' output9-1' - line 1564: ' output10' - line 1565: ' An overhaul of the p5.js website for accessibility. Including updates for' - line 1566: ' screen reader accessibility, and improvements to the home, download, getting' - line 1567: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' - line 1568: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' - line 1569: ' McCarthy, and Evelyn Masso.' - line 1570: ' output11' - line 1571: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' - line 1572: ' Sona Lee, Ted Davis, and Carlos Garcia.' - line 1573: ' output12' - line 1574: ' output13' - line 1575: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' - line 1576: ' Tarakajian and Luca Damasco.' - line 1577: ' output14' - line 1578: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' - line 1579: ' Lauren Valley.' - line 1580: ' output15' - line 1581: ' 2019cc_1' - line 1582: ' 2019cc_2' - line 1583: ' 2019cc_3' - line 1584: ' 2019cc_4' - line 1585: ' 2019cc_5' - line 1586: ' 2019cc_6' - line 1587: ' 2019cc_7' - line 1588: ' 2019cc_8' - line 1589: ' 2019cc_9' - line 1590: ' Participant speaks at a podium in front of projected text about the problem' - line 1591: ' with anonymyzing data' - line 1592: ' 2019cc_10' - line 1593: ' Person with a microphone speaking to fellow participants in front of text' - line 1594: ' that reads p5.js will not add any new features except those that increase' - line 1595: ' access' - line 1596: ' 2019cc_11' - line 1597: ' 2019cc_12' - line 1598: ' 2019cc_13' - line 1599: ' 2019cc_14' - line 1600: ' 2019cc_15' - line 1601: ' Woman with microphone speaking to fellow participants with the text sacred' - line 1602: ' boundaries in the projection behind her' - line 1603: ' 2019cc_16' - line 1604: ' Overhead view of participants listening to a panel of people with an image' - line 1605: ' of a 3d rendered man on it' - line 1606: ' 2019cc_17' - line 1607: ' Participants sit around a table with their laptops and observe code on a' - line 1608: ' screen' - line 1609: ' 2019cc_18' - line 1610: ' 2019cc_19' - line 1611: ' 2019cc_20' - line 1612: ' 2019cc_21' - line 1613: ' 2019cc_22' - line 1614: ' Participants sitting around a large U shaped table looking towards the front' - line 1615: ' of the classroom' - line 1616: ' 2019cc_23' - line 1617: ' Man sitting in front of the classroom speaking energetically into a' - line 1618: ' microphone' - line 1619: ' 2019cc_24' - line 1620: ' Group photo of participants smiling enthusiastically with their hands in the' - line 1621: ' air' - line 1622: ' 2019cc_25' - line 1123: ' p5.collide2D provides tools for calculating collision detection for 2D' - line 1124: ' geometry with p5.js.' - line 1125: ' p5.createloop' - line 1126: ' p5.dimensions' - line 1127: ' p5.dimensions extends p5.js'' vector functions to work in any number of' - line 1128: ' dimensions.' - line 1129: ' p5.EasyCam' - line 1130: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' - line 1131: ' contributions by Thomas Diewald.' - line 1132: ' p5.experience' - line 1133: ' Extensive library for p5.js that adds additional event-listening' - line 1134: ' functionality for creating canvas-based web applications.' - line 97: ' p1xh1' - line 96: ' start-creating' - line 114: ' acknowledge that not everyone has the time, financial means, or capacity to' - line 113: ' political opinion, age, skill level, occupation, and background. We' - line 115: ' actively participate, but we recognize and encourage involvement of all' - line 102: ' software, and the tools to learn it, should be accessible to everyone.' - line 103: ' p1x2' - line 104: ' Using the metaphor of a sketch, p5.js has a full set of drawing' - line 105: ' functionality. However, you’re not limited to your drawing canvas. You can' - line 251: ' download9' - line 256: ' you would like to use the minified version (compressed for faster page' - line 269: ' environment4' - line 265: ' environment1' - line 266: ' environmentlink' - line 267: ' environment2' - line 268: ' environment3' - line 275: ' environment8' - line 276: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' - line 277: ' that your html and js files are located in. On the left sidebar, you should' + line 883: ' p5.fab' + line 875: ' no setup required.' + line 871: ' p5.input' + line 872: ' ui' + line 873: ' p5.web-serial' + line 874: ' A p5.js library for using the Web Serial API to access devices like Arduino, ' + line 876: ' p5.wasm.core' + line 877: ' p5.videorecorder' + line 878: ' p5.mapper' + line 879: ' p5.mapper is a projection mapping library for p5.js. This library makes it ' + line 880: ' easy to code and keystone interactive, algorithmic sketches.' + line 881: ' p5.teach' + line 882: ' A beginner friendly math animation library for p5.js. Created with mentorship ' + line 85: ' under the terms of the ' + line 26: footer6 + line 25: footer2 + line 27: footer4 + line 31: footer8 + line 32: footer9 + line 28: footer5 + line 29: footer6 + line 30: footer7 + line 1174: ' The Summer 2021 Showcase' + line 270: ' particular topics. Check out the' + line 288: ' to the index.html containing your p5.js sketch.' + line 297: ' file and the embed.html file for the sketch.' + line 306: ' be' + line 310: ' stylesheet)' + line 319: ' was ported to P5 by Kelly Chang. If you find any errors or have comments,' + line 330: ' background(255); // Setting the background to white' + line 331: ' stroke(0); // Setting the outline (stroke) to black' + line 332: ' fill(150); // Setting the interior of a shape (fill) to grey' + line 340: ' black. Also, remember not to eliminate both—with' + line 349: ' percentage). You can do this by specifying a custom' + line 358: ' want to use the' + line 363: ' and the bottom right corner). The mode here is' + line 374: ' Using p5.js, this book introduces and demonstrates the reflexive practice' + line 375: ' of aesthetic programming, engaging with learning to program as a way to' + line 376: ' understand and question existing technological objects and paradigms,' + line 385: ' p5.js work or your own to be featured here! If Google is not available in your region, please email chankati@usc.edu to submit!' + line 394: ' environments.' + line 398: ' better connect the p5.js learner and educator communities around the world.' + line 407: ' examples.' + line 415: ' links available in' + line 261: ' the' + line 279: ' of the p5js site. The file called index.hbs is the' + line 442: ' .pdf format, all hosted publicly on GitHub.' + line 1536: ' teach-case2-image-alt' + line 1544: ' teach-case4-image-alt' + line 1552: ' teach-case6-image-alt' + line 1560: ' teach-case8-image-alt' + line 1568: ' teach-case9-image-alt' + line 1576: ' teach-case11-image-alt' + line 1584: ' teach-case12-image-alt' + line 1123: ' book-6-title' + line 1124: ' book-6-authors' + line 1125: ' book-6-publisher' + line 1126: ' book-6-pages' + line 1127: ' book-6-type' + line 1128: ' book-6-description' + line 1129: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' + line 1130: ' of aesthetic programming, engaging with learning to program as a way to ' + line 1131: ' understand and question existing technological objects and paradigms, ' + line 1132: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' + line 1133: ' book-6-order-a' + line 1134: ' book-6-order-b' + line 162: ' library in your html. To learn more visit ' + line 163: ' library in your html. To learn more visit ' + line 164: ' your-first-sketch7' + line 97: ' get-started-button' + line 96: ' get-started7' + line 114: ' environment15' + line 113: ' environment14' + line 115: ' environment16' + line 102: ' download8' + line 103: ' download9' + line 104: ' download10' + line 105: ' download11' + line 251: ' We need your help! p5.js is free, open-source software. We want to make our community as open' + line 256: ' , the organization that supports p5.js.' + line 269: ' Your donation supports software development for p5.js, education resources' + line 265: ' and inclusive as possible. You can support this work by making a donation to' + line 266: ' the ' + line 267: ' support-2' + line 268: ' , the organization that supports p5.js. We need your help!' + line 275: ' support-3' + line 276: ' support-4' + line 277: ' support-5' line 37: Editor line 55: footer5 line 123: ' p3xh2' @@ -4330,102 +3826,90 @@ zh-Hans: line 127: ' p3xp4' line 137: ' sketch_credits' line 138: ' sketch_info' - line 270: ' environment5' - line 271: ' environment6' - line 272: ' If you are a screen reader user and not using the p5 web editor, you may' - line 273: ' want to use' - line 282: ' edit it.' - line 283: ' environment10' - line 284: ' environment11' - line 285: ' Open the index.html file in your browser by double clicking on it in your' - line 286: ' file manager or type' - line 287: ' environment12' - line 288: ' environment14' - line 289: ' environment15' - line 290: ' environment16' - line 291: ' environment13' - line 292: ' your-first-sketch-title' - line 293: ' your-first-sketch-intro1' - line 294: ' your-first-sketch-intro2' - line 295: ' your-first-sketch-intro3' - line 296: ' your-first-sketch-intro4' - line 297: ' your-first-sketch1' - line 298: ' your-first-sketch2' - line 299: ' your-first-sketch3' - line 300: ' your-first-sketch4' - line 301: ' The line you just added draws an ellipse, with its center 50 pixels over' - line 302: ' from the left and 50 pixels down from the top, with a width and height of 80' - line 303: ' pixels.' - line 304: ' your-first-sketch5' - line 305: ' your-first-sketch6' - line 306: ' If you are using a screen reader, you must turn on the accessible outputs in' - line 307: ' the p5 online editor, outside the editor you must add the accessibility' - line 308: ' library in your html. To learn more visit ' - line 309: ' your-first-sketch7' - line 310: ' your-first-sketch8' - line 311: ' If you''ve typed everything correctly, this will appear in the display' - line 312: ' window' - line 313: ' your-first-sketch9' - line 314: ' your-first-sketch10' - line 315: ' If nothing appears, the editor may be having trouble understanding what' - line 316: ' you’ve typed. If this happens, make sure that you''ve copied the example code' - line 317: ' exactly' - line 318: ' between each of them, the line should end with a semicolon, and ellipse has' - line 319: ' to be spelled correctly.' - line 320: ' your-first-sketch11' - line 321: ' One of the most difficult things about getting started with programming is' - line 322: ' that you have to be very specific about the syntax. The browser isn''t always' - line 323: ' smart enough to know what you mean, and can be quite fussy about the' - line 324: ' placement of punctuation. You''ll get used to it with a little practice. In' - line 325: ' the bottom left of the editor you will find the console section. Here, you' - line 326: ' can find messages from the editor with details about any errors it' - line 327: ' encounters.' - line 328: ' your-first-sketch12' - line 329: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' - line 330: ' last example to try this' - line 331: ' your-first-sketch13' - line 332: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' - line 333: ' and then starts drawing white circles at the position of the mouse. When a' - line 334: ' mouse button is pressed, the circle color changes to black. Run the code,' - line 335: ' move the mouse, and click to experience it.' - line 336: ' your-first-sketch14' - line 337: ' first-sketch-heading1' - line 338: ' first-sketch-heading2' - line 339: ' first-sketch-heading3' - line 340: ' what-next-title' - line 341: ' learn1' - line 342: ' learn2' - line 343: ' learn3' - line 344: ' learn4' - line 345: ' learn5' - line 346: ' learn6' - line 347: ' learn7' - line 348: ' learn8' - line 349: ' learn9' - line 350: ' learn10' - line 351: ' reference1' - line 352: ' reference2' - line 353: ' reference3' - line 354: ' learn11' - line 355: ' learn12' - line 356: ' processing-transition1' + line 271: ' Open Sublime. Go to the File menu and choose Open... and choose the folder' + line 272: ' that your html and js files are located in. On the left sidebar, you should' + line 273: ' find the folder name at the top, with a list of the files contained in the' + line 282: ' environment12' + line 283: ' environment13' + line 284: ' your-first-sketch-title' + line 285: ' your-first-sketch-intro1' + line 286: ' your-first-sketch-intro2' + line 287: ' your-first-sketch-intro3' + line 289: ' your-first-sketch1' + line 290: ' your-first-sketch2' + line 291: ' your-first-sketch3' + line 292: ' your-first-sketch4' + line 293: ' The line you just added draws an ellipse, with its center 50 pixels over' + line 294: ' from the left and 50 pixels down from the top, with a width and height of 80' + line 295: ' pixels.' + line 296: ' your-first-sketch5' + line 298: ' If you are using a screen reader, you must turn on the accessible outputs in' + line 299: ' the p5 online editor, outside the editor you must add the accessibility' + line 300: ' library in your html. To learn more visit' + line 301: ' your-first-sketch7' + line 302: ' your-first-sketch8' + line 303: ' If you''ve typed everything correctly, this will appear in the display' + line 304: ' window' + line 305: ' your-first-sketch9' + line 307: ' If nothing appears, the editor may be having trouble understanding what' + line 308: ' you’ve typed. If this happens, make sure that you''ve copied the example code' + line 309: ' exactly' + line 311: ' to be spelled correctly.' + line 312: ' your-first-sketch11' + line 313: ' One of the most difficult things about getting started with programming is' + line 314: ' that you have to be very specific about the syntax. The browser isn''t always' + line 315: ' smart enough to know what you mean, and can be quite fussy about the' + line 316: ' placement of punctuation. You''ll get used to it with a little practice. In' + line 317: ' the bottom left of the editor you will find the console section. Here, you' + line 318: ' can find messages from the editor with details about any errors it' + line 320: ' your-first-sketch12' + line 321: ' Next, we''ll skip ahead to a sketch that''s a little more exciting. Modify the' + line 322: ' last example to try this' + line 323: ' your-first-sketch13' + line 324: ' This program creates a canvas that is 400 pixels wide and 400 pixels high,' + line 325: ' and then starts drawing white circles at the position of the mouse. When a' + line 326: ' mouse button is pressed, the circle color changes to black. Run the code,' + line 327: ' move the mouse, and click to experience it.' + line 328: ' your-first-sketch14' + line 329: ' first-sketch-heading1' + line 333: ' learn1' + line 334: ' learn2' + line 335: ' learn3' + line 336: ' learn4' + line 337: ' learn5' + line 338: ' learn6' + line 339: ' learn7' + line 341: ' learn9' + line 342: ' learn10' + line 343: ' reference1' + line 344: ' reference2' + line 345: ' reference3' + line 346: ' learn11' + line 347: ' learn12' + line 348: ' processing-transition1' + line 350: ' processing-transition3' + line 351: ' processing-transition4' + line 352: ' book1' + line 353: ' Parts of this tutorial were adapted from the book, Getting Started with' + line 354: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' + line 355: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' + line 356: ' Contributors Conference.' line 44: Examples line 57: tagline2 line 146: ' copyright-title' line 231: ' get-started-title' line 240: ' . If you would like to work on the the desktop version of p5.js you can' - line 258: ' download5' - line 281: ' Click on your sketch.js file and it will open on the right where you can' + line 258: ' download7' + line 281: ' file manager or type' line 54: footer4 line 110: ' We are a community of, and in solidarity with, people from every gender' line 239: ' get-started6' - line 259: ' Alternatively, you can link to a p5.js file hosted online. All versions of' - line 274: ' environment7' - line 875: ' Make sure your embed.html file has the correct paths to the p5 libraries of' + line 259: ' environment-title' + line 274: ' folder directly below.' line 233: ' This page walks you through setting up a p5.js project and making your first' line 234: ' sketch.' - line 244: ' settingUp-title' - line 245: ' download-title' + line 244: ' download-title' + line 245: ' hosted-title' line 50: footerxh1 line 98: ' p1x1' line 99: ' p5.js is a JavaScript library for creative coding, with a focus on making' @@ -4436,1357 +3920,16 @@ zh-Hans: line 46: Community line 133: ' p4xp3' line 134: ' p4xp4' - line 357: ' processing-transition2' - line 358: ' processing-transition3' - line 359: ' processing-transition4' - line 360: ' book1' - line 361: ' Parts of this tutorial were adapted from the book, Getting Started with' - line 362: ' p5.js, by Lauren McCarthy, Casey Reas, and Ben Fry, O''Reilly / Make 2015.' - line 363: ' Copyright © 2015. All rights reserved. Last modified at the p5.js 2019' - line 364: ' Contributors Conference.' - line 33: Skip-To-Content - line 47: Contribute - line 48: Forum - line 49: Showcase - line 51: footer1 - line 52: footer2 - line 53: footer3 - line 58: tagline3 - line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' - line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' - line 107: ' text, input, video, webcam, and sound.' - line 108: ' p2xh2' - line 130: ' p4xh2' - line 131: ' p4xp1' - line 132: ' p4xp2' - line 135: ' p4xp5' - line 147: ' copyright1' - line 149: ' under the terms of the' - line 150: ' copyright2' - line 151: ' copyright3' - line 152: ' copyright4' - line 232: ' get-started1' - line 235: ' get-started2' - line 236: ' get-started3' - line 237: ' get-started4' - line 238: ' get-started5' - line 241: ' scroll down to' - line 242: ' get-started7' - line 243: ' get-started-button' - line 246: ' hosted-title' - line 247: ' download1' - line 248: ' download2' - line 249: ' download3' - line 250: ' download8' - line 252: ' download10' - line 253: ' download11' - line 254: ' download4' - line 255: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' - line 257: ' loading), change the link to p5.min.js.' - line 260: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' - line 261: ' of these versions in the' - line 262: ' download6' - line 263: ' download7' - line 264: ' environment-title' - line 278: ' find the folder name at the top, with a list of the files contained in the' - line 279: ' folder directly below.' - line 280: ' environment9' - line 444: ' Download' - line 445: ' download-intro' - line 446: ' Welcome! While titled "Download" this page actually contains a collection of' - line 447: ' links to either download the library or begin working with it online. We''ve' - line 448: ' tried to order things to reflect what a beginner might want first, to' - line 449: ' resources that more experienced programmers may be looking for.' - line 450: ' editor-title' - line 451: ' p5.js-editor' - line 452: ' p5.js-editor-intro' - line 453: ' This link redirects you to the p5.js Editor online so you can begin using' - line 454: ' p5.js immediately.' - line 455: ' editor-includes' - line 456: ' complete-library-title' - line 457: ' complete-library-intro1' - line 458: ' This is a download containing the p5.js library file, the p5.sound addon,' - line 459: ' and an example project. It does not contain an editor. Visit' - line 460: ' complete-library-intro2' - line 461: ' complete-library-intro3' - line 462: ' p5.js-complete' - line 463: ' includes-1' - line 464: ' includes-2' - line 465: ' includes-3' - line 466: ' single-files-title' - line 467: ' single-files-intro' - line 468: ' These are downloads or links to the p5.js library file. No additional' - line 469: ' contents are included.' - line 470: ' single-file' - line 471: ' p5.js-uncompressed' - line 472: ' compressed' - line 473: ' link' - line 474: ' statically-hosted-file' - line 475: ' etc-title' - line 476: ' older-releases' - line 477: ' github-repository' - line 478: ' report-bugs' - line 479: ' supported-browsers' - line 480: ' support-title' - line 481: ' support-options' - line 482: ' support-1' - line 483: ' We need your help! p5.js is free, open-source software. We want to make our community as open' - line 484: ' and inclusive as possible. You can support this work by making a donation to' - line 485: ' the ' - line 486: ' support-2' - line 487: ' , the organization that supports p5.js.' - line 488: ' Your donation supports software development for p5.js, education resources' - line 489: ' like code examples and tutorials,' - line 490: ' support-3' - line 491: ' support-4' - line 492: ' support-5' - line 493: ' support-17' - line 494: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 495: ' Pittsburgh (Image credit' - line 496: ' support-18' - line 497: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' - line 498: ' workshops in London (Image credit' - line 499: ' support-19' - line 500: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' - line 501: ' Kira Simon-Kennedy)' - line 502: ' support-20' - line 503: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 504: ' (Image credit' - line 505: ' support-21' - line 506: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' - line 507: ' credit' - line 508: ' support-22' - line 509: ' support-23' - line 510: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' - line 511: ' (Image credit' - line 512: ' support-24' - line 513: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' - line 514: ' workshop led by Taeyoon Choi (Image credit' - line 515: ' support-25' - line 516: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' - line 517: ' Pittsburgh (Image credit' - line 518: ' support-26' - line 519: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' - line 520: ' International Center of Photography (Image credit' - line 521: ' Photography)' - line 522: ' support-27' - line 523: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' - line 524: ' Montoya-Moraga (Image credit' - line 525: ' support-28' - line 526: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' - line 527: ' led by Taeyoon Choi (Image credit' - line 528: ' support-29' - line 529: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' - line 530: ' Angeles (Image credit' - line 531: ' support-30' - line 532: ' support-31' - line 533: ' support-32' - line 534: ' support-33' - line 535: ' support-17-alt' - line 536: ' support-18-alt' - line 537: ' support-19-alt' - line 538: ' support-20-alt' - line 539: ' support-21-alt' - line 540: ' support-22-alt' - line 541: ' support-23-alt' - line 542: ' support-24-alt' - line 543: ' support-25-alt' - line 544: ' support-26-alt' - line 545: ' support-27-alt' - line 546: ' support-28-alt' - line 547: ' support-29-alt' - line 548: ' support-30-alt' - line 549: ' support-31-alt' - line 729: ' teach-title2' - line 730: ' learn1' - line 731: ' These tutorials provide more in-depth or step-by-step overviews of' - line 732: ' particular topics. Check out the ' - line 733: ' learn2' - line 734: ' learn3' - line 735: ' introduction-to-p5js-title' - line 736: ' hello-p5js-title' - line 737: ' hello-p5js' - line 738: ' This short video will introduce you to the library and what you can do with' - line 739: ' it.' - line 740: ' getting-started-title' - line 741: ' getting-started' - line 742: ' Welcome to p5.js!
This introduction covers the basics of setting up a' - line 743: ' p5.js project.' - line 744: ' p5js-overview-title' - line 745: ' p5js-overview' - line 746: ' p5js-processing-title' - line 747: ' p5js-processing' - line 748: ' The main differences between the two, and how to convert from one to the' - line 749: ' other.' - line 750: ' p5-screen-reader-title' - line 751: ' p5-screen-reader' - line 752: ' using-local-server-title' - line 753: ' using-local-server' - line 754: ' p5js-wiki-title' - line 755: ' p5js-wiki' - line 756: ' connecting-p5js-title' - line 757: ' creating-libraries-title' - line 758: ' creating-libraries' - line 759: ' nodejs-and-socketio-title' - line 760: ' nodejs-and-socketio' - line 761: ' programming-topics-title' - line 762: ' beyond-the-canvas-title' - line 763: ' beyond-the-canvas' - line 764: ' 3d-webgl-title' - line 765: ' 3d-webgl' - line 766: ' color-title' - line 767: ' color' - line 768: ' coordinate-system-and-shapes-title' - line 769: ' coordinate-system-and-shapes' - line 770: ' interactivity-title' - line 771: ' interactivity' - line 772: ' program-flow-title' - line 773: ' program-flow' - line 774: ' curves-title' - line 775: ' curves' - line 776: ' An introduction to the three types of curves in p5.js' - line 777: ' and Bézier curves.' - line 778: ' becoming-a-better-programmer-title' - line 779: ' debugging-title' - line 780: ' debugging' - line 781: ' optimizing-title' - line 782: ' optimizing' - line 783: ' A tutorial of tips and tricks for optimizing your code to make it run faster' - line 784: ' and smoother.' - line 785: ' test-driven-development-title' - line 786: ' test-driven-development' - line 787: ' Save yourself from agony on install day. What is unit testing and how to use' - line 788: ' it? By Andy Timmons.' - line 789: ' contributing-to-the-community-title' - line 790: ' development-title' - line 791: ' development' - line 792: ' looking-inside-title' - line 793: ' looking-inside' - line 794: ' A friendly intro to the file structure and tools for p5.js development, by' - line 795: ' Luisa Pereira.' - line 796: ' writing-tutorial-title' - line 797: ' writing-tutorial' - line 798: ' writing-a-tutorial-title' - line 799: ' writing-a-tutorial-author' - line 800: ' writing-a-tutorial-1' - line 801: ' We invite educators, contributors and general enthusiasts to contribute p5js' - line 802: ' tutorials. The p5js project makes creative coding and open source' - line 803: ' development more accessible to a diverse community and we are excited to' - line 804: ' publish tutorials on all aspects of the development process. Our learning' - line 805: ' materials so far include guides on learning p5, programming technique and' - line 806: ' how to contribute to an open source project.' - line 807: ' writing-a-tutorial-2' - line 808: ' We welcome new written tutorial contributions and this guide outlines the' - line 809: ' steps of how to propose, prepare and contribute.' - line 810: ' writing-a-tutorial-how-start-title' - line 811: ' writing-a-tutorial-how-start-1' - line 812: ' writing-a-tutorial-how-start-2' - line 813: ' writing-a-tutorial-how-start-3' - line 814: ' that outlines in progress tutorials. If your topic is listed as in progress,' - line 815: ' perhaps you can add to work being done and contribute to preparing existing' - line 816: ' work for publication so please reach out to us.' - line 817: ' writing-a-tutorial-how-start-4' - line 818: ' If your topic is not already covered and is not listed as in progress,' - line 819: ' please write a few sentences on what you propose to cover and email us this' - line 820: ' description at education@p5js.org.' - line 821: ' writing-a-tutorial-how-prepare-title' - line 822: ' writing-a-tutorial-how-prepare-1' - line 823: ' When your tutorial is ready for publication, please follow these steps to' - line 824: ' prepare your content for the p5js website.' - line 825: ' writing-a-tutorial-how-prepare-2' - line 826: ' writing-a-tutorial-how-prepare-3' - line 827: ' writing-a-tutorial-how-prepare-4' - line 828: ' writing-a-tutorial-how-prepare-5' - line 829: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' - line 830: ' of the p5js site. The file called index.hbs is the ' - line 831: ' writing-a-tutorial-how-prepare-6' - line 832: ' writing-a-tutorial-how-prepare-7' - line 833: ' writing-a-tutorial-how-prepare-8' - line 834: ' writing-a-tutorial-how-prepare-9' - line 835: ' tags on the page, with formatting defined by the <h1> and <h2>' - line 836: ' tags, the <p> paragraph tags as is done shown on the' - line 837: ' writing-a-tutorial-how-prepare-10' - line 838: ' writing-a-tutorial-how-prepare-11' - line 839: ' If your tutorial contains images, they are to be placed in the assets folder' - line 840: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' - line 841: ' shown below.' - line 842: ' writing-a-tutorial-how-prepare-12' - line 843: ' writing-a-tutorial-embedding-title' - line 844: ' writing-a-tutorial-embedding-1' - line 845: ' Using p5js means you can illustrate your tutorial with animated, interactive' - line 846: ' or editable code examples to demonstrate programming concepts. Your examples' - line 847: ' should be prepared as p5.js sketches and can be embedded into the tutorial' - line 848: ' in two ways.' - line 849: ' writing-a-tutorial-embedding-2' - line 850: ' writing-a-tutorial-embedding-3' - line 851: ' writing-a-tutorial-embedding-4' - line 852: ' writing-a-tutorial-embedding-5' - line 853: ' writing-a-tutorial-embedding-6' - line 854: ' writing-a-tutorial-embedding-7' - line 855: ' writing-a-tutorial-embedding-8' - line 856: ' writing-a-tutorial-embedding-9' - line 857: ' writing-a-tutorial-embedding-10' - line 858: ' If the example is to be animated and/or interactive but not editable. The' - line 859: ' p5.js sketch should be embedded into the page as an iframe as described' - line 860: ' below.' - line 861: ' writing-a-tutorial-iframe-title' - line 862: ' writing-a-tutorial-iframe-1' - line 863: ' An iframe is like creating a window through which you can explore another' - line 864: ' page, sandboxed from the rest of your page. In this case it will be a window' - line 865: ' to the index.html containing your p5.js sketch. ' - line 866: ' writing-a-tutorial-iframe-2' - line 867: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' - line 868: ' folder labelled with the name of your sketch as shown in the screenshot.' - line 869: ' This is where all the images and p5 sketches linked by iframe should be' - line 870: ' stored.' - line 871: ' writing-a-tutorial-iframe-3' - line 872: ' In the subfolders containing your p5 examples there should be a sketch.js' - line 873: ' file and the embed.html file for the sketch. ' - line 874: ' writing-a-tutorial-iframe-4' - line 876: ' the site. If your file structure is the same as above, the path to the p5.js' - line 877: ' library should be "../../../js/p5.min.js".' - line 878: ' writing-a-tutorial-iframe-5' - line 879: ' You can then embed the p5js index files as iframes in the .hbs file that' - line 880: ' contains your tutorial content. The embed code for the iframe would then' - line 881: ' be' - line 882: ' writing-a-tutorial-iframe-6' - line 883: ' Styling for the iframe (this could directly into the post or in a' - line 884: ' stylesheet)' - line 885: ' writing-a-tutorial-iframe-7' - line 886: ' writing-a-tutorial-iframe-8' - line 887: ' writing-a-tutorial-iframe-9' - line 888: ' One thing to note is that you need to manually set the size of the iframe,' - line 889: ' so it works best if things are a standard size.' - line 890: ' writing-a-tutorial-iframe-10' - line 891: ' Also note that the links to the p5.js library files do not happen from the' - line 892: ' .eps page with all the tutorial content. Instead they will be located in the' - line 893: ' html page that is rendering your sketch (in this case, called embed.html).' - line 894: ' writing-a-tutorial-iframe-11' - line 895: ' writing-a-tutorial-embed-iframe-12' - line 896: ' writing-a-tutorial-finishing-title' - line 897: ' writing-a-tutorial-finishing-1' - line 898: ' Once your have finished writing your tutorial and your content has been' - line 899: ' given the thumbs up. Fork the p5.js website repository, prepare your content' - line 900: ' as described above and then issue a pull request to the p5.js website' - line 901: ' repository so we can publish your contribution!' - line 902: ' writing-a-tutorial-finishing-2' - line 903: ' color-description1' - line 904: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' - line 905: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' - line 906: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' - line 907: ' color-description2' - line 908: ' color-p1x1' - line 909: ' In the digital world, when we want to talk about a color, precision is' - line 910: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' - line 911: ' Color, rather, is defined as a range of numbers. Let''s start with the' - line 912: ' simplest case' - line 913: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' - line 914: ' gray ranging from black to white.' - line 915: ' color-p2x1' - line 916: ' color-p2x2' - line 917: ' color-p2x3' - line 918: ' color-p2x4' - line 919: ' color-code1' - line 920: ' background(255); // Setting the background to white ' - line 921: ' stroke(0); // Setting the outline (stroke) to black ' - line 922: ' fill(150); // Setting the interior of a shape (fill) to grey ' - line 923: ' rect(50,50,75,100); // Drawing the rectangle' - line 924: ' color-p3x1' - line 925: ' color-p3x2' - line 926: ' color-p3x3' - line 927: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' - line 928: ' important to remember that 0 is not "nothing", but rather denotes the color' - line 929: ' black. Also, remember not to eliminate both—with ' - line 930: ' color-p3x4' - line 931: ' color-p3x5' - line 932: ' color-p4x1' - line 933: ' In addition, if we draw two shapes, p5.js will always use the most recently' - line 934: ' specified stroke and fill, reading the code from top to bottom.' - line 935: ' color-rgb-title' - line 936: ' color-rgb-p1x1' - line 937: ' Remember finger painting? By mixing three "primary" colors, any color could' - line 938: ' be generated. Swirling all colors together resulted in a muddy brown. The' - line 939: ' more paint you added, the darker it got. Digital colors are also constructed' - line 940: ' by mixing three primary colors, but it works differently from paint. First,' - line 941: ' the primaries are different' - line 942: ' with color on the screen, you are mixing light, not paint, so the mixing' - line 943: ' rules are different as well.' - line 944: ' color-rgb-li1' - line 945: ' color-rgb-li2' - line 946: ' color-rgb-li3' - line 947: ' color-rgb-li4' - line 948: ' color-rgb-li5' - line 949: ' color-rgb-p2x1' - line 950: ' This assumes that the colors are all as bright as possible, but of course,' - line 951: ' you have a range of color available, so some red plus some green plus some' - line 952: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' - line 953: ' While this may take some getting used to, the more you program and' - line 954: ' experiment with RGB color, the more it will become instinctive, much like' - line 955: ' swirling colors with your fingers. And of course you can''t say "Mix some red' - line 956: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' - line 957: ' the individual color elements are expressed as ranges from 0 (none of that' - line 958: ' color) to 255 (as much as possible), and they are listed in the order R, G,' - line 959: ' and B. You will get the hang of RGB color mixing through experimentation,' - line 960: ' but next we will cover some code using some common colors.' - line 961: ' color-transparency-title' - line 962: ' color-transparency-p1x1' - line 963: ' In addition to the red, green, and blue components of each color, there is' - line 964: ' an additional optional fourth component, referred to as the color''s "alpha".' - line 965: ' Alpha means transparency and is particularly useful when you want to draw' - line 966: ' elements that appear partially see-through on top of one another. The alpha' - line 967: ' values for an image are sometimes referred to collectively as the "alpha' - line 968: ' channel" of an image.' - line 969: ' color-transparency-p2x1' - line 970: ' It is important to realize that pixels are not literally transparent, this' - line 971: ' is simply a convenient illusion that is accomplished by blending colors.' - line 972: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' - line 973: ' one to a percentage of another, creating the optical perception of blending.' - line 974: ' (If you are interested in programming "rose-colored" glasses, this is where' - line 975: ' you would begin.)' - line 976: ' color-transparency-p3x1' - line 977: ' Alpha values also range from 0 to 255, with 0 being completely transparent' - line 978: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' - line 979: ' color-custom-ranges-title' - line 980: ' color-custom-ranges-p1x1' - line 981: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' - line 982: ' in p5.js, in fact, it allows us to think about color any way we like. For' - line 983: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' - line 984: ' percentage). You can do this by specifying a custom ' - line 985: ' color-custom-ranges-p2x1' - line 986: ' The above function says' - line 987: ' green, and blue. The range of RGB values will be from 0 to 100."' - line 988: ' color-custom-ranges-p3x1' - line 989: ' Although it is rarely convenient to do so, you can also have different' - line 990: ' ranges for each color component' - line 991: ' color-custom-ranges-p4x1' - line 992: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' - line 993: ' from 0 to 10, and alpha from 0 to 255."' - line 994: ' color-custom-ranges-p5x1' - line 995: ' Finally, while you will likely only need RGB color for all of your' - line 996: ' programming needs, you can also specify colors in the HSB (hue, saturation,' - line 997: ' and brightness) mode. Without getting into too much detail, HSB color works' - line 998: ' as follows' - line 999: ' color-custom-ranges-li1x1' - line 1000: ' color-custom-ranges-li1x2' - line 1001: ' color-custom-ranges-li2x1' - line 1002: ' color-custom-ranges-li2x2' - line 1003: ' color-custom-ranges-li3x1' - line 1004: ' color-custom-ranges-li3x2' - line 1005: ' color-custom-ranges-p6x1' - line 1006: ' color-custom-ranges-p6x2' - line 1007: ' coordinate-system-description1' - line 1008: ' coordinate-system-description2' - line 1009: ' coordinate-system-description3' - line 1010: ' coordinate-system-description4' - line 1011: ' coordinate-system-description5' - line 1012: ' coordinate-system-description-title' - line 1013: ' coordinate-system-description-p1x1' - line 1014: ' Before we begin programming with p5, we must first channel our eighth grade' - line 1015: ' selves, pull out a piece of graph paper, and draw a line. The shortest' - line 1016: ' distance between two points is a good old fashioned line, and this is where' - line 1017: ' we begin, with two points on that graph paper.' - line 1018: ' coordinate-system-description-p2x1' - line 1019: ' The above figure shows a line between point A (1,0) and point B (4,5). If' - line 1020: ' you wanted to direct a friend of yours to draw that same line, you would' - line 1021: ' give them a shout and say "draw a line from the point one-zero to the point' - line 1022: ' four-five, please." Well, for the moment, imagine your friend was a computer' - line 1023: ' and you wanted to instruct this digital pal to display that same line on its' - line 1024: ' screen. The same command applies (only this time you can skip the' - line 1025: ' pleasantries and you will be required to employ a precise formatting). Here,' - line 1026: ' the instruction will look like this' - line 1027: ' coordinate-system-description-p3x1' - line 1028: ' Even without having studied the syntax of writing code, the above statement' - line 1029: ' should make a fair amount of sense. We are providing a command (which we' - line 1030: ' will refer to as a "function") for the machine to follow entitled "line." In' - line 1031: ' addition, we are specifying some arguments for how that line should be' - line 1032: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' - line 1033: ' code as a sentence, the function is a verb and the arguments are the objects' - line 1034: ' of the sentence. The code sentence also ends with a semicolon instead of a' - line 1035: ' period.' - line 1036: ' coordinate-system-description-p4x1' - line 1037: ' The key here is to realize that the computer screen is nothing more than a' - line 1038: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' - line 1039: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' - line 1040: ' location of a point in space. And it is our job to specify what shapes and' - line 1041: ' colors should appear at these pixel coordinates.' - line 1042: ' coordinate-system-description-p5x1' - line 1043: ' Nevertheless, there is a catch here. The graph paper from eighth grade' - line 1044: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' - line 1045: ' pointing up and the x-axis pointing to the right (in the positive direction,' - line 1046: ' negative down and to the left). The coordinate system for pixels in a' - line 1047: ' computer window, however, is reversed along the y-axis. (0,0) can be found' - line 1048: ' at the top left with the positive direction to the right horizontally and' - line 1049: ' down vertically.' - line 1050: ' coordinate-system-simple-shapes-title' - line 1051: ' coordinate-system-simple-shapes-p1x1' - line 1052: ' The vast majority of p5 programming examples are visual in nature. These' - line 1053: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' - line 1054: ' begin by looking at four primitive shapes.' - line 1055: ' coordinate-system-simple-shapes-p2x1' - line 1056: ' For each shape, we will ask ourselves what information is required to' - line 1057: ' specify the location and size (and later color) of that shape and learn how' - line 1058: ' p5 expects to receive that information. In each of the diagrams below, we''ll' - line 1059: ' assume a window with a width of 100 pixels and height of 100 pixels.' - line 1060: ' coordinate-system-simple-shapes-p3x1' - line 1061: ' coordinate-system-simple-shapes-p3x2' - line 1062: ' coordinate-system-simple-shapes-p4x1' - line 1063: ' coordinate-system-simple-shapes-p4x2' - line 1064: ' coordinate-system-simple-shapes-p5x1' - line 1065: ' coordinate-system-simple-shapes-p5x2' - line 1066: ' , things become a bit more complicated. In p5, a rectangle is specified by' - line 1067: ' the coordinate for the top left corner of the rectangle, as well as its' - line 1068: ' width and height.' - line 1069: ' coordinate-system-simple-shapes-p6x1' - line 1070: ' A second way to draw a rectangle involves specifying the centerpoint, along' - line 1071: ' with width and height. If we prefer this method, we first indicate that we' - line 1072: ' want to use the ' - line 1073: ' coordinate-system-simple-shapes-p6x2' - line 1074: ' coordinate-system-simple-shapes-p7x1' - line 1075: ' Finally, we can also draw a rectangle with two points (the top left corner' - line 1076: ' and the bottom right corner). The mode here is ' - line 1077: ' coordinate-system-simple-shapes-p7x2' - line 1078: ' coordinate-system-simple-shapes-p8x1' - line 1079: ' coordinate-system-simple-shapes-p8x2' - line 1080: ' coordinate-system-simple-shapes-p8x3' - line 1081: ' coordinate-system-simple-shapes-p8x4' - line 1082: ' coordinate-system-simple-shapes-p8x5' - line 1083: ' coordinate-system-simple-shapes-p8x6' - line 1084: ' coordinate-system-simple-shapes-p9x1' - line 1085: ' Now let''s look at what some code with shapes in more complete form, with' - line 1086: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' - line 1087: ' to specify the width and height of the canvas.' - line 1088: ' teach-desc' - line 1089: test-tutorial - line 1147: ' p5.localmessage provides a simple interface to send messages locally from' - line 1148: ' one sketch to another for easy multi-window sketching!' - line 1149: ' marching' - line 1150: ' mappa' - line 1151: ' Mappa provides a set of tools for working with static maps, tile maps, and' - line 1152: ' geo-data. Useful when building geolocation-based visual representations.' - line 1153: ' ml5.js' - line 1154: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' - line 1155: ' learning algorithms and models in the browser.' - line 1156: ' p5.play' - line 1157: ' p5.play provides sprites, animations, input and collision functions for' - line 1158: ' games and gamelike applications.' - line 1159: ' p5.particle' - line 1160: ' The Particle and Fountain objects can be used to create data-driven effects' - line 1161: ' that are defined through user structures or JSON input and user-draw' - line 1162: ' functions.' - line 1163: ' p5.Riso' - line 1164: ' p5.Riso is a library for generating files suitable for Risograph printing.' - line 1165: ' It helps turn your sketches into multi-color prints.' - line 1166: ' rita.js' - line 1167: ' RiTa.js provides a set of natural language processing objects for generative' - line 1168: ' literature.' - line 1169: ' Rotating knobs' - line 1170: ' p5.scenemanager' - line 1171: ' p5.SceneManager helps you create sketches with multiple states / scenes.' - line 1172: ' Each scene is a like a sketch within the main sketch.' - line 1173: ' p5.screenPosition' - line 1174: ' p5.scribble' - line 1175: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' - line 1176: ' on a port of the original Processing library' - line 1177: ' p5.serial' - line 1178: ' p5.serial enables serial communication between devices that support serial' - line 1179: ' (RS-232) and p5 sketches running in the browser.' - line 1180: ' Shape5' - line 1181: ' Shape5 is a 2D primative library for elementary students who are learning to' - line 1182: ' code for the first time.' - line 1183: ' p5.shape.js' - line 1184: ' p5.speech' - line 1185: ' p5.speech provides simple, clear access to the Web Speech and Speech' - line 1186: ' Recognition APIs, allowing for the easy creation of sketches that can talk' - line 1187: ' and listen.' - line 1188: ' p5.start2d.js' - line 1189: ' p5.tiledmap' - line 1190: ' p5.tiledmap provides drawing and helper functions to include maps in your' - line 1191: ' sketches.' - line 1192: ' p5.touchgui' - line 1193: ' tramontana' - line 1194: ' Tramontana is a platform for easily use many devices (iOS, Android,' - line 1195: ' tramontana Board, ...) to create interactive environments, interactive' - line 1196: ' spaces or just prototype experiences at scale and in space.' - line 1197: ' vida' - line 1198: ' Vida is a simple library that adds camera (or video) based motion detection' - line 1199: ' and blob tracking functionality to p5js.' - line 1200: ' p5.voronoi' - line 1201: ' p5.voronoi provides a set of tools to draw and utilize voronoi diagrams in' - line 1202: ' your p5.js sketches.' - line 1203: ' p5.xr' - line 1204: ' p5.3D' - line 1205: ' using-a-library-title' - line 1206: ' using-a-library1' - line 1207: ' A p5.js library can be any JavaScript code that extends or adds to the p5.js' - line 1208: ' core functionality. There are two categories of libraries. Core libraries (' - line 1209: ' using-a-library3' - line 1210: ' ) are part of the p5.js distribution, while contributed libraries are' - line 1211: ' developed, owned, and maintained by members of the p5.js community.' - line 1212: ' using-a-library4' - line 1213: ' To include a library in your sketch, link it into your HTML file, after you' - line 1214: ' have linked in p5.js. An example HTML file might look like this' - line 1215: ' create-your-own-title' - line 1216: ' create-your-own1' - line 1217: ' create-your-own2' - line 1218: ' create-your-own3' - line 1219: ' create-your-own4' - line 1220: ' If you have created a library and would like to have it included on this' - line 1221: ' page, submit this form!' - line 1222: '>>>>>>> ded715d43dd9dd191404d8e380ba23112f647160' - line 1420: ' notes3' - line 1421: ' notes4' - line 1422: ' notes5' - line 1423: ' contribute-title' - line 1424: ' contribute1' - line 1425: ' Our community is always looking for enthusiasts to help in all different' - line 1426: ' ways.' - line 1427: ' develop-title' - line 1428: ' develop1' - line 1429: ' develop2' - line 1430: ' develop3' - line 1431: ' develop4' - line 1432: ' develop5' - line 1433: ' document-title' - line 1434: ' document1' - line 1435: ' document2' - line 1436: ' document3' - line 1437: ' document4' - line 1438: ' document5' - line 1439: ' teach-title' - line 1440: ' teach1' - line 1441: ' create-title' - line 1442: ' create1' - line 1443: ' create2' - line 1444: ' create3' - line 1445: ' donate-title' - line 1446: ' donate1' - line 1447: ' donate2' - line 1448: ' donate3' - line 1449: ' contributors-conference-title' - line 1450: ' contributors-conference1' - line 1451: ' While most work happens online, we also convene IRL. We''ve had two' - line 1452: ' contributors conferences held at the' - line 1453: ' contributors-conference2' - line 1454: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' - line 1455: ' developers, educators, and got together to advance the p5.js project.' - line 1456: ' participants-title' - line 1457: ' support-title' - line 1458: ' support1' - line 1459: ' support2' - line 1460: ' at Carnegie Mellon University, an academic laboratory for atypical,' - line 1461: ' anti-disciplinary, and inter-institutional research at the intersections of' - line 1462: ' arts, science, technology, and culture.' - line 1463: ' support3' - line 1464: ' support4' - line 1465: ' support5' - line 1466: ' support6' - line 1467: ' mailing-list-title' - line 1468: ' mailing-list-1' - line 1469: ' Enter your email address to receive occasional updates from the Processing' - line 1470: ' Foundation.' - line 1471: ' 2015contributors-conference-title' - line 1472: ' 2015contributors-conference-date' - line 1473: ' 2015contributors-conference1' - line 1474: ' 2015contributors-conference2' - line 1475: ' , advancing the code, documentation, and community outreach tools of the' - line 1476: ' p5.js programming environment. Participants came from as far away as Hong' - line 1477: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' - line 1478: ' professionals in the fields of creative technology, interaction design, and' - line 1479: ' new-media arts, but the group also included a half-dozen undergraduate and' - line 1480: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' - line 1481: ' 2015contributors-conference3' - line 1482: ' 2015contributors-conference-diversity-title' - line 1483: ' 2015contributors-conference-diversity1' - line 1484: ' Alongside technical development, one of the main focuses of this conference' - line 1485: ' was outreach, community, and diversity. The conference began with a panel' - line 1486: ' 2015contributors-conference-diversity2' - line 1487: ' Diversity' - line 1488: ' the Internet' - line 1489: ' 2015contributors-conference-diversity3' - line 1490: ' 2015contributors-conference-diversity4' - line 1491: ' 2015contributors-conference-diversity5' - line 1492: ' 2015contributors-conference-diversity6' - line 1493: ' 2015contributors-conference-diversity7' - line 1494: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' - line 1495: ' Mellon University. Speakers included' - line 1496: ' 2015contributors-conference-diversity8' - line 1497: ' 2015contributors-conference-diversity9' - line 1498: ' 2015cc_1' - line 1499: ' 2015cc_2' - line 1500: ' 2015cc_3' - line 1501: ' 2015cc_4' - line 1502: ' Woman expressively speaks into a microphone while two male collaborators' - line 1503: ' look on' - line 1504: ' 2015cc_5' - line 1505: ' 2015cc_6' - line 1506: ' 2015cc_7' - line 1507: ' Participants sit in a circle around a white board with sticky notes on it' - line 1508: ' while a female student speaks into a microphone' - line 1509: ' 2015cc_8' - line 1510: ' Participants sit around a table looking at each others laptops and compare' - line 1511: ' code' - line 1512: ' 2015cc_9' - line 1513: ' 2015cc_10' - line 1514: ' Woman speaking into a microphone about valuing different skill sets while a' - line 1515: ' group of participants with laptops look at her powerpoint in a classroom' - line 1516: ' 2015cc_11' - line 1518: ' the stage and another three are skyping in on the stage screen' - line 1519: ' 2015cc_12' - line 1520: ' 2015cc_13' - line 1521: ' 2015cc_14' - line 1522: ' 2015cc_15' - line 1523: ' 2019contributors-conference-title' - line 1524: ' 2019contributors-conference-date' - line 1525: ' 2019contributors-conference1' - line 1526: ' 2019contributors-conference2' - line 1529: ' Comprising a diverse range of participants within the fields of creative' - line 1530: ' technology, interaction design, and new media arts, the conference was aimed' - line 1531: ' at fostering dialogue through a multidisciplinary lens. Working groups' - line 1532: ' focused on several topic areas' - line 1533: ' Landscape of Creative Tech; and Internationalization.' - line 1534: ' 2019contributors-conference3' - line 1535: ' 2019contributors-conference4' - line 1536: ' outputs' - line 1538: ' . An implementation of highly flexible triangle, square, hexagon, and' - line 1539: ' octagon girds for p5.js. Created by Aren Davey.' - line 1540: ' output2' - line 1541: ' . A set of template files for building a multi-device, multiplayer game' - line 1542: ' where multiple clients can connect to a specified host page. Created by L05.' - line 1543: ' output3' - line 1544: ' output3-1' - line 1666: ' books-title' - line 1667: ' book-1-title' - line 1668: ' book-1-authors' - line 1712: ' book-4-order-b' - line 1713: ' book-5-title' - line 1714: ' book-5-authors' - line 1715: ' book-5-publisher' - line 1716: ' book-5-pages' - line 1717: ' book-5-type' - line 1718: ' book-5-description' - line 1719: ' Learn coding from scratch in a highly engaging and visual manner using the' - line 1720: ' vastly popular JavaScript with the programming library p5.js. The skills you' - line 1721: ' will acquire from this book are highly transferable to a myriad of' - line 1722: ' industries and can be used towards building web applications, programmable' - line 1723: ' robots, or generative art.' - line 1724: ' book-5-order-a' - line 1725: ' book-5-order-b' - line 1726: ' book-6-title' - line 1727: ' book-6-authors' - line 1728: ' book-6-publisher' - line 1729: ' book-6-pages' - line 1730: ' book-6-type' - line 1731: ' book-6-description' - line 1732: ' Using p5.js, this book introduces and demonstrates the reflexive practice ' - line 1733: ' of aesthetic programming, engaging with learning to program as a way to ' - line 1734: ' understand and question existing technological objects and paradigms, ' - line 1735: ' and to explore the potential for reprogramming wider eco-socio-technical systems.' - line 1736: ' book-6-order-a' - line 1737: ' book-6-order-b' - line 1766: ' Examples' - line 1767: ' back-examples' - line 1768: ' Structure' - line 1769: ' Form' - line 1770: ' Data' - line 1771: ' Arrays' - line 2005: ' creator-from-roni-cantor' - line 2006: ' project-links' - line 2007: ' project-links-text-1-roni-cantor' - line 2008: ' project-links-text-2-roni-cantor' - line 2009: ' project-q-1-1' - line 2010: ' project-q-1-2' - line 2011: ' project-a-1-1-roni-cantor' - line 2012: ' I just graduated from Ryerson University''s New Media program. Coming from 4' - line 2013: ' years of coding and making robots, I decided to take a break and play with' - line 2014: ' some more traditional forms of art—while still coding and playing with' - line 2015: ' robots.' - line 2016: ' project-a-1-2-roni-cantor' - line 2017: ' project-a-1-3-roni-cantor' - line 2018: ' project-a-1-4-roni-cantor' - line 2019: ' project-q-2' - line 2020: ' project-a-2-1-roni-cantor' - line 2021: ' I used p5.js in this project to generate the sine wave and lerp (linear' - line 2022: ' interpolation) formulas and display the visuals in the' - line 2023: ' project-a-2-2-roni-cantor' - line 2024: ' . I then used a feature in my code that exported my programmed graphic into' - line 2025: ' an' - line 2026: ' project-a-2-3-roni-cantor' - line 2027: ' project-a-2-4-roni-cantor' - line 2028: ' —so that it understood where to draw the lines that I programmed. I sent' - line 2029: ' this information to the plotter with a program called' - line 2030: ' project-a-2-5-roni-cantor' - line 2031: ' project-q-3' - line 2032: ' project-a-3-roni-cantor' - line 2033: ' project-q-4' - line 2034: ' Did you face any challenges working on this project? If so, how did you' - line 2035: ' overcome them?' - line 2036: ' project-a-4-roni-cantor' - line 2037: ' It was my first time using p5.js, Inkscape, and a plotter! I really' - line 2038: ' benefited from the people around me who had used p5 before, as well as' - line 2039: ' online guides and forums.' - line 2040: ' project-q-5' - line 2041: ' project-a-5-roni-cantor' - line 2042: ' project-q-6' - line 2043: ' project-a-6-roni-cantor' - line 2044: ' project-resources' - line 2045: ' creator-from-qianqian' - line 2046: ' interview-link-qianqian' - line 2047: ' project-a-1-1-qianqian' - line 2048: ' project-a-1-2-qianqian' - line 2049: ' My partner introduced me to p5.js, which I learned mainly by watching free' - line 2050: ' online video tutorials. My first p5.js project was drawing some shapes with' - line 2051: ' different colors.' - line 2052: ' project-a-2-1-qianqian' - line 2053: ' This project started with an idea of teaching my mom, who lives in China and' - line 2054: ' doesn’t speak English, to code with p5.js. This project was difficult on' - line 2055: ' multiple levels, and I wanted to start by identifying the main reasons why' - line 2056: ' it’s more challenging for someone like my mother to learn to code—primarily' - line 2057: ' due to the lack of free creative coding education resources. Most of the' - line 2058: ' free resources to learn creative coding are unavailable in China. The p5.js' - line 2059: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' - line 2060: ' inaccessible in China because of internet censorship.' - line 2061: ' project-a-2-2-qianqian' - line 2062: ' project-a-2-3-qianqian' - line 2063: ' , but the more I watched coding tutorials online, the more I realized how' - line 2064: ' difficult it is to find other womxn and people of color teaching coding,' - line 2065: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' - line 2066: ' creative coding.' - line 2067: ' project-a-2-4-qianqian' - line 2068: ' I am working on opening up the video channels to other Chinese creatives who' - line 2069: ' want to contribute to the educational resource together, like interviews and' - line 2070: ' guest tutorials. If you are interested in teaching/talking about creative' - line 2071: ' coding in Mandarin, HMU!' - line 2072: ' project-a-3-1-qianqian' - line 2073: ' project-a-3-2-qianqian' - line 2074: ' project-a-4-1-qianqian' - line 2075: ' Learning to code in a second language was difficult and the lack of' - line 2076: ' community made this process even harder. I hope to speak from my experience' - line 2077: ' as a beginner and someone who once felt like an outsider to the creative' - line 2078: ' coding and video tutorial world.' - line 2079: ' project-a-4-2-qianqian' - line 2080: ' I spend a lot of time researching the latest technology for my videos. In' - line 2081: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' - line 2082: ' encourage others that it doesn’t take a lot of expensive gears to get' - line 2083: ' started making instructional videos.' - line 2084: ' project-a-4-3-qianqian' - line 2085: ' Another issue I came across was my own fear of putting myself online. I' - line 2086: ' first had to get over my anxiety of making mistakes in the videos or' - line 2087: ' receiving negative comments online. Often womxn and people of color are' - line 2088: ' targets for online harassment. I’m hoping to help set an example for other' - line 2089: ' womxn and people of color that it’s ok to put yourselves online and' - line 2090: ' strengthen your communities by sharing your knowledge. Eventually, we will' - line 2091: ' be able to stop online harassment by creating strong diverse communities.' - line 2092: ' project-a-5-1-qianqian' - line 2093: ' project-a-5-2-qianqian' - line 2094: ' creator-from-phuong' - line 2095: ' project-a-1-1-phuong' - line 2096: ' link-1-phuong' - line 2097: ' link-2-phuong' - line 2098: ' link-3-phuong' - line 2099: ' project-a-1-2-phuong' - line 2100: ' project-a-1-3-phuong' - line 2101: ' I was taking a course at the School of Machines in Berlin this summer' - line 2102: ' called! "' - line 2103: ' project-a-1-4-phuong' - line 2104: ' project-a-2-1-phuong' - line 2105: ' I used p5.js to work on the visual part of the game. The animation sprites' - line 2106: ' for Airi and the ghosts were drawn on an iPad app called' - line 2107: ' project-a-2-2-phuong' - line 2108: ' project-a-2-3-phuong' - line 2109: ' project-a-2-4-phuong' - line 2110: ' p5-sketch-by-chjno-phuong' - line 2111: ' project-a-2-5-phuong' - line 2112: ' . I set a condition so whenever the word "pew" or a mouse click was' - line 2113: ' detected, the scrolling speed would change to make an illusion of Airi' - line 2114: ' flying up. When the user does not do anything, the scrolling speed is' - line 2115: ' negative, which makes it look like Airi is falling down.' - line 2116: ' project-a-2-6-phuong' - line 2117: ' project-a-2-7-phuong' - line 2118: ' project-a-3-1-phuong' - line 2119: ' I really love how easily you can create, manipulate, and delete HTML blocks' - line 2120: ' and classes with the' - line 2121: ' project-a-3-2-phuong' - line 2122: ' project-a-3-3-phuong' - line 2123: ' project-a-3-4-phuong' - line 2124: ' project-a-4-1-phuong' - line 2125: ' There were a lot of challenges simply because p5.js was something new to me.' - line 2126: ' I did not work much with JavaScript in general before. Reading documentation' - line 2127: ' and searching for similar examples helped a lot.' - line 2128: ' project-a-5-1-phuong' - line 2129: ' school-of-machines-phuong' - line 2130: ' project-a-5-2-phuong' - line 2131: ' ! They try hard to connect the most creative people in the world and they do' - line 2132: ' it well so far. ❤️' - line 2133: ' pronouns-male' - line 2134: ' creator-from-chung' - line 2135: ' link-1-casey-louise' - line 2136: ' link-2-casey-louise' - line 2137: ' link-1-chung' - line 2138: ' link-2-chung' - line 2139: ' link-3-chung' - line 2140: ' project-a-1-1-chung' - line 2141: ' I am a graphic designer and a faculty member at Maryland Institute College' - line 2142: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' - line 2143: ' and motion graphics.' - line 2144: ' project-a-1-2-chung' - line 2145: ' project-a-1-3-chung' - line 2146: ' project-a-2-1-chung' - line 2147: ' This summer, I gave myself a challenge of making typographic posters with' - line 2148: ' coding, and this is one of the posters I made. I didn’t know until very' - line 2149: ' recently that I could use motion sensor data with p5.js. I was also watching' - line 2150: ' dan-shiffman-matterjs-tutorial' - line 2151: ' project-a-2-2-chung' - line 2152: ' project-a-3-1-chung' - line 2153: ' There are many things I love about p5.js such as the online community and' - line 2154: ' beginner friendliness. What I really like right now is the' - line 2155: ' project-a-3-2-chung' - line 2156: ' , with which I can not only work online for myself but also share URLs' - line 2157: ' quickly in the present mode. For this project in particular, I had to do a' - line 2158: ' lot of testing on my phone, and it was much easier and quicker than' - line 2159: ' committing to GitHub.' - line 2160: ' project-a-4-1-chung' - line 2161: ' project-a-4-2-chung' - line 2162: ' project-a-4-3-chung' - line 2163: ' project-a-5-1-chung' - line 2164: ' As mentioned above, if you want to render out frames and video files out of' - line 2165: ' p5.js sketches, check out my' - line 2166: ' project-a-5-2-chung' - line 2167: ' creator-from-casey-louise' - line 2168: ' project-a-1-1-casey-louise' - line 2169: ' Casey' - line 2170: ' interactive spaces, physical and digital.' - line 2171: ' project-a-1-2-casey-louise' - line 2172: ' Louise' - line 2173: ' interactive spaces based on sensor technologies.' - line 2174: ' project-a-1-3-casey-louise' - line 2175: ' Casey' - line 2176: ' I had been dabbling in' - line 2177: ' project-a-1-4-casey-louise' - line 2178: ' project-a-1-5-casey-louise' - line 2179: ' Louise' - line 2180: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' - line 2181: ' me.' - line 2182: ' project-a-2-1-casey-louise' - line 2183: ' Casey' - line 2184: ' curious if I could use them in p5.js. Then I heard about a grant for open' - line 2185: ' source, storytelling, and learning resource projects at ITP called' - line 2186: ' project-a-2-2-casey-louise' - line 2187: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' - line 2188: ' decided to figure out how they''re implemented in p5.js and create a resource' - line 2189: ' for others to learn. When I told Louise about the project, she was' - line 2190: ' immediately excited about learning and teaching shaders in p5.js. She''s been' - line 2191: ' great about making sure the project is a learning resource and not just a' - line 2192: ' collection of examples.' - line 2193: ' project-a-3-1-casey-louise' - line 2194: ' project-a-3-2-casey-louise' - line 2195: ' project-a-3-3-casey-louise' - line 2196: ' project-a-3-4-casey-louise' - line 2197: ' project-a-3-5-casey-louise' - line 2198: ' project-a-4-1-casey-louise' - line 2199: ' Casey' - line 2200: ' reaching out to amazing people, asking questions, and asking for permission' - line 2201: ' to use their examples in our project.' - line 2202: ' adam-ferris-repo-casey-louise' - line 2203: ' project-a-4-2-casey-louise' - line 2204: ' project-a-4-3-casey-louise' - line 2205: ' project-a-4-4-casey-louise' - line 2206: ' webgl-casey-louise' - line 2207: ' project-a-4-5-casey-louise' - line 2208: ' project-a-4-6-casey-louise' - line 2209: ' Louise' - line 2210: ' Luckily, there were some very well-documented examples on GitHub by Adam' - line 2211: ' Ferriss. Our aim was to do so in a way that a complete beginner can' - line 2212: ' understand how to implement it, so it was as much a technical challenge as' - line 2213: ' it was a challenge in teaching code to strangers and beginners. Here we drew' - line 2214: ' inspiration from the way the' - line 2215: ' openframeworks-book-casey-louise' - line 2216: ' project-a-4-7-casey-louise' - line 2217: ' project-a-5-1-casey-louise' - line 2218: ' project-a-5-2-casey-louise' - line 2219: ' pronouns-nonbinary' - line 2220: ' creator-from-moon' - line 2221: ' posters-by' - line 2222: ' project-a-1-1-moon' - line 2223: ' Moon' - line 2224: ' summer, I taught a graphic design course in the University of Georgia' - line 2225: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' - line 2226: ' planning to teach and to study digital platforms at UGA.' - line 2227: ' project-a-1-2-moon' - line 2228: ' project-a-1-3-moon' - line 2229: ' project-a-1-4-moon' - line 2230: ' pcd-la-moon' - line 2231: ' project-a-1-5-moon' - line 2232: ' . They helped me with the tools and logics of p5.js. It was an excellent' - line 2233: ' teaching and learning experience.' - line 2234: ' project-a-2-1-moon' - line 2235: ' codetrain-moon' - line 2236: ' project-a-2-2-moon' - line 2237: ' p5-reference-moon' - line 2238: ' project-a-2-3-moon' - line 2239: ' project-a-3-1-moon' - line 2240: ' project-a-3-2-moon' - line 2241: ' project-a-3-3-moon' - line 2242: ' project-a-3-4-moon' - line 2243: ' . I was able to use and to teach this tool to visualize various ideas about' - line 2244: ' time in motion.' - line 2245: ' project-a-4-1-moon' - line 2246: ' It was challenging for me, a beginner, to understand the overall structure' - line 2247: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' - line 2248: ' couple of times, and then I drew a chart to memorize and to teach the way I' - line 2249: ' understood the p5.js structure and code with strong constraints I set up. It' - line 2250: ' was an excellent teaching and learning experience.' - line 2251: ' project-a-5-1-moon' - line 2252: ' project-a-5-2-moon' - line 2253: teach - line 2254: ' teach-title2' - line 2255: ' teach-intro1' - line 2256: ' Every teaching has its own unique goals, messages, conditions, and' - line 2257: ' environments. ' - line 2258: ' teach-intro2' - line 2259: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' - line 2260: ' better connect the p5.js learner and educator communities around the world. ' - line 2261: ' teach-intro3' - line 2262: ' teach-intro4' - line 2263: ' teach-heading' - line 2264: ' teach-search-filter' - line 2265: ' teach-filter1' - line 2266: ' teach-filter1-label1' - line 2267: ' teach-filter1-label2' - line 2268: ' teach-filter1-label3' - line 2269: ' teach-filter1-label4' - line 2270: ' teach-filter1-label5' - line 2271: ' teach-filter1-label6' - line 2272: ' teach-filter1-label7' - line 2273: ' teach-filter1-label8' - line 2274: ' teach-filter1-label9' - line 2275: ' teach-filter1-label10' - line 2276: ' teach-filter1-label11' - line 2277: ' teach-filter1-label12' - line 2278: ' teach-filter1-label13' - line 2279: ' teach-filter1-label14' - line 2280: ' teach-filter1-label15' - line 2281: ' teach-filter1-label16' - line 2282: ' teach-filter2' - line 2283: ' teach-filter2-label1' - line 2284: ' teach-filter2-label2' - line 2285: ' teach-filter2-label3' - line 2286: ' teach-filter2-label4' - line 2287: ' teach-filter2-label5' - line 2288: ' teach-filter2-label6' - line 2289: ' teach-filter2-label7' - line 2290: ' teach-filter3' - line 2291: ' teach-filter4' - line 2292: ' teach-filter4-label1' - line 2293: ' teach-filter4-label2' - line 2294: ' teach-filter4-label3' - line 2295: ' teach-case-subtitle1' - line 2296: ' teach-case-subtitle2' - line 2297: ' teach-case-subtitle3' - line 2298: ' teach-case-subtitle4' - line 2299: ' teach-case-subtitle5' - line 2300: ' teach-case1-title' - line 2301: ' teach-case1-lead-name' - line 2302: ' teach-case1-content1' - line 2303: ' teach-case1-content1-1' - line 2304: ' teach-case1-content2' - line 2305: ' teach-case1-content3' - line 2306: ' teach-case1-content4' - line 2307: ' To introduce a new public to programming through fun and compelling' - line 2308: ' examples. ' - line 2309: ' teach-case1-content5' - line 2310: ' Method' - line 2311: ' each times. The students were using (Ubuntu) machines with the p5.js web' - line 2312: ' editor. I was teaching using a video projector as well as a board.' - line 2313: ' teach-case1-content5-1' - line 2314: ' Materials' - line 2315: ' links available in ' - line 2316: ' teach-case2-title' - line 2317: ' Making The Thing that Makes the Thing' - line 2318: ' with p5.js' - line 2319: ' teach-case2-lead-name' - line 2320: ' teach-case2-content1' - line 2321: ' teach-case2-content1-1' - line 2322: ' teach-case2-content2' - line 2323: ' Our participants included art/design students & professionals, creative' - line 2324: ' coding enthusiasts. We had close to 50 participants.' - line 2325: ' teach-case2-content3' - line 2326: ' teach-case2-content4' - line 2327: ' To explore generative art & design and recreate some classical works' - line 2328: ' with p5.js. ' - line 2329: ' teach-case2-content5' - line 2330: ' teach-case2-content5-1' - line 2331: ' teach-case2-content5-2' - line 2332: ' teach-case2-content5-3' - line 2333: ' teach-case2-content5-4' - line 2334: ' teach-case2-content5-5' - line 2335: ' teach-case3-title' - line 2336: ' teach-case3-lead-name' - line 2337: ' teach-case3-speech' - line 2338: ' teach-case3-content1' - line 2339: ' teach-case3-content1-1' - line 2340: ' teach-case3-content2' - line 2341: ' Our participants included art/design students & professionals, creative' - line 2342: ' coding enthusiasts. We had close to 50 participants.' - line 2343: ' teach-case3-content3' - line 2344: ' teach-case3-content4' - line 2345: ' To build a teacher and student community around p5 for middle and high' - line 2346: ' school.' - line 2347: ' teach-case3-content5' - line 2348: ' A half-day of workshop led by volunteer teachers. We saw lots of different' - line 2349: ' methods and materials. Most used some sort of slides or documentation, some' - line 2350: ' live coding using an editor, with work time for participant to remix.' - line 2351: ' teach-case3-content5-1' - line 2352: ' teach-case3-content5-2' - line 2353: ' teach-case3-content5-3' - line 2354: ' teach-case4-title' - line 2355: ' teach-case4-lead-name' - line 2356: ' teach-case4-speech' - line 2357: ' teach-case4-content1' - line 2358: ' teach-case4-content1-1' - line 2359: ' teach-case4-content2' - line 2360: ' I had around 16 students in the workshop, and a team including 3 people from' - line 2361: ' the PlusCode festival, and one person at the venue.' - line 2362: ' teach-case4-content3' - line 2363: ' teach-case4-content4' - line 2364: ' Introduction to beginners and artists of graphic web programming and open' - line 2365: ' source, using p5.js, in Spanish ' - line 2366: ' teach-case4-content5' - line 2367: ' teach-case4-content5-1' - line 2368: ' teach-case4-content5-2' - line 2369: ' teach-case4-content5-3' - line 2370: ' teach-case4-content5-4' - line 2371: ' teach-case5-title' - line 2372: ' teach-case5-lead-name' - line 2373: ' teach-case5-speech' - line 2374: ' My greatest source of uncertainty in developing the workshop was whether it' - line 2375: ' was trying to teach art to programmers or to teach programming to artists.' - line 2376: ' teach-case5-content1' - line 2377: ' teach-case5-content1-1' - line 2378: ' teach-case5-content1-2' - line 2379: ' teach-case5-content1-3' - line 2380: ' teach-case5-content2' - line 2381: ' teach-case5-content3' - line 2382: ' teach-case5-content4' - line 2383: ' To introduce p5.js to artists with little or no programming experience and' - line 2384: ' to suggest one way an analogue practice can migrate to a digital form.' - line 2385: ' teach-case5-content5' - line 2386: ' A printed workbook with activities that used the p5.js web editor to show' - line 2387: ' how translate an physical drawing into a digital drawing.' - line 2388: ' teach-case5-content5-1' - line 2389: ' teach-case5-content5-2' - line 2390: ' teach-case5-content5-3' - line 2391: ' teach-case6-title' - line 2392: ' teach-case6-lead-name' - line 2393: ' teach-case6-speech' - line 2394: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' - line 2395: ' your everyday life!' - line 2396: ' teach-case6-content1' - line 2397: ' teach-case6-content1-1' - line 2398: ' teach-case6-content2' - line 2399: ' teach-case6-content3' - line 2400: ' teach-case6-content4' - line 2401: ' teach-case6-content5' - line 2402: ' teach-case6-content5-1' - line 2403: ' teach-case6-content5-2' - line 2404: ' teach-case6-content5-3' - line 2405: ' teach-case6-content5-4' - line 2406: ' teach-case6-content5-5' - line 2407: ' teach-case7-title' - line 2408: ' teach-case7-lead-name' - line 2409: ' teach-case7-speech' - line 2410: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' - line 2411: ' to give it a try!' - line 2412: ' teach-case7-content1' - line 2413: ' teach-case7-content1-1' - line 2414: ' teach-case7-content2' - line 2415: ' teach-case7-content3' - line 2416: ' teach-case7-content4' - line 2417: ' teach-case7-content5' - line 2418: ' teach-case7-content5-1' - line 2419: ' teach-case8-title' - line 2420: ' teach-case8-lead-name' - line 2421: ' teach-case8-content1' - line 2422: ' teach-case8-content1-1' - line 2423: ' teach-case8-content2' - line 2424: ' teach-case8-content3' - line 2425: ' teach-case8-content4' - line 2426: ' teach-case8-content5' - line 2427: ' teach-case8-content5-1' - line 2428: ' teach-case8-content5-2' - line 2429: ' teach-case9-title' - line 2430: ' teach-case9-lead-name' - line 2431: ' teach-case9-content1' - line 2432: ' teach-case9-content1-1' - line 2433: ' teach-case9-content2' - line 2434: ' Students at Interactive Telecommunications Program, New York University. 16' - line 2435: ' people.' - line 2436: ' teach-case9-content3' - line 2437: ' teach-case9-content4' - line 2438: ' The goal of this class is to learn and understand common machine learning' - line 2439: ' techniques and apply them to generate creative outputs in the browser using' - line 2440: ' ml5.js and p5.js.' - line 2441: ' teach-case9-content5' - line 2442: ' This class is a mix of lectures, coding sessions, group discussions, and' - line 2443: ' presentations. I used ' - line 2444: ' teach-case9-content5-1' - line 2445: ' teach-case9-content5-2' - line 2446: ' teach-case9-content5-3' - line 2447: ' teach-case10-title' - line 2448: ' teach-case10-lead-name' - line 2449: ' teach-case10-content1' - line 2450: ' teach-case10-content3' - line 2451: ' teach-case10-content4' - line 2452: ' Introduce learners (potentially with no coding experiences at all) to the' - line 2453: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' - line 2454: ' and enable them to pursue own projects in a safe environment.' - line 2455: ' teach-case10-content5' - line 2456: ' p5.js source code (for the introductory project), JavaScript source code' - line 2457: ' (illustrating some basic JavaScript functionalities), accompanying slides in' - line 2458: ' .pdf format, all hosted publicly on GitHub. ' - line 2459: ' teach-case10-content5-1' - line 2460: ' teach-case10-content5-2' - line 2461: ' teach-case11-title' - line 2462: ' teach-case11-lead-name' - line 2463: ' teach-case11-content1' - line 2464: ' teach-case11-content1-1' - line 2465: ' teach-case11-content2' - line 2466: ' teach-case11-content3' - line 2467: ' teach-case11-content4' - line 2468: ' Over the course of three workshops, we will draw and create patterns using' - line 2469: ' p5.js, an open-source graphical library; we will learn and apply' - line 2470: ' computational concepts to transform patterns and finally, we will bring a' - line 2471: ' weaving to life with electronic microcontrollers.' - line 2472: ' teach-case11-content5' - line 2473: ' teach-case11-content5-1' - line 2474: ' Materials' - line 2475: ' pattern weaving tool.' - line 2476: ' teach-case11-content5-2' - line 2477: ' teach-case11-content5-3' - line 2478: ' teach-case11-content5-4' - line 2479: ' teach-case11-content5-5' - line 2480: ' teach-case12-title' - line 2481: ' teach-case12-lead-name' - line 2482: ' teach-case12-speech' - line 2483: ' I''m working on a new series of coding class for Disabled students in South' - line 2484: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2485: ' workshops in December 2020. The project is supported by the Open Society' - line 2486: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2487: ' Center.' - line 2488: ' teach-case12-content1' - line 2489: ' teach-case12-content1-1' - line 2490: ' teach-case12-content2' - line 2491: ' teach-case12-content3' - line 2492: ' teach-case12-content4' - line 2493: ' To help Deaf and Hard of Hearing students learn about computer programming' - line 2494: ' through playful exercises. To make ASL tutorial of basic coding concepts.' - line 2495: ' teach-case12-content5' - line 2496: ' We used p5.js Web editor and code examples on the website. We also used' - line 2497: ' dice, playing cards and various paper tools to help students learn about' - line 2498: ' coding concepts.' - line 2499: ' teach-case12-content5-1' - line 2500: ' teach-case12-content5-2' - line 2501: ' teach-case13-title' - line 2502: ' teach-case13-lead-name' - line 2503: ' teach-case13-speech' - line 2504: ' I''m working on a new series of coding class for Disabled students in South' - line 2505: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' - line 2506: ' workshops in December 2020. The project is supported by the Open Society' - line 2507: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' - line 2508: ' Center.' - line 2509: ' teach-case13-content1' - line 2510: ' teach-case13-content1-1' - line 2511: ' teach-case13-content2' - line 2512: ' teach-case13-content3' - line 2513: ' teach-case13-content4' - line 2514: ' Get creatives, designers, artists and other people who don''t typically use code introduced to p5.js.' - line 2515: ' teach-case13-content5' - line 2516: ' Website, p5.js editor.' - line 2517: ' teach-case13-content5-1' - line 2540: ' teach-case14-title' - line 2541: ' teach-case14-lead-name' - line 2542: ' teach-case14-speech' - line 2543: ' The Smarter Home / 더 똑똑한 집 American Arts Incubator Workshop reimagines smart homes of the future.' - line 2544: ' teach-case14-content1' - line 2545: ' teach-case14-content1-1' - line 2546: ' teach-case14-content1-2' - line 2547: ' teach-case14-content2' - line 2548: ' teach-case14-content3' - line 2549: ' teach-case14-content4' - line 2550: ' To reimagine smart homes of the future, with such technologies as p5.js and ml5.js. Spending a lot of time talking about the increasing role technology is playing at home and in Korean society,' - line 2551: ' the workshop aimed to offer a vision of a smarter home driven by the participants'' critical optimism for the future. ' - line 2552: ' teach-case14-content5' - line 2553: ' p5.js, p5 web editor, ml5.js, and installations. ' - line 2554: ' teach-case14-content5-1' - line 2555: ' 1) We set out to prototype the concept of a “smarter home”, trying to bring technology into personal space on our own terms.' - line 2556: ' teach-case14-content5-2' - line 2557: ' 2) Breaking into four teams, each selected an issue to address through a room they would create within our larger home structure.' - line 2558: ' teach-case14-content5-3' - line 2559: ' 3) We incorporated machine learning, audio processing, and computer vision techniques to track and respond to the presence of people. ' - line 2560: ' teach-case14-content5-4' - line 2561: ' 4) Together, these works make one installation, comprised of four interconnected smart rooms that each provoke discussion. ' - line 2562: ' teach-case14-content5-5' - line 2563: ' teach-case15-title' - line 2564: ' teach-case15-lead-name' - line 2565: ' teach-case15-content1' - line 2566: ' L''École de Design Nantes Atlantique, France' - line 2567: ' teach-case15-content1-1' - line 2568: ' teach-case15-content2' - line 2569: ' Students from l''école de design Nantes Atlantique''' - line 2570: ' teach-case15-content3' - line 2571: ' teach-case15-content4' - line 2572: ' To get to know p5.js and its functionalities (DOM, audio, WebGL, etc.) ' - line 2573: ' teach-case15-content5' - line 2574: ' GitHub Readme File' - line 2575: ' teach-case15-content5-1' - line 2576: ' teach-case16-title' - line 2577: ' 50+ Coding Club ' - line 2578: ' teach-case16-lead-name' - line 2579: ' teach-case16-speech' - line 2580: ' This workshop was conducted in line with ''p5 for 50+'' project, with supports from 2020 Processing Foundation fellowship program and Asia Culture Center (ACC).' - line 2581: ' teach-case16-content1' - line 2582: ' teach-case16-content1-1' - line 2583: ' teach-case16-content2' - line 2584: ' teach-case16-content2-1' - line 2585: ' teach-case16-content2-2' - line 2586: ' teach-case16-content3' - line 2587: ' teach-case16-content4' - line 2588: ' Addressing the digital literacy and rights of age 50+ population in a non-English-speaking country,' - line 2589: ' this workshop aimed to lower their physical, lingual, and emotional barriers to learning coding with smartphone-based p5.js editor.' - line 2590: ' teach-case16-content5' - line 2591: ' p5for50+ web app' - line 2592: ' teach-case16-content5-1' - line 2593: ' a smartphone-based web app, with p5.js web editor embedded in it. Created with the editor, the participants'' p5 sketches were printed out and framed on-site, and distributed as their materialized outcomes.' - line 2594: ' teach-case16-content5-2' - line 2595: ' teach-case16-content5-3' - line 2596: ' teach-case16-content5-4' - line 1623: ' teach-case17-speech' - line 1624: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 1625: ' teach-case17-content1' - line 1626: ' teach-case17-content1-1' - line 1627: ' teach-case17-content2' - line 1628: ' teach-case17-content3' - line 1629: ' teach-case17-content4' - line 1630: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 1631: ' teach-case17-content5' - line 1632: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 1633: ' teach-case17-content5-1' - line 162: ' library in your html. To learn more visit ' - line 163: ' library in your html. To learn more visit ' - line 164: ' your-first-sketch7' line 141: ' project-a-2-5-phuong' line 144: ' project-a-2-7-phuong' line 64: ' color-p3x3' line 70: ' color-rgb-p1x1' line 87: ' color-custom-ranges-p2x1' line 24: footer1 - line 25: footer2 - line 26: footer3 - line 27: footer4 line 77: ' color-rgb-p2x1' line 82: ' color-transparency-p2x1' line 139: ' project-a-2-7-phuong' line 76: ' color-transparency-p1x1' - line 31: tagline7 line 63: ' hosted-title' line 75: ' download9' line 140: ' learn5' @@ -5796,6 +3939,12 @@ zh-Hans: line 159: ' processing-transition1' line 160: ' processing-transition2' line 161: ' processing-transition3' + line 357: ' link-2-chung' + line 359: ' project-a-1-1-chung' + line 360: ' project-a-1-2-chung' + line 361: ' project-a-1-3-chung' + line 362: ' project-a-2-1-chung' + line 364: ' project-a-2-2-chung' line 365: ' project-a-3-1-chung' line 366: ' project-a-3-2-chung' line 367: ' project-a-4-1-chung' @@ -5805,9 +3954,6 @@ zh-Hans: line 371: ' project-a-5-2-chung' line 372: '' line 373: ' creator-from-casey-louise' - line 374: ' project-a-1-1-casey-louise' - line 375: ' project-a-1-2-casey-louise' - line 376: ' project-a-1-3-casey-louise' line 377: ' project-a-1-4-casey-louise' line 378: ' project-a-1-5-casey-louise' line 379: ' project-a-2-1-casey-louise' @@ -5816,7 +3962,6 @@ zh-Hans: line 382: ' project-a-3-2-casey-louise' line 383: ' project-a-3-3-casey-louise' line 384: ' project-a-3-4-casey-louise' - line 385: ' project-a-3-5-casey-louise' line 386: ' project-a-4-1-casey-louise' line 387: ' adam-ferris-repo-casey-louise' line 388: ' project-a-4-2-casey-louise' @@ -5825,11 +3970,9 @@ zh-Hans: line 391: ' webgl-casey-louise' line 392: ' project-a-4-5-casey-louise' line 393: ' project-a-4-6-casey-louise' - line 394: ' openframeworks-book-casey-louise' line 395: ' project-a-4-7-casey-louise' line 396: ' project-a-5-1-casey-louise' line 397: ' project-a-5-2-casey-louise' - line 398: '' line 399: ' pronouns-nonbinary' line 400: ' creator-from-moon' line 401: ' posters-by' @@ -5838,7 +3981,6 @@ zh-Hans: line 404: ' project-a-1-3-moon' line 405: ' project-a-1-4-moon' line 406: ' pcd-la-moon' - line 407: ' project-a-1-5-moon' line 408: ' project-a-2-1-moon' line 409: ' codetrain-moon' line 410: ' project-a-2-2-moon' @@ -5846,7 +3988,6 @@ zh-Hans: line 412: ' project-a-2-3-moon' line 413: ' project-a-3-1-moon' line 414: ' project-a-3-2-moon' - line 415: ' project-a-3-3-moon' line 416: ' project-a-3-4-moon' line 417: ' project-a-4-1-moon' line 418: ' project-a-5-1-moon' @@ -5876,25 +4017,595 @@ zh-Hans: line 67: ' sketch_info' line 22: footer1 line 23: footer2 - line 32: ' download-intro' line 65: ' color-rgb-p1x1' line 72: ' color-rgb-p2x1' - line 85: ' color-custom-ranges-p4x1' - line 28: footer5 line 81: ' color-transparency-p1x1' line 90: ' color-custom-ranges-p4x1' line 153: ' project-a-4-7-casey-louise' + line 33: Skip-To-Content + line 47: Contribute + line 48: Forum + line 49: Showcase + line 51: footer1 + line 52: footer2 + line 53: footer3 + line 58: tagline3 + line 101: ' beginners, and anyone else! p5.js is free and open-source because we believe' + line 106: ' think of your whole browser page as your sketch, including HTML5 objects for' + line 107: ' text, input, video, webcam, and sound.' + line 108: ' p2xh2' + line 130: ' p4xh2' + line 131: ' p4xp1' + line 132: ' p4xp2' + line 135: ' p4xp5' + line 147: ' copyright1' + line 149: ' under the terms of the' + line 150: ' copyright2' + line 151: ' copyright3' + line 152: ' copyright4' + line 232: ' get-started1' + line 235: ' get-started2' + line 236: ' get-started3' + line 237: ' get-started4' + line 238: ' get-started5' + line 241: ' scroll down to' + line 242: ' get-started7' + line 243: ' settingUp-title' + line 246: ' download1' + line 247: ' download2' + line 248: ' download3' + line 249: ' download4' + line 250: ' If you look in index.html, you''ll notice that it links to the file p5.js. If' + line 252: ' loading), change the link to p5.min.js.' + line 253: ' download5' + line 254: ' Alternatively, you can link to a p5.js file hosted online. All versions of' + line 255: ' p5.js are stored in a CDN (Content Delivery Network). You can find a history' + line 257: ' download6' + line 260: ' environment1' + line 262: ' environment2' + line 263: ' environment3' + line 264: ' environment4' + line 278: ' environment10' + line 280: ' Open the index.html file in your browser by double clicking on it in your' line 436: ' Download' line 437: ' download-intro' line 438: ' Welcome! While titled "Download" this page actually contains a collection of' line 439: ' links to either download the library or begin working with it online. We''ve' line 440: ' tried to order things to reflect what a beginner might want first, to' line 441: ' resources that more experienced programmers may be looking for.' - line 442: ' editor-title' line 443: ' p5.js-editor' + line 444: ' p5.js-editor-intro' + line 445: ' This link redirects you to the p5.js Editor online so you can begin using' + line 446: ' p5.js immediately.' + line 447: ' editor-includes' + line 448: ' complete-library-title' + line 449: ' complete-library-intro1' + line 450: ' This is a download containing the p5.js library file, the p5.sound addon,' + line 451: ' and an example project. It does not contain an editor. Visit' + line 452: ' complete-library-intro2' + line 453: ' complete-library-intro3' + line 454: ' p5.js-complete' + line 455: ' includes-1' + line 456: ' includes-2' + line 457: ' includes-3' + line 458: ' single-files-title' + line 459: ' single-files-intro' + line 460: ' These are downloads or links to the p5.js library file. No additional' + line 461: ' contents are included.' + line 462: ' single-file' + line 463: ' p5.js-uncompressed' + line 464: ' compressed' + line 465: ' link' + line 466: ' statically-hosted-file' + line 467: ' etc-title' + line 468: ' older-releases' + line 469: ' github-repository' + line 470: ' report-bugs' + line 471: ' supported-browsers' + line 472: ' support-title' + line 473: ' support-options' + line 474: ' support-1' + line 475: ' p5.js is free, open-source software. We want to make our community as open' + line 476: ' and inclusive as possible. You can support this work by' + line 477: ' support-2' + line 478: ' support-3' + line 479: ' support-4' + line 480: ' support-5' + line 481: ' support-6' + line 482: ' support-7' + line 483: ' support-8' + line 484: ' support-9' + line 485: ' support-10' + line 486: ' support-11' + line 487: ' support-12' + line 488: ' Your membership supports software development (for p5.js, Processing,' + line 489: ' Processing.py, Processing for Android and ARM devices, education resources' + line 490: ' like code examples and tutorials,' + line 491: ' support-13' + line 492: ' support-14' + line 493: ' support-15' + line 494: ' support-16' + line 495: ' support-17' + line 496: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 497: ' Pittsburgh (Image credit' + line 498: ' support-18' + line 499: ' Processing Fellow Saskia Freeke is organizing Code Liberation x Processing' + line 500: ' workshops in London (Image credit' + line 501: ' support-19' + line 502: ' Learning to Teach, Teaching to Learn conference with SFPC (Image credit' + line 503: ' Kira Simon-Kennedy)' + line 504: ' support-20' + line 505: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 506: ' (Image credit' + line 507: ' support-21' + line 508: ' Taeyoon Choi and ASL interpretor at Signing Coders p5.js workshop (Image' + line 509: ' credit' + line 510: ' support-22' + line 511: ' support-23' + line 512: ' Processing Foundation Fellow Cassie Tarakajian''s workshop at Code Art Miami' + line 513: ' (Image credit' + line 514: ' support-24' + line 515: ' Luisa Pereira and Yeseul Song helping facilitate a sign language based p5.js' + line 516: ' workshop led by Taeyoon Choi (Image credit' + line 517: ' support-25' + line 518: ' p5.js Contributors Conference at CMU STUDIO for Creative Inquiry in' + line 519: ' Pittsburgh (Image credit' + line 520: ' support-26' + line 521: ' Processing Fellow Digital Citizens Lab hosts a panel on STEM teaching at the' + line 522: ' International Center of Photography (Image credit' + line 523: ' Photography)' + line 524: ' support-27' + line 525: ' Participants at p5.js workshop in Santiago, Chile, led by Aarón' + line 526: ' Montoya-Moraga (Image credit' + line 527: ' support-28' + line 528: ' Claire Kearney-Volpe helping facilitate a sign language based p5.js workshop' + line 529: ' led by Taeyoon Choi (Image credit' + line 530: ' support-29' + line 531: ' Processing Foundation Fellow DIY Girls run a creative coding program in Los' + line 532: ' Angeles (Image credit' + line 533: ' support-30' + line 534: ' support-31' + line 535: ' support-32' + line 536: ' support-33' + line 537: ' support-17-alt' + line 538: ' support-18-alt' + line 539: ' support-19-alt' + line 540: ' support-20-alt' + line 541: ' support-21-alt' + line 542: ' support-22-alt' + line 543: ' support-23-alt' + line 544: ' support-24-alt' + line 545: ' support-25-alt' + line 546: ' support-26-alt' + line 547: ' support-27-alt' + line 548: ' support-28-alt' + line 549: ' support-29-alt' line 550: ' support-30-alt' line 551: ' support-31-alt' + line 729: ' learn-title' + line 730: ' teach-title2' + line 731: ' learn1' + line 732: ' These tutorials provide more in-depth or step-by-step overviews of' + line 733: ' particular topics. Check out the ' + line 734: ' learn2' + line 735: ' learn3' + line 736: ' introduction-to-p5js-title' + line 737: ' hello-p5js-title' + line 738: ' hello-p5js' + line 739: ' This short video will introduce you to the library and what you can do with' + line 740: ' it.' + line 741: ' getting-started-title' + line 742: ' getting-started' + line 743: ' Welcome to p5.js!
This introduction covers the basics of setting up a' + line 744: ' p5.js project.' + line 745: ' p5js-overview-title' + line 746: ' p5js-overview' + line 747: ' p5js-processing-title' + line 748: ' p5js-processing' + line 749: ' The main differences between the two, and how to convert from one to the' + line 750: ' other.' + line 751: ' p5-screen-reader-title' + line 752: ' p5-screen-reader' + line 753: ' using-local-server-title' + line 754: ' using-local-server' + line 755: ' p5js-wiki-title' + line 756: ' p5js-wiki' + line 757: ' connecting-p5js-title' + line 758: ' creating-libraries-title' + line 759: ' creating-libraries' + line 760: ' nodejs-and-socketio-title' + line 761: ' nodejs-and-socketio' + line 762: ' programming-topics-title' + line 763: ' beyond-the-canvas-title' + line 764: ' beyond-the-canvas' + line 765: ' 3d-webgl-title' + line 766: ' 3d-webgl' + line 767: ' color-title' + line 768: ' color' + line 769: ' coordinate-system-and-shapes-title' + line 770: ' coordinate-system-and-shapes' + line 771: ' interactivity-title' + line 772: ' interactivity' + line 773: ' program-flow-title' + line 774: ' program-flow' + line 775: ' curves-title' + line 776: ' curves' + line 777: ' An introduction to the three types of curves in p5.js' + line 778: ' and Bézier curves.' + line 779: ' becoming-a-better-programmer-title' + line 780: ' debugging-title' + line 781: ' debugging' + line 782: ' optimizing-title' + line 783: ' optimizing' + line 784: ' A tutorial of tips and tricks for optimizing your code to make it run faster' + line 785: ' and smoother.' + line 786: ' test-driven-development-title' + line 787: ' test-driven-development' + line 788: ' Save yourself from agony on install day. What is unit testing and how to use' + line 789: ' it? By Andy Timmons.' + line 790: ' contributing-to-the-community-title' + line 791: ' development-title' + line 792: ' development' + line 793: ' looking-inside-title' + line 794: ' looking-inside' + line 795: ' A friendly intro to the file structure and tools for p5.js development, by' + line 796: ' Luisa Pereira.' + line 797: ' writing-tutorial-title' + line 798: ' writing-tutorial' + line 799: ' writing-a-tutorial-title' + line 800: ' writing-a-tutorial-author' + line 801: ' writing-a-tutorial-1' + line 802: ' We invite educators, contributors and general enthusiasts to contribute p5js' + line 803: ' tutorials. The p5js project makes creative coding and open source' + line 804: ' development more accessible to a diverse community and we are excited to' + line 805: ' publish tutorials on all aspects of the development process. Our learning' + line 806: ' materials so far include guides on learning p5, programming technique and' + line 807: ' how to contribute to an open source project.' + line 808: ' writing-a-tutorial-2' + line 809: ' We welcome new written tutorial contributions and this guide outlines the' + line 810: ' steps of how to propose, prepare and contribute.' + line 811: ' writing-a-tutorial-how-start-title' + line 812: ' writing-a-tutorial-how-start-1' + line 813: ' writing-a-tutorial-how-start-2' + line 814: ' writing-a-tutorial-how-start-3' + line 815: ' that outlines in progress tutorials. If your topic is listed as in progress,' + line 816: ' perhaps you can add to work being done and contribute to preparing existing' + line 817: ' work for publication so please reach out to us.' + line 818: ' writing-a-tutorial-how-start-4' + line 819: ' If your topic is not already covered and is not listed as in progress,' + line 820: ' please write a few sentences on what you propose to cover and email us this' + line 821: ' description at education@p5js.org.' + line 822: ' writing-a-tutorial-how-prepare-title' + line 823: ' writing-a-tutorial-how-prepare-1' + line 824: ' When your tutorial is ready for publication, please follow these steps to' + line 825: ' prepare your content for the p5js website.' + line 826: ' writing-a-tutorial-how-prepare-2' + line 827: ' writing-a-tutorial-how-prepare-3' + line 828: ' writing-a-tutorial-how-prepare-4' + line 829: ' writing-a-tutorial-how-prepare-5' + line 830: ' The folder containing your tutorial will be placed in the ''tutorials'' folder' + line 831: ' of the p5js site. The file called index.hbs is the ' + line 832: ' writing-a-tutorial-how-prepare-6' + line 833: ' writing-a-tutorial-how-prepare-7' + line 834: ' writing-a-tutorial-how-prepare-8' + line 835: ' writing-a-tutorial-how-prepare-9' + line 836: ' tags on the page, with formatting defined by the <h1> and <h2>' + line 837: ' tags, the <p> paragraph tags as is done shown on the' + line 838: ' writing-a-tutorial-how-prepare-10' + line 839: ' writing-a-tutorial-how-prepare-11' + line 840: ' If your tutorial contains images, they are to be placed in the assets folder' + line 841: ' of the p5 site, in the location src/assets/learn/test-tutorial/images as' + line 842: ' shown below.' + line 843: ' writing-a-tutorial-how-prepare-12' + line 844: ' writing-a-tutorial-embedding-title' + line 845: ' writing-a-tutorial-embedding-1' + line 846: ' Using p5js means you can illustrate your tutorial with animated, interactive' + line 847: ' or editable code examples to demonstrate programming concepts. Your examples' + line 848: ' should be prepared as p5.js sketches and can be embedded into the tutorial' + line 849: ' in two ways.' + line 850: ' writing-a-tutorial-embedding-2' + line 851: ' writing-a-tutorial-embedding-3' + line 852: ' writing-a-tutorial-embedding-4' + line 853: ' writing-a-tutorial-embedding-5' + line 854: ' writing-a-tutorial-embedding-6' + line 855: ' writing-a-tutorial-embedding-7' + line 856: ' writing-a-tutorial-embedding-8' + line 857: ' writing-a-tutorial-embedding-9' + line 858: ' writing-a-tutorial-embedding-10' + line 859: ' If the example is to be animated and/or interactive but not editable. The' + line 860: ' p5.js sketch should be embedded into the page as an iframe as described' + line 861: ' below.' + line 862: ' writing-a-tutorial-iframe-title' + line 863: ' writing-a-tutorial-iframe-1' + line 864: ' An iframe is like creating a window through which you can explore another' + line 865: ' page, sandboxed from the rest of your page. In this case it will be a window' + line 866: ' to the index.html containing your p5.js sketch. ' + line 867: ' writing-a-tutorial-iframe-2' + line 868: ' Put your p5 sketches in the /src/assets/learn folder of the site, in a' + line 869: ' folder labelled with the name of your sketch as shown in the screenshot.' + line 870: ' This is where all the images and p5 sketches linked by iframe should be' + line 884: ' Styling for the iframe (this could directly into the post or in a' + line 885: ' stylesheet)' + line 886: ' writing-a-tutorial-iframe-7' + line 887: ' writing-a-tutorial-iframe-8' + line 888: ' writing-a-tutorial-iframe-9' + line 889: ' One thing to note is that you need to manually set the size of the iframe,' + line 890: ' so it works best if things are a standard size.' + line 891: ' writing-a-tutorial-iframe-10' + line 892: ' Also note that the links to the p5.js library files do not happen from the' + line 893: ' .eps page with all the tutorial content. Instead they will be located in the' + line 894: ' html page that is rendering your sketch (in this case, called embed.html).' + line 895: ' writing-a-tutorial-iframe-11' + line 896: ' writing-a-tutorial-embed-iframe-12' + line 897: ' writing-a-tutorial-finishing-title' + line 898: ' writing-a-tutorial-finishing-1' + line 899: ' Once your have finished writing your tutorial and your content has been' + line 900: ' given the thumbs up. Fork the p5.js website repository, prepare your content' + line 901: ' as described above and then issue a pull request to the p5.js website' + line 902: ' repository so we can publish your contribution!' + line 903: ' writing-a-tutorial-finishing-2' + line 904: ' color-description1' + line 905: ' This tutorial is from the book Learning Processing by Daniel Shiffman,' + line 906: ' published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It' + line 907: ' was ported to P5 by Kelly Chang. If you find any errors or have comments, ' + line 908: ' color-description2' + line 909: ' color-p1x1' + line 910: ' In the digital world, when we want to talk about a color, precision is' + line 911: ' required. Saying "Hey, can you make that circle bluish-green?" will not do.' + line 912: ' Color, rather, is defined as a range of numbers. Let''s start with the' + line 913: ' simplest case' + line 914: ' In between, every other number—50, 87, 162, 209, and so on—is a shade of' + line 915: ' gray ranging from black to white.' + line 916: ' color-p2x1' + line 917: ' color-p2x2' + line 918: ' color-p2x3' + line 919: ' color-p2x4' + line 920: ' color-code1' + line 921: ' background(255); // Setting the background to white ' + line 922: ' stroke(0); // Setting the outline (stroke) to black ' + line 923: ' fill(150); // Setting the interior of a shape (fill) to grey ' + line 924: ' rect(50,50,75,100); // Drawing the rectangle' + line 925: ' color-p3x1' + line 926: ' color-p3x2' + line 927: ' color-p3x3' + line 928: ' . Our instinct might be to say "stroke(0)" for no outline, however, it is' + line 929: ' important to remember that 0 is not "nothing", but rather denotes the color' + line 930: ' black. Also, remember not to eliminate both—with ' + line 931: ' color-p3x4' + line 932: ' color-p3x5' + line 933: ' color-p4x1' + line 934: ' In addition, if we draw two shapes, p5.js will always use the most recently' + line 935: ' specified stroke and fill, reading the code from top to bottom.' + line 936: ' color-rgb-title' + line 937: ' color-rgb-p1x1' + line 938: ' Remember finger painting? By mixing three "primary" colors, any color could' + line 939: ' be generated. Swirling all colors together resulted in a muddy brown. The' + line 940: ' more paint you added, the darker it got. Digital colors are also constructed' + line 941: ' by mixing three primary colors, but it works differently from paint. First,' + line 942: ' the primaries are different' + line 943: ' with color on the screen, you are mixing light, not paint, so the mixing' + line 944: ' rules are different as well.' + line 945: ' color-rgb-li1' + line 946: ' color-rgb-li2' + line 947: ' color-rgb-li3' + line 948: ' color-rgb-li4' + line 949: ' color-rgb-li5' + line 950: ' color-rgb-p2x1' + line 951: ' This assumes that the colors are all as bright as possible, but of course,' + line 952: ' you have a range of color available, so some red plus some green plus some' + line 953: ' blue equals gray, and a bit of red plus a bit of blue equals dark purple.' + line 954: ' While this may take some getting used to, the more you program and' + line 955: ' experiment with RGB color, the more it will become instinctive, much like' + line 956: ' swirling colors with your fingers. And of course you can''t say "Mix some red' + line 957: ' with a bit of blue," you have to provide an exact amount. As with grayscale,' + line 958: ' the individual color elements are expressed as ranges from 0 (none of that' + line 959: ' color) to 255 (as much as possible), and they are listed in the order R, G,' + line 960: ' and B. You will get the hang of RGB color mixing through experimentation,' + line 961: ' but next we will cover some code using some common colors.' + line 962: ' color-transparency-title' + line 963: ' color-transparency-p1x1' + line 964: ' In addition to the red, green, and blue components of each color, there is' + line 965: ' an additional optional fourth component, referred to as the color''s "alpha".' + line 966: ' Alpha means transparency and is particularly useful when you want to draw' + line 967: ' elements that appear partially see-through on top of one another. The alpha' + line 968: ' values for an image are sometimes referred to collectively as the "alpha' + line 969: ' channel" of an image.' + line 970: ' color-transparency-p2x1' + line 971: ' It is important to realize that pixels are not literally transparent, this' + line 972: ' is simply a convenient illusion that is accomplished by blending colors.' + line 973: ' Behind the scenes, p5.js takes the color numbers and adds a percentage of' + line 974: ' one to a percentage of another, creating the optical perception of blending.' + line 975: ' (If you are interested in programming "rose-colored" glasses, this is where' + line 976: ' you would begin.)' + line 977: ' color-transparency-p3x1' + line 978: ' Alpha values also range from 0 to 255, with 0 being completely transparent' + line 979: ' (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).' + line 980: ' color-custom-ranges-title' + line 981: ' color-custom-ranges-p1x1' + line 982: ' RGB color with ranges of 0 to 255 is not the only way you can handle color' + line 983: ' in p5.js, in fact, it allows us to think about color any way we like. For' + line 984: ' example, you might prefer to think of color as ranging from 0 to 100 (like a' + line 985: ' percentage). You can do this by specifying a custom ' + line 986: ' color-custom-ranges-p2x1' + line 987: ' The above function says' + line 988: ' green, and blue. The range of RGB values will be from 0 to 100."' + line 989: ' color-custom-ranges-p3x1' + line 990: ' Although it is rarely convenient to do so, you can also have different' + line 991: ' ranges for each color component' + line 992: ' color-custom-ranges-p4x1' + line 993: ' Now we are saying "Red values go from 0 to 100, green from 0 to 500, blue' + line 994: ' from 0 to 10, and alpha from 0 to 255."' + line 995: ' color-custom-ranges-p5x1' + line 996: ' Finally, while you will likely only need RGB color for all of your' + line 997: ' programming needs, you can also specify colors in the HSB (hue, saturation,' + line 998: ' and brightness) mode. Without getting into too much detail, HSB color works' + line 999: ' as follows' + line 1000: ' color-custom-ranges-li1x1' + line 1001: ' color-custom-ranges-li1x2' + line 1002: ' color-custom-ranges-li2x1' + line 1003: ' color-custom-ranges-li2x2' + line 1004: ' color-custom-ranges-li3x1' + line 1005: ' color-custom-ranges-li3x2' + line 1006: ' color-custom-ranges-p6x1' + line 1007: ' color-custom-ranges-p6x2' + line 1008: ' coordinate-system-description1' + line 1009: ' coordinate-system-description2' + line 1010: ' coordinate-system-description3' + line 1011: ' coordinate-system-description4' + line 1012: ' coordinate-system-description5' + line 1013: ' coordinate-system-description-title' + line 1014: ' coordinate-system-description-p1x1' + line 1015: ' Before we begin programming with p5, we must first channel our eighth grade' + line 1016: ' selves, pull out a piece of graph paper, and draw a line. The shortest' + line 1017: ' distance between two points is a good old fashioned line, and this is where' + line 1018: ' we begin, with two points on that graph paper.' + line 1019: ' coordinate-system-description-p2x1' + line 1020: ' The above figure shows a line between point A (1,0) and point B (4,5). If' + line 1021: ' you wanted to direct a friend of yours to draw that same line, you would' + line 1022: ' give them a shout and say "draw a line from the point one-zero to the point' + line 1023: ' four-five, please." Well, for the moment, imagine your friend was a computer' + line 1024: ' and you wanted to instruct this digital pal to display that same line on its' + line 1025: ' screen. The same command applies (only this time you can skip the' + line 1026: ' pleasantries and you will be required to employ a precise formatting). Here,' + line 1027: ' the instruction will look like this' + line 1028: ' coordinate-system-description-p3x1' + line 1029: ' Even without having studied the syntax of writing code, the above statement' + line 1030: ' should make a fair amount of sense. We are providing a command (which we' + line 1031: ' will refer to as a "function") for the machine to follow entitled "line." In' + line 1032: ' addition, we are specifying some arguments for how that line should be' + line 1033: ' drawn, from point A (1,0) to point B (4,5). If you think of that line of' + line 1034: ' code as a sentence, the function is a verb and the arguments are the objects' + line 1035: ' of the sentence. The code sentence also ends with a semicolon instead of a' + line 1036: ' period.' + line 1037: ' coordinate-system-description-p4x1' + line 1038: ' The key here is to realize that the computer screen is nothing more than a' + line 1039: ' fancier piece of graph paper. Each pixel of the screen is a coordinate - two' + line 1040: ' numbers, an "x" (horizontal) and a "y" (vertical) - that determines the' + line 1041: ' location of a point in space. And it is our job to specify what shapes and' + line 1042: ' colors should appear at these pixel coordinates.' + line 1043: ' coordinate-system-description-p5x1' + line 1044: ' Nevertheless, there is a catch here. The graph paper from eighth grade' + line 1045: ' ("Cartesian coordinate system") placed (0,0) in the center with the y-axis' + line 1046: ' pointing up and the x-axis pointing to the right (in the positive direction,' + line 1047: ' negative down and to the left). The coordinate system for pixels in a' + line 1048: ' computer window, however, is reversed along the y-axis. (0,0) can be found' + line 1049: ' at the top left with the positive direction to the right horizontally and' + line 1050: ' down vertically.' + line 1051: ' coordinate-system-simple-shapes-title' + line 1052: ' coordinate-system-simple-shapes-p1x1' + line 1053: ' The vast majority of p5 programming examples are visual in nature. These' + line 1054: ' examples, at their core, involve drawing shapes and setting pixels. Let''s' + line 1055: ' begin by looking at four primitive shapes.' + line 1056: ' coordinate-system-simple-shapes-p2x1' + line 1057: ' For each shape, we will ask ourselves what information is required to' + line 1058: ' specify the location and size (and later color) of that shape and learn how' + line 1059: ' p5 expects to receive that information. In each of the diagrams below, we''ll' + line 1060: ' assume a window with a width of 100 pixels and height of 100 pixels.' + line 1061: ' coordinate-system-simple-shapes-p3x1' + line 1062: ' coordinate-system-simple-shapes-p3x2' + line 1063: ' coordinate-system-simple-shapes-p4x1' + line 1064: ' coordinate-system-simple-shapes-p4x2' + line 1065: ' coordinate-system-simple-shapes-p5x1' + line 1066: ' coordinate-system-simple-shapes-p5x2' + line 1067: ' , things become a bit more complicated. In p5, a rectangle is specified by' + line 1068: ' the coordinate for the top left corner of the rectangle, as well as its' + line 1069: ' width and height.' + line 1070: ' coordinate-system-simple-shapes-p6x1' + line 1071: ' A second way to draw a rectangle involves specifying the centerpoint, along' + line 1072: ' with width and height. If we prefer this method, we first indicate that we' + line 1073: ' want to use the ' + line 1074: ' coordinate-system-simple-shapes-p6x2' + line 1075: ' coordinate-system-simple-shapes-p7x1' + line 1076: ' Finally, we can also draw a rectangle with two points (the top left corner' + line 1077: ' and the bottom right corner). The mode here is ' + line 1078: ' coordinate-system-simple-shapes-p7x2' + line 1079: ' coordinate-system-simple-shapes-p8x1' + line 1080: ' coordinate-system-simple-shapes-p8x2' + line 1081: ' coordinate-system-simple-shapes-p8x3' + line 1082: ' coordinate-system-simple-shapes-p8x4' + line 1083: ' coordinate-system-simple-shapes-p8x5' + line 1084: ' coordinate-system-simple-shapes-p8x6' + line 1085: ' coordinate-system-simple-shapes-p9x1' + line 1086: ' Now let''s look at what some code with shapes in more complete form, with' + line 1087: ' canvas dimensions of 200 by 200. Note the use of the createCanvas() function' + line 1088: ' to specify the width and height of the canvas.' + line 1089: ' teach-desc' line 1090: test-tutorial + line 1147: ' Libraries' + line 1148: ' core-libraries' + line 1149: ' community-libraries' + line 1150: ' libraries-created-by' + line 1151: ' p5.sound' + line 1152: ' p5.sound extends p5 with Web Audio functionality including audio input,' + line 1153: ' playback, analysis and synthesis.' + line 1154: ' p5.accessibility' + line 1155: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' + line 1156: ' and visually impaired.' + line 1157: ' asciiart' + line 1158: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' + line 1159: ' p5js.' + line 1160: ' p5.ble' + line 1161: ' A Javascript library that enables communication between BLE devices and p5' + line 1162: ' sketches.' + line 1163: ' blizard.js' + line 1164: ' p5.bots' + line 1165: ' With p5.bots you can interact with your Arduino (or other microprocessor)' + line 1166: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' + line 1167: ' drive LEDs, motors, and more!' + line 1168: ' p5.clickable' + line 1169: ' p5.cmyk.js' + line 1170: ' p5.collide2D' + line 1171: ' p5.collide2D provides tools for calculating collision detection for 2D' + line 1172: ' geometry with p5.js.' + line 1173: ' p5.createloop' + line 1175: ' p5.dimensions extends p5.js'' vector functions to work in any number of' + line 1176: ' dimensions.' + line 1177: ' p5.EasyCam' + line 1178: ' Simple 3D camera control with inertial pan, zoom, and rotate. Major' + line 1179: ' contributions by Thomas Diewald.' + line 1180: ' p5.experience' + line 1181: ' Extensive library for p5.js that adds additional event-listening' + line 1182: ' functionality for creating canvas-based web applications.' + line 1183: ' p5.func' + line 1184: ' p5.func is a p5 extension that provides new objects and utilities for' + line 1185: ' function generation in the time, frequency, and spatial domains.' + line 1186: ' p5.geolocation' + line 1187: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' + line 1188: ' geofencing user locations for p5.js.' + line 1189: ' p5.gibber' + line 1190: ' grafica.js' + line 1191: ' grafica.js lets you add simple but highly configurable 2D plots to your' + line 1192: ' p5.js sketches.' + line 1193: ' p5.gui' + line 1194: ' p5.localmessage' + line 1195: ' p5.localmessage provides a simple interface to send messages locally from' + line 1196: ' one sketch to another for easy multi-window sketching!' + line 1197: ' marching' + line 1198: ' mappa' + line 1199: ' Mappa provides a set of tools for working with static maps, tile maps, and' + line 1200: ' geo-data. Useful when building geolocation-based visual representations.' + line 1201: ' ml5.js' + line 1202: ' ml5.js builds on Tensorflow.js and provides friendly access to machine' + line 1203: ' learning algorithms and models in the browser.' + line 1204: ' p5.play' + line 1205: ' p5.play provides sprites, animations, input and collision functions for' + line 1206: ' games and gamelike applications.' + line 1207: ' p5.particle' + line 1208: ' The Particle and Fountain objects can be used to create data-driven effects' + line 1209: ' that are defined through user structures or JSON input and user-draw' + line 1210: ' functions.' + line 1211: ' p5.Riso' + line 1212: ' p5.Riso is a library for generating files suitable for Risograph printing.' + line 1213: ' It helps turn your sketches into multi-color prints.' + line 1214: ' rita.js' + line 1215: ' RiTa.js provides a set of natural language processing objects for generative' + line 1216: ' literature.' + line 1217: ' Rotating knobs' + line 1218: ' p5.scenemanager' + line 1219: ' p5.SceneManager helps you create sketches with multiple states / scenes.' + line 1220: ' Each scene is a like a sketch within the main sketch.' + line 1221: ' p5.screenPosition' + line 1222: ' p5.scribble' line 1223: ' Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based' line 1224: ' on a port of the original Processing library' line 1225: ' p5.serial' @@ -5941,6 +4652,213 @@ zh-Hans: line 1266: ' create-your-own4' line 1267: ' If you have created a library and would like to have it included on this' line 1268: ' page, submit this form!' + line 1420: ' community-title' + line 1421: ' community-statement-title' + line 1422: ' community-statement1' + line 1423: ' p5.js is a community interested in exploring the creation of art and design' + line 1424: ' with technology.' + line 1425: ' community-statement2' + line 1426: ' We are a community of, and in solidarity with, people from every gender' + line 1427: ' identity and expression, sexual orientation, race, ethnicity, language,' + line 1428: ' neuro-type, size, ability, class, religion, culture, subculture, political' + line 1429: ' opinion, age, skill level, occupation, and background. We acknowledge that' + line 1430: ' not everyone has the time, financial means, or capacity to actively' + line 1431: ' participate, but we recognize and encourage involvement of all kinds. We' + line 1432: ' facilitate and foster access and empowerment. We are all learners.' + line 1433: ' community-statement3' + line 1434: ' We like these hashtags' + line 1435: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' + line 1436: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' + line 1437: ' course).' + line 1438: ' in-practice-title' + line 1439: ' in-practice1' + line 1440: ' in-practice2' + line 1441: ' We insist on actively engaging with requests for feedback regardless of' + line 1442: ' their complexity.' + line 1443: ' in-practice3' + line 1444: ' We welcome newcomers and prioritize the education of others. We strive to' + line 1445: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' + line 1446: ' that newcomers are just as valuable in this effort as experts.' + line 1447: ' in-practice4' + line 1448: ' We consistently make the effort to actively recognize and validate multiple' + line 1449: ' types of contributions.' + line 1450: ' in-practice5' + line 1451: ' in-times-conflict-title' + line 1452: ' in-times-conflict1' + line 1453: ' in-times-conflict2' + line 1454: ' in-times-conflict3' + line 1455: ' We admit when we''re wrong, apologize, and accept responsibility for our' + line 1456: ' actions.' + line 1457: ' in-times-conflict4' + line 1458: ' in-times-conflict5' + line 1459: ' in-times-conflict6' + line 1460: ' in-times-conflict7' + line 1461: ' in-the-future-title' + line 1462: ' in-the-future1' + line 1463: ' notes-title' + line 1464: ' notes1' + line 1465: ' notes2' + line 1466: ' notes3' + line 1467: ' notes4' + line 1468: ' notes5' + line 1469: ' contribute-title' + line 1470: ' contribute1' + line 1471: ' Our community is always looking for enthusiasts to help in all different' + line 1472: ' ways.' + line 1473: ' develop-title' + line 1474: ' develop1' + line 1475: ' develop2' + line 1476: ' develop3' + line 1477: ' develop4' + line 1478: ' develop5' + line 1479: ' document-title' + line 1480: ' document1' + line 1481: ' document2' + line 1482: ' document3' + line 1483: ' document4' + line 1484: ' document5' + line 1485: ' teach-title' + line 1486: ' teach1' + line 1487: ' create-title' + line 1488: ' create1' + line 1489: ' create2' + line 1490: ' create3' + line 1491: ' donate-title' + line 1492: ' donate1' + line 1493: ' donate2' + line 1494: ' donate3' + line 1495: ' contributors-conference-title' + line 1496: ' contributors-conference1' + line 1497: ' While most work happens online, we also convene IRL. We''ve had two' + line 1498: ' contributors conferences held at the' + line 1499: ' contributors-conference2' + line 1500: ' at Carnegie Mellon University in Pittsburgh, PA. Artists, designers,' + line 1501: ' developers, educators, and got together to advance the p5.js project.' + line 1502: ' participants-title' + line 1503: ' support-title' + line 1504: ' support1' + line 1505: ' support2' + line 1506: ' at Carnegie Mellon University, an academic laboratory for atypical,' + line 1507: ' anti-disciplinary, and inter-institutional research at the intersections of' + line 1508: ' arts, science, technology, and culture.' + line 1509: ' support3' + line 1510: ' support4' + line 1511: ' support5' + line 1512: ' support6' + line 1513: ' mailing-list-title' + line 1514: ' mailing-list-1' + line 1515: ' Enter your email address to receive occasional updates from the Processing' + line 1516: ' Foundation.' + line 1517: ' 2015contributors-conference-title' + line 1518: ' 2015contributors-conference-date' + line 1519: ' 2015contributors-conference1' + line 1520: ' 2015contributors-conference2' + line 1521: ' , advancing the code, documentation, and community outreach tools of the' + line 1522: ' p5.js programming environment. Participants came from as far away as Hong' + line 1523: ' Kong, Seattle, Los Angeles, Boston and New York. Most were working' + line 1524: ' professionals in the fields of creative technology, interaction design, and' + line 1525: ' new-media arts, but the group also included a half-dozen undergraduate and' + line 1526: ' graduate students from Carnegie Mellon’s Schools of Art and Architecture.' + line 1527: ' 2015contributors-conference3' + line 1528: ' 2015contributors-conference-diversity-title' + line 1529: ' 2015contributors-conference-diversity1' + line 1530: ' Alongside technical development, one of the main focuses of this conference' + line 1531: ' was outreach, community, and diversity. The conference began with a panel' + line 1532: ' 2015contributors-conference-diversity2' + line 1533: ' Diversity' + line 1534: ' the Internet' + line 1535: ' 2015contributors-conference-diversity3' + line 1537: ' 2015contributors-conference-diversity5' + line 1538: ' 2015contributors-conference-diversity6' + line 1539: ' 2015contributors-conference-diversity7' + line 1540: ' the panel took place Tuesday, 25 May 2015 in Kresge Auditorium at Carnegie' + line 1541: ' Mellon University. Speakers included' + line 1542: ' 2015contributors-conference-diversity8' + line 1543: ' 2015contributors-conference-diversity9' + line 1545: ' 2015cc_2' + line 1546: ' 2015cc_3' + line 1547: ' 2015cc_4' + line 1548: ' Woman expressively speaks into a microphone while two male collaborators' + line 1549: ' look on' + line 1550: ' 2015cc_5' + line 1551: ' 2015cc_6' + line 1553: ' Participants sit in a circle around a white board with sticky notes on it' + line 1554: ' while a female student speaks into a microphone' + line 1555: ' 2015cc_8' + line 1556: ' Participants sit around a table looking at each others laptops and compare' + line 1557: ' code' + line 1558: ' 2015cc_9' + line 1559: ' 2015cc_10' + line 1561: ' group of participants with laptops look at her powerpoint in a classroom' + line 1562: ' 2015cc_11' + line 1563: ' Woman speaks at a podium in an auditorium while three participants sit on' + line 1564: ' the stage and another three are skyping in on the stage screen' + line 1565: ' 2015cc_12' + line 1566: ' 2015cc_13' + line 1567: ' 2015cc_14' + line 1569: ' 2019contributors-conference-title' + line 1570: ' 2019contributors-conference-date' + line 1571: ' 2019contributors-conference1' + line 1572: ' 2019contributors-conference2' + line 1573: ' , advancing the code, documentation, and community outreach tools and' + line 1574: ' exploring the current landscape of the p5.js programming environment.' + line 1575: ' Comprising a diverse range of participants within the fields of creative' + line 1577: ' at fostering dialogue through a multidisciplinary lens. Working groups' + line 1578: ' focused on several topic areas' + line 1579: ' Landscape of Creative Tech; and Internationalization.' + line 1580: ' 2019contributors-conference3' + line 1581: ' 2019contributors-conference4' + line 1582: ' outputs' + line 1583: ' output1' + line 1585: ' octagon girds for p5.js. Created by Aren Davey.' + line 1586: ' output2' + line 1587: ' . A set of template files for building a multi-device, multiplayer game' + line 1588: ' where multiple clients can connect to a specified host page. Created by L05.' + line 1589: ' output3' + line 1590: ' output3-1' + line 1591: ' , testing early implementations of softCompile, OSC interfacing and added' + line 1592: ' connectivity with demo for MIDI setup. A p5.js collaborative live-coding vj' + line 1593: ' environment! Created by Ted Davis.' + line 1594: ' output4' + line 1595: ' A panel on Blackness and Gender in Virtual Space led by American Artist,' + line 1596: ' with shawné michaelain holloway and LaJuné McMillian.' + line 1597: ' output5' + line 1598: ' output6' + line 1599: ' output6-1' + line 1600: ' output6-2' + line 1601: ' output7' + line 1602: ' New art installations by Stalgia Grigg, LaJuné McMillian, Aatish Bhatia, and' + line 1603: ' Jon Chambers.' + line 1604: ' output8' + line 1605: ' output8-1' + line 1606: ' Created by Aarón Montoya-Moraga, Kenneth Lim, Guillermo Montecinos, Qianqian' + line 1607: ' Ye, Dorothy R. Santos, and Yasheng She.' + line 1608: ' output9' + line 1609: ' output9-1' + line 1610: ' output10' + line 1611: ' An overhaul of the p5.js website for accessibility. Including updates for' + line 1612: ' screen reader accessibility, and improvements to the home, download, getting' + line 1613: ' started, and reference pages. With contributions from Claire Kearney-Volpe,' + line 1614: ' Sina Bahram, Kate Hollenbach, Olivia Ross, Luis Morales-Navarro, Lauren' + line 1615: ' McCarthy, and Evelyn Masso.' + line 1616: ' output11' + line 1617: ' Collaborative performances by Luisa Pereira, Jun Shern Chan, Shefali Nayak,' + line 1618: ' Sona Lee, Ted Davis, and Carlos Garcia.' + line 1619: ' output12' + line 1620: ' output13' + line 1621: ' A design of the p5.js library system for the p5 Editor. Created by Cassie' + line 1622: ' Tarakajian and Luca Damasco.' + line 1623: ' output14' + line 1624: ' Prototypes connecting p5 to other libraries. Created by Alex Yixuan Xu and' + line 1625: ' Lauren Valley.' + line 1626: ' output15' + line 1627: ' 2019cc_1' + line 1628: ' 2019cc_2' + line 1629: ' 2019cc_3' + line 1630: ' 2019cc_4' + line 1631: ' 2019cc_5' + line 1632: ' 2019cc_6' + line 1633: ' 2019cc_7' line 1634: ' 2019cc_8' line 1635: ' 2019cc_9' line 1636: ' Participant speaks at a podium in front of projected text about the problem' @@ -5973,6 +4891,35 @@ zh-Hans: line 1663: ' Man sitting in front of the classroom speaking energetically into a' line 1664: ' microphone' line 1665: ' 2019cc_24' + line 1666: ' Group photo of participants smiling enthusiastically with their hands in the' + line 1667: ' air' + line 1668: ' 2019cc_25' + line 1712: ' books-title' + line 1713: ' book-1-title' + line 1714: ' book-1-authors' + line 1715: ' book-1-publisher' + line 1716: ' book-1-pages' + line 1717: ' book-1-type' + line 1718: ' book-1-description' + line 1719: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1720: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1721: ' using JavaScript and HTML.' + line 1722: ' book-1-order-a' + line 1723: ' book-1-order-b' + line 1724: ' book-2-title' + line 1725: ' book-2-authors' + line 1726: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' + line 1727: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' + line 1728: ' book-2-publisher' + line 1729: ' book-2-pages' + line 1730: ' book-2-type' + line 1731: ' book-2-description' + line 1732: ' Written by the lead p5.js developer and the founders of Processing, this' + line 1733: ' book provides an introduction to the creative possibilities of today''s Web,' + line 1734: ' using JavaScript and HTML.' + line 1735: ' book-2-order-a' + line 1736: ' book-2-order-b' + line 1737: ' book-3-title' line 1738: ' book-3-authors' line 1739: ' book-3-publisher' line 1740: ' book-3-pages' @@ -6001,6 +4948,12 @@ zh-Hans: line 1763: ' book-5-type' line 1764: ' book-5-description' line 1765: ' Learn coding from scratch in a highly engaging and visual manner using the' + line 1766: ' vastly popular JavaScript with the programming library p5.js. The skills you' + line 1767: ' will acquire from this book are highly transferable to a myriad of' + line 1768: ' industries and can be used towards building web applications, programmable' + line 1769: ' robots, or generative art.' + line 1770: ' book-5-order-a' + line 1771: ' book-5-order-b' line 1800: ' Examples' line 1801: ' back-examples' line 1802: ' Structure' @@ -6028,6 +4981,519 @@ zh-Hans: line 1824: ' Mobile' line 1825: ' Hello_P5' line 1829: ' Reference' + line 2005: ' showcase-title' + line 2006: ' showcase-intro1' + line 2007: ' showcase-intro2' + line 2008: ' showcase-intro3' + line 2009: ' We''re celebrating how people are using p5.js to make creative work,' + line 2010: ' learning, and open source more interesting and inclusive. Together, we make' + line 2011: ' community. During Summer 2019, we asked a few creators to share more about' + line 2012: ' how they''ve used p5.js through different projects and pieces.' + line 2013: ' showcase-intro4' + line 2014: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' + line 2015: ' p5.js work or your own to be featured here!' + line 2016: ' nominate-project' + line 2017: ' showcase-featuring' + line 2018: ' project-tag-art' + line 2019: ' project-tag-design' + line 2020: ' project-tag-code' + line 2021: ' project-tag-curriculum' + line 2022: ' project-tag-documentation' + line 2023: ' project-tag-game' + line 2024: ' project-tag-library' + line 2025: ' project-tag-organizing' + line 2026: ' project-tag-tool' + line 2027: ' project-tag-tutorial' + line 2028: ' project-roni' + line 2029: ' credit-roni' + line 2030: ' description-roni' + line 2031: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' + line 2032: ' plotter and pens.' + line 2033: ' project-phuong' + line 2034: ' credit-phuong' + line 2035: ' description-phuong' + line 2036: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' + line 2037: ' encourage people to get out of their comfort zone and feel more confident' + line 2038: ' about themselves regardless of what they do and how they look or sound.' + line 2039: ' project-daein' + line 2040: ' credit-daein' + line 2041: ' description-daein' + line 2042: ' An interactive typographic poster that uses a mobile device''s motion sensor' + line 2043: ' with p5.js.' + line 2044: ' project-qianqian' + line 2045: ' credit-qianqian' + line 2046: ' description-qianqian' + line 2047: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' + line 2048: ' and technology, including p5.js tutorials for beginners. Available on' + line 2049: ' YouTube, Instagram, Bilibili, and TikTok.' + line 2050: ' project-casey-louise' + line 2051: ' credit-casey-louise' + line 2052: ' description-casey-louise' + line 2053: ' project-moon-xin' + line 2054: ' credit-moon-xin' + line 2055: ' description-moon-xin' + line 2056: ' Browser-based moving posters that use graphical systems, transformation' + line 2057: ' methods, and p5.js to address the connotations of a word less than 8' + line 2058: ' letters. Designed by students for a graphic design course (Visual Narrative' + line 2059: ' Systems) at the University of Georgia.' + line 2060: ' created-by' + line 2061: ' pronouns-female' + line 2062: ' creator-from-roni-cantor' + line 2063: ' project-links' + line 2064: ' project-links-text-1-roni-cantor' + line 2065: ' project-links-text-2-roni-cantor' + line 2066: ' project-q-1-1' + line 2067: ' project-q-1-2' + line 2068: ' project-a-1-1-roni-cantor' + line 2069: ' I just graduated from Ryerson University''s New Media program. Coming from 4' + line 2070: ' years of coding and making robots, I decided to take a break and play with' + line 2071: ' some more traditional forms of art—while still coding and playing with' + line 2072: ' robots.' + line 2073: ' project-a-1-2-roni-cantor' + line 2074: ' project-a-1-3-roni-cantor' + line 2075: ' project-a-1-4-roni-cantor' + line 2076: ' project-q-2' + line 2077: ' project-a-2-1-roni-cantor' + line 2078: ' I used p5.js in this project to generate the sine wave and lerp (linear' + line 2079: ' interpolation) formulas and display the visuals in the' + line 2080: ' project-a-2-2-roni-cantor' + line 2081: ' . I then used a feature in my code that exported my programmed graphic into' + line 2082: ' an' + line 2083: ' project-a-2-3-roni-cantor' + line 2084: ' project-a-2-4-roni-cantor' + line 2085: ' —so that it understood where to draw the lines that I programmed. I sent' + line 2086: ' this information to the plotter with a program called' + line 2087: ' project-a-2-5-roni-cantor' + line 2088: ' project-q-3' + line 2089: ' project-a-3-roni-cantor' + line 2090: ' project-q-4' + line 2091: ' Did you face any challenges working on this project? If so, how did you' + line 2092: ' overcome them?' + line 2093: ' project-a-4-roni-cantor' + line 2094: ' It was my first time using p5.js, Inkscape, and a plotter! I really' + line 2095: ' benefited from the people around me who had used p5 before, as well as' + line 2096: ' online guides and forums.' + line 2097: ' project-q-5' + line 2098: ' project-a-5-roni-cantor' + line 2099: ' project-q-6' + line 2100: ' project-a-6-roni-cantor' + line 2101: ' project-resources' + line 2102: ' creator-from-qianqian' + line 2103: ' interview-link-qianqian' + line 2104: ' project-a-1-1-qianqian' + line 2105: ' project-a-1-2-qianqian' + line 2106: ' My partner introduced me to p5.js, which I learned mainly by watching free' + line 2107: ' online video tutorials. My first p5.js project was drawing some shapes with' + line 2108: ' different colors.' + line 2109: ' project-a-2-1-qianqian' + line 2110: ' This project started with an idea of teaching my mom, who lives in China and' + line 2111: ' doesn’t speak English, to code with p5.js. This project was difficult on' + line 2112: ' multiple levels, and I wanted to start by identifying the main reasons why' + line 2113: ' it’s more challenging for someone like my mother to learn to code—primarily' + line 2114: ' due to the lack of free creative coding education resources. Most of the' + line 2115: ' free resources to learn creative coding are unavailable in China. The p5.js' + line 2116: ' tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are' + line 2117: ' inaccessible in China because of internet censorship.' + line 2118: ' project-a-2-2-qianqian' + line 2119: ' project-a-2-3-qianqian' + line 2120: ' , but the more I watched coding tutorials online, the more I realized how' + line 2121: ' difficult it is to find other womxn and people of color teaching coding,' + line 2122: ' especially in Mandarin. I wanted to help other Chinese womxn relate to' + line 2123: ' creative coding.' + line 2124: ' project-a-2-4-qianqian' + line 2125: ' I am working on opening up the video channels to other Chinese creatives who' + line 2126: ' want to contribute to the educational resource together, like interviews and' + line 2127: ' guest tutorials. If you are interested in teaching/talking about creative' + line 2128: ' coding in Mandarin, HMU!' + line 2129: ' project-a-3-1-qianqian' + line 2130: ' project-a-3-2-qianqian' + line 2131: ' project-a-4-1-qianqian' + line 2132: ' Learning to code in a second language was difficult and the lack of' + line 2133: ' community made this process even harder. I hope to speak from my experience' + line 2134: ' as a beginner and someone who once felt like an outsider to the creative' + line 2135: ' coding and video tutorial world.' + line 2136: ' project-a-4-2-qianqian' + line 2137: ' I spend a lot of time researching the latest technology for my videos. In' + line 2138: ' the end, I decided on using my phone to record and iMovie to edit. I hope to' + line 2139: ' encourage others that it doesn’t take a lot of expensive gears to get' + line 2140: ' started making instructional videos.' + line 2141: ' project-a-4-3-qianqian' + line 2142: ' Another issue I came across was my own fear of putting myself online. I' + line 2143: ' first had to get over my anxiety of making mistakes in the videos or' + line 2144: ' receiving negative comments online. Often womxn and people of color are' + line 2145: ' targets for online harassment. I’m hoping to help set an example for other' + line 2146: ' womxn and people of color that it’s ok to put yourselves online and' + line 2147: ' strengthen your communities by sharing your knowledge. Eventually, we will' + line 2148: ' be able to stop online harassment by creating strong diverse communities.' + line 2149: ' project-a-5-1-qianqian' + line 2150: ' project-a-5-2-qianqian' + line 2151: ' creator-from-phuong' + line 2152: ' project-a-1-1-phuong' + line 2153: ' link-1-phuong' + line 2154: ' link-2-phuong' + line 2155: ' link-3-phuong' + line 2156: ' project-a-1-2-phuong' + line 2157: ' project-a-1-3-phuong' + line 2158: ' I was taking a course at the School of Machines in Berlin this summer' + line 2159: ' called! "' + line 2160: ' project-a-1-4-phuong' + line 2161: ' project-a-2-1-phuong' + line 2162: ' I used p5.js to work on the visual part of the game. The animation sprites' + line 2163: ' for Airi and the ghosts were drawn on an iPad app called' + line 2164: ' project-a-2-2-phuong' + line 2165: ' project-a-2-3-phuong' + line 2166: ' project-a-2-4-phuong' + line 2167: ' p5-sketch-by-chjno-phuong' + line 2168: ' project-a-2-5-phuong' + line 2169: ' . I set a condition so whenever the word "pew" or a mouse click was' + line 2170: ' detected, the scrolling speed would change to make an illusion of Airi' + line 2171: ' flying up. When the user does not do anything, the scrolling speed is' + line 2172: ' negative, which makes it look like Airi is falling down.' + line 2173: ' project-a-2-6-phuong' + line 2174: ' project-a-2-7-phuong' + line 2175: ' project-a-3-1-phuong' + line 2176: ' I really love how easily you can create, manipulate, and delete HTML blocks' + line 2177: ' and classes with the' + line 2178: ' project-a-3-2-phuong' + line 2179: ' project-a-3-3-phuong' + line 2180: ' project-a-3-4-phuong' + line 2181: ' project-a-4-1-phuong' + line 2182: ' There were a lot of challenges simply because p5.js was something new to me.' + line 2183: ' I did not work much with JavaScript in general before. Reading documentation' + line 2184: ' and searching for similar examples helped a lot.' + line 2185: ' project-a-5-1-phuong' + line 2186: ' school-of-machines-phuong' + line 2187: ' project-a-5-2-phuong' + line 2188: ' ! They try hard to connect the most creative people in the world and they do' + line 2189: ' it well so far. ❤️' + line 2190: ' pronouns-male' + line 2191: ' creator-from-chung' + line 2192: ' link-1-casey-louise' + line 2193: ' link-2-casey-louise' + line 2194: ' link-1-chung' + line 2195: ' link-2-chung' + line 2196: ' link-3-chung' + line 2197: ' project-a-1-1-chung' + line 2198: ' I am a graphic designer and a faculty member at Maryland Institute College' + line 2199: ' of Art, where I mainly teach coding (with p5.js and Processing, of course)' + line 2200: ' and motion graphics.' + line 2201: ' project-a-1-2-chung' + line 2202: ' project-a-1-3-chung' + line 2203: ' project-a-2-1-chung' + line 2204: ' This summer, I gave myself a challenge of making typographic posters with' + line 2205: ' coding, and this is one of the posters I made. I didn’t know until very' + line 2206: ' recently that I could use motion sensor data with p5.js. I was also watching' + line 2207: ' dan-shiffman-matterjs-tutorial' + line 2208: ' project-a-2-2-chung' + line 2209: ' project-a-3-1-chung' + line 2210: ' There are many things I love about p5.js such as the online community and' + line 2211: ' beginner friendliness. What I really like right now is the' + line 2212: ' project-a-3-2-chung' + line 2213: ' , with which I can not only work online for myself but also share URLs' + line 2214: ' quickly in the present mode. For this project in particular, I had to do a' + line 2215: ' lot of testing on my phone, and it was much easier and quicker than' + line 2216: ' committing to GitHub.' + line 2217: ' project-a-4-1-chung' + line 2218: ' project-a-4-2-chung' + line 2219: ' project-a-4-3-chung' + line 2220: ' project-a-5-1-chung' + line 2221: ' As mentioned above, if you want to render out frames and video files out of' + line 2222: ' p5.js sketches, check out my' + line 2223: ' project-a-5-2-chung' + line 2224: ' creator-from-casey-louise' + line 2225: ' project-a-1-1-casey-louise' + line 2226: ' Casey' + line 2227: ' interactive spaces, physical and digital.' + line 2228: ' project-a-1-2-casey-louise' + line 2229: ' Louise' + line 2230: ' interactive spaces based on sensor technologies.' + line 2231: ' project-a-1-3-casey-louise' + line 2232: ' Casey' + line 2233: ' I had been dabbling in' + line 2234: ' project-a-1-4-casey-louise' + line 2235: ' project-a-1-5-casey-louise' + line 2236: ' Louise' + line 2237: ' playful. I’m a C# programmer, so this was a good segway into JavaScript for' + line 2238: ' me.' + line 2239: ' project-a-2-1-casey-louise' + line 2240: ' Casey' + line 2241: ' curious if I could use them in p5.js. Then I heard about a grant for open' + line 2242: ' source, storytelling, and learning resource projects at ITP called' + line 2243: ' project-a-2-2-casey-louise' + line 2244: ' . Since I wasn''t finding much in the way of p5.js + shader documentation, I' + line 2245: ' decided to figure out how they''re implemented in p5.js and create a resource' + line 2246: ' for others to learn. When I told Louise about the project, she was' + line 2247: ' immediately excited about learning and teaching shaders in p5.js. She''s been' + line 2248: ' great about making sure the project is a learning resource and not just a' + line 2249: ' collection of examples.' + line 2250: ' project-a-3-1-casey-louise' + line 2251: ' project-a-3-2-casey-louise' + line 2252: ' project-a-3-3-casey-louise' + line 2253: ' project-a-3-4-casey-louise' + line 2254: ' project-a-3-5-casey-louise' + line 2255: ' project-a-4-1-casey-louise' + line 2256: ' Casey' + line 2257: ' reaching out to amazing people, asking questions, and asking for permission' + line 2258: ' to use their examples in our project.' + line 2259: ' adam-ferris-repo-casey-louise' + line 2260: ' project-a-4-2-casey-louise' + line 2261: ' project-a-4-3-casey-louise' + line 2262: ' project-a-4-4-casey-louise' + line 2263: ' webgl-casey-louise' + line 2264: ' project-a-4-5-casey-louise' + line 2265: ' project-a-4-6-casey-louise' + line 2266: ' Louise' + line 2267: ' Luckily, there were some very well-documented examples on GitHub by Adam' + line 2268: ' Ferriss. Our aim was to do so in a way that a complete beginner can' + line 2269: ' understand how to implement it, so it was as much a technical challenge as' + line 2270: ' it was a challenge in teaching code to strangers and beginners. Here we drew' + line 2271: ' inspiration from the way the' + line 2272: ' openframeworks-book-casey-louise' + line 2273: ' project-a-4-7-casey-louise' + line 2274: ' project-a-5-1-casey-louise' + line 2275: ' project-a-5-2-casey-louise' + line 2276: ' pronouns-nonbinary' + line 2277: ' creator-from-moon' + line 2278: ' posters-by' + line 2279: ' project-a-1-1-moon' + line 2280: ' Moon' + line 2281: ' summer, I taught a graphic design course in the University of Georgia' + line 2282: ' Cortona program in Italy, introducing some basics of p5.js. This fall, I am' + line 2283: ' planning to teach and to study digital platforms at UGA.' + line 2284: ' project-a-1-2-moon' + line 2285: ' project-a-1-3-moon' + line 2286: ' project-a-1-4-moon' + line 2287: ' pcd-la-moon' + line 2288: ' project-a-1-5-moon' + line 2289: ' . They helped me with the tools and logics of p5.js. It was an excellent' + line 2290: ' teaching and learning experience.' + line 2291: ' project-a-2-1-moon' + line 2292: ' codetrain-moon' + line 2293: ' project-a-2-2-moon' + line 2294: ' p5-reference-moon' + line 2295: ' project-a-2-3-moon' + line 2296: ' project-a-3-1-moon' + line 2297: ' project-a-3-2-moon' + line 2298: ' project-a-3-3-moon' + line 2299: ' project-a-3-4-moon' + line 2300: ' . I was able to use and to teach this tool to visualize various ideas about' + line 2301: ' time in motion.' + line 2302: ' project-a-4-1-moon' + line 2303: ' It was challenging for me, a beginner, to understand the overall structure' + line 2304: ' of p5.js and how code works in general. I had to repeat the p5.js basics a' + line 2305: ' couple of times, and then I drew a chart to memorize and to teach the way I' + line 2306: ' understood the p5.js structure and code with strong constraints I set up. It' + line 2307: ' was an excellent teaching and learning experience.' + line 2308: ' project-a-5-1-moon' + line 2309: ' project-a-5-2-moon' + line 2310: teach + line 2311: ' teach-title2' + line 2312: ' teach-intro1' + line 2313: ' Every teaching has its own unique goals, messages, conditions, and' + line 2314: ' environments. ' + line 2315: ' teach-intro2' + line 2316: ' By documenting and sharing p5 workshops, classes, and materials, we hope to' + line 2317: ' better connect the p5.js learner and educator communities around the world. ' + line 2318: ' teach-intro3' + line 2319: ' teach-intro4' + line 2320: ' teach-heading' + line 2321: ' teach-search-filter' + line 2322: ' teach-filter1' + line 2323: ' teach-filter1-label1' + line 2324: ' teach-filter1-label2' + line 2325: ' teach-filter1-label3' + line 2326: ' teach-filter1-label4' + line 2327: ' teach-filter1-label5' + line 2328: ' teach-filter1-label6' + line 2329: ' teach-filter1-label7' + line 2330: ' teach-filter1-label8' + line 2331: ' teach-filter1-label9' + line 2332: ' teach-filter1-label10' + line 2333: ' teach-filter1-label11' + line 2334: ' teach-filter1-label12' + line 2335: ' teach-filter1-label13' + line 2336: ' teach-filter1-label14' + line 2337: ' teach-filter1-label15' + line 2338: ' teach-filter1-label16' + line 2339: ' teach-filter2' + line 2340: ' teach-filter2-label1' + line 2341: ' teach-filter2-label2' + line 2342: ' teach-filter2-label3' + line 2343: ' teach-filter2-label4' + line 2344: ' teach-filter2-label5' + line 2345: ' teach-filter2-label6' + line 2346: ' teach-filter2-label7' + line 2347: ' teach-filter3' + line 2348: ' teach-filter4' + line 2349: ' teach-filter4-label1' + line 2350: ' teach-filter4-label2' + line 2351: ' teach-filter4-label3' + line 2352: ' teach-case-subtitle1' + line 2353: ' teach-case-subtitle2' + line 2354: ' teach-case-subtitle3' + line 2355: ' teach-case-subtitle4' + line 2356: ' teach-case-subtitle5' + line 2357: ' teach-case1-title' + line 2358: ' teach-case1-lead-name' + line 2359: ' teach-case1-content1' + line 2360: ' teach-case1-content1-1' + line 2361: ' teach-case1-content2' + line 2362: ' teach-case1-content3' + line 2363: ' teach-case1-content4' + line 2364: ' To introduce a new public to programming through fun and compelling' + line 2365: ' examples. ' + line 2366: ' teach-case1-content5' + line 2367: ' Method' + line 2368: ' each times. The students were using (Ubuntu) machines with the p5.js web' + line 2369: ' editor. I was teaching using a video projector as well as a board.' + line 2370: ' teach-case1-content5-1' + line 2371: ' Materials' + line 2372: ' links available in ' + line 2373: ' teach-case2-title' + line 2374: ' Making The Thing that Makes the Thing' + line 2375: ' with p5.js' + line 2376: ' teach-case2-lead-name' + line 2377: ' teach-case2-content1' + line 2378: ' teach-case2-content1-1' + line 2379: ' teach-case2-content2' + line 2380: ' Our participants included art/design students & professionals, creative' + line 2381: ' coding enthusiasts. We had close to 50 participants.' + line 2382: ' teach-case2-content3' + line 2383: ' teach-case2-content4' + line 2384: ' To explore generative art & design and recreate some classical works' + line 2385: ' with p5.js. ' + line 2386: ' teach-case2-content5' + line 2387: ' teach-case2-content5-1' + line 2388: ' teach-case2-content5-2' + line 2389: ' teach-case2-content5-3' + line 2390: ' teach-case2-content5-4' + line 2391: ' teach-case2-content5-5' + line 2392: ' teach-case3-title' + line 2393: ' teach-case3-lead-name' + line 2394: ' teach-case3-speech' + line 2395: ' teach-case3-content1' + line 2396: ' teach-case3-content1-1' + line 2397: ' teach-case3-content2' + line 2398: ' Our participants included art/design students & professionals, creative' + line 2399: ' coding enthusiasts. We had close to 50 participants.' + line 2400: ' teach-case3-content3' + line 2401: ' teach-case3-content4' + line 2402: ' To build a teacher and student community around p5 for middle and high' + line 2403: ' school.' + line 2404: ' teach-case3-content5' + line 2405: ' A half-day of workshop led by volunteer teachers. We saw lots of different' + line 2406: ' methods and materials. Most used some sort of slides or documentation, some' + line 2407: ' live coding using an editor, with work time for participant to remix.' + line 2408: ' teach-case3-content5-1' + line 2409: ' teach-case3-content5-2' + line 2410: ' teach-case3-content5-3' + line 2411: ' teach-case4-title' + line 2412: ' teach-case4-lead-name' + line 2413: ' teach-case4-speech' + line 2414: ' teach-case4-content1' + line 2415: ' teach-case4-content1-1' + line 2416: ' teach-case4-content2' + line 2417: ' I had around 16 students in the workshop, and a team including 3 people from' + line 2418: ' the PlusCode festival, and one person at the venue.' + line 2419: ' teach-case4-content3' + line 2420: ' teach-case4-content4' + line 2421: ' Introduction to beginners and artists of graphic web programming and open' + line 2422: ' source, using p5.js, in Spanish ' + line 2423: ' teach-case4-content5' + line 2424: ' teach-case4-content5-1' + line 2425: ' teach-case4-content5-2' + line 2426: ' teach-case4-content5-3' + line 2427: ' teach-case4-content5-4' + line 2428: ' teach-case5-title' + line 2429: ' teach-case5-lead-name' + line 2430: ' teach-case5-speech' + line 2431: ' My greatest source of uncertainty in developing the workshop was whether it' + line 2432: ' was trying to teach art to programmers or to teach programming to artists.' + line 2433: ' teach-case5-content1' + line 2434: ' teach-case5-content1-1' + line 2435: ' teach-case5-content1-2' + line 2436: ' teach-case5-content1-3' + line 2437: ' teach-case5-content2' + line 2438: ' teach-case5-content3' + line 2439: ' teach-case5-content4' + line 2440: ' To introduce p5.js to artists with little or no programming experience and' + line 2441: ' to suggest one way an analogue practice can migrate to a digital form.' + line 2442: ' teach-case5-content5' + line 2443: ' A printed workbook with activities that used the p5.js web editor to show' + line 2444: ' how translate an physical drawing into a digital drawing.' + line 2445: ' teach-case5-content5-1' + line 2446: ' teach-case5-content5-2' + line 2447: ' teach-case5-content5-3' + line 2448: ' teach-case6-title' + line 2449: ' teach-case6-lead-name' + line 2450: ' teach-case6-speech' + line 2451: ' I love p5.js because it''s so easy to read and write code in p5.js. Coding in' + line 2452: ' your everyday life!' + line 2453: ' teach-case6-content1' + line 2454: ' teach-case6-content1-1' + line 2455: ' teach-case6-content2' + line 2456: ' teach-case6-content3' + line 2457: ' teach-case6-content4' + line 2458: ' teach-case6-content5' + line 2459: ' teach-case6-content5-1' + line 2460: ' teach-case6-content5-2' + line 2461: ' teach-case6-content5-3' + line 2462: ' teach-case6-content5-4' + line 2463: ' teach-case6-content5-5' + line 2464: ' teach-case7-title' + line 2465: ' teach-case7-lead-name' + line 2466: ' teach-case7-speech' + line 2467: ' Coding in p5.js is a lot of fun. If you haven''t started yet, I encourage you' + line 2468: ' to give it a try!' + line 2469: ' teach-case7-content1' + line 2470: ' teach-case7-content1-1' + line 2471: ' teach-case7-content2' + line 2472: ' teach-case7-content3' + line 2473: ' teach-case7-content4' + line 2474: ' teach-case7-content5' + line 2475: ' teach-case7-content5-1' + line 2476: ' teach-case8-title' + line 2477: ' teach-case8-lead-name' + line 2478: ' teach-case8-content1' + line 2479: ' teach-case8-content1-1' + line 2480: ' teach-case8-content2' + line 2481: ' teach-case8-content3' + line 2482: ' teach-case8-content4' + line 2483: ' teach-case8-content5' + line 2484: ' teach-case8-content5-1' + line 2485: ' teach-case8-content5-2' + line 2486: ' teach-case9-title' + line 2487: ' teach-case9-lead-name' + line 2488: ' teach-case9-content1' + line 2489: ' teach-case9-content1-1' + line 2490: ' teach-case9-content2' + line 2491: ' Students at Interactive Telecommunications Program, New York University. 16' + line 2492: ' people.' + line 2493: ' teach-case9-content3' + line 2494: ' teach-case9-content4' + line 2495: ' The goal of this class is to learn and understand common machine learning' + line 2496: ' techniques and apply them to generate creative outputs in the browser using' + line 2497: ' ml5.js and p5.js.' + line 2498: ' teach-case9-content5' + line 2499: ' This class is a mix of lectures, coding sessions, group discussions, and' + line 2500: ' presentations. I used ' + line 2501: ' teach-case9-content5-1' + line 2502: ' teach-case9-content5-2' + line 2503: ' teach-case9-content5-3' + line 2504: ' teach-case10-title' + line 2505: ' teach-case10-lead-name' + line 2506: ' teach-case10-content1' + line 2507: ' teach-case10-content3' + line 2508: ' teach-case10-content4' + line 2509: ' Introduce learners (potentially with no coding experiences at all) to the' + line 2510: ' very basics of p5.js (and JavaScript), in order to encourage creative coding' + line 2511: ' and enable them to pursue own projects in a safe environment.' + line 2512: ' teach-case10-content5' + line 2513: ' p5.js source code (for the introductory project), JavaScript source code' + line 2514: ' (illustrating some basic JavaScript functionalities), accompanying slides in' + line 2515: ' .pdf format, all hosted publicly on GitHub. ' + line 2516: ' teach-case10-content5-1' + line 2517: ' teach-case10-content5-2' line 2518: ' teach-case11-title' line 2519: ' teach-case11-lead-name' line 2520: ' teach-case11-content1' @@ -6050,224 +5516,27 @@ zh-Hans: line 2537: ' teach-case12-title' line 2538: ' teach-case12-lead-name' line 2539: ' teach-case12-speech' + line 2540: ' I''m working on a new series of coding class for Disabled students in South' + line 2541: ' Korea. I''m researching about the pedagogy and translation. I plan to hold' + line 2542: ' workshops in December 2020. The project is supported by the Open Society' + line 2543: ' Foundation Human Rights Initiative and Korea Disability Arts & Culture' + line 2544: ' Center.' + line 2545: ' teach-case12-content1' + line 2546: ' teach-case12-content1-1' + line 2547: ' teach-case12-content2' + line 2548: ' teach-case12-content3' + line 2549: ' teach-case12-content4' + line 2550: ' To help Deaf and Hard of Hearing students learn about computer programming' + line 2551: ' through playful exercises. To make ASL tutorial of basic coding concepts.' + line 2552: ' teach-case12-content5' + line 2553: ' We used p5.js Web editor and code examples on the website. We also used' + line 2554: ' dice, playing cards and various paper tools to help students learn about' + line 2555: ' coding concepts.' + line 2556: ' teach-case12-content5-1' + line 2557: ' teach-case12-content5-2' line 598: ' color-custom-ranges-li1x2' line 601: ' color-custom-ranges-li2x2' line 604: ' color-custom-ranges-li3x2' - line 728: ' learn-title' - line 1091: <<<<<<< HEAD - line 1099: '=======' - line 1100: ' Libraries' - line 1101: ' core-libraries' - line 1102: ' community-libraries' - line 1103: ' libraries-created-by' - line 1104: ' p5.sound' - line 1105: ' p5.sound extends p5 with Web Audio functionality including audio input,' - line 1106: ' playback, analysis and synthesis.' - line 1107: ' p5.accessibility' - line 1108: ' p5.accessibility makes the p5 canvas more accessible to people who are blind' - line 1109: ' and visually impaired.' - line 1110: ' asciiart' - line 1111: ' p5.asciiart is a simple and easy to use image - to - ASCII art converter for' - line 1112: ' p5js.' - line 1113: ' p5.ble' - line 1114: ' A Javascript library that enables communication between BLE devices and p5' - line 1115: ' sketches.' - line 1116: ' p5.bots' - line 1117: ' With p5.bots you can interact with your Arduino (or other microprocessor)' - line 1118: ' from within the browser. Use sensor data to drive a sketch; use a sketch to' - line 1119: ' drive LEDs, motors, and more!' - line 1120: ' p5.clickable' - line 1121: ' p5.cmyk.js' - line 1122: ' p5.collide2D' - line 1135: ' p5.func' - line 1136: ' p5.func is a p5 extension that provides new objects and utilities for' - line 1137: ' function generation in the time, frequency, and spatial domains.' - line 1138: ' p5.geolocation' - line 1139: ' p5.geolocation provides techniques for acquiring, watching, calculating, and' - line 1140: ' geofencing user locations for p5.js.' - line 1141: ' p5.gibber' - line 1142: ' grafica.js' - line 1143: ' grafica.js lets you add simple but highly configurable 2D plots to your' - line 1144: ' p5.js sketches.' - line 1145: ' p5.gui' - line 1146: ' p5.localmessage' - line 1374: ' community-title' - line 1375: ' community-statement-title' - line 1376: ' community-statement1' - line 1377: ' p5.js is a community interested in exploring the creation of art and design' - line 1378: ' with technology.' - line 1379: ' community-statement2' - line 1380: ' We are a community of, and in solidarity with, people from every gender' - line 1381: ' identity and expression, sexual orientation, race, ethnicity, language,' - line 1382: ' neuro-type, size, ability, class, religion, culture, subculture, political' - line 1383: ' opinion, age, skill level, occupation, and background. We acknowledge that' - line 1384: ' not everyone has the time, financial means, or capacity to actively' - line 1385: ' participate, but we recognize and encourage involvement of all kinds. We' - line 1386: ' facilitate and foster access and empowerment. We are all learners.' - line 1387: ' community-statement3' - line 1388: ' We like these hashtags' - line 1389: ' efficiency), #newKidLove (because we all started somewhere), #unassumeCore' - line 1390: ' (because we don''t assume knowledge), and #BlackLivesMatter (because of' - line 1391: ' course).' - line 1392: ' in-practice-title' - line 1393: ' in-practice1' - line 1394: ' in-practice2' - line 1395: ' We insist on actively engaging with requests for feedback regardless of' - line 1396: ' their complexity.' - line 1397: ' in-practice3' - line 1398: ' We welcome newcomers and prioritize the education of others. We strive to' - line 1399: ' approach all tasks with the enthusiasm of a newcomer. Because we believe' - line 1400: ' that newcomers are just as valuable in this effort as experts.' - line 1401: ' in-practice4' - line 1402: ' We consistently make the effort to actively recognize and validate multiple' - line 1403: ' types of contributions.' - line 1404: ' in-practice5' - line 1405: ' in-times-conflict-title' - line 1406: ' in-times-conflict1' - line 1407: ' in-times-conflict2' - line 1408: ' in-times-conflict3' - line 1409: ' We admit when we''re wrong, apologize, and accept responsibility for our' - line 1410: ' actions.' - line 1411: ' in-times-conflict4' - line 1412: ' in-times-conflict5' - line 1413: ' in-times-conflict6' - line 1414: ' in-times-conflict7' - line 1415: ' in-the-future-title' - line 1416: ' in-the-future1' - line 1417: ' notes-title' - line 1418: ' notes1' - line 1419: ' notes2' - line 1669: ' book-1-publisher' - line 1670: ' book-1-pages' - line 1671: ' book-1-type' - line 1672: ' book-1-description' - line 1673: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1674: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1675: ' using JavaScript and HTML.' - line 1676: ' book-1-order-a' - line 1677: ' book-1-order-b' - line 1678: ' book-2-title' - line 1679: ' book-2-authors' - line 1680: ' Lauren McCarthy, Casey Reas, and Ben Fry. Translated by Aarón' - line 1681: ' Montoya-Moraga. Ilustraciones de Taeyoon Choi.' - line 1682: ' book-2-publisher' - line 1683: ' book-2-pages' - line 1684: ' book-2-type' - line 1685: ' book-2-description' - line 1686: ' Written by the lead p5.js developer and the founders of Processing, this' - line 1687: ' book provides an introduction to the creative possibilities of today''s Web,' - line 1688: ' using JavaScript and HTML.' - line 1689: ' book-2-order-a' - line 1690: ' book-2-order-b' - line 1691: ' book-3-title' - line 1692: ' book-3-authors' - line 1693: ' book-3-publisher' - line 1694: ' book-3-pages' - line 1695: ' book-3-type' - line 1696: ' book-3-description' - line 1697: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1698: ' can create everything from interactive typography and textiles to 3D-printed' - line 1699: ' furniture to complex and elegant infographics.' - line 1700: ' book-3-order-a' - line 1701: ' book-3-order-b' - line 1702: ' book-4-title' - line 1703: ' book-4-authors' - line 1704: ' book-4-publisher' - line 1705: ' book-4-pages' - line 1706: ' book-4-type' - line 1707: ' book-4-description' - line 1708: ' By using simple languages such as JavaScript in p5.js, artists and makers' - line 1709: ' can create everything from interactive typography and textiles to 3D-printed' - line 1710: ' furniture to complex and elegant infographics.' - line 1711: ' book-4-order-a' - line 1772: ' Control' - line 1773: ' Image' - line 1774: ' Color' - line 1775: ' Math' - line 1776: ' Simulate' - line 1777: ' Interaction' - line 1778: ' Objects' - line 1779: ' Lights' - line 1780: ' Motion' - line 1781: ' Instance_Mode' - line 1782: ' Dom' - line 1783: ' Drawing' - line 1784: ' Transform' - line 1785: ' Typography' - line 1786: ' 3D' - line 1787: ' Input' - line 1788: ' Advanced_Data' - line 1789: ' Sound' - line 1790: ' Mobile' - line 1791: ' Hello_P5' - line 1795: ' Reference' - line 1948: ' showcase-title' - line 1949: ' showcase-intro1' - line 1950: ' showcase-intro2' - line 1951: ' showcase-intro3' - line 1952: ' We''re celebrating how people are using p5.js to make creative work,' - line 1953: ' learning, and open source more interesting and inclusive. Together, we make' - line 1954: ' community. During Summer 2019, we asked a few creators to share more about' - line 1955: ' how they''ve used p5.js through different projects and pieces.' - line 1956: ' showcase-intro4' - line 1957: ' The Summer 2020 Showcase is now open for submissions, nominate someone''s' - line 1958: ' p5.js work or your own to be featured here!' - line 1959: ' nominate-project' - line 1960: ' showcase-featuring' - line 1961: ' project-tag-art' - line 1962: ' project-tag-design' - line 1963: ' project-tag-code' - line 1964: ' project-tag-curriculum' - line 1965: ' project-tag-documentation' - line 1966: ' project-tag-game' - line 1967: ' project-tag-library' - line 1968: ' project-tag-organizing' - line 1969: ' project-tag-tool' - line 1970: ' project-tag-tutorial' - line 1971: ' project-roni' - line 1972: ' credit-roni' - line 1973: ' description-roni' - line 1974: ' Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a' - line 1975: ' plotter and pens.' - line 1976: ' project-phuong' - line 1977: ' credit-phuong' - line 1978: ' description-phuong' - line 1979: ' In this game developed with p5.play, help Airi fly by saying PEW. Created to' - line 1980: ' encourage people to get out of their comfort zone and feel more confident' - line 1981: ' about themselves regardless of what they do and how they look or sound.' - line 1982: ' project-daein' - line 1983: ' credit-daein' - line 1984: ' description-daein' - line 1985: ' An interactive typographic poster that uses a mobile device''s motion sensor' - line 1986: ' with p5.js.' - line 1987: ' project-qianqian' - line 1988: ' credit-qianqian' - line 1989: ' description-qianqian' - line 1990: ' A video channel with 1-minute videos in Mandarin about creative coding, art,' - line 1991: ' and technology, including p5.js tutorials for beginners. Available on' - line 1992: ' YouTube, Instagram, Bilibili, and TikTok.' - line 1993: ' project-casey-louise' - line 1994: ' credit-casey-louise' - line 1995: ' description-casey-louise' - line 1996: ' project-moon-xin' - line 1997: ' credit-moon-xin' - line 1998: ' description-moon-xin' - line 1999: ' Browser-based moving posters that use graphical systems, transformation' - line 2000: ' methods, and p5.js to address the connotations of a word less than 8' - line 2001: ' letters. Designed by students for a graphic design course (Visual Narrative' - line 2002: ' Systems) at the University of Georgia.' - line 2003: ' created-by' - line 2004: ' pronouns-female' - line 2609: ' teach-case17-title' - line 2610: ' teach-case17-lead-name' - line 2611: ' teach-case17-speech' - line 2612: ' The course is part of the extension courses on the trans-departmental area of multimedia arts of National University of the Arts in Argentina.' - line 2613: ' teach-case17-content1' - line 2614: ' teach-case17-content1-1' - line 2615: ' teach-case17-content2' - line 2616: ' teach-case17-content3' - line 2617: ' teach-case17-content4' - line 2618: ' The course is intended for artists who want to start using current technological tools for the development of their works. It can also be used by those who want to get started in computer programming through a simple, visual, accessible and fun programming environment.' - line 2619: ' teach-case17-content5' - line 2620: ' p5.js web editor. Online through Zoom platform and material uploaded in Moodle.' - line 2621: ' teach-case17-content5-1' + line 424: ' with p5.js.' + line 433: ' presentations. I used' + line 84: ' copyright1' \ No newline at end of file diff --git a/offline-reference/extra/index.html b/offline-reference/extra/index.html index d75e35e200..a4ce20e8f7 100644 --- a/offline-reference/extra/index.html +++ b/offline-reference/extra/index.html @@ -52,10 +52,10 @@

diff --git a/package-lock.json b/package-lock.json index 8610c677a7..fdda768ede 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,44 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@fluent/syntax": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.17.0.tgz", + "integrity": "sha512-fgJNUZRBk/n5MO5AxZ7Vvv8aCzMF6NanGBS1GFR2HG2lnsGqHLAe9OeHpyg+FkKfP5SvOtbyk3Nkza5iIwN/Ug==", + "dev": true + }, + "@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "requires": { + "debug": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -3029,6 +3067,16 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -3114,20 +3162,22 @@ }, "dependencies": { "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true } } @@ -3139,9 +3189,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001019", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz", - "integrity": "sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g==", + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true }, "caseless": { @@ -3452,13 +3502,13 @@ } }, "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dev": true, "requires": { "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-string": "^1.5.4" } }, "color-convert": { @@ -3477,15 +3527,21 @@ "dev": true }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", @@ -3949,13 +4005,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.5.tgz", - "integrity": "sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { + "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", + "js-yaml": "^3.13.1", "parse-json": "^4.0.0" }, "dependencies": { @@ -4067,9 +4124,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -4116,12 +4173,6 @@ "source-map": "^0.6.1" } }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, "css-what": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", @@ -4129,19 +4180,19 @@ "dev": true }, "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, @@ -4184,9 +4235,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -4206,9 +4257,9 @@ } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -4239,7 +4290,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" }, "dependencies": { @@ -4281,9 +4332,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -4361,9 +4412,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -4389,12 +4440,30 @@ "dev": true }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + } } }, "cssom": { @@ -5060,12 +5129,20 @@ "dev": true }, "dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } } }, "download": { @@ -5136,10 +5213,13 @@ } }, "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", + "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } }, "electron-to-chromium": { "version": "1.3.52", @@ -5444,6 +5524,12 @@ "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6574,6 +6660,35 @@ "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", "dev": true }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -6877,21 +6992,21 @@ "dev": true }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "dependencies": { "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true } } @@ -7055,6 +7170,17 @@ } } }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-object": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/get-object/-/get-object-0.2.0.tgz", @@ -7117,9 +7243,9 @@ } }, "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", "dev": true }, "getpass": { @@ -7583,9 +7709,9 @@ } }, "grunt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz", - "integrity": "sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", + "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", "dev": true, "requires": { "dateformat": "~3.0.3", @@ -7593,10 +7719,10 @@ "exit": "~0.1.2", "findup-sync": "~0.3.0", "glob": "~7.1.6", - "grunt-cli": "~1.3.2", - "grunt-known-options": "~1.1.0", + "grunt-cli": "~1.4.3", + "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.0", + "grunt-legacy-util": "~2.0.1", "iconv-lite": "~0.4.13", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", @@ -7630,9 +7756,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -7778,16 +7904,16 @@ } }, "grunt-cli": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz", - "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", "dev": true, "requires": { - "grunt-known-options": "~1.1.0", + "grunt-known-options": "~2.0.0", "interpret": "~1.1.0", - "liftoff": "~2.5.0", + "liftup": "~3.0.1", "nopt": "~4.0.1", - "v8flags": "~3.1.1" + "v8flags": "~3.2.0" }, "dependencies": { "nopt": { @@ -8074,9 +8200,9 @@ } }, "grunt-known-options": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", "dev": true }, "grunt-legacy-log": { @@ -8111,9 +8237,9 @@ } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -8153,29 +8279,50 @@ } }, "grunt-legacy-util": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.0.tgz", - "integrity": "sha512-ZEmYFB44bblwPE2oz3q3ygfF6hseQja9tx8I3UZIwbUik32FMWewA+d1qSFicMFB+8dNXDkh35HcDCWlpRsGlA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", "dev": true, "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", "hooker": "~0.2.3", - "lodash": "~4.17.20", + "lodash": "~4.17.21", "underscore.string": "~3.3.5", - "which": "~1.3.0" + "which": "~2.0.2" }, "dependencies": { + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, "requires": { - "sprintf-js": "^1.0.3", + "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -8509,9 +8656,9 @@ } }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -8521,22 +8668,12 @@ "wordwrap": "^1.0.0" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, "uglify-js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz", - "integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==", + "version": "3.13.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz", + "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==", "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3" - } + "optional": true } } }, @@ -8921,7 +9058,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true + "dev": true, + "optional": true }, "html-encoding-sniffer": { "version": "1.0.2", @@ -9270,9 +9408,9 @@ } }, "imagemin-pngquant": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-9.0.1.tgz", - "integrity": "sha512-PYyo9G/xwddf+Qqlqe3onz5ZH7p6vHYVVkiuuczUjxZmfekyY77RXaOA/AR6FnVoeQxGa/pDtEK5xUKOcVo+sA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-9.0.2.tgz", + "integrity": "sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==", "dev": true, "requires": { "execa": "^4.0.0", @@ -9916,6 +10054,15 @@ "rgba-regex": "^1.0.0" } }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -10265,15 +10412,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -10384,6 +10522,75 @@ "is-object": "^1.0.1" } }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-docblock": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", @@ -10501,13 +10708,13 @@ "dev": true }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "jsprim": { @@ -10609,331 +10816,100 @@ "type-check": "~0.3.2" } }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", "dev": true, "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "is-extglob": "^2.1.1" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "is-number": "^7.0.0" } } } @@ -11814,9 +11790,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash._arrayfilter": { @@ -12569,12 +12545,6 @@ "object-visit": "^1.0.0" } }, - "marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", - "dev": true - }, "match-file": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/match-file/-/match-file-0.2.2.tgz", @@ -12863,9 +12833,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mixin-deep": { @@ -12924,9 +12894,9 @@ "optional": true }, "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", "dev": true }, "morgan": { @@ -13164,9 +13134,9 @@ "dev": true }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "next-tick": { @@ -13217,21 +13187,10 @@ } }, "node-releases": { - "version": "1.1.44", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.44.tgz", - "integrity": "sha512-NwbdvJyR7nrcGrXvKAvzc5raj/NkoJudkarh2yIpJ4t0NH4aqjUDz/486P+ynIW5eokKOfzGNRdYoLfBlomruw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true }, "noncharacters": { "version": "1.1.0", @@ -13633,7 +13592,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -14042,9 +14001,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-root": { @@ -14549,15 +14508,14 @@ } }, "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" }, "dependencies": { "ansi-styles": { @@ -14598,9 +14556,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14609,9 +14567,9 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, "supports-color": { @@ -14648,14 +14606,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -14681,9 +14641,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -14693,9 +14653,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14762,9 +14722,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14830,9 +14790,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14898,9 +14858,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -14966,9 +14926,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15034,9 +14994,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15105,9 +15065,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15150,14 +15110,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -15183,9 +15145,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -15195,9 +15157,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15206,12 +15168,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -15275,9 +15237,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15346,9 +15308,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15391,14 +15353,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -15424,9 +15388,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -15436,9 +15400,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15507,9 +15471,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15518,12 +15482,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -15586,9 +15550,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15656,9 +15620,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15727,9 +15691,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15798,9 +15762,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15868,9 +15832,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15938,9 +15902,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -15980,14 +15944,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -16013,9 +15979,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -16025,9 +15991,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16096,9 +16062,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16165,9 +16131,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16235,9 +16201,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16278,14 +16244,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -16311,9 +16279,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -16323,9 +16291,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16394,9 +16362,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16416,23 +16384,21 @@ } }, "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -16476,9 +16442,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16546,9 +16512,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -16720,10 +16686,13 @@ "dev": true }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", - "dev": true + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "querystring": { "version": "0.2.0", @@ -16958,12 +16927,12 @@ } }, "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "^1.9.0" } }, "redent": { @@ -17994,9 +17963,9 @@ "optional": true }, "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", "dev": true, "requires": { "to-object-path": "^0.3.0" @@ -18070,6 +18039,25 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + } + } + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -18090,9 +18078,9 @@ "optional": true }, "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "dev": true, "optional": true, "requires": { @@ -18121,21 +18109,23 @@ } }, "simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.5.0.tgz", + "integrity": "sha512-fZsaq5nzdxQRhMNs6ESGLpMUHoL5GRP+boWPhq9pMYMKwOGZV2jHOxi8AbFFA2Y/6u4kR99HoULizSbpzaODkA==", "dev": true, "requires": { - "debug": "^4.0.1" + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.3" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -18870,14 +18860,16 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "chalk": { @@ -18903,9 +18895,9 @@ } }, "electron-to-chromium": { - "version": "1.3.327", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz", - "integrity": "sha512-DNMd91VtKt44LIkFtpICxAWu/GSGFLUMDM/kFINJ3Oe47OimSnbMvO3ChkUCdUyit+pRdhdCcM3+i5bpli5gqg==", + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, "has-flag": { @@ -18915,9 +18907,9 @@ "dev": true }, "postcss": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", - "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -18926,12 +18918,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -20124,9 +20116,9 @@ } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -20283,9 +20275,9 @@ "dev": true }, "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -20308,9 +20300,9 @@ } }, "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "verbalize": { @@ -20706,9 +20698,9 @@ "dev": true }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 81a56887a2..d82d62c726 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "languages": [ "en", "es", + "hi", "ko", "zh-Hans" ], @@ -38,20 +39,22 @@ } ], "devDependencies": { + "@fluent/syntax": "^0.17.0", "assemble": "^0.24.3", "assemble-contrib-i18n": "^0.1.6", "assemble-contrib-permalinks": "*", "autoprefixer": "^6.7.7", - "cssnano": "^4.1.10", - "ejs": "^2.7.4", + "cssnano": "^4.1.11", + "ejs": "^3.1.7", "eslint": "^4.19.1", "eslint-config-prettier": "^2.10.0", "eslint-plugin-prettier": "^2.7.0", "flat": "^5.0.2", - "fs-extra": "^9.0.1", - "grunt": "^1.3.0", + "fs-extra": "^9.1.0", + "glob": "^5.0.15", + "grunt": "^1.5.3", "grunt-assemble": "^0.6.3", - "grunt-cli": "^1.3.2", + "grunt-cli": "^1.4.3", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-compress": "^1.6.0", "grunt-contrib-concat": "^1.0.1", @@ -69,25 +72,25 @@ "grunt-serve": "^0.1.6", "grunt-shell": "^3.0.1", "grunt-uncss": "^0.8.6", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "husky": "^0.14.3", "imagemin-mozjpeg": "^9.0.0", - "imagemin-pngquant": "^9.0.1", + "imagemin-pngquant": "^9.0.2", "js-yaml": "^3.14.1", "lint-staged": "^9.5.0", "load-grunt-tasks": "^5.1.0", - "lodash": "^4.17.20", - "marked": "^0.8.2", - "moment": "^2.29.1", + "lodash": "^4.17.21", + "mkdirp": "^0.5.5", + "moment": "^2.29.2", "ms": "^0.7.3", "prettier": "^1.19.1", - "qs": "^6.9.4", + "qs": "^6.10.1", "send": "^0.16.2", "serve-index": "^1.9.1", - "simple-git": "^1.132.0", + "simple-git": "^3.5.0", "time-grunt": "^1.4.0", "uglify-js": "^2.8.29", - "yaml": "^1.10.0" + "yaml": "^1.10.2" }, "dependencies": { "upath": "^1.2.0" diff --git a/pontoon-config.toml b/pontoon-config.toml new file mode 100644 index 0000000000..7ff80e8c69 --- /dev/null +++ b/pontoon-config.toml @@ -0,0 +1,11 @@ +basepath = "./src/data" + +locales = [ + "es", + "ko", + "zh-CN" +] + +[[paths]] + reference = "localization/en/**" + l10n = "localization/{locale}/**" \ No newline at end of file diff --git a/src/assets/contributor-docs/index.html b/src/assets/contributor-docs/index.html index 7a4cc1a12c..cd7da0d55c 100644 --- a/src/assets/contributor-docs/index.html +++ b/src/assets/contributor-docs/index.html @@ -6,6 +6,8 @@ + + diff --git a/src/assets/css/main.css b/src/assets/css/main.css index 9fe1ee9d43..7c25cd2a2e 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -444,12 +444,13 @@ textarea { #get-started-page .edit_space { position: relative; order: 3; + margin-bottom: 4.8125em; } #get-started-page .edit_space .copy_button{ color: #2d7bb6; border-color: rgba(45, 123, 182, 0.25); float: right; - margin: 0.5em 0 0 0.5em; + margin: 1.5em 0 1.5em 0.5em; background: rgba(255, 255, 255, 0.7); position: absolute; z-index: 2; @@ -661,6 +662,9 @@ div.reference-subgroup { width: 30.5em; padding-top: 1.5rem; display: none; + font-family: monospace; + padding: 1.5em 0.5em 0.5em 0.5em; + font-size: 15pt; } .display_button { @@ -919,6 +923,11 @@ h3 { list-style: disc; } +#libraries-page .label h3{ + background-color: black; + padding:0px 5px; +} + #learn-page .label .nounderline img { height: fit-content; } @@ -2712,6 +2721,7 @@ iframe { pointer-events: none; } + /* variations for asterisks on pages */ .separator-design-element { @@ -2786,6 +2796,12 @@ iframe { -o-transform: rotate(-21deg); transform: rotate(-21deg); } +@media(max-width:1352px){ + #reference-page #asterisk-design-element, + #download-page #asterisk-design-element{ + display: none !important; + } +} .email-octopus-email-address { color: #ed225d; diff --git a/src/assets/img/libraries/.DS_Store b/src/assets/img/libraries/.DS_Store index f26b3ebed1..daf2f4b41f 100644 Binary files a/src/assets/img/libraries/.DS_Store and b/src/assets/img/libraries/.DS_Store differ diff --git a/src/assets/img/libraries/CO2Budget.js.jpg b/src/assets/img/libraries/CO2Budget.js.jpg new file mode 100644 index 0000000000..9ca0e3f806 Binary files /dev/null and b/src/assets/img/libraries/CO2Budget.js.jpg differ diff --git a/src/assets/img/libraries/Concave_Hull.jpg b/src/assets/img/libraries/Concave_Hull.jpg new file mode 100644 index 0000000000..72af271ca5 Binary files /dev/null and b/src/assets/img/libraries/Concave_Hull.jpg differ diff --git a/src/assets/img/libraries/I_AM_UI.jpg b/src/assets/img/libraries/I_AM_UI.jpg new file mode 100644 index 0000000000..10e30ec3ae Binary files /dev/null and b/src/assets/img/libraries/I_AM_UI.jpg differ diff --git a/src/assets/img/libraries/P5.Create.jpg b/src/assets/img/libraries/P5.Create.jpg new file mode 100644 index 0000000000..a14cbb8576 Binary files /dev/null and b/src/assets/img/libraries/P5.Create.jpg differ diff --git a/src/assets/img/libraries/P5.slides.jpg b/src/assets/img/libraries/P5.slides.jpg new file mode 100644 index 0000000000..1393e1713a Binary files /dev/null and b/src/assets/img/libraries/P5.slides.jpg differ diff --git a/src/assets/img/libraries/TiledPlay.jpg b/src/assets/img/libraries/TiledPlay.jpg new file mode 100644 index 0000000000..517090d7ea Binary files /dev/null and b/src/assets/img/libraries/TiledPlay.jpg differ diff --git a/src/assets/img/libraries/TurtleGFX.jpg b/src/assets/img/libraries/TurtleGFX.jpg new file mode 100644 index 0000000000..c8732b5141 Binary files /dev/null and b/src/assets/img/libraries/TurtleGFX.jpg differ diff --git a/src/assets/img/libraries/WEBMIDI.js.jpg b/src/assets/img/libraries/WEBMIDI.js.jpg new file mode 100644 index 0000000000..99bb4855d4 Binary files /dev/null and b/src/assets/img/libraries/WEBMIDI.js.jpg differ diff --git a/src/assets/img/libraries/c2.js.jpg b/src/assets/img/libraries/c2.js.jpg new file mode 100644 index 0000000000..b83f7d7f99 Binary files /dev/null and b/src/assets/img/libraries/c2.js.jpg differ diff --git a/src/assets/img/libraries/numero.jpg b/src/assets/img/libraries/numero.jpg new file mode 100644 index 0000000000..43de75f08b Binary files /dev/null and b/src/assets/img/libraries/numero.jpg differ diff --git a/src/assets/img/libraries/p5.Framebuffer.jpg b/src/assets/img/libraries/p5.Framebuffer.jpg new file mode 100644 index 0000000000..4b4843306d Binary files /dev/null and b/src/assets/img/libraries/p5.Framebuffer.jpg differ diff --git a/src/assets/img/libraries/p5.PatGrad.jpg b/src/assets/img/libraries/p5.PatGrad.jpg new file mode 100644 index 0000000000..4505829bca Binary files /dev/null and b/src/assets/img/libraries/p5.PatGrad.jpg differ diff --git a/src/assets/img/libraries/p5.Polar.jpg b/src/assets/img/libraries/p5.Polar.jpg new file mode 100644 index 0000000000..dde3ed7e40 Binary files /dev/null and b/src/assets/img/libraries/p5.Polar.jpg differ diff --git a/src/assets/img/libraries/p5.animS.jpg b/src/assets/img/libraries/p5.animS.jpg new file mode 100644 index 0000000000..2c15a882ac Binary files /dev/null and b/src/assets/img/libraries/p5.animS.jpg differ diff --git a/src/assets/img/libraries/p5.bezier.jpg b/src/assets/img/libraries/p5.bezier.jpg new file mode 100644 index 0000000000..cedfe36547 Binary files /dev/null and b/src/assets/img/libraries/p5.bezier.jpg differ diff --git a/src/assets/img/libraries/p5.button.jpg b/src/assets/img/libraries/p5.button.jpg new file mode 100644 index 0000000000..4411a33419 Binary files /dev/null and b/src/assets/img/libraries/p5.button.jpg differ diff --git a/src/assets/img/libraries/p5.buttons.jpg b/src/assets/img/libraries/p5.buttons.jpg new file mode 100644 index 0000000000..03ee0784be Binary files /dev/null and b/src/assets/img/libraries/p5.buttons.jpg differ diff --git a/src/assets/img/libraries/p5.capture.jpg b/src/assets/img/libraries/p5.capture.jpg new file mode 100644 index 0000000000..97089ccace Binary files /dev/null and b/src/assets/img/libraries/p5.capture.jpg differ diff --git a/src/assets/img/libraries/p5.fab.jpg b/src/assets/img/libraries/p5.fab.jpg new file mode 100644 index 0000000000..b798f4d418 Binary files /dev/null and b/src/assets/img/libraries/p5.fab.jpg differ diff --git a/src/assets/img/libraries/p5.glitch.jpg b/src/assets/img/libraries/p5.glitch.jpg new file mode 100644 index 0000000000..45e128a82f Binary files /dev/null and b/src/assets/img/libraries/p5.glitch.jpg differ diff --git a/src/assets/img/libraries/p5.input.jpg b/src/assets/img/libraries/p5.input.jpg new file mode 100644 index 0000000000..01d6e643dc Binary files /dev/null and b/src/assets/img/libraries/p5.input.jpg differ diff --git a/src/assets/img/libraries/p5.j5.jpg b/src/assets/img/libraries/p5.j5.jpg new file mode 100644 index 0000000000..4f8afa48ea Binary files /dev/null and b/src/assets/img/libraries/p5.j5.jpg differ diff --git a/src/assets/img/libraries/p5.jacdac.jpg b/src/assets/img/libraries/p5.jacdac.jpg new file mode 100644 index 0000000000..fe9cbd2a04 Binary files /dev/null and b/src/assets/img/libraries/p5.jacdac.jpg differ diff --git a/src/assets/img/libraries/p5.joystick.jpg b/src/assets/img/libraries/p5.joystick.jpg new file mode 100644 index 0000000000..da7fbb4814 Binary files /dev/null and b/src/assets/img/libraries/p5.joystick.jpg differ diff --git a/src/assets/img/libraries/p5.mapper.jpg b/src/assets/img/libraries/p5.mapper.jpg new file mode 100644 index 0000000000..6511b5ee01 Binary files /dev/null and b/src/assets/img/libraries/p5.mapper.jpg differ diff --git a/src/assets/img/libraries/p5.math.js.jpg b/src/assets/img/libraries/p5.math.js.jpg new file mode 100644 index 0000000000..cfd871994d Binary files /dev/null and b/src/assets/img/libraries/p5.math.js.jpg differ diff --git a/src/assets/img/libraries/p5.party.jpg b/src/assets/img/libraries/p5.party.jpg new file mode 100644 index 0000000000..7dc94979fc Binary files /dev/null and b/src/assets/img/libraries/p5.party.jpg differ diff --git a/src/assets/img/libraries/p5.pattern.jpg b/src/assets/img/libraries/p5.pattern.jpg new file mode 100644 index 0000000000..90e37fa560 Binary files /dev/null and b/src/assets/img/libraries/p5.pattern.jpg differ diff --git a/src/assets/img/libraries/p5.projection.jpg b/src/assets/img/libraries/p5.projection.jpg new file mode 100644 index 0000000000..ae6c7eabe4 Binary files /dev/null and b/src/assets/img/libraries/p5.projection.jpg differ diff --git a/src/assets/img/libraries/p5.quadrille.js.jpg b/src/assets/img/libraries/p5.quadrille.js.jpg new file mode 100644 index 0000000000..8dfe7af7eb Binary files /dev/null and b/src/assets/img/libraries/p5.quadrille.js.jpg differ diff --git a/src/assets/img/libraries/p5.recorder.jpg b/src/assets/img/libraries/p5.recorder.jpg new file mode 100644 index 0000000000..e869eefea9 Binary files /dev/null and b/src/assets/img/libraries/p5.recorder.jpg differ diff --git a/src/assets/img/libraries/p5.serial.jpg b/src/assets/img/libraries/p5.serialport.jpg similarity index 100% rename from src/assets/img/libraries/p5.serial.jpg rename to src/assets/img/libraries/p5.serialport.jpg diff --git a/src/assets/img/libraries/p5.teach.jpg b/src/assets/img/libraries/p5.teach.jpg new file mode 100644 index 0000000000..74e4f92ad5 Binary files /dev/null and b/src/assets/img/libraries/p5.teach.jpg differ diff --git a/src/assets/img/libraries/p5.timer.jpg b/src/assets/img/libraries/p5.timer.jpg new file mode 100644 index 0000000000..2d7c882ec1 Binary files /dev/null and b/src/assets/img/libraries/p5.timer.jpg differ diff --git a/src/assets/img/libraries/p5.tween.jpg b/src/assets/img/libraries/p5.tween.jpg new file mode 100644 index 0000000000..71f82c0833 Binary files /dev/null and b/src/assets/img/libraries/p5.tween.jpg differ diff --git a/src/assets/img/libraries/p5.videorecorder.jpg b/src/assets/img/libraries/p5.videorecorder.jpg new file mode 100644 index 0000000000..0b555ac186 Binary files /dev/null and b/src/assets/img/libraries/p5.videorecorder.jpg differ diff --git a/src/assets/img/libraries/p5.wasm.core.jpg b/src/assets/img/libraries/p5.wasm.core.jpg new file mode 100644 index 0000000000..32ca58c37e Binary files /dev/null and b/src/assets/img/libraries/p5.wasm.core.jpg differ diff --git a/src/assets/img/libraries/p5.wasm.jpg b/src/assets/img/libraries/p5.wasm.jpg new file mode 100644 index 0000000000..a9b6aa664a Binary files /dev/null and b/src/assets/img/libraries/p5.wasm.jpg differ diff --git a/src/assets/img/libraries/p5.web-serial.jpg b/src/assets/img/libraries/p5.web-serial.jpg new file mode 100644 index 0000000000..92bdfb24d3 Binary files /dev/null and b/src/assets/img/libraries/p5.web-serial.jpg differ diff --git a/src/assets/img/libraries/p5.webserial.jpg b/src/assets/img/libraries/p5.webserial.jpg new file mode 100644 index 0000000000..7e03ccae2e Binary files /dev/null and b/src/assets/img/libraries/p5.webserial.jpg differ diff --git a/src/assets/img/libraries/p5LiveMedia.jpg b/src/assets/img/libraries/p5LiveMedia.jpg new file mode 100644 index 0000000000..57c0254a63 Binary files /dev/null and b/src/assets/img/libraries/p5LiveMedia.jpg differ diff --git a/src/assets/img/libraries/p5snap.jpg b/src/assets/img/libraries/p5snap.jpg new file mode 100644 index 0000000000..1dea29a1ea Binary files /dev/null and b/src/assets/img/libraries/p5snap.jpg differ diff --git a/src/assets/img/libraries/pdl.library.jpg b/src/assets/img/libraries/pdl.library.jpg new file mode 100644 index 0000000000..36c2432079 Binary files /dev/null and b/src/assets/img/libraries/pdl.library.jpg differ diff --git a/src/assets/img/libraries/physics.diagram.lannguage.jpg b/src/assets/img/libraries/physics.diagram.lannguage.jpg new file mode 100644 index 0000000000..36c2432079 Binary files /dev/null and b/src/assets/img/libraries/physics.diagram.lannguage.jpg differ diff --git a/src/assets/img/libraries/quadrille - Pierre Charalambos.jpg b/src/assets/img/libraries/quadrille - Pierre Charalambos.jpg new file mode 100644 index 0000000000..8dfe7af7eb Binary files /dev/null and b/src/assets/img/libraries/quadrille - Pierre Charalambos.jpg differ diff --git a/src/assets/img/libraries/react-p5.jpg b/src/assets/img/libraries/react-p5.jpg new file mode 100644 index 0000000000..0367a196a9 Binary files /dev/null and b/src/assets/img/libraries/react-p5.jpg differ diff --git a/src/assets/img/libraries/simple.js.jpg b/src/assets/img/libraries/simple.js.jpg new file mode 100644 index 0000000000..c29a595da0 Binary files /dev/null and b/src/assets/img/libraries/simple.js.jpg differ diff --git a/src/assets/js/examples.js b/src/assets/js/examples.js index fc46c38ca5..a6837add4b 100644 --- a/src/assets/js/examples.js +++ b/src/assets/js/examples.js @@ -68,7 +68,7 @@ var examples = { // render? var norender = data.indexOf('@norender') !== -1; - // parse and set name and description + // parse and set name, aria label, and description var metaReg = new RegExp('\\* ', 'g'); var spaceReg = new RegExp(' ', 'g'); @@ -77,6 +77,11 @@ var examples = { var name = startName !== 5 ? data.substring(startName, endName) : ''; + var startAriaLabel = data.indexOf("@arialabel")+11; + var endAriaLabel = data.indexOf("\n", startAriaLabel); + + var ariaLabel = startAriaLabel !== 10 ? data.substring(startAriaLabel, endAriaLabel) : ''; + var startDesc = data.indexOf("@description")+13; var endDesc = data.indexOf("*/", startDesc); @@ -85,6 +90,7 @@ var examples = { $('#example-name').html(name); $('#example-desc').html(desc); + $('#exampleFrame').attr("aria-label", ariaLabel); // strip description and set code var ind = data.indexOf('*/'); diff --git a/src/assets/js/p5.min.js b/src/assets/js/p5.min.js index 275116f49b..71c70ca2b3 100644 --- a/src/assets/js/p5.min.js +++ b/src/assets/js/p5.min.js @@ -1,3 +1,3 @@ -/*! p5.js v1.1.9 July 22, 2020 */ +/*! p5.js v1.4.2 July 21, 2022 */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).p5=e()}}(function(){return function o(i,s,l){function p(t,e){if(!s[t]){if(!i[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var a=s[t]={exports:{}};i[t][0].call(a.exports,function(e){return p(i[t][1][e]||e)},a,a.exports,o,i,s,l)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;ep5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},blue:{name:"blue",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},brightness:{name:"brightness",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},color:{name:"color",class:"p5",module:"Color",overloads:[{params:[{name:"gray",description:"

number specifying value between white and black.

\n",type:"Number"},{name:"alpha",description:"

alpha value relative to current color range\n (default is 0-255)

\n",type:"Number",optional:!0}]},{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"value",description:"

a color string

\n",type:"String"}]},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}]},{params:[{name:"color",description:"",type:"p5.Color"}]}]},green:{name:"green",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},hue:{name:"hue",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},lerpColor:{name:"lerpColor",params:[{name:"c1",description:"

interpolate from this color

\n",type:"p5.Color"},{name:"c2",description:"

interpolate to this color

\n",type:"p5.Color"},{name:"amt",description:"

number between 0 and 1

\n",type:"Number"}],class:"p5",module:"Color"},lightness:{name:"lightness",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},red:{name:"red",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},saturation:{name:"saturation",params:[{name:"color",description:'

p5.Color object, color components,\n or CSS color

\n',type:"p5.Color|Number[]|String"}],class:"p5",module:"Color"},background:{name:"background",class:"p5",module:"Color",overloads:[{params:[{name:"color",description:'

any value created by the color() function

\n',type:"p5.Color"}],chainable:1},{params:[{name:"colorstring",description:"

color string, possible formats include: integer\n rgb() or rgba(), percentage rgb() or rgba(),\n 3-digit hex, 6-digit hex

\n",type:"String"},{name:"a",description:"

opacity of the background relative to current\n color range (default is 0-255)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"gray",description:"

specifies a value between white and black

\n",type:"Number"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"v1",description:"

red or hue value (depending on the current color\n mode)

\n",type:"Number"},{name:"v2",description:"

green or saturation value (depending on the current\n color mode)

\n",type:"Number"},{name:"v3",description:"

blue or brightness value (depending on the current\n color mode)

\n",type:"Number"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red, green, blue\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"image",description:'

image created with loadImage() or createImage(),\n to set as background\n (must be same size as the sketch window)

\n',type:"p5.Image"},{name:"a",description:"",type:"Number",optional:!0}],chainable:1}]},clear:{name:"clear",class:"p5",module:"Color"},colorMode:{name:"colorMode",class:"p5",module:"Color",overloads:[{params:[{name:"mode",description:"

either RGB, HSB or HSL, corresponding to\n Red/Green/Blue and Hue/Saturation/Brightness\n (or Lightness)

\n",type:"Constant"},{name:"max",description:"

range for all values

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"mode",description:"",type:"Constant"},{name:"max1",description:"

range for the red or hue depending on the\n current color mode

\n",type:"Number"},{name:"max2",description:"

range for the green or saturation depending\n on the current color mode

\n",type:"Number"},{name:"max3",description:"

range for the blue or brightness/lightness\n depending on the current color mode

\n",type:"Number"},{name:"maxA",description:"

range for the alpha

\n",type:"Number",optional:!0}],chainable:1}]},fill:{name:"fill",class:"p5",module:"Color",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the fill color

\n",type:"p5.Color"}],chainable:1}]},noFill:{name:"noFill",class:"p5",module:"Color"},noStroke:{name:"noStroke",class:"p5",module:"Color"},stroke:{name:"stroke",class:"p5",module:"Color",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the stroke color

\n",type:"p5.Color"}],chainable:1}]},erase:{name:"erase",params:[{name:"strengthFill",description:"

A number (0-255) for the strength of erasing for a shape's fill.\n This will default to 255 when no argument is given, which\n is full strength.

\n",type:"Number",optional:!0},{name:"strengthStroke",description:"

A number (0-255) for the strength of erasing for a shape's stroke.\n This will default to 255 when no argument is given, which\n is full strength.

\n",type:"Number",optional:!0}],class:"p5",module:"Color"},noErase:{name:"noErase",class:"p5",module:"Color"},arc:{name:"arc",params:[{name:"x",description:"

x-coordinate of the arc's ellipse

\n",type:"Number"},{name:"y",description:"

y-coordinate of the arc's ellipse

\n",type:"Number"},{name:"w",description:"

width of the arc's ellipse by default

\n",type:"Number"},{name:"h",description:"

height of the arc's ellipse by default

\n",type:"Number"},{name:"start",description:"

angle to start the arc, specified in radians

\n",type:"Number"},{name:"stop",description:"

angle to stop the arc, specified in radians

\n",type:"Number"},{name:"mode",description:"

optional parameter to determine the way of drawing\n the arc. either CHORD, PIE or OPEN

\n",type:"Constant",optional:!0},{name:"detail",description:"

optional parameter for WebGL mode only. This is to\n specify the number of vertices that makes up the\n perimeter of the arc. Default value is 25.

\n",type:"Number",optional:!0}],class:"p5",module:"Shape"},ellipse:{name:"ellipse",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the center of ellipse.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the center of ellipse.

\n",type:"Number"},{name:"w",description:"

width of the ellipse.

\n",type:"Number"},{name:"h",description:"

height of the ellipse.

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"w",description:"",type:"Number"},{name:"h",description:"",type:"Number"},{name:"detail",description:"

number of radial sectors to draw (for WebGL mode)

\n",type:"Integer"}]}]},circle:{name:"circle",params:[{name:"x",description:"

x-coordinate of the centre of the circle.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the centre of the circle.

\n",type:"Number"},{name:"d",description:"

diameter of the circle.

\n",type:"Number"}],class:"p5",module:"Shape"},line:{name:"line",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

the x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

the y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

the x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

the y-coordinate of the second point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

the z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

the z-coordinate of the second point

\n",type:"Number"}],chainable:1}]},point:{name:"point",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

the x-coordinate

\n",type:"Number"},{name:"y",description:"

the y-coordinate

\n",type:"Number"},{name:"z",description:"

the z-coordinate (for WebGL mode)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"coordinate_vector",description:"

the coordinate vector

\n",type:"p5.Vector"}],chainable:1}]},quad:{name:"quad",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

the x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

the y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

the x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

the y-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"

the x-coordinate of the third point

\n",type:"Number"},{name:"y3",description:"

the y-coordinate of the third point

\n",type:"Number"},{name:"x4",description:"

the x-coordinate of the fourth point

\n",type:"Number"},{name:"y4",description:"

the y-coordinate of the fourth point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

the z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

the z-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

the z-coordinate of the third point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

the z-coordinate of the fourth point

\n",type:"Number"}],chainable:1}]},rect:{name:"rect",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the rectangle.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the rectangle.

\n",type:"Number"},{name:"w",description:"

width of the rectangle.

\n",type:"Number"},{name:"h",description:"

height of the rectangle.

\n",type:"Number",optional:!0},{name:"tl",description:"

optional radius of top-left corner.

\n",type:"Number",optional:!0},{name:"tr",description:"

optional radius of top-right corner.

\n",type:"Number",optional:!0},{name:"br",description:"

optional radius of bottom-right corner.

\n",type:"Number",optional:!0},{name:"bl",description:"

optional radius of bottom-left corner.

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"w",description:"",type:"Number"},{name:"h",description:"",type:"Number"},{name:"detailX",description:"

number of segments in the x-direction (for WebGL mode)

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments in the y-direction (for WebGL mode)

\n",type:"Integer",optional:!0}],chainable:1}]},square:{name:"square",params:[{name:"x",description:"

x-coordinate of the square.

\n",type:"Number"},{name:"y",description:"

y-coordinate of the square.

\n",type:"Number"},{name:"s",description:"

side size of the square.

\n",type:"Number"},{name:"tl",description:"

optional radius of top-left corner.

\n",type:"Number",optional:!0},{name:"tr",description:"

optional radius of top-right corner.

\n",type:"Number",optional:!0},{name:"br",description:"

optional radius of bottom-right corner.

\n",type:"Number",optional:!0},{name:"bl",description:"

optional radius of bottom-left corner.

\n",type:"Number",optional:!0}],class:"p5",module:"Shape"},triangle:{name:"triangle",params:[{name:"x1",description:"

x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

y-coordinate of the second point

\n",type:"Number"},{name:"x3",description:"

x-coordinate of the third point

\n",type:"Number"},{name:"y3",description:"

y-coordinate of the third point

\n",type:"Number"}],class:"p5",module:"Shape"},ellipseMode:{name:"ellipseMode",params:[{name:"mode",description:"

either CENTER, RADIUS, CORNER, or CORNERS

\n",type:"Constant"}],class:"p5",module:"Shape"},noSmooth:{name:"noSmooth",class:"p5",module:"Shape"},rectMode:{name:"rectMode",params:[{name:"mode",description:"

either CORNER, CORNERS, CENTER, or RADIUS

\n",type:"Constant"}],class:"p5",module:"Shape"},smooth:{name:"smooth",class:"p5",module:"Shape"},strokeCap:{name:"strokeCap",params:[{name:"cap",description:"

either ROUND, SQUARE or PROJECT

\n",type:"Constant"}],class:"p5",module:"Shape"},strokeJoin:{name:"strokeJoin",params:[{name:"join",description:"

either MITER, BEVEL, ROUND

\n",type:"Constant"}],class:"p5",module:"Shape"},strokeWeight:{name:"strokeWeight",params:[{name:"weight",description:"

the weight of the stroke (in pixels)

\n",type:"Number"}],class:"p5",module:"Shape"},bezier:{name:"bezier",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

x-coordinate for the first anchor point

\n",type:"Number"},{name:"y1",description:"

y-coordinate for the first anchor point

\n",type:"Number"},{name:"x2",description:"

x-coordinate for the first control point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second control point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the second anchor point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the second anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate for the first anchor point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the second anchor point

\n",type:"Number"}],chainable:1}]},bezierDetail:{name:"bezierDetail",params:[{name:"detail",description:"

resolution of the curves

\n",type:"Number"}],class:"p5",module:"Shape"},bezierPoint:{name:"bezierPoint",params:[{name:"a",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first control point

\n",type:"Number"},{name:"c",description:"

coordinate of second control point

\n",type:"Number"},{name:"d",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},bezierTangent:{name:"bezierTangent",params:[{name:"a",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first control point

\n",type:"Number"},{name:"c",description:"

coordinate of second control point

\n",type:"Number"},{name:"d",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},curve:{name:"curve",class:"p5",module:"Shape",overloads:[{params:[{name:"x1",description:"

x-coordinate for the beginning control point

\n",type:"Number"},{name:"y1",description:"

y-coordinate for the beginning control point

\n",type:"Number"},{name:"x2",description:"

x-coordinate for the first point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the ending control point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the ending control point

\n",type:"Number"}],chainable:1},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate for the beginning control point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first point

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second point

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the ending control point

\n",type:"Number"}],chainable:1}]},curveDetail:{name:"curveDetail",params:[{name:"resolution",description:"

resolution of the curves

\n",type:"Number"}],class:"p5",module:"Shape"},curveTightness:{name:"curveTightness",params:[{name:"amount",description:"

amount of deformation from the original vertices

\n",type:"Number"}],class:"p5",module:"Shape"},curvePoint:{name:"curvePoint",params:[{name:"a",description:"

coordinate of first control point of the curve

\n",type:"Number"},{name:"b",description:"

coordinate of first point

\n",type:"Number"},{name:"c",description:"

coordinate of second point

\n",type:"Number"},{name:"d",description:"

coordinate of second control point

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},curveTangent:{name:"curveTangent",params:[{name:"a",description:"

coordinate of first control point

\n",type:"Number"},{name:"b",description:"

coordinate of first point on the curve

\n",type:"Number"},{name:"c",description:"

coordinate of second point on the curve

\n",type:"Number"},{name:"d",description:"

coordinate of second conrol point

\n",type:"Number"},{name:"t",description:"

value between 0 and 1

\n",type:"Number"}],class:"p5",module:"Shape"},beginContour:{name:"beginContour",class:"p5",module:"Shape"},beginShape:{name:"beginShape",params:[{name:"kind",description:"

either POINTS, LINES, TRIANGLES, TRIANGLE_FAN\n TRIANGLE_STRIP, QUADS, QUAD_STRIP or TESS

\n",type:"Constant",optional:!0}],class:"p5",module:"Shape"},bezierVertex:{name:"bezierVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x2",description:"

x-coordinate for the first control point

\n",type:"Number"},{name:"y2",description:"

y-coordinate for the first control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the second control point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the second control point

\n",type:"Number"},{name:"x4",description:"

x-coordinate for the anchor point

\n",type:"Number"},{name:"y4",description:"

y-coordinate for the anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate for the first control point (for WebGL mode)

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the second control point (for WebGL mode)

\n",type:"Number"},{name:"x4",description:"",type:"Number"},{name:"y4",description:"",type:"Number"},{name:"z4",description:"

z-coordinate for the anchor point (for WebGL mode)

\n",type:"Number"}],chainable:1}]},curveVertex:{name:"curveVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the vertex

\n",type:"Number"},{name:"y",description:"

y-coordinate of the vertex

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"

z-coordinate of the vertex (for WebGL mode)

\n",type:"Number",optional:!0}],chainable:1}]},endContour:{name:"endContour",class:"p5",module:"Shape"},endShape:{name:"endShape",params:[{name:"mode",description:"

use CLOSE to close the shape

\n",type:"Constant",optional:!0}],class:"p5",module:"Shape"},quadraticVertex:{name:"quadraticVertex",class:"p5",module:"Shape",overloads:[{params:[{name:"cx",description:"

x-coordinate for the control point

\n",type:"Number"},{name:"cy",description:"

y-coordinate for the control point

\n",type:"Number"},{name:"x3",description:"

x-coordinate for the anchor point

\n",type:"Number"},{name:"y3",description:"

y-coordinate for the anchor point

\n",type:"Number"}],chainable:1},{params:[{name:"cx",description:"",type:"Number"},{name:"cy",description:"",type:"Number"},{name:"cz",description:"

z-coordinate for the control point (for WebGL mode)

\n",type:"Number"},{name:"x3",description:"",type:"Number"},{name:"y3",description:"",type:"Number"},{name:"z3",description:"

z-coordinate for the anchor point (for WebGL mode)

\n",type:"Number"}],chainable:1}]},vertex:{name:"vertex",class:"p5",module:"Shape",overloads:[{params:[{name:"x",description:"

x-coordinate of the vertex

\n",type:"Number"},{name:"y",description:"

y-coordinate of the vertex

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"

z-coordinate of the vertex

\n",type:"Number"},{name:"u",description:"

the vertex's texture u-coordinate

\n",type:"Number",optional:!0},{name:"v",description:"

the vertex's texture v-coordinate

\n",type:"Number",optional:!0}],chainable:1}]},P2D:{name:"P2D",class:"p5",module:"Constants"},WEBGL:{name:"WEBGL",class:"p5",module:"Constants"},ARROW:{name:"ARROW",class:"p5",module:"Constants"},CROSS:{name:"CROSS",class:"p5",module:"Constants"},HAND:{name:"HAND",class:"p5",module:"Constants"},MOVE:{name:"MOVE",class:"p5",module:"Constants"},TEXT:{name:"TEXT",class:"p5",module:"Constants"},WAIT:{name:"WAIT",class:"p5",module:"Constants"},HALF_PI:{name:"HALF_PI",class:"p5",module:"Constants"},PI:{name:"PI",class:"p5",module:"Constants"},QUARTER_PI:{name:"QUARTER_PI",class:"p5",module:"Constants"},TAU:{name:"TAU",class:"p5",module:"Constants"},TWO_PI:{name:"TWO_PI",class:"p5",module:"Constants"},DEGREES:{name:"DEGREES",class:"p5",module:"Constants"},RADIANS:{name:"RADIANS",class:"p5",module:"Constants"},CORNER:{name:"CORNER",class:"p5",module:"Constants"},CORNERS:{name:"CORNERS",class:"p5",module:"Constants"},RADIUS:{name:"RADIUS",class:"p5",module:"Constants"},RIGHT:{name:"RIGHT",class:"p5",module:"Constants"},LEFT:{name:"LEFT",class:"p5",module:"Constants"},CENTER:{name:"CENTER",class:"p5",module:"Constants"},TOP:{name:"TOP",class:"p5",module:"Constants"},BOTTOM:{name:"BOTTOM",class:"p5",module:"Constants"},BASELINE:{name:"BASELINE",class:"p5",module:"Constants"},POINTS:{name:"POINTS",class:"p5",module:"Constants"},LINES:{name:"LINES",class:"p5",module:"Constants"},LINE_STRIP:{name:"LINE_STRIP",class:"p5",module:"Constants"},LINE_LOOP:{name:"LINE_LOOP",class:"p5",module:"Constants"},TRIANGLES:{name:"TRIANGLES",class:"p5",module:"Constants"},TRIANGLE_FAN:{name:"TRIANGLE_FAN",class:"p5",module:"Constants"},TRIANGLE_STRIP:{name:"TRIANGLE_STRIP",class:"p5",module:"Constants"},QUADS:{name:"QUADS",class:"p5",module:"Constants"},QUAD_STRIP:{name:"QUAD_STRIP",class:"p5",module:"Constants"},TESS:{name:"TESS",class:"p5",module:"Constants"},CLOSE:{name:"CLOSE",class:"p5",module:"Constants"},OPEN:{name:"OPEN",class:"p5",module:"Constants"},CHORD:{name:"CHORD",class:"p5",module:"Constants"},PIE:{name:"PIE",class:"p5",module:"Constants"},PROJECT:{name:"PROJECT",class:"p5",module:"Constants"},SQUARE:{name:"SQUARE",class:"p5",module:"Constants"},ROUND:{name:"ROUND",class:"p5",module:"Constants"},BEVEL:{name:"BEVEL",class:"p5",module:"Constants"},MITER:{name:"MITER",class:"p5",module:"Constants"},RGB:{name:"RGB",class:"p5",module:"Constants"},HSB:{name:"HSB",class:"p5",module:"Constants"},HSL:{name:"HSL",class:"p5",module:"Constants"},AUTO:{name:"AUTO",class:"p5",module:"Constants"},ALT:{name:"ALT",class:"p5",module:"Constants"},BACKSPACE:{name:"BACKSPACE",class:"p5",module:"Constants"},CONTROL:{name:"CONTROL",class:"p5",module:"Constants"},DELETE:{name:"DELETE",class:"p5",module:"Constants"},DOWN_ARROW:{name:"DOWN_ARROW",class:"p5",module:"Constants"},ENTER:{name:"ENTER",class:"p5",module:"Constants"},ESCAPE:{name:"ESCAPE",class:"p5",module:"Constants"},LEFT_ARROW:{name:"LEFT_ARROW",class:"p5",module:"Constants"},OPTION:{name:"OPTION",class:"p5",module:"Constants"},RETURN:{name:"RETURN",class:"p5",module:"Constants"},RIGHT_ARROW:{name:"RIGHT_ARROW",class:"p5",module:"Constants"},SHIFT:{name:"SHIFT",class:"p5",module:"Constants"},TAB:{name:"TAB",class:"p5",module:"Constants"},UP_ARROW:{name:"UP_ARROW",class:"p5",module:"Constants"},BLEND:{name:"BLEND",class:"p5",module:"Constants"},REMOVE:{name:"REMOVE",class:"p5",module:"Constants"},ADD:{name:"ADD",class:"p5",module:"Constants"},DARKEST:{name:"DARKEST",class:"p5",module:"Constants"},LIGHTEST:{name:"LIGHTEST",class:"p5",module:"Constants"},DIFFERENCE:{name:"DIFFERENCE",class:"p5",module:"Constants"},SUBTRACT:{name:"SUBTRACT",class:"p5",module:"Constants"},EXCLUSION:{name:"EXCLUSION",class:"p5",module:"Constants"},MULTIPLY:{name:"MULTIPLY",class:"p5",module:"Constants"},SCREEN:{name:"SCREEN",class:"p5",module:"Constants"},REPLACE:{name:"REPLACE",class:"p5",module:"Constants"},OVERLAY:{name:"OVERLAY",class:"p5",module:"Constants"},HARD_LIGHT:{name:"HARD_LIGHT",class:"p5",module:"Constants"},SOFT_LIGHT:{name:"SOFT_LIGHT",class:"p5",module:"Constants"},DODGE:{name:"DODGE",class:"p5",module:"Constants"},BURN:{name:"BURN",class:"p5",module:"Constants"},THRESHOLD:{name:"THRESHOLD",class:"p5",module:"Constants"},GRAY:{name:"GRAY",class:"p5",module:"Constants"},OPAQUE:{name:"OPAQUE",class:"p5",module:"Constants"},INVERT:{name:"INVERT",class:"p5",module:"Constants"},POSTERIZE:{name:"POSTERIZE",class:"p5",module:"Constants"},DILATE:{name:"DILATE",class:"p5",module:"Constants"},ERODE:{name:"ERODE",class:"p5",module:"Constants"},BLUR:{name:"BLUR",class:"p5",module:"Constants"},NORMAL:{name:"NORMAL",class:"p5",module:"Constants"},ITALIC:{name:"ITALIC",class:"p5",module:"Constants"},BOLD:{name:"BOLD",class:"p5",module:"Constants"},BOLDITALIC:{name:"BOLDITALIC",class:"p5",module:"Constants"},LINEAR:{name:"LINEAR",class:"p5",module:"Constants"},QUADRATIC:{name:"QUADRATIC",class:"p5",module:"Constants"},BEZIER:{name:"BEZIER",class:"p5",module:"Constants"},CURVE:{name:"CURVE",class:"p5",module:"Constants"},STROKE:{name:"STROKE",class:"p5",module:"Constants"},FILL:{name:"FILL",class:"p5",module:"Constants"},TEXTURE:{name:"TEXTURE",class:"p5",module:"Constants"},IMMEDIATE:{name:"IMMEDIATE",class:"p5",module:"Constants"},IMAGE:{name:"IMAGE",class:"p5",module:"Constants"},NEAREST:{name:"NEAREST",class:"p5",module:"Constants"},REPEAT:{name:"REPEAT",class:"p5",module:"Constants"},CLAMP:{name:"CLAMP",class:"p5",module:"Constants"},MIRROR:{name:"MIRROR",class:"p5",module:"Constants"},LANDSCAPE:{name:"LANDSCAPE",class:"p5",module:"Constants"},PORTRAIT:{name:"PORTRAIT",class:"p5",module:"Constants"},GRID:{name:"GRID",class:"p5",module:"Constants"},AXES:{name:"AXES",class:"p5",module:"Constants"},print:{name:"print",params:[{name:"contents",description:"

any combination of Number, String, Object, Boolean,\n Array to print

\n",type:"Any"}],class:"p5",module:"Environment"},frameCount:{name:"frameCount",class:"p5",module:"Environment"},deltaTime:{name:"deltaTime",class:"p5",module:"Environment"},focused:{name:"focused",class:"p5",module:"Environment"},cursor:{name:"cursor",params:[{name:"type",description:"

Built-In: either ARROW, CROSS, HAND, MOVE, TEXT and WAIT\n Native CSS properties: 'grab', 'progress', 'cell' etc.\n External: path for cursor's images\n (Allowed File extensions: .cur, .gif, .jpg, .jpeg, .png)\n For more information on Native CSS cursors and url visit:\n https://developer.mozilla.org/en-US/docs/Web/CSS/cursor

\n",type:"String|Constant"},{name:"x",description:"

the horizontal active spot of the cursor (must be less than 32)

\n",type:"Number",optional:!0},{name:"y",description:"

the vertical active spot of the cursor (must be less than 32)

\n",type:"Number",optional:!0}],class:"p5",module:"Environment"},frameRate:{name:"frameRate",class:"p5",module:"Environment",overloads:[{params:[{name:"fps",description:"

number of frames to be displayed every second

\n",type:"Number"}],chainable:1},{params:[]}]},noCursor:{name:"noCursor",class:"p5",module:"Environment"},displayWidth:{name:"displayWidth",class:"p5",module:"Environment"},displayHeight:{name:"displayHeight",class:"p5",module:"Environment"},windowWidth:{name:"windowWidth",class:"p5",module:"Environment"},windowHeight:{name:"windowHeight",class:"p5",module:"Environment"},windowResized:{name:"windowResized",class:"p5",module:"Environment"},width:{name:"width",class:"p5",module:"Environment"},height:{name:"height",class:"p5",module:"Environment"},fullscreen:{name:"fullscreen",params:[{name:"val",description:"

whether the sketch should be in fullscreen mode\nor not

\n",type:"Boolean",optional:!0}],class:"p5",module:"Environment"},pixelDensity:{name:"pixelDensity",class:"p5",module:"Environment",overloads:[{params:[{name:"val",description:"

whether or how much the sketch should scale

\n",type:"Number"}],chainable:1},{params:[]}]},displayDensity:{name:"displayDensity",class:"p5",module:"Environment"},getURL:{name:"getURL",class:"p5",module:"Environment"},getURLPath:{name:"getURLPath",class:"p5",module:"Environment"},getURLParams:{name:"getURLParams",class:"p5",module:"Environment"},preload:{name:"preload",class:"p5",module:"Structure"},setup:{name:"setup",class:"p5",module:"Structure"},draw:{name:"draw",class:"p5",module:"Structure"},remove:{name:"remove",class:"p5",module:"Structure"},disableFriendlyErrors:{name:"disableFriendlyErrors",class:"p5",module:"Structure"},let:{name:"let",class:"p5",module:"Foundation"},const:{name:"const",class:"p5",module:"Foundation"},"===":{name:"===",class:"p5",module:"Foundation"},">":{name:">",class:"p5",module:"Foundation"},">=":{name:">=",class:"p5",module:"Foundation"},"<":{name:"<",class:"p5",module:"Foundation"},"<=":{name:"<=",class:"p5",module:"Foundation"},"if-else":{name:"if-else",class:"p5",module:"Foundation"},function:{name:"function",class:"p5",module:"Foundation"},return:{name:"return",class:"p5",module:"Foundation"},boolean:{name:"boolean",params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number|Array"}],class:"p5",module:"Data"},string:{name:"string",class:"p5",module:"Foundation"},number:{name:"number",class:"p5",module:"Foundation"},object:{name:"object",class:"p5",module:"Foundation"},class:{name:"class",class:"p5",module:"Foundation"},for:{name:"for",class:"p5",module:"Foundation"},while:{name:"while",class:"p5",module:"Foundation"},createCanvas:{name:"createCanvas",params:[{name:"w",description:"

width of the canvas

\n",type:"Number"},{name:"h",description:"

height of the canvas

\n",type:"Number"},{name:"renderer",description:"

either P2D or WEBGL

\n",type:"Constant",optional:!0}],class:"p5",module:"Rendering"},resizeCanvas:{name:"resizeCanvas",params:[{name:"w",description:"

width of the canvas

\n",type:"Number"},{name:"h",description:"

height of the canvas

\n",type:"Number"},{name:"noRedraw",description:"

don't redraw the canvas immediately

\n",type:"Boolean",optional:!0}],class:"p5",module:"Rendering"},noCanvas:{name:"noCanvas",class:"p5",module:"Rendering"},createGraphics:{name:"createGraphics",params:[{name:"w",description:"

width of the offscreen graphics buffer

\n",type:"Number"},{name:"h",description:"

height of the offscreen graphics buffer

\n",type:"Number"},{name:"renderer",description:"

either P2D or WEBGL\n undefined defaults to p2d

\n",type:"Constant",optional:!0}],class:"p5",module:"Rendering"},blendMode:{name:"blendMode",params:[{name:"mode",description:"

blend mode to set for canvas.\n either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY,\n EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD, REMOVE or SUBTRACT

\n",type:"Constant"}],class:"p5",module:"Rendering"},drawingContext:{name:"drawingContext",class:"p5",module:"Rendering"},noLoop:{name:"noLoop",class:"p5",module:"Structure"},loop:{name:"loop",class:"p5",module:"Structure"},isLooping:{name:"isLooping",class:"p5",module:"Structure"},push:{name:"push",class:"p5",module:"Structure"},pop:{name:"pop",class:"p5",module:"Structure"},redraw:{name:"redraw",params:[{name:"n",description:"

Redraw for n-times. The default value is 1.

\n",type:"Integer",optional:!0}],class:"p5",module:"Structure"},p5:{name:"p5",params:[{name:"sketch",description:"

a function containing a p5.js sketch

\n",type:"Object"},{name:"node",description:"

ID or pointer to HTML DOM node to contain sketch in

\n",type:"String|Object"}],class:"p5",module:"Structure"},applyMatrix:{name:"applyMatrix",params:[{name:"a",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"b",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"c",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"d",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"e",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"},{name:"f",description:"

numbers which define the 2x3 matrix to be multiplied

\n",type:"Number"}],class:"p5",module:"Transform"},resetMatrix:{name:"resetMatrix",class:"p5",module:"Transform"},rotate:{name:"rotate",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"},{name:"axis",description:"

(in 3d) the axis to rotate around

\n",type:"p5.Vector|Number[]",optional:!0}],class:"p5",module:"Transform"},rotateX:{name:"rotateX",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},rotateY:{name:"rotateY",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},rotateZ:{name:"rotateZ",params:[{name:"angle",description:"

the angle of rotation, specified in radians\n or degrees, depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},scale:{name:"scale",class:"p5",module:"Transform",overloads:[{params:[{name:"s",description:"

percent to scale the object, or percentage to\n scale the object in the x-axis if multiple arguments\n are given

\n",type:"Number|p5.Vector|Number[]"},{name:"y",description:"

percent to scale the object in the y-axis

\n",type:"Number",optional:!0},{name:"z",description:"

percent to scale the object in the z-axis (webgl only)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"scales",description:"

per-axis percents to scale the object

\n",type:"p5.Vector|Number[]"}],chainable:1}]},shearX:{name:"shearX",params:[{name:"angle",description:"

angle of shear specified in radians or degrees,\n depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},shearY:{name:"shearY",params:[{name:"angle",description:"

angle of shear specified in radians or degrees,\n depending on current angleMode

\n",type:"Number"}],class:"p5",module:"Transform"},translate:{name:"translate",class:"p5",module:"Transform",overloads:[{params:[{name:"x",description:"

left/right translation

\n",type:"Number"},{name:"y",description:"

up/down translation

\n",type:"Number"},{name:"z",description:"

forward/backward translation (webgl only)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"vector",description:"

the vector to translate by

\n",type:"p5.Vector"}],chainable:1}]},storeItem:{name:"storeItem",params:[{name:"key",description:"",type:"String"},{name:"value",description:"",type:"String|Number|Object|Boolean|p5.Color|p5.Vector"}],class:"p5",module:"Data"},getItem:{name:"getItem",params:[{name:"key",description:"

name that you wish to use to store in local storage

\n",type:"String"}],class:"p5",module:"Data"},clearStorage:{name:"clearStorage",class:"p5",module:"Data"},removeItem:{name:"removeItem",params:[{name:"key",description:"",type:"String"}],class:"p5",module:"Data"},createStringDict:{name:"createStringDict",class:"p5",module:"Data",overloads:[{params:[{name:"key",description:"",type:"String"},{name:"value",description:"",type:"String"}]},{params:[{name:"object",description:"

object

\n",type:"Object"}]}]},createNumberDict:{name:"createNumberDict",class:"p5",module:"Data",overloads:[{params:[{name:"key",description:"",type:"Number"},{name:"value",description:"",type:"Number"}]},{params:[{name:"object",description:"

object

\n",type:"Object"}]}]},select:{name:"select",params:[{name:"selectors",description:"

CSS selector string of element to search for

\n",type:"String"},{name:"container",description:'

CSS selector string, p5.Element, or\n HTML element to search within

\n',type:"String|p5.Element|HTMLElement",optional:!0}],class:"p5",module:"DOM"},selectAll:{name:"selectAll",params:[{name:"selectors",description:"

CSS selector string of elements to search for

\n",type:"String"},{name:"container",description:'

CSS selector string, p5.Element\n , or HTML element to search within

\n',type:"String|p5.Element|HTMLElement",optional:!0}],class:"p5",module:"DOM"},removeElements:{name:"removeElements",class:"p5",module:"DOM"},changed:{name:"changed",params:[{name:"fxn",description:"

function to be fired when the value of\n an element changes.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5",module:"DOM"},input:{name:"input",params:[{name:"fxn",description:"

function to be fired when any user input is\n detected within the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5",module:"DOM"},createDiv:{name:"createDiv",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createP:{name:"createP",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createSpan:{name:"createSpan",params:[{name:"html",description:"

inner HTML for element created

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createImg:{name:"createImg",class:"p5",module:"DOM",overloads:[{params:[{name:"src",description:"

src path or url for image

\n",type:"String"},{name:"alt",description:'

alternate text to be used if image does not load. You can use also an empty string ("") if that an image is not intended to be viewed.

\n',type:"String"}]},{params:[{name:"src",description:"",type:"String"},{name:"alt",description:"",type:"String"},{name:"crossOrigin",description:"

crossOrigin property of the img element; use either 'anonymous' or 'use-credentials' to retrieve the image with cross-origin access (for later use with canvas. if an empty string(\"\") is passed, CORS is not used

\n",type:"String"},{name:"successCallback",description:'

callback to be called once image data is loaded with the p5.Element as argument

\n',type:"Function",optional:!0}]}]},createA:{name:"createA",params:[{name:"href",description:"

url of page to link to

\n",type:"String"},{name:"html",description:"

inner html of link element to display

\n",type:"String"},{name:"target",description:"

target where new link should open,\n could be _blank, _self, _parent, _top.

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createSlider:{name:"createSlider",params:[{name:"min",description:"

minimum value of the slider

\n",type:"Number"},{name:"max",description:"

maximum value of the slider

\n",type:"Number"},{name:"value",description:"

default value of the slider

\n",type:"Number",optional:!0},{name:"step",description:"

step size for each tick of the slider (if step is set to 0, the slider will move continuously from the minimum to the maximum value)

\n",type:"Number",optional:!0}],class:"p5",module:"DOM"},createButton:{name:"createButton",params:[{name:"label",description:"

label displayed on the button

\n",type:"String"},{name:"value",description:"

value of the button

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},createCheckbox:{name:"createCheckbox",params:[{name:"label",description:"

label displayed after checkbox

\n",type:"String",optional:!0},{name:"value",description:"

value of the checkbox; checked is true, unchecked is false

\n",type:"Boolean",optional:!0}],class:"p5",module:"DOM"},createSelect:{name:"createSelect",class:"p5",module:"DOM",overloads:[{params:[{name:"multiple",description:"

true if dropdown should support multiple selections

\n",type:"Boolean",optional:!0}]},{params:[{name:"existing",description:"

DOM select element

\n",type:"Object"}]}]},createRadio:{name:"createRadio",class:"p5",module:"DOM",overloads:[{params:[{name:"containerElement",description:"

An container HTML Element either a div\nor span inside which all existing radio inputs will be considered as options.

\n",type:"Object"},{name:"name",description:"

A name parameter for each Input Element.

\n",type:"String",optional:!0}]},{params:[{name:"name",description:"",type:"String"}]},{params:[]}]},createColorPicker:{name:"createColorPicker",params:[{name:"value",description:"

default color of element

\n",type:"String|p5.Color",optional:!0}],class:"p5",module:"DOM"},createInput:{name:"createInput",class:"p5",module:"DOM",overloads:[{params:[{name:"value",description:"

default value of the input box

\n",type:"String"},{name:"type",description:"

type of text, ie text, password etc. Defaults to text.\n Needs a value to be specified first.

\n",type:"String",optional:!0}]},{params:[{name:"value",description:"",type:"String",optional:!0}]}]},createFileInput:{name:"createFileInput",params:[{name:"callback",description:"

callback function for when a file is loaded

\n",type:"Function"},{name:"multiple",description:"

optional, to allow multiple files to be selected

\n",type:"Boolean",optional:!0}],class:"p5",module:"DOM"},createVideo:{name:"createVideo",params:[{name:"src",description:"

path to a video file, or array of paths for\n supporting different browsers

\n",type:"String|String[]"},{name:"callback",description:"

callback function to be called upon\n 'canplaythrough' event fire, that is, when the\n browser can play the media, and estimates that\n enough data has been loaded to play the media\n up to its end without having to stop for\n further buffering of content

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},createAudio:{name:"createAudio",params:[{name:"src",description:"

path to an audio file, or array of paths\n for supporting different browsers

\n",type:"String|String[]",optional:!0},{name:"callback",description:"

callback function to be called upon\n 'canplaythrough' event fire, that is, when the\n browser can play the media, and estimates that\n enough data has been loaded to play the media\n up to its end without having to stop for\n further buffering of content

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},VIDEO:{name:"VIDEO",class:"p5",module:"DOM"},AUDIO:{name:"AUDIO",class:"p5",module:"DOM"},createCapture:{name:"createCapture",params:[{name:"type",description:"

type of capture, either VIDEO or\n AUDIO if none specified, default both,\n or a Constraints object

\n",type:"String|Constant|Object"},{name:"callback",description:"

function to be called once\n stream has loaded

\n",type:"Function",optional:!0}],class:"p5",module:"DOM"},createElement:{name:"createElement",params:[{name:"tag",description:"

tag for the new element

\n",type:"String"},{name:"content",description:"

html content to be inserted into the element

\n",type:"String",optional:!0}],class:"p5",module:"DOM"},deviceOrientation:{name:"deviceOrientation",class:"p5",module:"Events"},accelerationX:{name:"accelerationX",class:"p5",module:"Events"},accelerationY:{name:"accelerationY",class:"p5",module:"Events"},accelerationZ:{name:"accelerationZ",class:"p5",module:"Events"},pAccelerationX:{name:"pAccelerationX",class:"p5",module:"Events"},pAccelerationY:{name:"pAccelerationY",class:"p5",module:"Events"},pAccelerationZ:{name:"pAccelerationZ",class:"p5",module:"Events"},rotationX:{name:"rotationX",class:"p5",module:"Events"},rotationY:{name:"rotationY",class:"p5",module:"Events"},rotationZ:{name:"rotationZ",class:"p5",module:"Events"},pRotationX:{name:"pRotationX",class:"p5",module:"Events"},pRotationY:{name:"pRotationY",class:"p5",module:"Events"},pRotationZ:{name:"pRotationZ",class:"p5",module:"Events"},turnAxis:{name:"turnAxis",class:"p5",module:"Events"},setMoveThreshold:{name:"setMoveThreshold",params:[{name:"value",description:"

The threshold value

\n",type:"Number"}],class:"p5",module:"Events"},setShakeThreshold:{name:"setShakeThreshold",params:[{name:"value",description:"

The threshold value

\n",type:"Number"}],class:"p5",module:"Events"},deviceMoved:{name:"deviceMoved",class:"p5",module:"Events"},deviceTurned:{name:"deviceTurned",class:"p5",module:"Events"},deviceShaken:{name:"deviceShaken",class:"p5",module:"Events"},keyIsPressed:{name:"keyIsPressed",class:"p5",module:"Events"},key:{name:"key",class:"p5",module:"Events"},keyCode:{name:"keyCode",class:"p5",module:"Events"},keyPressed:{name:"keyPressed",class:"p5",module:"Events"},keyReleased:{name:"keyReleased",class:"p5",module:"Events"},keyTyped:{name:"keyTyped",class:"p5",module:"Events"},keyIsDown:{name:"keyIsDown",params:[{name:"code",description:"

The key to check for.

\n",type:"Number"}],class:"p5",module:"Events"},movedX:{name:"movedX",class:"p5",module:"Events"},movedY:{name:"movedY",class:"p5",module:"Events"},mouseX:{name:"mouseX",class:"p5",module:"Events"},mouseY:{name:"mouseY",class:"p5",module:"Events"},pmouseX:{name:"pmouseX",class:"p5",module:"Events"},pmouseY:{name:"pmouseY",class:"p5",module:"Events"},winMouseX:{name:"winMouseX",class:"p5",module:"Events"},winMouseY:{name:"winMouseY",class:"p5",module:"Events"},pwinMouseX:{name:"pwinMouseX",class:"p5",module:"Events"},pwinMouseY:{name:"pwinMouseY",class:"p5",module:"Events"},mouseButton:{name:"mouseButton",class:"p5",module:"Events"},mouseIsPressed:{name:"mouseIsPressed",class:"p5",module:"Events"},mouseMoved:{name:"mouseMoved",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseDragged:{name:"mouseDragged",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mousePressed:{name:"mousePressed",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseReleased:{name:"mouseReleased",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseClicked:{name:"mouseClicked",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},doubleClicked:{name:"doubleClicked",params:[{name:"event",description:"

optional MouseEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},mouseWheel:{name:"mouseWheel",params:[{name:"event",description:"

optional WheelEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},requestPointerLock:{name:"requestPointerLock",class:"p5",module:"Events"},exitPointerLock:{name:"exitPointerLock",class:"p5",module:"Events"},touches:{name:"touches",class:"p5",module:"Events"},touchStarted:{name:"touchStarted",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},touchMoved:{name:"touchMoved",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},touchEnded:{name:"touchEnded",params:[{name:"event",description:"

optional TouchEvent callback argument.

\n",type:"Object",optional:!0}],class:"p5",module:"Events"},createImage:{name:"createImage",params:[{name:"width",description:"

width in pixels

\n",type:"Integer"},{name:"height",description:"

height in pixels

\n",type:"Integer"}],class:"p5",module:"Image"},saveCanvas:{name:"saveCanvas",class:"p5",module:"Image",overloads:[{params:[{name:"selectedCanvas",description:"

a variable\n representing a specific html5 canvas (optional)

\n",type:"p5.Element|HTMLCanvasElement"},{name:"filename",description:"",type:"String",optional:!0},{name:"extension",description:"

'jpg' or 'png'

\n",type:"String",optional:!0}]},{params:[{name:"filename",description:"",type:"String",optional:!0},{name:"extension",description:"",type:"String",optional:!0}]}]},saveFrames:{name:"saveFrames",params:[{name:"filename",description:"",type:"String"},{name:"extension",description:"

'jpg' or 'png'

\n",type:"String"},{name:"duration",description:"

Duration in seconds to save the frames for.

\n",type:"Number"},{name:"framerate",description:"

Framerate to save the frames in.

\n",type:"Number"},{name:"callback",description:"

A callback function that will be executed\n to handle the image data. This function\n should accept an array as argument. The\n array will contain the specified number of\n frames of objects. Each object has three\n properties: imageData - an\n image/octet-stream, filename and extension.

\n",type:"Function(Array)",optional:!0}],class:"p5",module:"Image"},loadImage:{name:"loadImage",params:[{name:"path",description:"

Path of the image to be loaded

\n",type:"String"},{name:"successCallback",description:'

Function to be called once\n the image is loaded. Will be passed the\n p5.Image.

\n',type:"function(p5.Image)",optional:!0},{name:"failureCallback",description:"

called with event error if\n the image fails to load.

\n",type:"Function(Event)",optional:!0}],class:"p5",module:"Image"},image:{name:"image",class:"p5",module:"Image",overloads:[{params:[{name:"img",description:"

the image to display

\n",type:"p5.Image|p5.Element"},{name:"x",description:"

the x-coordinate of the top-left corner of the image

\n",type:"Number"},{name:"y",description:"

the y-coordinate of the top-left corner of the image

\n",type:"Number"},{name:"width",description:"

the width to draw the image

\n",type:"Number",optional:!0},{name:"height",description:"

the height to draw the image

\n",type:"Number",optional:!0}]},{params:[{name:"img",description:"",type:"p5.Image|p5.Element"},{name:"dx",description:"

the x-coordinate of the destination\n rectangle in which to draw the source image

\n",type:"Number"},{name:"dy",description:"

the y-coordinate of the destination\n rectangle in which to draw the source image

\n",type:"Number"},{name:"dWidth",description:"

the width of the destination rectangle

\n",type:"Number"},{name:"dHeight",description:"

the height of the destination rectangle

\n",type:"Number"},{name:"sx",description:"

the x-coordinate of the subsection of the source\nimage to draw into the destination rectangle

\n",type:"Number"},{name:"sy",description:"

the y-coordinate of the subsection of the source\nimage to draw into the destination rectangle

\n",type:"Number"},{name:"sWidth",description:"

the width of the subsection of the\n source image to draw into the destination\n rectangle

\n",type:"Number",optional:!0},{name:"sHeight",description:"

the height of the subsection of the\n source image to draw into the destination rectangle

\n",type:"Number",optional:!0}]}]},tint:{name:"tint",class:"p5",module:"Image",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"value",description:"

a color string

\n",type:"String"}]},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}]},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}]},{params:[{name:"color",description:"

the tint color

\n",type:"p5.Color"}]}]},noTint:{name:"noTint",class:"p5",module:"Image"},imageMode:{name:"imageMode",params:[{name:"mode",description:"

either CORNER, CORNERS, or CENTER

\n",type:"Constant"}],class:"p5",module:"Image"},pixels:{name:"pixels",class:"p5",module:"Image"},blend:{name:"blend",class:"p5",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"},{name:"blendMode",description:"

the blend mode. either\n BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.

\n",type:"Constant"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"},{name:"blendMode",description:"",type:"Constant"}]}]},copy:{name:"copy",class:"p5",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image|p5.Element"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"}]}]},filter:{name:"filter",params:[{name:"filterType",description:"

either THRESHOLD, GRAY, OPAQUE, INVERT,\n POSTERIZE, BLUR, ERODE, DILATE or BLUR.\n See Filters.js for docs on\n each available filter

\n",type:"Constant"},{name:"filterParam",description:"

an optional parameter unique\n to each filter, see above

\n",type:"Number",optional:!0}],class:"p5",module:"Image"},get:{name:"get",class:"p5",module:"Image",overloads:[{params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"w",description:"

width

\n",type:"Number"},{name:"h",description:"

height

\n",type:"Number"}]},{params:[]},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"}]}]},loadPixels:{name:"loadPixels",class:"p5",module:"Image"},set:{name:"set",params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"c",description:'

insert a grayscale value | a pixel array |\n a p5.Color object | a p5.Image to copy

\n',type:"Number|Number[]|Object"}],class:"p5",module:"Image"},updatePixels:{name:"updatePixels",params:[{name:"x",description:"

x-coordinate of the upper-left corner of region\n to update

\n",type:"Number",optional:!0},{name:"y",description:"

y-coordinate of the upper-left corner of region\n to update

\n",type:"Number",optional:!0},{name:"w",description:"

width of region to update

\n",type:"Number",optional:!0},{name:"h",description:"

height of region to update

\n",type:"Number",optional:!0}],class:"p5",module:"Image"},loadJSON:{name:"loadJSON",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"jsonpOptions",description:"

options object for jsonp related settings

\n",type:"Object",optional:!0},{name:"datatype",description:'

"json" or "jsonp"

\n',type:"String",optional:!0},{name:"callback",description:'

function to be executed after\n loadJSON() completes, data is passed\n in as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"datatype",description:"",type:"String"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},loadStrings:{name:"loadStrings",params:[{name:"filename",description:"

name of the file or url to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadStrings()\n completes, Array is passed in as first\n argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadTable:{name:"loadTable",params:[{name:"filename",description:"

name of the file or URL to load

\n",type:"String"},{name:"extension",description:'

parse the table by comma-separated values "csv", semicolon-separated\n values "ssv", or tab-separated values "tsv"

\n',type:"String",optional:!0},{name:"header",description:'

"header" to indicate table has header row

\n',type:"String",optional:!0},{name:"callback",description:'

function to be executed after\n loadTable() completes. On success, the\n Table object is passed in as the\n first argument.

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadXML:{name:"loadXML",params:[{name:"filename",description:"

name of the file or URL to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadXML()\n completes, XML object is passed in as\n first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},loadBytes:{name:"loadBytes",params:[{name:"file",description:"

name of the file or URL to load

\n",type:"String"},{name:"callback",description:'

function to be executed after loadBytes()\n completes

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if there\n is an error

\n",type:"Function",optional:!0}],class:"p5",module:"IO"},httpGet:{name:"httpGet",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"datatype",description:'

"json", "jsonp", "binary", "arrayBuffer",\n "xml", or "text"

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object|Boolean",optional:!0},{name:"callback",description:'

function to be executed after\n httpGet() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"data",description:"",type:"Object|Boolean"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},httpPost:{name:"httpPost",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"datatype",description:'

"json", "jsonp", "xml", or "text".\n If omitted, httpPost() will guess.

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object|Boolean",optional:!0},{name:"callback",description:'

function to be executed after\n httpPost() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"data",description:"",type:"Object|Boolean"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"callback",description:"",type:"Function"},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},httpDo:{name:"httpDo",class:"p5",module:"IO",overloads:[{params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"method",description:'

either "GET", "POST", or "PUT",\n defaults to "GET"

\n',type:"String",optional:!0},{name:"datatype",description:'

"json", "jsonp", "xml", or "text"

\n',type:"String",optional:!0},{name:"data",description:"

param data passed sent with request

\n",type:"Object",optional:!0},{name:"callback",description:'

function to be executed after\n httpGet() completes, data is passed in\n as first argument

\n',type:"Function",optional:!0},{name:"errorCallback",description:"

function to be executed if\n there is an error, response is passed\n in as first argument

\n",type:"Function",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"options",description:'

Request object options as documented in the\n "fetch" API\nreference

\n',type:"Object"},{name:"callback",description:"",type:"Function",optional:!0},{name:"errorCallback",description:"",type:"Function",optional:!0}]}]},createWriter:{name:"createWriter",params:[{name:"name",description:"

name of the file to be created

\n",type:"String"},{name:"extension",description:"",type:"String",optional:!0}],class:"p5",module:"IO"},save:{name:"save",params:[{name:"objectOrFilename",description:"

If filename is provided, will\n save canvas as an image with\n either png or jpg extension\n depending on the filename.\n If object is provided, will\n save depending on the object\n and filename (see examples\n above).

\n",type:"Object|String",optional:!0},{name:"filename",description:"

If an object is provided as the first\n parameter, then the second parameter\n indicates the filename,\n and should include an appropriate\n file extension (see examples above).

\n",type:"String",optional:!0},{name:"options",description:"

Additional options depend on\n filetype. For example, when saving JSON,\n true indicates that the\n output will be optimized for filesize,\n rather than readability.

\n",type:"Boolean|String",optional:!0}],class:"p5",module:"IO"},saveJSON:{name:"saveJSON",params:[{name:"json",description:"",type:"Array|Object"},{name:"filename",description:"",type:"String"},{name:"optimize",description:"

If true, removes line breaks\n and spaces from the output\n file to optimize filesize\n (but not readability).

\n",type:"Boolean",optional:!0}],class:"p5",module:"IO"},saveStrings:{name:"saveStrings",params:[{name:"list",description:"

string array to be written

\n",type:"String[]"},{name:"filename",description:"

filename for output

\n",type:"String"},{name:"extension",description:"

the filename's extension

\n",type:"String",optional:!0},{name:"isCRLF",description:"

if true, change line-break to CRLF

\n",type:"Boolean",optional:!0}],class:"p5",module:"IO"},saveTable:{name:"saveTable",params:[{name:"Table",description:'

the Table object to save to a file

\n',type:"p5.Table"},{name:"filename",description:"

the filename to which the Table should be saved

\n",type:"String"},{name:"options",description:'

can be one of "tsv", "csv", or "html"

\n',type:"String",optional:!0}],class:"p5",module:"IO"},abs:{name:"abs",params:[{name:"n",description:"

number to compute

\n",type:"Number"}],class:"p5",module:"Math"},ceil:{name:"ceil",params:[{name:"n",description:"

number to round up

\n",type:"Number"}],class:"p5",module:"Math"},constrain:{name:"constrain",params:[{name:"n",description:"

number to constrain

\n",type:"Number"},{name:"low",description:"

minimum limit

\n",type:"Number"},{name:"high",description:"

maximum limit

\n",type:"Number"}],class:"p5",module:"Math"},dist:{name:"dist",class:"p5",module:"Math",overloads:[{params:[{name:"x1",description:"

x-coordinate of the first point

\n",type:"Number"},{name:"y1",description:"

y-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"

x-coordinate of the second point

\n",type:"Number"},{name:"y2",description:"

y-coordinate of the second point

\n",type:"Number"}]},{params:[{name:"x1",description:"",type:"Number"},{name:"y1",description:"",type:"Number"},{name:"z1",description:"

z-coordinate of the first point

\n",type:"Number"},{name:"x2",description:"",type:"Number"},{name:"y2",description:"",type:"Number"},{name:"z2",description:"

z-coordinate of the second point

\n",type:"Number"}]}]},exp:{name:"exp",params:[{name:"n",description:"

exponent to raise

\n",type:"Number"}],class:"p5",module:"Math"},floor:{name:"floor",params:[{name:"n",description:"

number to round down

\n",type:"Number"}],class:"p5",module:"Math"},lerp:{name:"lerp",params:[{name:"start",description:"

first value

\n",type:"Number"},{name:"stop",description:"

second value

\n",type:"Number"},{name:"amt",description:"

number

\n",type:"Number"}],class:"p5",module:"Math"},log:{name:"log",params:[{name:"n",description:"

number greater than 0

\n",type:"Number"}],class:"p5",module:"Math"},mag:{name:"mag",params:[{name:"a",description:"

first value

\n",type:"Number"},{name:"b",description:"

second value

\n",type:"Number"}],class:"p5",module:"Math"},map:{name:"map",params:[{name:"value",description:"

the incoming value to be converted

\n",type:"Number"},{name:"start1",description:"

lower bound of the value's current range

\n",type:"Number"},{name:"stop1",description:"

upper bound of the value's current range

\n",type:"Number"},{name:"start2",description:"

lower bound of the value's target range

\n",type:"Number"},{name:"stop2",description:"

upper bound of the value's target range

\n",type:"Number"},{name:"withinBounds",description:"

constrain the value to the newly mapped range

\n",type:"Boolean",optional:!0}],class:"p5",module:"Math"},max:{name:"max",class:"p5",module:"Math",overloads:[{params:[{name:"n0",description:"

Number to compare

\n",type:"Number"},{name:"n1",description:"

Number to compare

\n",type:"Number"}]},{params:[{name:"nums",description:"

Numbers to compare

\n",type:"Number[]"}]}]},min:{name:"min",class:"p5",module:"Math",overloads:[{params:[{name:"n0",description:"

Number to compare

\n",type:"Number"},{name:"n1",description:"

Number to compare

\n",type:"Number"}]},{params:[{name:"nums",description:"

Numbers to compare

\n",type:"Number[]"}]}]},norm:{name:"norm",params:[{name:"value",description:"

incoming value to be normalized

\n",type:"Number"},{name:"start",description:"

lower bound of the value's current range

\n",type:"Number"},{name:"stop",description:"

upper bound of the value's current range

\n",type:"Number"}],class:"p5",module:"Math"},pow:{name:"pow",params:[{name:"n",description:"

base of the exponential expression

\n",type:"Number"},{name:"e",description:"

power by which to raise the base

\n",type:"Number"}],class:"p5",module:"Math"},round:{name:"round",params:[{name:"n",description:"

number to round

\n",type:"Number"},{name:"decimals",description:"

number of decimal places to round to, default is 0

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},sq:{name:"sq",params:[{name:"n",description:"

number to square

\n",type:"Number"}],class:"p5",module:"Math"},sqrt:{name:"sqrt",params:[{name:"n",description:"

non-negative number to square root

\n",type:"Number"}],class:"p5",module:"Math"},fract:{name:"fract",params:[{name:"num",description:"

Number whose fractional part needs to be found out

\n",type:"Number"}],class:"p5",module:"Math"},createVector:{name:"createVector",params:[{name:"x",description:"

x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

z component of the vector

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},noise:{name:"noise",params:[{name:"x",description:"

x-coordinate in noise space

\n",type:"Number"},{name:"y",description:"

y-coordinate in noise space

\n",type:"Number",optional:!0},{name:"z",description:"

z-coordinate in noise space

\n",type:"Number",optional:!0}],class:"p5",module:"Math"},noiseDetail:{name:"noiseDetail",params:[{name:"lod",description:"

number of octaves to be used by the noise

\n",type:"Number"},{name:"falloff",description:"

falloff factor for each octave

\n",type:"Number"}],class:"p5",module:"Math"},noiseSeed:{name:"noiseSeed",params:[{name:"seed",description:"

the seed value

\n",type:"Number"}],class:"p5",module:"Math"},randomSeed:{name:"randomSeed",params:[{name:"seed",description:"

the seed value

\n",type:"Number"}],class:"p5",module:"Math"},random:{name:"random",class:"p5",module:"Math",overloads:[{params:[{name:"min",description:"

the lower bound (inclusive)

\n",type:"Number",optional:!0},{name:"max",description:"

the upper bound (exclusive)

\n",type:"Number",optional:!0}]},{params:[{name:"choices",description:"

the array to choose from

\n",type:"Array"}]}]},randomGaussian:{name:"randomGaussian",params:[{name:"mean",description:"

the mean

\n",type:"Number"},{name:"sd",description:"

the standard deviation

\n",type:"Number"}],class:"p5",module:"Math"},acos:{name:"acos",params:[{name:"value",description:"

the value whose arc cosine is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},asin:{name:"asin",params:[{name:"value",description:"

the value whose arc sine is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},atan:{name:"atan",params:[{name:"value",description:"

the value whose arc tangent is to be returned

\n",type:"Number"}],class:"p5",module:"Math"},atan2:{name:"atan2",params:[{name:"y",description:"

y-coordinate of the point

\n",type:"Number"},{name:"x",description:"

x-coordinate of the point

\n",type:"Number"}],class:"p5",module:"Math"},cos:{name:"cos",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},sin:{name:"sin",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},tan:{name:"tan",params:[{name:"angle",description:"

the angle

\n",type:"Number"}],class:"p5",module:"Math"},degrees:{name:"degrees",params:[{name:"radians",description:"

the radians value to convert to degrees

\n",type:"Number"}],class:"p5",module:"Math"},radians:{name:"radians",params:[{name:"degrees",description:"

the degree value to convert to radians

\n",type:"Number"}],class:"p5",module:"Math"},angleMode:{name:"angleMode",params:[{name:"mode",description:"

either RADIANS or DEGREES

\n",type:"Constant"}],class:"p5",module:"Math"},textAlign:{name:"textAlign",class:"p5",module:"Typography",overloads:[{params:[{name:"horizAlign",description:"

horizontal alignment, either LEFT,\n CENTER, or RIGHT

\n",type:"Constant"},{name:"vertAlign",description:"

vertical alignment, either TOP,\n BOTTOM, CENTER, or BASELINE

\n",type:"Constant",optional:!0}],chainable:1},{params:[]}]},textLeading:{name:"textLeading",class:"p5",module:"Typography",overloads:[{params:[{name:"leading",description:"

the size in pixels for spacing between lines

\n",type:"Number"}],chainable:1},{params:[]}]},textSize:{name:"textSize",class:"p5",module:"Typography",overloads:[{params:[{name:"theSize",description:"

the size of the letters in units of pixels

\n",type:"Number"}],chainable:1},{params:[]}]},textStyle:{name:"textStyle",class:"p5",module:"Typography",overloads:[{params:[{name:"theStyle",description:"

styling for text, either NORMAL,\n ITALIC, BOLD or BOLDITALIC

\n",type:"Constant"}],chainable:1},{params:[]}]},textWidth:{name:"textWidth",params:[{name:"theText",description:"

the String of characters to measure

\n",type:"String"}],class:"p5",module:"Typography"},textAscent:{name:"textAscent",class:"p5",module:"Typography"},textDescent:{name:"textDescent",class:"p5",module:"Typography"},loadFont:{name:"loadFont",params:[{name:"path",description:"

name of the file or url to load

\n",type:"String"},{name:"callback",description:'

function to be executed after\n loadFont() completes

\n',type:"Function",optional:!0},{name:"onError",description:"

function to be executed if\n an error occurs

\n",type:"Function",optional:!0}],class:"p5",module:"Typography"},text:{name:"text",params:[{name:"str",description:"

the alphanumeric\n symbols to be displayed

\n",type:"String|Object|Array|Number|Boolean"},{name:"x",description:"

x-coordinate of text

\n",type:"Number"},{name:"y",description:"

y-coordinate of text

\n",type:"Number"},{name:"x2",description:'

by default, the width of the text box,\n see rectMode() for more info

\n',type:"Number",optional:!0},{name:"y2",description:'

by default, the height of the text box,\n see rectMode() for more info

\n',type:"Number",optional:!0}],class:"p5",module:"Typography"},textFont:{name:"textFont",class:"p5",module:"Typography",overloads:[{params:[]},{params:[{name:"font",description:'

a font loaded via loadFont(),\nor a String representing a web safe font\n(a font that is generally available across all systems)

\n',type:"Object|String"},{name:"size",description:"

the font size to use

\n",type:"Number",optional:!0}],chainable:1}]},append:{name:"append",params:[{name:"array",description:"

Array to append

\n",type:"Array"},{name:"value",description:"

to be added to the Array

\n",type:"Any"}],class:"p5",module:"Data"},arrayCopy:{name:"arrayCopy",class:"p5",module:"Data",overloads:[{params:[{name:"src",description:"

the source Array

\n",type:"Array"},{name:"srcPosition",description:"

starting position in the source Array

\n",type:"Integer"},{name:"dst",description:"

the destination Array

\n",type:"Array"},{name:"dstPosition",description:"

starting position in the destination Array

\n",type:"Integer"},{name:"length",description:"

number of Array elements to be copied

\n",type:"Integer"}]},{params:[{name:"src",description:"",type:"Array"},{name:"dst",description:"",type:"Array"},{name:"length",description:"",type:"Integer",optional:!0}]}]},concat:{name:"concat",params:[{name:"a",description:"

first Array to concatenate

\n",type:"Array"},{name:"b",description:"

second Array to concatenate

\n",type:"Array"}],class:"p5",module:"Data"},reverse:{name:"reverse",params:[{name:"list",description:"

Array to reverse

\n",type:"Array"}],class:"p5",module:"Data"},shorten:{name:"shorten",params:[{name:"list",description:"

Array to shorten

\n",type:"Array"}],class:"p5",module:"Data"},shuffle:{name:"shuffle",params:[{name:"array",description:"

Array to shuffle

\n",type:"Array"},{name:"bool",description:"

modify passed array

\n",type:"Boolean",optional:!0}],class:"p5",module:"Data"},sort:{name:"sort",params:[{name:"list",description:"

Array to sort

\n",type:"Array"},{name:"count",description:"

number of elements to sort, starting from 0

\n",type:"Integer",optional:!0}],class:"p5",module:"Data"},splice:{name:"splice",params:[{name:"list",description:"

Array to splice into

\n",type:"Array"},{name:"value",description:"

value to be spliced in

\n",type:"Any"},{name:"position",description:"

in the array from which to insert data

\n",type:"Integer"}],class:"p5",module:"Data"},subset:{name:"subset",params:[{name:"list",description:"

Array to extract from

\n",type:"Array"},{name:"start",description:"

position to begin

\n",type:"Integer"},{name:"count",description:"

number of values to extract

\n",type:"Integer",optional:!0}],class:"p5",module:"Data"},float:{name:"float",params:[{name:"str",description:"

float string to parse

\n",type:"String"}],class:"p5",module:"Data"},int:{name:"int",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number"},{name:"radix",description:"

the radix to convert to (default: 10)

\n",type:"Integer",optional:!0}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},str:{name:"str",params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number|Array"}],class:"p5",module:"Data"},byte:{name:"byte",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Boolean|Number"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},char:{name:"char",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String|Number"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},unchar:{name:"unchar",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},hex:{name:"hex",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"Number"},{name:"digits",description:"",type:"Number",optional:!0}]},{params:[{name:"ns",description:"

array of values to parse

\n",type:"Number[]"},{name:"digits",description:"",type:"Number",optional:!0}]}]},unhex:{name:"unhex",class:"p5",module:"Data",overloads:[{params:[{name:"n",description:"

value to parse

\n",type:"String"}]},{params:[{name:"ns",description:"

values to parse

\n",type:"Array"}]}]},join:{name:"join",params:[{name:"list",description:"

array of Strings to be joined

\n",type:"Array"},{name:"separator",description:"

String to be placed between each item

\n",type:"String"}],class:"p5",module:"Data"},match:{name:"match",params:[{name:"str",description:"

the String to be searched

\n",type:"String"},{name:"regexp",description:"

the regexp to be used for matching

\n",type:"String"}],class:"p5",module:"Data"},matchAll:{name:"matchAll",params:[{name:"str",description:"

the String to be searched

\n",type:"String"},{name:"regexp",description:"

the regexp to be used for matching

\n",type:"String"}],class:"p5",module:"Data"},nf:{name:"nf",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number|String"},{name:"left",description:"

number of digits to the left of the\n decimal point

\n",type:"Integer|String",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer|String",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"left",description:"",type:"Integer|String",optional:!0},{name:"right",description:"",type:"Integer|String",optional:!0}]}]},nfc:{name:"nfc",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number|String"},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer|String",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"right",description:"",type:"Integer|String",optional:!0}]}]},nfp:{name:"nfp",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number"},{name:"left",description:"

number of digits to the left of the decimal\n point

\n",type:"Integer",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Number[]"},{name:"left",description:"",type:"Integer",optional:!0},{name:"right",description:"",type:"Integer",optional:!0}]}]},nfs:{name:"nfs",class:"p5",module:"Data",overloads:[{params:[{name:"num",description:"

the Number to format

\n",type:"Number"},{name:"left",description:"

number of digits to the left of the decimal\n point

\n",type:"Integer",optional:!0},{name:"right",description:"

number of digits to the right of the\n decimal point

\n",type:"Integer",optional:!0}]},{params:[{name:"nums",description:"

the Numbers to format

\n",type:"Array"},{name:"left",description:"",type:"Integer",optional:!0},{name:"right",description:"",type:"Integer",optional:!0}]}]},split:{name:"split",params:[{name:"value",description:"

the String to be split

\n",type:"String"},{name:"delim",description:"

the String used to separate the data

\n",type:"String"}],class:"p5",module:"Data"},splitTokens:{name:"splitTokens",params:[{name:"value",description:"

the String to be split

\n",type:"String"},{name:"delim",description:"

list of individual Strings that will be used as\n separators

\n",type:"String",optional:!0}],class:"p5",module:"Data"},trim:{name:"trim",class:"p5",module:"Data",overloads:[{params:[{name:"str",description:"

a String to be trimmed

\n",type:"String"}]},{params:[{name:"strs",description:"

an Array of Strings to be trimmed

\n",type:"Array"}]}]},day:{name:"day",class:"p5",module:"IO"},hour:{name:"hour",class:"p5",module:"IO"},minute:{name:"minute",class:"p5",module:"IO"},millis:{name:"millis",class:"p5",module:"IO"},month:{name:"month",class:"p5",module:"IO"},second:{name:"second",class:"p5",module:"IO"},year:{name:"year",class:"p5",module:"IO"},plane:{name:"plane",params:[{name:"width",description:"

width of the plane

\n",type:"Number",optional:!0},{name:"height",description:"

height of the plane

\n",type:"Number",optional:!0},{name:"detailX",description:"

Optional number of triangle\n subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

Optional number of triangle\n subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},box:{name:"box",params:[{name:"width",description:"

width of the box

\n",type:"Number",optional:!0},{name:"Height",description:"

height of the box

\n",type:"Number",optional:!0},{name:"depth",description:"

depth of the box

\n",type:"Number",optional:!0},{name:"detailX",description:"

Optional number of triangle\n subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

Optional number of triangle\n subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},sphere:{name:"sphere",params:[{name:"radius",description:"

radius of circle

\n",type:"Number",optional:!0},{name:"detailX",description:"

optional number of subdivisions in x-dimension

\n",type:"Integer",optional:!0},{name:"detailY",description:"

optional number of subdivisions in y-dimension

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},cylinder:{name:"cylinder",params:[{name:"radius",description:"

radius of the surface

\n",type:"Number",optional:!0},{name:"height",description:"

height of the cylinder

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of subdivisions in x-dimension;\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of subdivisions in y-dimension;\n default is 1

\n",type:"Integer",optional:!0},{name:"bottomCap",description:"

whether to draw the bottom of the cylinder

\n",type:"Boolean",optional:!0},{name:"topCap",description:"

whether to draw the top of the cylinder

\n",type:"Boolean",optional:!0}],class:"p5",module:"Shape"},cone:{name:"cone",params:[{name:"radius",description:"

radius of the bottom surface

\n",type:"Number",optional:!0},{name:"height",description:"

height of the cone

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments,\n the more segments the smoother geometry\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments,\n the more segments the smoother geometry\n default is 1

\n",type:"Integer",optional:!0},{name:"cap",description:"

whether to draw the base of the cone

\n",type:"Boolean",optional:!0}],class:"p5",module:"Shape"},ellipsoid:{name:"ellipsoid",params:[{name:"radiusx",description:"

x-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"radiusy",description:"

y-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"radiusz",description:"

z-radius of ellipsoid

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments,\n the more segments the smoother geometry\n default is 24. Avoid detail number above\n 150, it may crash the browser.

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments,\n the more segments the smoother geometry\n default is 16. Avoid detail number above\n 150, it may crash the browser.

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},torus:{name:"torus",params:[{name:"radius",description:"

radius of the whole ring

\n",type:"Number",optional:!0},{name:"tubeRadius",description:"

radius of the tube

\n",type:"Number",optional:!0},{name:"detailX",description:"

number of segments in x-dimension,\n the more segments the smoother geometry\n default is 24

\n",type:"Integer",optional:!0},{name:"detailY",description:"

number of segments in y-dimension,\n the more segments the smoother geometry\n default is 16

\n",type:"Integer",optional:!0}],class:"p5",module:"Shape"},orbitControl:{name:"orbitControl",params:[{name:"sensitivityX",description:"

sensitivity to mouse movement along X axis

\n",type:"Number",optional:!0},{name:"sensitivityY",description:"

sensitivity to mouse movement along Y axis

\n",type:"Number",optional:!0},{name:"sensitivityZ",description:"

sensitivity to scroll movement along Z axis

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},debugMode:{name:"debugMode",class:"p5",module:"Lights, Camera",overloads:[{params:[]},{params:[{name:"mode",description:"

either GRID or AXES

\n",type:"Constant"}]},{params:[{name:"mode",description:"",type:"Constant"},{name:"gridSize",description:"

size of one side of the grid

\n",type:"Number",optional:!0},{name:"gridDivisions",description:"

number of divisions in the grid

\n",type:"Number",optional:!0},{name:"xOff",description:"

X axis offset from origin (0,0,0)

\n",type:"Number",optional:!0},{name:"yOff",description:"

Y axis offset from origin (0,0,0)

\n",type:"Number",optional:!0},{name:"zOff",description:"

Z axis offset from origin (0,0,0)

\n",type:"Number",optional:!0}]},{params:[{name:"mode",description:"",type:"Constant"},{name:"axesSize",description:"

size of axes icon

\n",type:"Number",optional:!0},{name:"xOff",description:"",type:"Number",optional:!0},{name:"yOff",description:"",type:"Number",optional:!0},{name:"zOff",description:"",type:"Number",optional:!0}]},{params:[{name:"gridSize",description:"",type:"Number",optional:!0},{name:"gridDivisions",description:"",type:"Number",optional:!0},{name:"gridXOff",description:"",type:"Number",optional:!0},{name:"gridYOff",description:"",type:"Number",optional:!0},{name:"gridZOff",description:"",type:"Number",optional:!0},{name:"axesSize",description:"",type:"Number",optional:!0},{name:"axesXOff",description:"",type:"Number",optional:!0},{name:"axesYOff",description:"",type:"Number",optional:!0},{name:"axesZOff",description:"",type:"Number",optional:!0}]}]},noDebugMode:{name:"noDebugMode",class:"p5",module:"Lights, Camera"},ambientLight:{name:"ambientLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"

the alpha value

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the ambient light color

\n",type:"p5.Color"}],chainable:1}]},specularColor:{name:"specularColor",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"}],chainable:1},{params:[{name:"value",description:"

a color string

\n",type:"String"}],chainable:1},{params:[{name:"gray",description:"

a gray value

\n",type:"Number"}],chainable:1},{params:[{name:"values",description:"

an array containing the red,green,blue &\n and alpha components of the color

\n",type:"Number[]"}],chainable:1},{params:[{name:"color",description:"

the ambient light color

\n",type:"p5.Color"}],chainable:1}]},directionalLight:{name:"directionalLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"position",description:"

the direction of the light

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\n or p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"x",description:"

x axis direction

\n",type:"Number"},{name:"y",description:"

y axis direction

\n",type:"Number"},{name:"z",description:"

z axis direction

\n",type:"Number"}],chainable:1},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"}],chainable:1},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"}],chainable:1}]},pointLight:{name:"pointLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"x",description:"

x axis position

\n",type:"Number"},{name:"y",description:"

y axis position

\n",type:"Number"},{name:"z",description:"

z axis position

\n",type:"Number"}],chainable:1},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"

the position of the light

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\nor p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"}],chainable:1},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"}],chainable:1}]},lights:{name:"lights",class:"p5",module:"Lights, Camera"},lightFalloff:{name:"lightFalloff",params:[{name:"constant",description:"

constant value for determining falloff

\n",type:"Number"},{name:"linear",description:"

linear value for determining falloff

\n",type:"Number"},{name:"quadratic",description:"

quadratic value for determining falloff

\n",type:"Number"}],class:"p5",module:"Lights, Camera"},spotLight:{name:"spotLight",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

red or hue value (depending on the current\ncolor mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number"},{name:"v3",description:"

blue or brightness value

\n",type:"Number"},{name:"x",description:"

x axis position

\n",type:"Number"},{name:"y",description:"

y axis position

\n",type:"Number"},{name:"z",description:"

z axis position

\n",type:"Number"},{name:"rx",description:"

x axis direction of light

\n",type:"Number"},{name:"ry",description:"

y axis direction of light

\n",type:"Number"},{name:"rz",description:"

z axis direction of light

\n",type:"Number"},{name:"angle",description:"

optional parameter for angle. Defaults to PI/3

\n",type:"Number",optional:!0},{name:"conc",description:"

optional parameter for concentration. Defaults to 100

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:'

color Array, CSS color string,\nor p5.Color value

\n',type:"Number[]|String|p5.Color"},{name:"position",description:"

the position of the light

\n",type:"p5.Vector"},{name:"direction",description:"

the direction of the light

\n",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"",type:"p5.Vector"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"position",description:"",type:"p5.Vector"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"direction",description:"",type:"p5.Vector"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"v1",description:"",type:"Number"},{name:"v2",description:"",type:"Number"},{name:"v3",description:"",type:"Number"},{name:"position",description:"",type:"p5.Vector"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]},{params:[{name:"color",description:"",type:"Number[]|String|p5.Color"},{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number"},{name:"rx",description:"",type:"Number"},{name:"ry",description:"",type:"Number"},{name:"rz",description:"",type:"Number"},{name:"angle",description:"",type:"Number",optional:!0},{name:"conc",description:"",type:"Number",optional:!0}]}]},noLights:{name:"noLights",class:"p5",module:"Lights, Camera"},loadModel:{name:"loadModel",class:"p5",module:"Shape",overloads:[{params:[{name:"path",description:"

Path of the model to be loaded

\n",type:"String"},{name:"normalize",description:"

If true, scale the model to a\n standardized size when loading

\n",type:"Boolean"},{name:"successCallback",description:"

Function to be called\n once the model is loaded. Will be passed\n the 3D model object.

\n",type:"function(p5.Geometry)",optional:!0},{name:"failureCallback",description:"

called with event error if\n the model fails to load.

\n",type:"Function(Event)",optional:!0},{name:"fileType",description:"

The file extension of the model\n (.stl, .obj).

\n",type:"String",optional:!0}]},{params:[{name:"path",description:"",type:"String"},{name:"successCallback",description:"",type:"function(p5.Geometry)",optional:!0},{name:"failureCallback",description:"",type:"Function(Event)",optional:!0},{name:"fileType",description:"",type:"String",optional:!0}]}]},model:{name:"model",params:[{name:"model",description:"

Loaded 3d model to be rendered

\n",type:"p5.Geometry"}],class:"p5",module:"Shape"},loadShader:{name:"loadShader",params:[{name:"vertFilename",description:"

path to file containing vertex shader\nsource code

\n",type:"String"},{name:"fragFilename",description:"

path to file containing fragment shader\nsource code

\n",type:"String"},{name:"callback",description:"

callback to be executed after loadShader\ncompletes. On success, the Shader object is passed as the first argument.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

callback to be executed when an error\noccurs inside loadShader. On error, the error is passed as the first\nargument.

\n",type:"Function",optional:!0}],class:"p5",module:"Lights, Camera"},createShader:{name:"createShader",params:[{name:"vertSrc",description:"

source code for the vertex shader

\n",type:"String"},{name:"fragSrc",description:"

source code for the fragment shader

\n",type:"String"}],class:"p5",module:"Lights, Camera"},shader:{name:"shader",params:[{name:"s",description:'

the desired p5.Shader to use for rendering\nshapes.

\n',type:"p5.Shader",optional:!0}],class:"p5",module:"Lights, Camera"},resetShader:{name:"resetShader",class:"p5",module:"Lights, Camera"},normalMaterial:{name:"normalMaterial",class:"p5",module:"Lights, Camera"},texture:{name:"texture",params:[{name:"tex",description:"

2-dimensional graphics\n to render as texture

\n",type:"p5.Image|p5.MediaElement|p5.Graphics"}],class:"p5",module:"Lights, Camera"},textureMode:{name:"textureMode",params:[{name:"mode",description:"

either IMAGE or NORMAL

\n",type:"Constant"}],class:"p5",module:"Lights, Camera"},textureWrap:{name:"textureWrap",params:[{name:"wrapX",description:"

either CLAMP, REPEAT, or MIRROR

\n",type:"Constant"},{name:"wrapY",description:"

either CLAMP, REPEAT, or MIRROR

\n",type:"Constant",optional:!0}],class:"p5",module:"Lights, Camera"},ambientMaterial:{name:"ambientMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

gray value, red or hue value\n (depending on the current color mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number",optional:!0},{name:"v3",description:"

blue or brightness value

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color, color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},emissiveMaterial:{name:"emissiveMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"v1",description:"

gray value, red or hue value\n (depending on the current color mode),

\n",type:"Number"},{name:"v2",description:"

green or saturation value

\n",type:"Number",optional:!0},{name:"v3",description:"

blue or brightness value

\n",type:"Number",optional:!0},{name:"a",description:"

opacity

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color, color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},specularMaterial:{name:"specularMaterial",class:"p5",module:"Lights, Camera",overloads:[{params:[{name:"gray",description:"

number specifying value between white and black.

\n",type:"Number"},{name:"alpha",description:"

alpha value relative to current color range\n (default is 0-255)

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"v1",description:"

red or hue value relative to\n the current color range

\n",type:"Number"},{name:"v2",description:"

green or saturation value\n relative to the current color range

\n",type:"Number"},{name:"v3",description:"

blue or brightness value\n relative to the current color range

\n",type:"Number"},{name:"alpha",description:"",type:"Number",optional:!0}],chainable:1},{params:[{name:"color",description:"

color Array, or CSS color string

\n",type:"Number[]|String|p5.Color"}],chainable:1}]},shininess:{name:"shininess",params:[{name:"shine",description:"

Degree of Shininess.\n Defaults to 1.

\n",type:"Number"}],class:"p5",module:"Lights, Camera"},camera:{name:"camera",params:[{name:"x",description:"

camera position value on x axis

\n",type:"Number",optional:!0},{name:"y",description:"

camera position value on y axis

\n",type:"Number",optional:!0},{name:"z",description:"

camera position value on z axis

\n",type:"Number",optional:!0},{name:"centerX",description:"

x coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"centerY",description:"

y coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"centerZ",description:"

z coordinate representing center of the sketch

\n",type:"Number",optional:!0},{name:"upX",description:"

x component of direction 'up' from camera

\n",type:"Number",optional:!0},{name:"upY",description:"

y component of direction 'up' from camera

\n",type:"Number",optional:!0},{name:"upZ",description:"

z component of direction 'up' from camera

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},perspective:{name:"perspective",params:[{name:"fovy",description:'

camera frustum vertical field of view,\n from bottom to top of view, in angleMode units

\n',type:"Number",optional:!0},{name:"aspect",description:"

camera frustum aspect ratio

\n",type:"Number",optional:!0},{name:"near",description:"

frustum near plane length

\n",type:"Number",optional:!0},{name:"far",description:"

frustum far plane length

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},ortho:{name:"ortho",params:[{name:"left",description:"

camera frustum left plane

\n",type:"Number",optional:!0},{name:"right",description:"

camera frustum right plane

\n",type:"Number",optional:!0},{name:"bottom",description:"

camera frustum bottom plane

\n",type:"Number",optional:!0},{name:"top",description:"

camera frustum top plane

\n",type:"Number",optional:!0},{name:"near",description:"

camera frustum near plane

\n",type:"Number",optional:!0},{name:"far",description:"

camera frustum far plane

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},frustum:{name:"frustum",params:[{name:"left",description:"

camera frustum left plane

\n",type:"Number",optional:!0},{name:"right",description:"

camera frustum right plane

\n",type:"Number",optional:!0},{name:"bottom",description:"

camera frustum bottom plane

\n",type:"Number",optional:!0},{name:"top",description:"

camera frustum top plane

\n",type:"Number",optional:!0},{name:"near",description:"

camera frustum near plane

\n",type:"Number",optional:!0},{name:"far",description:"

camera frustum far plane

\n",type:"Number",optional:!0}],class:"p5",module:"Lights, Camera"},createCamera:{name:"createCamera",class:"p5",module:"Lights, Camera"},setCamera:{name:"setCamera",params:[{name:"cam",description:"

p5.Camera object

\n",type:"p5.Camera"}],class:"p5",module:"Lights, Camera"},setAttributes:{name:"setAttributes",class:"p5",module:"Rendering",overloads:[{params:[{name:"key",description:"

Name of attribute

\n",type:"String"},{name:"value",description:"

New value of named attribute

\n",type:"Boolean"}]},{params:[{name:"obj",description:"

object with key-value pairs

\n",type:"Object"}]}]},sampleRate:{name:"sampleRate",class:"p5",module:"p5.sound"},freqToMidi:{name:"freqToMidi",params:[{name:"frequency",description:'

A freqeuncy, for example, the "A"\n above Middle C is 440Hz

\n',type:"Number"}],class:"p5",module:"p5.sound"},midiToFreq:{name:"midiToFreq",params:[{name:"midiNote",description:"

The number of a MIDI note

\n",type:"Number"}],class:"p5",module:"p5.sound"},soundFormats:{name:"soundFormats",params:[{name:"formats",description:"

i.e. 'mp3', 'wav', 'ogg'

\n",type:"String",optional:!0,multiple:!0}],class:"p5",module:"p5.sound"},getAudioContext:{name:"getAudioContext",class:"p5",module:"p5.sound"},userStartAudio:{params:[{name:"element(s)",description:"

This argument can be an Element,\n Selector String, NodeList, p5.Element,\n jQuery Element, or an Array of any of those.

\n",type:"Element|Array",optional:!0},{name:"callback",description:"

Callback to invoke when the AudioContext\n has started

\n",type:"Function",optional:!0}],name:"userStartAudio",class:"p5",module:"p5.sound"},loadSound:{name:"loadSound",params:[{name:"path",description:"

Path to the sound file, or an array with\n paths to soundfiles in multiple formats\n i.e. ['sound.ogg', 'sound.mp3'].\n Alternately, accepts an object: either\n from the HTML5 File API, or a p5.File.

\n",type:"String|Array"},{name:"successCallback",description:"

Name of a function to call once file loads

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

Name of a function to call if there is\n an error loading the file.

\n",type:"Function",optional:!0},{name:"whileLoading",description:"

Name of a function to call while file is loading.\n This function will receive the percentage loaded\n so far, from 0.0 to 1.0.

\n",type:"Function",optional:!0}],class:"p5",module:"p5.sound"},createConvolver:{name:"createConvolver",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function to call if loading is successful.\n The object will be passed in as the argument\n to the callback function.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

function to call if loading is not successful.\n A custom error will be passed in as the argument\n to the callback function.

\n",type:"Function",optional:!0}],class:"p5",module:"p5.sound"},setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number"}],class:"p5",module:"p5.sound"},saveSound:{name:"saveSound",params:[{name:"soundFile",description:"

p5.SoundFile that you wish to save

\n",type:"p5.SoundFile"},{name:"fileName",description:"

name of the resulting .wav file.

\n",type:"String"}],class:"p5",module:"p5.sound"}},"p5.Color":{toString:{name:"toString",params:[{name:"format",description:"

How the color string will be formatted.\nLeaving this empty formats the string as rgba(r, g, b, a).\n'#rgb' '#rgba' '#rrggbb' and '#rrggbbaa' format as hexadecimal color codes.\n'rgb' 'hsb' and 'hsl' return the color formatted in the specified color mode.\n'rgba' 'hsba' and 'hsla' are the same as above but with alpha channels.\n'rgb%' 'hsb%' 'hsl%' 'rgba%' 'hsba%' and 'hsla%' format as percentages.

\n",type:"String",optional:!0}],class:"p5.Color",module:"Color"},setRed:{name:"setRed",params:[{name:"red",description:"

the new red value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setGreen:{name:"setGreen",params:[{name:"green",description:"

the new green value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setBlue:{name:"setBlue",params:[{name:"blue",description:"

the new blue value

\n",type:"Number"}],class:"p5.Color",module:"Color"},setAlpha:{name:"setAlpha",params:[{name:"alpha",description:"

the new alpha value

\n",type:"Number"}],class:"p5.Color",module:"Color"}},"p5.Element":{elt:{name:"elt",class:"p5.Element",module:"DOM"},parent:{name:"parent",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"parent",description:'

the ID, DOM node, or p5.Element\n of desired parent element

\n',type:"String|p5.Element|Object"}],chainable:1},{params:[]}]},id:{name:"id",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"id",description:"

ID of the element

\n",type:"String"}],chainable:1},{params:[]}]},class:{name:"class",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"class",description:"

class to add

\n",type:"String"}],chainable:1},{params:[]}]},mousePressed:{name:"mousePressed",params:[{name:"fxn",description:"

function to be fired when mouse is\n pressed over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},doubleClicked:{name:"doubleClicked",params:[{name:"fxn",description:"

function to be fired when mouse is\n double clicked over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseWheel:{name:"mouseWheel",params:[{name:"fxn",description:"

function to be fired when mouse is\n scrolled over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseReleased:{name:"mouseReleased",params:[{name:"fxn",description:"

function to be fired when mouse is\n released over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseClicked:{name:"mouseClicked",params:[{name:"fxn",description:"

function to be fired when mouse is\n clicked over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseMoved:{name:"mouseMoved",params:[{name:"fxn",description:"

function to be fired when a mouse moves\n over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseOver:{name:"mouseOver",params:[{name:"fxn",description:"

function to be fired when a mouse moves\n onto the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},mouseOut:{name:"mouseOut",params:[{name:"fxn",description:"

function to be fired when a mouse\n moves off of an element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchStarted:{name:"touchStarted",params:[{name:"fxn",description:"

function to be fired when a touch\n starts over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchMoved:{name:"touchMoved",params:[{name:"fxn",description:"

function to be fired when a touch moves over\n the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},touchEnded:{name:"touchEnded",params:[{name:"fxn",description:"

function to be fired when a touch ends\n over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},dragOver:{name:"dragOver",params:[{name:"fxn",description:"

function to be fired when a file is\n dragged over the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},dragLeave:{name:"dragLeave",params:[{name:"fxn",description:"

function to be fired when a file is\n dragged off the element.\n if false is passed instead, the previously\n firing function will no longer fire.

\n",type:"Function|Boolean"}],class:"p5.Element",module:"DOM"},addClass:{name:"addClass",params:[{name:"class",description:"

name of class to add

\n",type:"String"}],class:"p5.Element",module:"DOM"},removeClass:{name:"removeClass",params:[{name:"class",description:"

name of class to remove

\n",type:"String"}],class:"p5.Element",module:"DOM"},hasClass:{name:"hasClass",params:[{name:"c",description:"

class name of class to check

\n",type:"String"}],class:"p5.Element",module:"DOM"},toggleClass:{name:"toggleClass",params:[{name:"c",description:"

class name to toggle

\n",type:"String"}],class:"p5.Element",module:"DOM"},child:{name:"child",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"child",description:'

the ID, DOM node, or p5.Element\n to add to the current element

\n',type:"String|p5.Element",optional:!0}],chainable:1}]},center:{name:"center",params:[{name:"align",description:"

passing 'vertical', 'horizontal' aligns element accordingly

\n",type:"String",optional:!0}],class:"p5.Element",module:"DOM"},html:{name:"html",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"html",description:"

the HTML to be placed inside the element

\n",type:"String",optional:!0},{name:"append",description:"

whether to append HTML to existing

\n",type:"Boolean",optional:!0}],chainable:1}]},position:{name:"position",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"x",description:"

x-position relative to upper left of window (optional)

\n",type:"Number",optional:!0},{name:"y",description:"

y-position relative to upper left of window (optional)

\n",type:"Number",optional:!0},{name:"positionType",description:"

it can be static, fixed, relative, sticky, initial or inherit (optional)

\n",type:"String"}],chainable:1}]},style:{name:"style",class:"p5.Element",module:"DOM",overloads:[{params:[{name:"property",description:"

property to be set

\n",type:"String"}]},{params:[{name:"property",description:"",type:"String"},{name:"value",description:"

value to assign to property

\n",type:"String|p5.Color"}],chainable:1}]},attribute:{name:"attribute",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"attr",description:"

attribute to set

\n",type:"String"},{name:"value",description:"

value to assign to attribute

\n",type:"String"}],chainable:1}]},removeAttribute:{name:"removeAttribute",params:[{name:"attr",description:"

attribute to remove

\n",type:"String"}],class:"p5.Element",module:"DOM"},value:{name:"value",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"value",description:"",type:"String|Number"}],chainable:1}]},show:{name:"show",class:"p5.Element",module:"DOM"},hide:{name:"hide",class:"p5.Element",module:"DOM"},size:{name:"size",class:"p5.Element",module:"DOM",overloads:[{params:[]},{params:[{name:"w",description:"

width of the element, either AUTO, or a number

\n",type:"Number|Constant"},{name:"h",description:"

height of the element, either AUTO, or a number

\n",type:"Number|Constant",optional:!0}],chainable:1}]},remove:{name:"remove",class:"p5.Element",module:"DOM"},drop:{name:"drop",params:[{name:"callback",description:"

callback to receive loaded file, called for each file dropped.

\n",type:"Function"},{name:"fxn",description:"

callback triggered once when files are dropped with the drop event.

\n",type:"Function",optional:!0}],class:"p5.Element",module:"DOM"}},"p5.Graphics":{reset:{name:"reset",class:"p5.Graphics",module:"Rendering"},remove:{name:"remove",class:"p5.Graphics",module:"Rendering"}},JSON:{stringify:{name:"stringify",params:[{name:"object",description:"

:Javascript object that you would like to convert to JSON

\n",type:"Object"}],class:"JSON",module:"Foundation"}},console:{log:{name:"log",params:[{name:"message",description:"

:Message that you would like to print to the console

\n",type:"String|Expression|Object"}],class:"console",module:"Foundation"}},"p5.TypedDict":{size:{name:"size",class:"p5.TypedDict",module:"Data"},hasKey:{name:"hasKey",params:[{name:"key",description:"

that you want to look up

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},get:{name:"get",params:[{name:"the",description:"

key you want to access

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},set:{name:"set",params:[{name:"key",description:"",type:"Number|String"},{name:"value",description:"",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},create:{name:"create",class:"p5.TypedDict",module:"Data",overloads:[{params:[{name:"key",description:"",type:"Number|String"},{name:"value",description:"",type:"Number|String"}]},{params:[{name:"obj",description:"

key/value pair

\n",type:"Object"}]}]},clear:{name:"clear",class:"p5.TypedDict",module:"Data"},remove:{name:"remove",params:[{name:"key",description:"

for the pair to remove

\n",type:"Number|String"}],class:"p5.TypedDict",module:"Data"},print:{name:"print",class:"p5.TypedDict",module:"Data"},saveTable:{name:"saveTable",class:"p5.TypedDict",module:"Data"},saveJSON:{name:"saveJSON",class:"p5.TypedDict",module:"Data"}},"p5.NumberDict":{add:{name:"add",params:[{name:"Key",description:"

for the value you wish to add to

\n",type:"Number"},{name:"Number",description:"

to add to the value

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},sub:{name:"sub",params:[{name:"Key",description:"

for the value you wish to subtract from

\n",type:"Number"},{name:"Number",description:"

to subtract from the value

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},mult:{name:"mult",params:[{name:"Key",description:"

for value you wish to multiply

\n",type:"Number"},{name:"Amount",description:"

to multiply the value by

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},div:{name:"div",params:[{name:"Key",description:"

for value you wish to divide

\n",type:"Number"},{name:"Amount",description:"

to divide the value by

\n",type:"Number"}],class:"p5.NumberDict",module:"Data"},minValue:{name:"minValue",class:"p5.NumberDict",module:"Data"},maxValue:{name:"maxValue",class:"p5.NumberDict",module:"Data"},minKey:{name:"minKey",class:"p5.NumberDict",module:"Data"},maxKey:{name:"maxKey",class:"p5.NumberDict",module:"Data"}},"p5.MediaElement":{src:{name:"src",class:"p5.MediaElement",module:"DOM"},play:{name:"play",class:"p5.MediaElement",module:"DOM"},stop:{name:"stop",class:"p5.MediaElement",module:"DOM"},pause:{name:"pause",class:"p5.MediaElement",module:"DOM"},loop:{name:"loop",class:"p5.MediaElement",module:"DOM"},noLoop:{name:"noLoop",class:"p5.MediaElement",module:"DOM"},autoplay:{name:"autoplay",params:[{name:"shouldAutoplay",description:"

whether the element should autoplay

\n",type:"Boolean"}],class:"p5.MediaElement",module:"DOM"},volume:{name:"volume",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"val",description:"

volume between 0.0 and 1.0

\n",type:"Number"}],chainable:1}]},speed:{name:"speed",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"speed",description:"

speed multiplier for element playback

\n",type:"Number"}],chainable:1}]},time:{name:"time",class:"p5.MediaElement",module:"DOM",overloads:[{params:[]},{params:[{name:"time",description:"

time to jump to (in seconds)

\n",type:"Number"}],chainable:1}]},duration:{name:"duration",class:"p5.MediaElement",module:"DOM"},onended:{name:"onended",params:[{name:"callback",description:"

function to call when the\n soundfile has ended. The\n media element will be passed\n in as the argument to the\n callback.

\n",type:"Function"}],class:"p5.MediaElement",module:"DOM"},connect:{name:"connect",params:[{name:"audioNode",description:"

AudioNode from the Web Audio API,\nor an object from the p5.sound library

\n",type:"AudioNode|Object"}],class:"p5.MediaElement",module:"DOM"},disconnect:{name:"disconnect",class:"p5.MediaElement",module:"DOM"},showControls:{name:"showControls",class:"p5.MediaElement",module:"DOM"},hideControls:{name:"hideControls",class:"p5.MediaElement",module:"DOM"},addCue:{name:"addCue",params:[{name:"time",description:"

Time in seconds, relative to this media\n element's playback. For example, to trigger\n an event every time playback reaches two\n seconds, pass in the number 2. This will be\n passed as the first parameter to\n the callback function.

\n",type:"Number"},{name:"callback",description:"

Name of a function that will be\n called at the given time. The callback will\n receive time and (optionally) param as its\n two parameters.

\n",type:"Function"},{name:"value",description:"

An object to be passed as the\n second parameter to the\n callback function.

\n",type:"Object",optional:!0}],class:"p5.MediaElement",module:"DOM"},removeCue:{name:"removeCue",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.MediaElement",module:"DOM"},clearCues:{name:"clearCues",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.MediaElement",module:"DOM"}},"p5.File":{file:{name:"file",class:"p5.File",module:"DOM"},type:{name:"type",class:"p5.File",module:"DOM"},subtype:{name:"subtype",class:"p5.File",module:"DOM"},name:{name:"name",class:"p5.File",module:"DOM"},size:{name:"size",class:"p5.File",module:"DOM"},data:{name:"data",class:"p5.File",module:"DOM"}},"p5.Image":{width:{name:"width",class:"p5.Image",module:"Image"},height:{name:"height",class:"p5.Image",module:"Image"},pixels:{name:"pixels",class:"p5.Image",module:"Image"},loadPixels:{name:"loadPixels",class:"p5.Image",module:"Image"},updatePixels:{name:"updatePixels",class:"p5.Image",module:"Image",overloads:[{params:[{name:"x",description:"

x-offset of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"y",description:"

y-offset of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"w",description:"

height of the target update area for the\n underlying canvas

\n",type:"Integer"},{name:"h",description:"

height of the target update area for the\n underlying canvas

\n",type:"Integer"}]},{params:[]}]},get:{name:"get",class:"p5.Image",module:"Image",overloads:[{params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"w",description:"

width

\n",type:"Number"},{name:"h",description:"

height

\n",type:"Number"}]},{params:[]},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"}]}]},set:{name:"set",params:[{name:"x",description:"

x-coordinate of the pixel

\n",type:"Number"},{name:"y",description:"

y-coordinate of the pixel

\n",type:"Number"},{name:"a",description:'

grayscale value | pixel array |\n a p5.Color | image to copy

\n',type:"Number|Number[]|Object"}],class:"p5.Image",module:"Image"},resize:{name:"resize",params:[{name:"width",description:"

the resized image width

\n",type:"Number"},{name:"height",description:"

the resized image height

\n",type:"Number"}],class:"p5.Image",module:"Image"},copy:{name:"copy",class:"p5.Image",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image|p5.Element"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"}]}]},mask:{name:"mask",params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"}],class:"p5.Image",module:"Image"},filter:{name:"filter",params:[{name:"filterType",description:"

either THRESHOLD, GRAY, OPAQUE, INVERT,\n POSTERIZE, BLUR, ERODE, DILATE or BLUR.\n See Filters.js for docs on\n each available filter

\n",type:"Constant"},{name:"filterParam",description:"

an optional parameter unique\n to each filter, see above

\n",type:"Number",optional:!0}],class:"p5.Image",module:"Image"},blend:{name:"blend",class:"p5.Image",module:"Image",overloads:[{params:[{name:"srcImage",description:"

source image

\n",type:"p5.Image"},{name:"sx",description:"

X coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sy",description:"

Y coordinate of the source's upper left corner

\n",type:"Integer"},{name:"sw",description:"

source image width

\n",type:"Integer"},{name:"sh",description:"

source image height

\n",type:"Integer"},{name:"dx",description:"

X coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dy",description:"

Y coordinate of the destination's upper left corner

\n",type:"Integer"},{name:"dw",description:"

destination image width

\n",type:"Integer"},{name:"dh",description:"

destination image height

\n",type:"Integer"},{name:"blendMode",description:'

the blend mode. either\n BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.

\n

Available blend modes are: normal | multiply | screen | overlay |\n darken | lighten | color-dodge | color-burn | hard-light |\n soft-light | difference | exclusion | hue | saturation |\n color | luminosity

\n

http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

\n',type:"Constant"}]},{params:[{name:"sx",description:"",type:"Integer"},{name:"sy",description:"",type:"Integer"},{name:"sw",description:"",type:"Integer"},{name:"sh",description:"",type:"Integer"},{name:"dx",description:"",type:"Integer"},{name:"dy",description:"",type:"Integer"},{name:"dw",description:"",type:"Integer"},{name:"dh",description:"",type:"Integer"},{name:"blendMode",description:"",type:"Constant"}]}]},save:{name:"save",params:[{name:"filename",description:"

give your file a name

\n",type:"String"},{name:"extension",description:"

'png' or 'jpg'

\n",type:"String"}],class:"p5.Image",module:"Image"},reset:{name:"reset",class:"p5.Image",module:"Image"},getCurrentFrame:{name:"getCurrentFrame",class:"p5.Image",module:"Image"},setFrame:{name:"setFrame",params:[{name:"index",description:"

the index for the frame that should be displayed

\n",type:"Number"}],class:"p5.Image",module:"Image"},numFrames:{name:"numFrames",class:"p5.Image",module:"Image"},play:{name:"play",class:"p5.Image",module:"Image"},pause:{name:"pause",class:"p5.Image",module:"Image"},delay:{name:"delay",params:[{name:"d",description:"

the amount in milliseconds to delay between switching frames

\n",type:"Number"},{name:"index",description:"

the index of the frame that should have the new delay value {optional}

\n",type:"Number",optional:!0}],class:"p5.Image",module:"Image"}},"p5.PrintWriter":{write:{name:"write",params:[{name:"data",description:"

all data to be written by the PrintWriter

\n",type:"Array"}],class:"p5.PrintWriter",module:"IO"},print:{name:"print",params:[{name:"data",description:"

all data to be printed by the PrintWriter

\n",type:"Array"}],class:"p5.PrintWriter",module:"IO"},clear:{name:"clear",class:"p5.PrintWriter",module:"IO"},close:{name:"close",class:"p5.PrintWriter",module:"IO"}},"p5.Table":{columns:{name:"columns",class:"p5.Table",module:"IO"},rows:{name:"rows",class:"p5.Table",module:"IO"},addRow:{name:"addRow",params:[{name:"row",description:"

row to be added to the table

\n",type:"p5.TableRow",optional:!0}],class:"p5.Table",module:"IO"},removeRow:{name:"removeRow",params:[{name:"id",description:"

ID number of the row to remove

\n",type:"Integer"}],class:"p5.Table",module:"IO"},getRow:{name:"getRow",params:[{name:"rowID",description:"

ID number of the row to get

\n",type:"Integer"}],class:"p5.Table",module:"IO"},getRows:{name:"getRows",class:"p5.Table",module:"IO"},findRow:{name:"findRow",params:[{name:"value",description:"

The value to match

\n",type:"String"},{name:"column",description:"

ID number or title of the\n column to search

\n",type:"Integer|String"}],class:"p5.Table",module:"IO"},findRows:{name:"findRows",params:[{name:"value",description:"

The value to match

\n",type:"String"},{name:"column",description:"

ID number or title of the\n column to search

\n",type:"Integer|String"}],class:"p5.Table",module:"IO"},matchRow:{name:"matchRow",params:[{name:"regexp",description:"

The regular expression to match

\n",type:"String|RegExp"},{name:"column",description:"

The column ID (number) or\n title (string)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},matchRows:{name:"matchRows",params:[{name:"regexp",description:"

The regular expression to match

\n",type:"String"},{name:"column",description:"

The column ID (number) or\n title (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},getColumn:{name:"getColumn",params:[{name:"column",description:"

String or Number of the column to return

\n",type:"String|Number"}],class:"p5.Table",module:"IO"},clearRows:{name:"clearRows",class:"p5.Table",module:"IO"},addColumn:{name:"addColumn",params:[{name:"title",description:"

title of the given column

\n",type:"String",optional:!0}],class:"p5.Table",module:"IO"},getColumnCount:{name:"getColumnCount",class:"p5.Table",module:"IO"},getRowCount:{name:"getRowCount",class:"p5.Table",module:"IO"},removeTokens:{name:"removeTokens",params:[{name:"chars",description:"

String listing characters to be removed

\n",type:"String"},{name:"column",description:"

Column ID (number)\n or name (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},trim:{name:"trim",params:[{name:"column",description:"

Column ID (number)\n or name (string)

\n",type:"String|Integer",optional:!0}],class:"p5.Table",module:"IO"},removeColumn:{name:"removeColumn",params:[{name:"column",description:"

columnName (string) or ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},set:{name:"set",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"String|Number"}],class:"p5.Table",module:"IO"},setNum:{name:"setNum",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"Number"}],class:"p5.Table",module:"IO"},setString:{name:"setString",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

column ID (Number)\n or title (String)

\n",type:"String|Integer"},{name:"value",description:"

value to assign

\n",type:"String"}],class:"p5.Table",module:"IO"},get:{name:"get",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getNum:{name:"getNum",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getString:{name:"getString",params:[{name:"row",description:"

row ID

\n",type:"Integer"},{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.Table",module:"IO"},getObject:{name:"getObject",params:[{name:"headerColumn",description:"

Name of the column which should be used to\n title each row object (optional)

\n",type:"String",optional:!0}],class:"p5.Table",module:"IO"},getArray:{name:"getArray",class:"p5.Table",module:"IO"}},"p5.TableRow":{set:{name:"set",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored

\n",type:"String|Number"}],class:"p5.TableRow",module:"IO"},setNum:{name:"setNum",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored\n as a Float

\n",type:"Number|String"}],class:"p5.TableRow",module:"IO"},setString:{name:"setString",params:[{name:"column",description:"

Column ID (Number)\n or Title (String)

\n",type:"String|Integer"},{name:"value",description:"

The value to be stored\n as a String

\n",type:"String|Number|Boolean|Object"}],class:"p5.TableRow",module:"IO"},get:{name:"get",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"},getNum:{name:"getNum",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"},getString:{name:"getString",params:[{name:"column",description:"

columnName (string) or\n ID (number)

\n",type:"String|Integer"}],class:"p5.TableRow",module:"IO"}},"p5.XML":{getParent:{name:"getParent",class:"p5.XML",module:"IO"},getName:{name:"getName",class:"p5.XML",module:"IO"},setName:{name:"setName",params:[{name:"the",description:"

new name of the node

\n",type:"String"}],class:"p5.XML",module:"IO"},hasChildren:{name:"hasChildren",class:"p5.XML",module:"IO"},listChildren:{name:"listChildren",class:"p5.XML",module:"IO"},getChildren:{name:"getChildren",params:[{name:"name",description:"

element name

\n",type:"String",optional:!0}],class:"p5.XML",module:"IO"},getChild:{name:"getChild",params:[{name:"name",description:"

element name or index

\n",type:"String|Integer"}],class:"p5.XML",module:"IO"},addChild:{name:"addChild",params:[{name:"node",description:'

a p5.XML Object which will be the child to be added

\n',type:"p5.XML"}],class:"p5.XML",module:"IO"},removeChild:{name:"removeChild",params:[{name:"name",description:"

element name or index

\n",type:"String|Integer"}],class:"p5.XML",module:"IO"},getAttributeCount:{name:"getAttributeCount",class:"p5.XML",module:"IO"},listAttributes:{name:"listAttributes",class:"p5.XML",module:"IO"},hasAttribute:{name:"hasAttribute",params:[{name:"the",description:"

attribute to be checked

\n",type:"String"}],class:"p5.XML",module:"IO"},getNum:{name:"getNum",params:[{name:"name",description:"

the non-null full name of the attribute

\n",type:"String"},{name:"defaultValue",description:"

the default value of the attribute

\n",type:"Number",optional:!0}],class:"p5.XML",module:"IO"},getString:{name:"getString",params:[{name:"name",description:"

the non-null full name of the attribute

\n",type:"String"},{name:"defaultValue",description:"

the default value of the attribute

\n",type:"Number",optional:!0}],class:"p5.XML",module:"IO"},setAttribute:{name:"setAttribute",params:[{name:"name",description:"

the full name of the attribute

\n",type:"String"},{name:"value",description:"

the value of the attribute

\n",type:"Number|String|Boolean"}],class:"p5.XML",module:"IO"},getContent:{name:"getContent",params:[{name:"defaultValue",description:"

value returned if no content is found

\n",type:"String",optional:!0}],class:"p5.XML",module:"IO"},setContent:{name:"setContent",params:[{name:"text",description:"

the new content

\n",type:"String"}],class:"p5.XML",module:"IO"},serialize:{name:"serialize",class:"p5.XML",module:"IO"}},"p5.Vector":{x:{name:"x",class:"p5.Vector",module:"Math"},y:{name:"y",class:"p5.Vector",module:"Math"},z:{name:"z",class:"p5.Vector",module:"Math"},toString:{name:"toString",class:"p5.Vector",module:"Math"},set:{name:"set",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

the y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to set

\n",type:"p5.Vector|Number[]"}],chainable:1}]},copy:{name:"copy",class:"p5.Vector",module:"Math"},add:{name:"add",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector to be added

\n",type:"Number"},{name:"y",description:"

the y component of the vector to be added

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector to be added

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to add

\n",type:"p5.Vector|Number[]"}],chainable:1},{params:[{name:"v1",description:'

a p5.Vector to add

\n',type:"p5.Vector"},{name:"v2",description:'

a p5.Vector to add

\n',type:"p5.Vector"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},rem:{name:"rem",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of divisor vector

\n",type:"Number"},{name:"y",description:"

the y component of divisor vector

\n",type:"Number"},{name:"z",description:"

the z component of divisor vector

\n",type:"Number"}],chainable:1},{params:[{name:"value",description:"

divisor vector

\n",type:"p5.Vector | Number[]"}],chainable:1},{params:[{name:"v1",description:'

dividend p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

divisor p5.Vector

\n',type:"p5.Vector"}],static:1},{params:[{name:"v1",description:"",type:"p5.Vector"},{name:"v2",description:"",type:"p5.Vector"}],static:1}]},sub:{name:"sub",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector to subtract

\n",type:"Number"},{name:"y",description:"

the y component of the vector to subtract

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector to subtract

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"value",description:"

the vector to subtract

\n",type:"p5.Vector|Number[]"}],chainable:1},{params:[{name:"v1",description:'

a p5.Vector to subtract from

\n',type:"p5.Vector"},{name:"v2",description:'

a p5.Vector to subtract

\n',type:"p5.Vector"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},mult:{name:"mult",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"n",description:"

The number to multiply with the vector

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"

The number to multiply with the x component of the vector

\n",type:"Number"},{name:"y",description:"

The number to multiply with the y component of the vector

\n",type:"Number"},{name:"z",description:"

The number to multiply with the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"arr",description:"

The array to multiply with the components of the vector

\n",type:"Number[]"}],chainable:1},{params:[{name:"v",description:"

The vector to multiply with the components of the original vector

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number",optional:!0}],static:1},{params:[{name:"v",description:"",type:"p5.Vector"},{name:"n",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"v1",description:"",type:"p5.Vector"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"arr",description:"",type:"Number[]"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1}]},div:{name:"div",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"n",description:"

The number to divide the vector by

\n",type:"Number"}],chainable:1},{params:[{name:"x",description:"

The number to divide with the x component of the vector

\n",type:"Number"},{name:"y",description:"

The number to divide with the y component of the vector

\n",type:"Number"},{name:"z",description:"

The number to divide with the z component of the vector

\n",type:"Number",optional:!0}],chainable:1},{params:[{name:"arr",description:"

The array to divide the components of the vector by

\n",type:"Number[]"}],chainable:1},{params:[{name:"v",description:"

The vector to divide the components of the original vector by

\n",type:"p5.Vector"}],chainable:1},{params:[{name:"x",description:"",type:"Number"},{name:"y",description:"",type:"Number"},{name:"z",description:"",type:"Number",optional:!0}],static:1},{params:[{name:"v",description:"",type:"p5.Vector"},{name:"n",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"v1",description:"",type:"p5.Vector"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1},{params:[{name:"v0",description:"",type:"p5.Vector"},{name:"arr",description:"",type:"Number[]"},{name:"target",description:"",type:"p5.Vector",optional:!0}],static:1}]},mag:{name:"mag",class:"p5.Vector",module:"Math",overloads:[{params:[]},{params:[{name:"vecT",description:"

the vector to return the magnitude of

\n",type:"p5.Vector"}],static:1}]},magSq:{name:"magSq",class:"p5.Vector",module:"Math"},dot:{name:"dot",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

x component of the vector

\n",type:"Number"},{name:"y",description:"

y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

z component of the vector

\n",type:"Number",optional:!0}]},{params:[{name:"value",description:'

value component of the vector or a p5.Vector

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},cross:{name:"cross",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"v",description:'

p5.Vector to be crossed

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},dist:{name:"dist",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"v",description:'

the x, y, and z coordinates of a p5.Vector

\n',type:"p5.Vector"}]},{params:[{name:"v1",description:'

the first p5.Vector

\n',type:"p5.Vector"},{name:"v2",description:'

the second p5.Vector

\n',type:"p5.Vector"}],static:1}]},normalize:{name:"normalize",class:"p5.Vector",module:"Math"},limit:{name:"limit",params:[{name:"max",description:"

the maximum magnitude for the vector

\n",type:"Number"}],class:"p5.Vector",module:"Math"},setMag:{name:"setMag",params:[{name:"len",description:"

the new length for this vector

\n",type:"Number"}],class:"p5.Vector",module:"Math"},heading:{name:"heading",class:"p5.Vector",module:"Math"},rotate:{name:"rotate",params:[{name:"angle",description:"

the angle of rotation

\n",type:"Number"}],class:"p5.Vector",module:"Math"},angleBetween:{name:"angleBetween",params:[{name:"value",description:'

the x, y, and z components of a p5.Vector

\n',type:"p5.Vector"}],class:"p5.Vector",module:"Math"},lerp:{name:"lerp",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component

\n",type:"Number"},{name:"y",description:"

the y component

\n",type:"Number"},{name:"z",description:"

the z component

\n",type:"Number"},{name:"amt",description:"

the amount of interpolation; some value between 0.0\n (old vector) and 1.0 (new vector). 0.9 is very near\n the new vector. 0.5 is halfway in between.

\n",type:"Number"}],chainable:1},{params:[{name:"v",description:'

the p5.Vector to lerp to

\n',type:"p5.Vector"},{name:"amt",description:"",type:"Number"}],chainable:1},{params:[{name:"v1",description:"",type:"p5.Vector"},{name:"v2",description:"",type:"p5.Vector"},{name:"amt",description:"",type:"Number"},{name:"target",description:"

the vector to receive the result (Optional)

\n",type:"p5.Vector",optional:!0}],static:1}]},reflect:{name:"reflect",params:[{name:"surfaceNormal",description:'

the p5.Vector to reflect about, will be normalized by this method

\n',type:"p5.Vector"}],class:"p5.Vector",module:"Math"},array:{name:"array",class:"p5.Vector",module:"Math"},equals:{name:"equals",class:"p5.Vector",module:"Math",overloads:[{params:[{name:"x",description:"

the x component of the vector

\n",type:"Number",optional:!0},{name:"y",description:"

the y component of the vector

\n",type:"Number",optional:!0},{name:"z",description:"

the z component of the vector

\n",type:"Number",optional:!0}]},{params:[{name:"value",description:"

the vector to compare

\n",type:"p5.Vector|Array"}]}]},fromAngle:{name:"fromAngle",params:[{name:"angle",description:'

the desired angle, in radians (unaffected by angleMode)

\n',type:"Number"},{name:"length",description:"

the length of the new vector (defaults to 1)

\n",type:"Number",optional:!0}],class:"p5.Vector",module:"Math"},fromAngles:{name:"fromAngles",params:[{name:"theta",description:"

the polar angle, in radians (zero is up)

\n",type:"Number"},{name:"phi",description:"

the azimuthal angle, in radians\n (zero is out of the screen)

\n",type:"Number"},{name:"length",description:"

the length of the new vector (defaults to 1)

\n",type:"Number",optional:!0}],class:"p5.Vector",module:"Math"},random2D:{name:"random2D",class:"p5.Vector",module:"Math"},random3D:{name:"random3D",class:"p5.Vector",module:"Math"}},"p5.Font":{font:{name:"font",class:"p5.Font",module:"Typography"},textBounds:{name:"textBounds",params:[{name:"line",description:"

a line of text

\n",type:"String"},{name:"x",description:"

x-position

\n",type:"Number"},{name:"y",description:"

y-position

\n",type:"Number"},{name:"fontSize",description:"

font size to use (optional) Default is 12.

\n",type:"Number",optional:!0},{name:"options",description:"

opentype options (optional)\n opentype fonts contains alignment and baseline options.\n Default is 'LEFT' and 'alphabetic'

\n",type:"Object",optional:!0}],class:"p5.Font",module:"Typography"},textToPoints:{name:"textToPoints",params:[{name:"txt",description:"

a line of text

\n",type:"String"},{name:"x",description:"

x-position

\n",type:"Number"},{name:"y",description:"

y-position

\n",type:"Number"},{name:"fontSize",description:"

font size to use (optional)

\n",type:"Number"},{name:"options",description:"

an (optional) object that can contain:

\n


sampleFactor - the ratio of path-length to number of samples\n(default=.1); higher values yield more points and are therefore\nmore precise

\n


simplifyThreshold - if set to a non-zero value, collinear points will be\nbe removed from the polygon; the value represents the threshold angle to use\nwhen determining whether two edges are collinear

\n",type:"Object",optional:!0}],class:"p5.Font",module:"Typography"}},"p5.Camera":{perspective:{name:"perspective",class:"p5.Camera",module:"Lights, Camera"},ortho:{name:"ortho",class:"p5.Camera",module:"Lights, Camera"},frustum:{name:"frustum",class:"p5.Camera",module:"Lights, Camera"},pan:{name:"pan",params:[{name:"angle",description:'

amount to rotate camera in current\nangleMode units.\nGreater than 0 values rotate counterclockwise (to the left).

\n',type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},tilt:{name:"tilt",params:[{name:"angle",description:'

amount to rotate camera in current\nangleMode units.\nGreater than 0 values rotate counterclockwise (to the left).

\n',type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},lookAt:{name:"lookAt",params:[{name:"x",description:"

x position of a point in world space

\n",type:"Number"},{name:"y",description:"

y position of a point in world space

\n",type:"Number"},{name:"z",description:"

z position of a point in world space

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},camera:{name:"camera",class:"p5.Camera",module:"Lights, Camera"},move:{name:"move",params:[{name:"x",description:"

amount to move along camera's left-right axis

\n",type:"Number"},{name:"y",description:"

amount to move along camera's up-down axis

\n",type:"Number"},{name:"z",description:"

amount to move along camera's forward-backward axis

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"},setPosition:{name:"setPosition",params:[{name:"x",description:"

x position of a point in world space

\n",type:"Number"},{name:"y",description:"

y position of a point in world space

\n",type:"Number"},{name:"z",description:"

z position of a point in world space

\n",type:"Number"}],class:"p5.Camera",module:"Lights, Camera"}},"p5.Geometry":{computeFaces:{name:"computeFaces",class:"p5.Geometry",module:"Lights, Camera"},computeNormals:{name:"computeNormals",class:"p5.Geometry",module:"Lights, Camera"},averageNormals:{name:"averageNormals",class:"p5.Geometry",module:"Lights, Camera"},averagePoleNormals:{name:"averagePoleNormals",class:"p5.Geometry",module:"Lights, Camera"},normalize:{name:"normalize",class:"p5.Geometry",module:"Lights, Camera"}},"p5.Shader":{setUniform:{name:"setUniform",params:[{name:"uniformName",description:"

the name of the uniform in the\nshader program

\n",type:"String"},{name:"data",description:"

the data to be associated\nwith that uniform; type varies (could be a single numerical value, array,\nmatrix, or texture / sampler reference)

\n",type:"Object|Number|Boolean|Number[]"}],class:"p5.Shader",module:"Lights, Camera"}},"p5.sound":{getMasterVolume:{name:"getMasterVolume",class:"p5.sound",module:"p5.sound"},masterVolume:{name:"masterVolume",params:[{name:"volume",description:"

Volume (amplitude) between 0.0\n and 1.0 or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Fade for t seconds

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen at\n t seconds in the future

\n",type:"Number",optional:!0}],class:"p5.sound",module:"p5.sound"},soundOut:{name:"soundOut",class:"p5.sound",module:"p5.sound"}},"p5.Effect":{amp:{name:"amp",params:[{name:"vol",description:"

amplitude between 0 and 1.0

\n",type:"Number",optional:!0},{name:"rampTime",description:"

create a fade that lasts until rampTime

\n",type:"Number",optional:!0},{name:"tFromNow",description:"

schedule this event to happen in tFromNow seconds

\n",type:"Number",optional:!0}],class:"p5.Effect",module:"p5.sound"},chain:{name:"chain",params:[{name:"arguments",description:"

Chain together multiple sound objects

\n",type:"Object",optional:!0}],class:"p5.Effect",module:"p5.sound"},drywet:{name:"drywet",params:[{name:"fade",description:"

The desired drywet value (0 - 1.0)

\n",type:"Number",optional:!0}],class:"p5.Effect",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Effect",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Effect",module:"p5.sound"}},"p5.Filter":{biquadFilter:{name:"biquadFilter",class:"p5.Filter",module:"p5.sound"},process:{name:"process",params:[{name:"Signal",description:"

An object that outputs audio

\n",type:"Object"},{name:"freq",description:"

Frequency in Hz, from 10 to 22050

\n",type:"Number",optional:!0},{name:"res",description:"

Resonance/Width of the filter frequency\n from 0.001 to 1000

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},set:{name:"set",params:[{name:"freq",description:"

Frequency in Hz, from 10 to 22050

\n",type:"Number",optional:!0},{name:"res",description:"

Resonance (Q) from 0.001 to 1000

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},freq:{name:"freq",params:[{name:"freq",description:"

Filter Frequency

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},res:{name:"res",params:[{name:"res",description:"

Resonance/Width of filter freq\n from 0.001 to 1000

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Filter",module:"p5.sound"},gain:{name:"gain",params:[{name:"gain",description:"",type:"Number"}],class:"p5.Filter",module:"p5.sound"},toggle:{name:"toggle",class:"p5.Filter",module:"p5.sound"},setType:{name:"setType",params:[{name:"t",description:"",type:"String"}],class:"p5.Filter",module:"p5.sound"}},"p5.Oscillator":{start:{name:"start",params:[{name:"time",description:"

startTime in seconds from now.

\n",type:"Number",optional:!0},{name:"frequency",description:"

frequency in Hz.

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},stop:{name:"stop",params:[{name:"secondsFromNow",description:"

Time, in seconds from now.

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

between 0 and 1.0\n or a modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},freq:{name:"freq",params:[{name:"Frequency",description:"

Frequency in Hz\n or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Ramp time (in seconds)

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen\n at x seconds from now

\n",type:"Number",optional:!0}],class:"p5.Oscillator",module:"p5.sound"},setType:{name:"setType",params:[{name:"type",description:"

'sine', 'triangle', 'sawtooth' or 'square'.

\n",type:"String"}],class:"p5.Oscillator",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.Oscillator",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Oscillator",module:"p5.sound"},pan:{name:"pan",params:[{name:"panning",description:"

Number between -1 and 1

\n",type:"Number"},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},phase:{name:"phase",params:[{name:"phase",description:"

float between 0.0 and 1.0

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"

Constant number to add

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

Constant number to multiply

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"},scale:{name:"scale",params:[{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Oscillator",module:"p5.sound"}},"p5.MonoSynth":{play:{name:"play",params:[{name:"note",description:'

the note you want to play, specified as a\n frequency in Hertz (Number) or as a midi\n value in Note/Octave format ("C4", "Eb3"...etc")\n See \n Tone. Defaults to 440 hz.

\n',type:"String | Number"},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope. Defaults to 0.15 seconds.

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},triggerAttack:{params:[{name:"note",description:'

the note you want to play, specified as a\n frequency in Hertz (Number) or as a midi\n value in Note/Octave format ("C4", "Eb3"...etc")\n See \n Tone. Defaults to 440 hz

\n',type:"String | Number"},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0}],name:"triggerAttack",class:"p5.MonoSynth",module:"p5.sound"},triggerRelease:{params:[{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number"}],name:"triggerRelease",class:"p5.MonoSynth",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number"},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},attack:{name:"attack",class:"p5.MonoSynth",module:"p5.sound"},decay:{name:"decay",class:"p5.MonoSynth",module:"p5.sound"},sustain:{name:"sustain",class:"p5.MonoSynth",module:"p5.sound"},release:{name:"release",class:"p5.MonoSynth",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

desired volume

\n",type:"Number"},{name:"rampTime",description:"

Time to reach new volume

\n",type:"Number",optional:!0}],class:"p5.MonoSynth",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.MonoSynth",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.MonoSynth",module:"p5.sound"},dispose:{name:"dispose",class:"p5.MonoSynth",module:"p5.sound"}},"p5.AudioVoice":{connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.AudioVoice",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.AudioVoice",module:"p5.sound"}},"p5.PolySynth":{notes:{name:"notes",class:"p5.PolySynth",module:"p5.sound"},polyvalue:{name:"polyvalue",class:"p5.PolySynth",module:"p5.sound"},AudioVoice:{name:"AudioVoice",class:"p5.PolySynth",module:"p5.sound"},play:{name:"play",params:[{name:"note",description:"

midi note to play (ranging from 0 to 127 - 60 being a middle C)

\n",type:"Number",optional:!0},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteADSR:{name:"noteADSR",params:[{name:"note",description:"

Midi note on which ADSR should be set.

\n",type:"Number",optional:!0},{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number",optional:!0},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number",optional:!0},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteAttack:{name:"noteAttack",params:[{name:"note",description:"

midi note on which attack should be triggered.

\n",type:"Number",optional:!0},{name:"velocity",description:"

velocity of the note to play (ranging from 0 to 1)/

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time from now (in seconds)

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},noteRelease:{name:"noteRelease",params:[{name:"note",description:"

midi note on which attack should be triggered.\n If no value is provided, all notes will be released.

\n",type:"Number",optional:!0},{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number",optional:!0}],class:"p5.PolySynth",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

A p5.sound or Web Audio object

\n",type:"Object"}],class:"p5.PolySynth",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.PolySynth",module:"p5.sound"},dispose:{name:"dispose",class:"p5.PolySynth",module:"p5.sound"}},"p5.SoundFile":{isLoaded:{name:"isLoaded",class:"p5.SoundFile",module:"p5.sound"},play:{name:"play",params:[{name:"startTime",description:"

(optional) schedule playback to start (in seconds from now).

\n",type:"Number",optional:!0},{name:"rate",description:"

(optional) playback rate

\n",type:"Number",optional:!0},{name:"amp",description:"

(optional) amplitude (volume)\n of playback

\n",type:"Number",optional:!0},{name:"cueStart",description:"

(optional) cue start time in seconds

\n",type:"Number",optional:!0},{name:"duration",description:"

(optional) duration of playback in seconds

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},playMode:{name:"playMode",params:[{name:"str",description:"

'restart' or 'sustain' or 'untilDone'

\n",type:"String"}],class:"p5.SoundFile",module:"p5.sound"},pause:{name:"pause",params:[{name:"startTime",description:"

(optional) schedule event to occur\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},loop:{name:"loop",params:[{name:"startTime",description:"

(optional) schedule event to occur\n seconds from now

\n",type:"Number",optional:!0},{name:"rate",description:"

(optional) playback rate

\n",type:"Number",optional:!0},{name:"amp",description:"

(optional) playback volume

\n",type:"Number",optional:!0},{name:"cueLoopStart",description:"

(optional) startTime in seconds

\n",type:"Number",optional:!0},{name:"duration",description:"

(optional) loop duration in seconds

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},setLoop:{name:"setLoop",params:[{name:"Boolean",description:"

set looping to true or false

\n",type:"Boolean"}],class:"p5.SoundFile",module:"p5.sound"},isLooping:{name:"isLooping",class:"p5.SoundFile",module:"p5.sound"},isPlaying:{name:"isPlaying",class:"p5.SoundFile",module:"p5.sound"},isPaused:{name:"isPaused",class:"p5.SoundFile",module:"p5.sound"},stop:{name:"stop",params:[{name:"startTime",description:"

(optional) schedule event to occur\n in seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},setVolume:{name:"setVolume",params:[{name:"volume",description:"

Volume (amplitude) between 0.0\n and 1.0 or modulating signal/oscillator

\n",type:"Number|Object"},{name:"rampTime",description:"

Fade for t seconds

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

Schedule this event to happen at\n t seconds in the future

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},pan:{name:"pan",params:[{name:"panValue",description:"

Set the stereo panner

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},getPan:{name:"getPan",class:"p5.SoundFile",module:"p5.sound"},rate:{name:"rate",params:[{name:"playbackRate",description:"

Set the playback rate. 1.0 is normal,\n .5 is half-speed, 2.0 is twice as fast.\n Values less than zero play backwards.

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},duration:{name:"duration",class:"p5.SoundFile",module:"p5.sound"},currentTime:{name:"currentTime",class:"p5.SoundFile",module:"p5.sound"},jump:{name:"jump",params:[{name:"cueTime",description:"

cueTime of the soundFile in seconds.

\n",type:"Number"},{name:"duration",description:"

duration in seconds.

\n",type:"Number"}],class:"p5.SoundFile",module:"p5.sound"},channels:{name:"channels",class:"p5.SoundFile",module:"p5.sound"},sampleRate:{name:"sampleRate",class:"p5.SoundFile",module:"p5.sound"},frames:{name:"frames",class:"p5.SoundFile",module:"p5.sound"},getPeaks:{name:"getPeaks",params:[{name:"length",description:"

length is the size of the returned array.\n Larger length results in more precision.\n Defaults to 5*width of the browser window.

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},reverseBuffer:{name:"reverseBuffer",class:"p5.SoundFile",module:"p5.sound"},onended:{name:"onended",params:[{name:"callback",description:"

function to call when the\n soundfile has ended.

\n",type:"Function"}],class:"p5.SoundFile",module:"p5.sound"},connect:{name:"connect",params:[{name:"object",description:"

Audio object that accepts an input

\n",type:"Object",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.SoundFile",module:"p5.sound"},setPath:{name:"setPath",params:[{name:"path",description:"

path to audio file

\n",type:"String"},{name:"callback",description:"

Callback

\n",type:"Function"}],class:"p5.SoundFile",module:"p5.sound"},setBuffer:{name:"setBuffer",params:[{name:"buf",description:"

Array of Float32 Array(s). 2 Float32 Arrays\n will create a stereo source. 1 will create\n a mono source.

\n",type:"Array"}],class:"p5.SoundFile",module:"p5.sound"},processPeaks:{name:"processPeaks",params:[{name:"callback",description:"

a function to call once this data is returned

\n",type:"Function"},{name:"initThreshold",description:"

initial threshold defaults to 0.9

\n",type:"Number",optional:!0},{name:"minThreshold",description:"

minimum threshold defaults to 0.22

\n",type:"Number",optional:!0},{name:"minPeaks",description:"

minimum number of peaks defaults to 200

\n",type:"Number",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},addCue:{name:"addCue",params:[{name:"time",description:"

Time in seconds, relative to this media\n element's playback. For example, to trigger\n an event every time playback reaches two\n seconds, pass in the number 2. This will be\n passed as the first parameter to\n the callback function.

\n",type:"Number"},{name:"callback",description:"

Name of a function that will be\n called at the given time. The callback will\n receive time and (optionally) param as its\n two parameters.

\n",type:"Function"},{name:"value",description:"

An object to be passed as the\n second parameter to the\n callback function.

\n",type:"Object",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},removeCue:{name:"removeCue",params:[{name:"id",description:"

ID of the cue, as returned by addCue

\n",type:"Number"}],class:"p5.SoundFile",module:"p5.sound"},clearCues:{name:"clearCues",class:"p5.SoundFile",module:"p5.sound"},save:{name:"save",params:[{name:"fileName",description:"

name of the resulting .wav file.

\n",type:"String",optional:!0}],class:"p5.SoundFile",module:"p5.sound"},getBlob:{name:"getBlob",class:"p5.SoundFile",module:"p5.sound"}},"p5.Amplitude":{setInput:{name:"setInput",params:[{name:"snd",description:"

set the sound source\n (optional, defaults to\n master output)

\n",type:"SoundObject|undefined",optional:!0},{name:"smoothing",description:"

a range between 0.0 and 1.0\n to smooth amplitude readings

\n",type:"Number|undefined",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},getLevel:{name:"getLevel",params:[{name:"channel",description:"

Optionally return only channel 0 (left) or 1 (right)

\n",type:"Number",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},toggleNormalize:{name:"toggleNormalize",params:[{name:"boolean",description:"

set normalize to true (1) or false (0)

\n",type:"Boolean",optional:!0}],class:"p5.Amplitude",module:"p5.sound"},smooth:{name:"smooth",params:[{name:"set",description:"

smoothing from 0.0 <= 1

\n",type:"Number"}],class:"p5.Amplitude",module:"p5.sound"}},"p5.FFT":{setInput:{name:"setInput",params:[{name:"source",description:"

p5.sound object (or web audio API source node)

\n",type:"Object",optional:!0}],class:"p5.FFT",module:"p5.sound"},waveform:{name:"waveform",params:[{name:"bins",description:"

Must be a power of two between\n 16 and 1024. Defaults to 1024.

\n",type:"Number",optional:!0},{name:"precision",description:"

If any value is provided, will return results\n in a Float32 Array which is more precise\n than a regular array.

\n",type:"String",optional:!0}],class:"p5.FFT",module:"p5.sound"},analyze:{name:"analyze",params:[{name:"bins",description:"

Must be a power of two between\n 16 and 1024. Defaults to 1024.

\n",type:"Number",optional:!0},{name:"scale",description:'

If "dB," returns decibel\n float measurements between\n -140 and 0 (max).\n Otherwise returns integers from 0-255.

\n',type:"Number",optional:!0}],class:"p5.FFT",module:"p5.sound"},getEnergy:{name:"getEnergy",params:[{name:"frequency1",description:'

Will return a value representing\n energy at this frequency. Alternately,\n the strings "bass", "lowMid" "mid",\n "highMid", and "treble" will return\n predefined frequency ranges.

\n',type:"Number|String"},{name:"frequency2",description:"

If a second frequency is given,\n will return average amount of\n energy that exists between the\n two frequencies.

\n",type:"Number",optional:!0}],class:"p5.FFT",module:"p5.sound"},getCentroid:{name:"getCentroid",class:"p5.FFT",module:"p5.sound"},smooth:{name:"smooth",params:[{name:"smoothing",description:"

0.0 < smoothing < 1.0.\n Defaults to 0.8.

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"},linAverages:{name:"linAverages",params:[{name:"N",description:"

Number of returned frequency groups

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"},logAverages:{name:"logAverages",params:[{name:"octaveBands",description:"

Array of Octave Bands objects for grouping

\n",type:"Array"}],class:"p5.FFT",module:"p5.sound"},getOctaveBands:{name:"getOctaveBands",params:[{name:"N",description:"

Specifies the 1/N type of generated octave bands

\n",type:"Number"},{name:"fCtr0",description:"

Minimum central frequency for the lowest band

\n",type:"Number"}],class:"p5.FFT",module:"p5.sound"}},"p5.Signal":{fade:{name:"fade",params:[{name:"value",description:"

Value to set this signal

\n",type:"Number"},{name:"secondsFromNow",description:"

Length of fade, in seconds from now

\n",type:"Number",optional:!0}],class:"p5.Signal",module:"p5.sound"},setInput:{name:"setInput",params:[{name:"input",description:"",type:"Object"}],class:"p5.Signal",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"",type:"Number"}],class:"p5.Signal",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

to multiply

\n",type:"Number"}],class:"p5.Signal",module:"p5.sound"},scale:{name:"scale",params:[{name:"number",description:"

to multiply

\n",type:"Number"},{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Signal",module:"p5.sound"}},"p5.Envelope":{attackTime:{name:"attackTime",class:"p5.Envelope",module:"p5.sound"},attackLevel:{name:"attackLevel",class:"p5.Envelope",module:"p5.sound"},decayTime:{name:"decayTime",class:"p5.Envelope",module:"p5.sound"},decayLevel:{name:"decayLevel",class:"p5.Envelope",module:"p5.sound"},releaseTime:{name:"releaseTime",class:"p5.Envelope",module:"p5.sound"},releaseLevel:{name:"releaseLevel",class:"p5.Envelope",module:"p5.sound"},set:{name:"set",params:[{name:"attackTime",description:"

Time (in seconds) before level\n reaches attackLevel

\n",type:"Number"},{name:"attackLevel",description:"

Typically an amplitude between\n 0.0 and 1.0

\n",type:"Number"},{name:"decayTime",description:"

Time

\n",type:"Number"},{name:"decayLevel",description:"

Amplitude (In a standard ADSR envelope,\n decayLevel = sustainLevel)

\n",type:"Number"},{name:"releaseTime",description:"

Release Time (in seconds)

\n",type:"Number"},{name:"releaseLevel",description:"

Amplitude

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},setADSR:{name:"setADSR",params:[{name:"attackTime",description:"

Time (in seconds before envelope\n reaches Attack Level

\n",type:"Number"},{name:"decayTime",description:"

Time (in seconds) before envelope\n reaches Decay/Sustain Level

\n",type:"Number",optional:!0},{name:"susRatio",description:"

Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n where 1.0 = attackLevel, 0.0 = releaseLevel.\n The susRatio determines the decayLevel and the level at which the\n sustain portion of the envelope will sustain.\n For example, if attackLevel is 0.4, releaseLevel is 0,\n and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n increased to 1.0 (using setRange),\n then decayLevel would increase proportionally, to become 0.5.

\n",type:"Number",optional:!0},{name:"releaseTime",description:"

Time in seconds from now (defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},setRange:{name:"setRange",params:[{name:"aLevel",description:"

attack level (defaults to 1)

\n",type:"Number"},{name:"rLevel",description:"

release level (defaults to 0)

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},setInput:{name:"setInput",params:[{name:"inputs",description:"

A p5.sound object or\n Web Audio Param.

\n",type:"Object",optional:!0,multiple:!0}],class:"p5.Envelope",module:"p5.sound"},setExp:{name:"setExp",params:[{name:"isExp",description:"

true is exponential, false is linear

\n",type:"Boolean"}],class:"p5.Envelope",module:"p5.sound"},play:{name:"play",params:[{name:"unit",description:"

A p5.sound object or\n Web Audio Param.

\n",type:"Object"},{name:"startTime",description:"

time from now (in seconds) at which to play

\n",type:"Number",optional:!0},{name:"sustainTime",description:"

time to sustain before releasing the envelope

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},triggerAttack:{name:"triggerAttack",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

time from now (in seconds)

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},triggerRelease:{name:"triggerRelease",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

time to trigger the release

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},ramp:{name:"ramp",params:[{name:"unit",description:"

p5.sound Object or Web Audio Param

\n",type:"Object"},{name:"secondsFromNow",description:"

When to trigger the ramp

\n",type:"Number"},{name:"v",description:"

Target value

\n",type:"Number"},{name:"v2",description:"

Second target value (optional)

\n",type:"Number",optional:!0}],class:"p5.Envelope",module:"p5.sound"},add:{name:"add",params:[{name:"number",description:"

Constant number to add

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},mult:{name:"mult",params:[{name:"number",description:"

Constant number to multiply

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"},scale:{name:"scale",params:[{name:"inMin",description:"

input range minumum

\n",type:"Number"},{name:"inMax",description:"

input range maximum

\n",type:"Number"},{name:"outMin",description:"

input range minumum

\n",type:"Number"},{name:"outMax",description:"

input range maximum

\n",type:"Number"}],class:"p5.Envelope",module:"p5.sound"}},"p5.Pulse":{width:{name:"width",params:[{name:"width",description:"

Width between the pulses (0 to 1.0,\n defaults to 0)

\n",type:"Number",optional:!0}],class:"p5.Pulse",module:"p5.sound"}},"p5.Noise":{setType:{name:"setType",params:[{name:"type",description:"

'white', 'pink' or 'brown'

\n",type:"String",optional:!0}],class:"p5.Noise",module:"p5.sound"}},"p5.AudioIn":{input:{name:"input",class:"p5.AudioIn",module:"p5.sound"},output:{name:"output",class:"p5.AudioIn",module:"p5.sound"},stream:{name:"stream",class:"p5.AudioIn",module:"p5.sound"},mediaStream:{name:"mediaStream",class:"p5.AudioIn",module:"p5.sound"},currentSource:{name:"currentSource",class:"p5.AudioIn",module:"p5.sound"},enabled:{name:"enabled",class:"p5.AudioIn",module:"p5.sound"},amplitude:{name:"amplitude",class:"p5.AudioIn",module:"p5.sound"},start:{name:"start",params:[{name:"successCallback",description:"

Name of a function to call on\n success.

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

Name of a function to call if\n there was an error. For example,\n some browsers do not support\n getUserMedia.

\n",type:"Function",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},stop:{name:"stop",class:"p5.AudioIn",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"

An object that accepts audio input,\n such as an FFT

\n",type:"Object",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.AudioIn",module:"p5.sound"},getLevel:{name:"getLevel",params:[{name:"smoothing",description:"

Smoothing is 0.0 by default.\n Smooths values based on previous values.

\n",type:"Number",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},amp:{name:"amp",params:[{name:"vol",description:"

between 0 and 1.0

\n",type:"Number"},{name:"time",description:"

ramp time (optional)

\n",type:"Number",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},getSources:{name:"getSources",params:[{name:"successCallback",description:"

This callback function handles the sources when they\n have been enumerated. The callback function\n receives the deviceList array as its only argument

\n",type:"Function",optional:!0},{name:"errorCallback",description:"

This optional callback receives the error\n message as its argument.

\n",type:"Function",optional:!0}],class:"p5.AudioIn",module:"p5.sound"},setSource:{name:"setSource",params:[{name:"num",description:"

position of input source in the array

\n",type:"Number"}],class:"p5.AudioIn",module:"p5.sound"}},"p5.EQ":{bands:{name:"bands",class:"p5.EQ",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Audio source

\n",type:"Object"}],class:"p5.EQ",module:"p5.sound"}},"p5.Panner3D":{panner:{name:"panner",class:"p5.Panner3D",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Input source

\n",type:"Object"}],class:"p5.Panner3D",module:"p5.sound"},set:{name:"set",params:[{name:"xVal",description:"",type:"Number"},{name:"yVal",description:"",type:"Number"},{name:"zVal",description:"",type:"Number"},{name:"time",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},positionX:{name:"positionX",class:"p5.Panner3D",module:"p5.sound"},positionY:{name:"positionY",class:"p5.Panner3D",module:"p5.sound"},positionZ:{name:"positionZ",class:"p5.Panner3D",module:"p5.sound"},orient:{name:"orient",params:[{name:"xVal",description:"",type:"Number"},{name:"yVal",description:"",type:"Number"},{name:"zVal",description:"",type:"Number"},{name:"time",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},orientX:{name:"orientX",class:"p5.Panner3D",module:"p5.sound"},orientY:{name:"orientY",class:"p5.Panner3D",module:"p5.sound"},orientZ:{name:"orientZ",class:"p5.Panner3D",module:"p5.sound"},setFalloff:{name:"setFalloff",params:[{name:"maxDistance",description:"",type:"Number",optional:!0},{name:"rolloffFactor",description:"",type:"Number",optional:!0}],class:"p5.Panner3D",module:"p5.sound"},maxDist:{name:"maxDist",params:[{name:"maxDistance",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"},rollof:{name:"rollof",params:[{name:"rolloffFactor",description:"",type:"Number"}],class:"p5.Panner3D",module:"p5.sound"}},"p5.Delay":{leftDelay:{name:"leftDelay",class:"p5.Delay",module:"p5.sound"},rightDelay:{name:"rightDelay",class:"p5.Delay",module:"p5.sound"},process:{name:"process",params:[{name:"Signal",description:"

An object that outputs audio

\n",type:"Object"},{name:"delayTime",description:"

Time (in seconds) of the delay/echo.\n Some browsers limit delayTime to\n 1 second.

\n",type:"Number",optional:!0},{name:"feedback",description:"

sends the delay back through itself\n in a loop that decreases in volume\n each time.

\n",type:"Number",optional:!0},{name:"lowPass",description:"

Cutoff frequency. Only frequencies\n below the lowPass will be part of the\n delay.

\n",type:"Number",optional:!0}],class:"p5.Delay",module:"p5.sound"},delayTime:{name:"delayTime",params:[{name:"delayTime",description:"

Time (in seconds) of the delay

\n",type:"Number"}],class:"p5.Delay",module:"p5.sound"},feedback:{name:"feedback",params:[{name:"feedback",description:"

0.0 to 1.0, or an object such as an\n Oscillator that can be used to\n modulate this param

\n",type:"Number|Object"}],class:"p5.Delay",module:"p5.sound"},filter:{name:"filter",params:[{name:"cutoffFreq",description:"

A lowpass filter will cut off any\n frequencies higher than the filter frequency.

\n",type:"Number|Object"},{name:"res",description:"

Resonance of the filter frequency\n cutoff, or an object (i.e. a p5.Oscillator)\n that can be used to modulate this parameter.\n High numbers (i.e. 15) will produce a resonance,\n low numbers (i.e. .2) will produce a slope.

\n",type:"Number|Object"}],class:"p5.Delay",module:"p5.sound"},setType:{name:"setType",params:[{name:"type",description:"

'pingPong' (1) or 'default' (0)

\n",type:"String|Number"}],class:"p5.Delay",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Delay",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Delay",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Delay",module:"p5.sound"}},"p5.Reverb":{process:{name:"process",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"},{name:"seconds",description:"

Duration of the reverb, in seconds.\n Min: 0, Max: 10. Defaults to 3.

\n",type:"Number",optional:!0},{name:"decayRate",description:"

Percentage of decay with each echo.\n Min: 0, Max: 100. Defaults to 2.

\n",type:"Number",optional:!0},{name:"reverse",description:"

Play the reverb backwards or forwards.

\n",type:"Boolean",optional:!0}],class:"p5.Reverb",module:"p5.sound"},set:{name:"set",params:[{name:"seconds",description:"

Duration of the reverb, in seconds.\n Min: 0, Max: 10. Defaults to 3.

\n",type:"Number",optional:!0},{name:"decayRate",description:"

Percentage of decay with each echo.\n Min: 0, Max: 100. Defaults to 2.

\n",type:"Number",optional:!0},{name:"reverse",description:"

Play the reverb backwards or forwards.

\n",type:"Boolean",optional:!0}],class:"p5.Reverb",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Reverb",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Reverb",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Reverb",module:"p5.sound"}},"p5.Convolver":{convolverNode:{name:"convolverNode",class:"p5.Convolver",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"}],class:"p5.Convolver",module:"p5.sound"},impulses:{name:"impulses",class:"p5.Convolver",module:"p5.sound"},addImpulse:{name:"addImpulse",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function (optional)

\n",type:"Function"},{name:"errorCallback",description:"

function (optional)

\n",type:"Function"}],class:"p5.Convolver",module:"p5.sound"},resetImpulse:{name:"resetImpulse",params:[{name:"path",description:"

path to a sound file

\n",type:"String"},{name:"callback",description:"

function (optional)

\n",type:"Function"},{name:"errorCallback",description:"

function (optional)

\n",type:"Function"}],class:"p5.Convolver",module:"p5.sound"},toggleImpulse:{name:"toggleImpulse",params:[{name:"id",description:"

Identify the impulse by its original filename\n (String), or by its position in the\n .impulses Array (Number).

\n",type:"String|Number"}],class:"p5.Convolver",module:"p5.sound"}},"p5.Phrase":{sequence:{name:"sequence",class:"p5.Phrase",module:"p5.sound"}},"p5.Part":{setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},getBPM:{name:"getBPM",class:"p5.Part",module:"p5.sound"},start:{name:"start",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},loop:{name:"loop",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},noLoop:{name:"noLoop",class:"p5.Part",module:"p5.sound"},stop:{name:"stop",params:[{name:"time",description:"

seconds from now

\n",type:"Number",optional:!0}],class:"p5.Part",module:"p5.sound"},pause:{name:"pause",params:[{name:"time",description:"

seconds from now

\n",type:"Number"}],class:"p5.Part",module:"p5.sound"},addPhrase:{name:"addPhrase",params:[{name:"phrase",description:"

reference to a p5.Phrase

\n",type:"p5.Phrase"}],class:"p5.Part",module:"p5.sound"},removePhrase:{name:"removePhrase",params:[{name:"phraseName",description:"",type:"String"}],class:"p5.Part",module:"p5.sound"},getPhrase:{name:"getPhrase",params:[{name:"phraseName",description:"",type:"String"}],class:"p5.Part",module:"p5.sound"},replaceSequence:{name:"replaceSequence",params:[{name:"phraseName",description:"",type:"String"},{name:"sequence",description:"

Array of values to pass into the callback\n at each step of the phrase.

\n",type:"Array"}],class:"p5.Part",module:"p5.sound"},onStep:{name:"onStep",params:[{name:"callback",description:"

The name of the callback\n you want to fire\n on every beat/tatum.

\n",type:"Function"}],class:"p5.Part",module:"p5.sound"}},"p5.Score":{start:{name:"start",class:"p5.Score",module:"p5.sound"},stop:{name:"stop",class:"p5.Score",module:"p5.sound"},pause:{name:"pause",class:"p5.Score",module:"p5.sound"},loop:{name:"loop",class:"p5.Score",module:"p5.sound"},noLoop:{name:"noLoop",class:"p5.Score",module:"p5.sound"},setBPM:{name:"setBPM",params:[{name:"BPM",description:"

Beats Per Minute

\n",type:"Number"},{name:"rampTime",description:"

Seconds from now

\n",type:"Number"}],class:"p5.Score",module:"p5.sound"}},"p5.SoundLoop":{musicalTimeMode:{name:"musicalTimeMode",class:"p5.SoundLoop",module:"p5.sound"},maxIterations:{name:"maxIterations",class:"p5.SoundLoop",module:"p5.sound"},start:{name:"start",params:[{name:"timeFromNow",description:"

schedule a starting time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},stop:{name:"stop",params:[{name:"timeFromNow",description:"

schedule a stopping time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},pause:{name:"pause",params:[{name:"timeFromNow",description:"

schedule a pausing time

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},syncedStart:{name:"syncedStart",params:[{name:"otherLoop",description:"

a p5.SoundLoop to sync with

\n",type:"Object"},{name:"timeFromNow",description:"

Start the loops in sync after timeFromNow seconds

\n",type:"Number",optional:!0}],class:"p5.SoundLoop",module:"p5.sound"},bpm:{name:"bpm",class:"p5.SoundLoop",module:"p5.sound"},timeSignature:{name:"timeSignature",class:"p5.SoundLoop",module:"p5.sound"},interval:{name:"interval",class:"p5.SoundLoop",module:"p5.sound"},iterations:{name:"iterations",class:"p5.SoundLoop",module:"p5.sound"}},"p5.Compressor":{compressor:{name:"compressor",class:"p5.Compressor",module:"p5.sound"},process:{name:"process",params:[{name:"src",description:"

Sound source to be connected

\n",type:"Object"},{name:"attack",description:"

The amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number",optional:!0},{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number",optional:!0},{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number",optional:!0},{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number",optional:!0},{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},set:{name:"set",params:[{name:"attack",description:"

The amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number"},{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number"},{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number"},{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number"},{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number"}],class:"p5.Compressor",module:"p5.sound"},attack:{name:"attack",params:[{name:"attack",description:"

Attack is the amount of time (in seconds) to reduce the gain by 10dB,\n default = .003, range 0 - 1

\n",type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},knee:{name:"knee",params:[{name:"knee",description:'

A decibel value representing the range above the\n threshold where the curve smoothly transitions to the "ratio" portion.\n default = 30, range 0 - 40

\n',type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},ratio:{name:"ratio",params:[{name:"ratio",description:"

The amount of dB change in input for a 1 dB change in output\n default = 12, range 1 - 20

\n",type:"Number",optional:!0},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},threshold:{name:"threshold",params:[{name:"threshold",description:"

The decibel value above which the compression will start taking effect\n default = -24, range -100 - 0

\n",type:"Number"},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},release:{name:"release",params:[{name:"release",description:"

The amount of time (in seconds) to increase the gain by 10dB\n default = .25, range 0 - 1

\n",type:"Number"},{name:"time",description:"

Assign time value to schedule the change in value

\n",type:"Number",optional:!0}],class:"p5.Compressor",module:"p5.sound"},reduction:{name:"reduction",class:"p5.Compressor",module:"p5.sound"}},"p5.SoundRecorder":{setInput:{name:"setInput",params:[{name:"unit",description:"

p5.sound object or a web audio unit\n that outputs sound

\n",type:"Object",optional:!0}],class:"p5.SoundRecorder",module:"p5.sound"},record:{name:"record",params:[{name:"soundFile",description:"

p5.SoundFile

\n",type:"p5.SoundFile"},{name:"duration",description:"

Time (in seconds)

\n",type:"Number",optional:!0},{name:"callback",description:"

The name of a function that will be\n called once the recording completes

\n",type:"Function",optional:!0}],class:"p5.SoundRecorder",module:"p5.sound"},stop:{name:"stop",class:"p5.SoundRecorder",module:"p5.sound"}},"p5.PeakDetect":{isDetected:{name:"isDetected",class:"p5.PeakDetect",module:"p5.sound"},update:{name:"update",params:[{name:"fftObject",description:"

A p5.FFT object

\n",type:"p5.FFT"}],class:"p5.PeakDetect",module:"p5.sound"},onPeak:{name:"onPeak",params:[{name:"callback",description:"

Name of a function that will\n be called when a peak is\n detected.

\n",type:"Function"},{name:"val",description:"

Optional value to pass\n into the function when\n a peak is detected.

\n",type:"Object",optional:!0}],class:"p5.PeakDetect",module:"p5.sound"}},"p5.Gain":{setInput:{name:"setInput",params:[{name:"src",description:"

p5.sound / Web Audio object with a sound\n output.

\n",type:"Object"}],class:"p5.Gain",module:"p5.sound"},connect:{name:"connect",params:[{name:"unit",description:"",type:"Object"}],class:"p5.Gain",module:"p5.sound"},disconnect:{name:"disconnect",class:"p5.Gain",module:"p5.sound"},amp:{name:"amp",params:[{name:"volume",description:"

amplitude between 0 and 1.0

\n",type:"Number"},{name:"rampTime",description:"

create a fade that lasts rampTime

\n",type:"Number",optional:!0},{name:"timeFromNow",description:"

schedule this event to happen\n seconds from now

\n",type:"Number",optional:!0}],class:"p5.Gain",module:"p5.sound"}},"p5.Distortion":{WaveShaperNode:{name:"WaveShaperNode",class:"p5.Distortion",module:"p5.sound"},process:{name:"process",params:[{name:"amount",description:"

Unbounded distortion amount.\n Normal values range from 0-1.

\n",type:"Number",optional:!0,optdefault:"0.25"},{name:"oversample",description:"

'none', '2x', or '4x'.

\n",type:"String",optional:!0,optdefault:"'none'"}],class:"p5.Distortion",module:"p5.sound"},set:{name:"set",params:[{name:"amount",description:"

Unbounded distortion amount.\n Normal values range from 0-1.

\n",type:"Number",optional:!0,optdefault:"0.25"},{name:"oversample",description:"

'none', '2x', or '4x'.

\n",type:"String",optional:!0,optdefault:"'none'"}],class:"p5.Distortion",module:"p5.sound"},getAmount:{name:"getAmount",class:"p5.Distortion",module:"p5.sound"},getOversample:{name:"getOversample",class:"p5.Distortion",module:"p5.sound"}}}},{}],2:[function(e,t,r){"use strict";r.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=c(e),a=n[0],o=n[1],i=new u(function(e,t){return 3*(e+t)/4-t}(a,o)),s=0,l=0>16&255,i[s++]=t>>8&255,i[s++]=255&t;2===o&&(t=p[e.charCodeAt(r)]<<2|p[e.charCodeAt(r+1)]>>4,i[s++]=255&t);1===o&&(t=p[e.charCodeAt(r)]<<10|p[e.charCodeAt(r+1)]<<4|p[e.charCodeAt(r+2)]>>2,i[s++]=t>>8&255,i[s++]=255&t);return i},r.fromByteArray=function(e){for(var t,r=e.length,n=r%3,a=[],o=0,i=r-n;o>2]+s[t<<4&63]+"==")):2==n&&(t=(e[r-2]<<8)+e[r-1],a.push(s[t>>10]+s[t>>4&63]+s[t<<2&63]+"="));return a.join("")};for(var s=[],p=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,o=n.length;a>18&63]+s[a>>12&63]+s[a>>6&63]+s[63&a]);return o.join("")}p["-".charCodeAt(0)]=62,p["_".charCodeAt(0)]=63},{}],3:[function(e,t,r){},{}],4:[function(e,t,r){arguments[4][3][0].apply(r,arguments)},{dup:3}],5:[function(F,e,U){(function(c){"use strict";var n=F("base64-js"),o=F("ieee754"),e="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;U.Buffer=c,U.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},U.INSPECT_MAX_BYTES=50;var r=2147483647;function i(e){if(r>>1;case"base64":return P(e).length;default:if(a)return n?-1:I(e).length;t=(""+t).toLowerCase(),a=!0}}function h(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):2147483647=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:f(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):f(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function f(e,t,r,n,a){var o,i=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s/=i=2,l/=2,r/=2}function p(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){var u=-1;for(o=r;o>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function b(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function _(e,t,r){r=Math.min(e.length,r);for(var n=[],a=t;a>>10&1023|55296),u=56320|1023&u),n.push(u),a+=c}return function(e){var t=e.length;if(t<=x)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e=e||"utf8";;)switch(e){case"hex":return M(this,t,r);case"utf8":case"utf-8":return _(this,t,r);case"ascii":return S(this,t,r);case"latin1":case"binary":return w(this,t,r);case"base64":return b(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",t=U.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},e&&(c.prototype[e]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,a){if(D(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(a<=n&&r<=t)return 0;if(a<=n)return-1;if(r<=t)return 1;if(this===e)return 0;for(var o=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0),s=Math.min(o,i),l=this.slice(n,a),p=e.slice(t,r),u=0;u>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var a=this.length-t;if((void 0===r||athis.length)throw new RangeError("Attempt to write outside buffer bounds");n=n||"utf8";for(var o,i,s,l,p,u,c=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return p=t,u=r,R(I(e,(l=this).length-p),l,p,u);case"ascii":return g(this,e,t,r);case"latin1":case"binary":return g(this,e,t,r);case"base64":return o=this,i=t,s=r,R(P(e),o,i,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,e,t,r);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var x=4096;function S(e,t,r){var n="";r=Math.min(e.length,r);for(var a=t;ae.length)throw new RangeError("Index out of range")}function N(e,t,r,n){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function O(e,t,r,n,a){return t=+t,r>>>=0,a||N(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function L(e,t,r,n,a){return t=+t,r>>>=0,a||N(e,0,r,8),o.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):r>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],a=1,o=0;++o>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e+--t],a=1;0>>=0,t||T(e,1,this.length),this[e]},c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],a=1,o=0;++o>>=0,t>>>=0,r||T(e,t,this.length);for(var n=t,a=1,o=this[e+--n];0>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||C(this,e,t,r,Math.pow(2,8*r)-1,0);var a=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,n||C(this,e,t,r,Math.pow(2,8*r)-1,0);var a=r-1,o=1;for(this[t+a]=255&e;0<=--a&&(o*=256);)this[t+a]=e/o&255;return t+r},c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var a=Math.pow(2,8*r-1);C(this,e,t,r,a-1,-a)}var o=0,i=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+r},c.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var a=Math.pow(2,8*r-1);C(this,e,t,r,a-1,-a)}var o=r-1,i=1,s=0;for(this[t+o]=255&e;0<=--o&&(i*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/i>>0)-s&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeFloatLE=function(e,t,r){return O(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return O(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r=r||0,n||0===n||(n=this.length),t>=e.length&&(t=e.length),t=t||0,0=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,"number"==typeof(e=e||0))for(o=t;o>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function P(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(t,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function R(e,t,r,n){for(var a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function D(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function A(e){return e!=e}var k=function(){for(var e="0123456789abcdef",t=new Array(256),r=0;r<16;++r)for(var n=16*r,a=0;a<16;++a)t[n+a]=e[r]+e[a];return t}()}).call(this,F("buffer").Buffer)},{"base64-js":2,buffer:5,ieee754:10}],6:[function(e,t,r){"use strict";t.exports=e("./").polyfill()},{"./":7}],7:[function(z,r,n){(function(j,V){var e,t;e=this,t=function(){"use strict";function l(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},n=0,t=void 0,a=void 0,i=function(e,t){d[n]=e,d[n+1]=t,2===(n+=2)&&(a?a(h):v())};var e="undefined"!=typeof window?window:void 0,o=e||{},s=o.MutationObserver||o.WebKitMutationObserver,p="undefined"==typeof self&&void 0!==j&&"[object process]"==={}.toString.call(j),u="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function c(){var e=setTimeout;return function(){return e(h,1)}}var d=new Array(1e3);function h(){for(var e=0;e>1,u=-7,c=r?a-1:0,d=r?-1:1,h=e[t+c];for(c+=d,o=h&(1<<-u)-1,h>>=-u,u+=s;0>=-u,u+=n;0>1,d=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,m=n?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),2<=(t+=1<=i+c?d/l:d*Math.pow(2,1-c))*l&&(i++,l/=2),u<=i+c?(s=0,i=u):1<=i+c?(s=(t*l-1)*Math.pow(2,a),i+=c):(s=t*Math.pow(2,c-1)*Math.pow(2,a),i=0));8<=a;e[r+h]=255&s,h+=m,s/=256,a-=8);for(i=i<Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t}var C=4e150;function N(e,t){e.f+=t.f,e.b.f+=t.b.f}function p(e,t,r){return e=e.a,t=t.a,r=r.a,t.b.a===e?r.b.a===e?g(t.a,r.a)?b(r.b.a,t.a,r.a)<=0:0<=b(t.b.a,r.a,t.a):b(r.b.a,e,r.a)<=0:r.b.a===e?0<=b(t.b.a,e,t.a):(t=v(t.b.a,e,t.a),(e=v(r.b.a,e,r.a))<=t)}function O(e){e.a.i=null;var t=e.e;t.a.c=t.c,t.c.a=t.a,e.e=null}function u(e,t){c(e.a),e.c=!1,(e.a=t).i=e}function L(e){for(var t=e.a.a;(e=de(e)).a.a===t;);return e.c&&(u(e,t=d(ce(e).a.b,e.a.e)),e=de(e)),e}function I(e,t,r){var n=new ue;return n.a=r,n.e=W(e.f,t.e,n),r.i=n}function P(e,t){switch(e.s){case 100130:return 0!=(1&t);case 100131:return 0!==t;case 100132:return 0>1]],s[i[p]])?le(r,p):pe(r,p)),s[o]=null,l[o]=r.b,r.b=o}else for(r.c[-(o+1)]=null;0Math.max(i.a,l.a))return!1;if(g(o,i)){if(0n.f&&(n.f*=2,n.c=oe(n.c,n.f+1)),0===n.b?r=a:(r=n.b,n.b=n.c[n.b]),n.e[r]=t,n.c[r]=a,n.d[a]=r,n.h&&pe(n,a),r}return n=e.a++,e.c[n]=t,-(n+1)}function ne(e){if(0===e.a)return se(e.b);var t=e.c[e.d[e.a-1]];if(0!==e.b.a&&g(ie(e.b),t))return se(e.b);for(;--e.a,0e.a||g(n[i],n[l])){a[r[o]=i]=o;break}a[r[o]=l]=o,o=s}}function pe(e,t){for(var r=e.d,n=e.e,a=e.c,o=t,i=r[o];;){var s=o>>1,l=r[s];if(0==s||g(n[l],n[i])){a[r[o]=i]=o;break}a[r[o]=l]=o,o=s}}function ue(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function ce(e){return e.e.c.b}function de(e){return e.e.a.b}(n=q.prototype).x=function(){Y(this,0)},n.B=function(e,t){switch(e){case 100142:return;case 100140:switch(t){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=t)}break;case 100141:return void(this.m=!!t);default:return void Z(this,100900)}Z(this,100901)},n.y=function(e){switch(e){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Z(this,100900)}return!1},n.A=function(e,t,r){this.j[0]=e,this.j[1]=t,this.j[2]=r},n.z=function(e,t){var r=t||null;switch(e){case 100100:case 100106:this.h=r;break;case 100104:case 100110:this.l=r;break;case 100101:case 100107:this.k=r;break;case 100102:case 100108:this.i=r;break;case 100103:case 100109:this.p=r;break;case 100105:case 100111:this.o=r;break;case 100112:this.r=r;break;default:Z(this,100900)}},n.C=function(e,t){var r=!1,n=[0,0,0];Y(this,2);for(var a=0;a<3;++a){var o=e[a];o<-1e150&&(o=-1e150,r=!0),1e150a[p]&&(a[p]=u,i[p]=l)}if(l=0,a[1]-o[1]>a[0]-o[0]&&(l=1),a[2]-o[2]>a[l]-o[l]&&(l=2),o[l]>=a[l])n[0]=0,n[1]=0,n[2]=1;else{for(a=0,o=s[l],i=i[l],s=[0,0,0],o=[o.g[0]-i.g[0],o.g[1]-i.g[1],o.g[2]-i.g[2]],p=[0,0,0],l=r.e;l!==r;l=l.e)p[0]=l.g[0]-i.g[0],p[1]=l.g[1]-i.g[1],p[2]=l.g[2]-i.g[2],s[0]=o[1]*p[2]-o[2]*p[1],s[1]=o[2]*p[0]-o[0]*p[2],s[2]=o[0]*p[1]-o[1]*p[0],a<(u=s[0]*s[0]+s[1]*s[1]+s[2]*s[2])&&(a=u,n[0]=s[0],n[1]=s[1],n[2]=s[2]);a<=0&&(n[0]=n[1]=n[2]=0,n[T(o)]=1)}r=!0}for(s=T(n),l=this.b.c,a=(s+1)%3,i=(s+2)%3,s=0>=l,u-=l,y!=o){if(y==i)break;for(var g=y>8,++v;var _=b;if(n>=8;null!==f&&s<4096&&(m[s++]=f<<8|_,p+1<=s&&l<12&&(++l,p=p<<1|1)),f=y}else s=1+i,p=(1<<(l=a+1))-1,f=null}return d!==n&&console.log("Warning, gif stream shorter than expected."),r}try{r.GifWriter=function(g,e,t,r){var v=0,n=void 0===(r=void 0===r?{}:r).loop?null:r.loop,b=void 0===r.palette?null:r.palette;if(e<=0||t<=0||65535>=1;)++a;if(i=1<>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=(null!==b?128:0)|a,g[v++]=o,g[v++]=0,null!==b)for(var s=0,l=b.length;s>16&255,g[v++]=p>>8&255,g[v++]=255&p}if(null!==n){if(n<0||65535>8&255,g[v++]=0}var x=!1;this.addFrame=function(e,t,r,n,a,o){if(!0===x&&(--v,x=!1),o=void 0===o?{}:o,e<0||t<0||65535>=1;)++p;l=1<>8&255,g[v++]=h,g[v++]=0),g[v++]=44,g[v++]=255&e,g[v++]=e>>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=255&r,g[v++]=r>>8&255,g[v++]=255&n,g[v++]=n>>8&255,g[v++]=!0===i?128|p-1:0,!0===i)for(var m=0,f=s.length;m>16&255,g[v++]=y>>8&255,g[v++]=255&y}return v=function(t,r,e,n){t[r++]=e;var a=r++,o=1<>=8,u-=8,r===a+256&&(t[a]=255,a=r++)}function h(e){c|=e<>=8,u-=8,r===a+256&&(t[a]=255,a=r++);4096===l?(h(o),l=1+s,p=e+1,f={}):(1<>7,a=1<<1+(7&r);x[e++],x[e++];var o=null,i=null;n&&(o=e,e+=3*(i=a));var s=!0,l=[],p=0,u=null,c=0,d=null;for(this.width=S,this.height=t;s&&e>2&7,e++;break;case 254:for(;;){if(!(0<=(C=x[e++])))throw Error("Invalid block size");if(0===C)break;e+=C}break;default:throw new Error("Unknown graphic control label: 0x"+x[e-1].toString(16))}break;case 44:var m=x[e++]|x[e++]<<8,f=x[e++]|x[e++]<<8,y=x[e++]|x[e++]<<8,g=x[e++]|x[e++]<<8,v=x[e++],b=v>>6&1,_=1<<1+(7&v),w=o,M=i,E=!1;if(v>>7){E=!0;w=e,e+=3*(M=_)}var T=e;for(e++;;){var C;if(!(0<=(C=x[e++])))throw Error("Invalid block size");if(0===C)break;e+=C}l.push({x:m,y:f,width:y,height:g,has_local_palette:E,palette_offset:w,palette_size:M,data_offset:T,data_length:e-T,transparent_index:u,interlaced:!!b,delay:p,disposal:c});break;case 59:s=!1;break;default:throw new Error("Unknown gif block: 0x"+x[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return d},this.frameInfo=function(e){if(e<0||e>=l.length)throw new Error("Frame index out of range.");return l[e]},this.decodeAndBlitFrameBGRA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,a=new Uint8Array(n);N(x,r.data_offset,a,n);var o=r.palette_offset,i=r.transparent_index;null===i&&(i=256);var s=r.width,l=S-s,p=s,u=4*(r.y*S+r.x),c=4*((r.y+r.height)*S+r.x),d=u,h=4*l;!0===r.interlaced&&(h+=4*S*7);for(var m=8,f=0,y=a.length;f>=1)),g===i)d+=4;else{var v=x[o+3*g],b=x[o+3*g+1],_=x[o+3*g+2];t[d++]=_,t[d++]=b,t[d++]=v,t[d++]=255}--p}},this.decodeAndBlitFrameRGBA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,a=new Uint8Array(n);N(x,r.data_offset,a,n);var o=r.palette_offset,i=r.transparent_index;null===i&&(i=256);var s=r.width,l=S-s,p=s,u=4*(r.y*S+r.x),c=4*((r.y+r.height)*S+r.x),d=u,h=4*l;!0===r.interlaced&&(h+=4*S*7);for(var m=8,f=0,y=a.length;f>=1)),g===i)d+=4;else{var v=x[o+3*g],b=x[o+3*g+1],_=x[o+3*g+2];t[d++]=v,t[d++]=b,t[d++]=_,t[d++]=255}--p}}}}catch(e){}},{}],13:[function(jr,t,r){(function(Gr){var e;e=this,function(E){"use strict";function e(e){if(null==this)throw TypeError();var t=String(this),r=t.length,n=e?Number(e):0;if(n!=n&&(n=0),!(n<0||r<=n)){var a,o=t.charCodeAt(n);return 55296<=o&&o<=56319&&n+1>>=1,t}function _(e,t,r){if(!t)return r;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>16-t;return e.tag>>>=t,e.bitcount-=t,n+r}function x(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>=1,++a,r+=t.table[a],0<=(n-=t.table[a]););return e.tag=o,e.bitcount-=a,t.trans[r+n]}function S(e,t,r){var n,a,o,i,s,l;for(n=_(e,5,257),a=_(e,5,1),o=_(e,4,4),i=0;i<19;++i)y[i]=0;for(i=0;ithis.x2&&(this.x2=e)),"number"==typeof t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),tthis.y2&&(this.y2=t))},C.prototype.addX=function(e){this.addPoint(e,null)},C.prototype.addY=function(e){this.addPoint(null,e)},C.prototype.addBezier=function(e,t,r,n,a,o,i,s){var l=this,p=[e,t],u=[r,n],c=[a,o],d=[i,s];this.addPoint(e,t),this.addPoint(i,s);for(var h=0;h<=1;h++){var m=6*p[h]-12*u[h]+6*c[h],f=-3*p[h]+9*u[h]-9*c[h]+3*d[h],y=3*u[h]-3*p[h];if(0!=f){var g=Math.pow(m,2)-4*y*f;if(!(g<0)){var v=(-m+Math.sqrt(g))/(2*f);0>8&255,255&e]},D.USHORT=k(2),R.SHORT=function(e){return 32768<=e&&(e=-(65536-e)),[e>>8&255,255&e]},D.SHORT=k(2),R.UINT24=function(e){return[e>>16&255,e>>8&255,255&e]},D.UINT24=k(3),R.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},D.ULONG=k(4),R.LONG=function(e){return I<=e&&(e=-(2*I-e)),[e>>24&255,e>>16&255,e>>8&255,255&e]},D.LONG=k(4),R.FIXED=R.ULONG,D.FIXED=D.ULONG,R.FWORD=R.SHORT,D.FWORD=D.SHORT,R.UFWORD=R.USHORT,D.UFWORD=D.USHORT,R.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,255&e]},D.LONGDATETIME=k(8),R.TAG=function(e){return L.argument(4===e.length,"Tag should be exactly 4 ASCII characters."),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},D.TAG=k(4),R.Card8=R.BYTE,D.Card8=D.BYTE,R.Card16=R.USHORT,D.Card16=D.USHORT,R.OffSize=R.BYTE,D.OffSize=D.BYTE,R.SID=R.USHORT,D.SID=D.USHORT,R.NUMBER=function(e){return-107<=e&&e<=107?[e+139]:108<=e&&e<=1131?[247+((e-=108)>>8),255&e]:-1131<=e&&e<=-108?[251+((e=-e-108)>>8),255&e]:-32768<=e&&e<=32767?R.NUMBER16(e):R.NUMBER32(e)},D.NUMBER=function(e){return R.NUMBER(e).length},R.NUMBER16=function(e){return[28,e>>8&255,255&e]},D.NUMBER16=k(3),R.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,255&e]},D.NUMBER32=k(5),R.REAL=function(e){var t=e.toString(),r=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(r){var n=parseFloat("1e"+((r[2]?+r[2]:0)+r[1].length));t=(Math.round(e*n)/n).toString()}for(var a="",o=0,i=t.length;o>8&255,t[t.length]=255&n}return t},D.UTF16=function(e){return 2*e.length};var F={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};P.MACSTRING=function(e,t,r,n){var a=F[n];if(void 0!==a){for(var o="",i=0;i>8&255,l+256&255)}return o}R.MACSTRING=function(e,t){var r=function(e){if(!U)for(var t in U={},F)U[t]=new String(t);var r=U[e];if(void 0!==r){if(B){var n=B.get(r);if(void 0!==n)return n}var a=F[e];if(void 0!==a){for(var o={},i=0;i>8,t[c+1]=255&d,t=t.concat(n[u])}return t},D.TABLE=function(e){for(var t=0,r=e.fields.length,n=0;n>1,t.skip("uShort",3),e.glyphIndexMap={};for(var i=new se.Parser(r,n+a+14),s=new se.Parser(r,n+a+16+2*o),l=new se.Parser(r,n+a+16+4*o),p=new se.Parser(r,n+a+16+6*o),u=n+a+16+8*o,c=0;c>4,o=15&n;if(15==a)break;if(t+=r[a],15==o)break;t+=r[o]}return parseFloat(t)}(e);if(32<=t&&t<=246)return t-139;if(247<=t&&t<=250)return 256*(t-247)+e.parseByte()+108;if(251<=t&&t<=254)return 256*-(t-251)-e.parseByte()-108;throw new Error("Invalid b0 "+t)}function Te(e,t,r){t=void 0!==t?t:0;var n=new se.Parser(e,t),a=[],o=[];for(r=void 0!==r?r:e.length;n.relativeOffset>1,T.length=0,N=!0}return function e(t){for(var r,n,a,o,i,s,l,p,u,c,d,h,m=0;mMath.abs(h-I)?L=d+T.shift():I=h+T.shift(),E.curveTo(v,b,_,x,l,p),E.curveTo(u,c,d,h,L,I);break;default:console.log("Glyph "+g.index+": unknown operator 1200"+f),T.length=0}break;case 14:0>3;break;case 21:2>16),m+=2;break;case 29:i=T.pop()+y.gsubrsBias,(s=y.gsubrs[i])&&e(s);break;case 30:for(;0=r.begin&&e=de.length){var i=n.parseChar();r.names.push(n.parseString(i))}break;case 2.5:r.numberOfGlyphs=n.parseUShort(),r.offset=new Array(r.numberOfGlyphs);for(var s=0;st.value.tag?1:-1}),t.fields=t.fields.concat(n),t.fields=t.fields.concat(a),t}function yt(e,t,r){for(var n=0;n 123 are reserved for internal usage");h|=1<>>1,o=e[a].tag;if(o===t)return a;o>>1,o=e[a];if(o===t)return a;o>>1,i=(r=e[o]).start;if(i===t)return r;i(r=e[n-1]).end?0:r}function xt(e,t){this.font=e,this.tableName=t}function St(e){xt.call(this,e,"gpos")}function wt(e){xt.call(this,e,"gsub")}function Mt(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;nt.points.length-1||n.matchedPoints[1]>a.points.length-1)throw Error("Matched points out of range in "+t.name);var i=t.points[n.matchedPoints[0]],s=a.points[n.matchedPoints[1]],l={xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:0,dy:0};s=Lt([s],l)[0],l.dx=i.x-s.x,l.dy=i.y-s.y,o=Lt(a.points,l)}t.points=t.points.concat(o)}}return It(t.points)}(St.prototype=xt.prototype={searchTag:vt,binSearch:bt,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,r=0;r=s[p-1].tag,"Features must be added in alphabetical order."),o={tag:r,feature:{params:0,lookupListIndexes:[]}},s.push(o),i.push(p),o.feature}}},getLookupTables:function(e,t,r,n,a){var o=this.getFeatureTable(e,t,r,a),i=[];if(o){for(var s,l=o.lookupListIndexes,p=this.font.tables[this.tableName].lookups,u=0;u",s),t.stack.push(Math.round(64*s))}function gr(e,t){var r=t.stack,n=r.pop(),a=t.fv,o=t.pv,i=t.ppem,s=t.deltaBase+16*(e-1),l=t.deltaShift,p=t.z0;E.DEBUG&&console.log(t.step,"DELTAP["+e+"]",n,r);for(var u=0;u>4)===i){var h=(15&d)-8;0<=h&&h++,E.DEBUG&&console.log(t.step,"DELTAPFIX",c,"by",h*l);var m=p[c];a.setRelative(m,m,h*l,o)}}}function vr(e,t){var r=t.stack,n=r.pop();E.DEBUG&&console.log(t.step,"ROUND[]"),r.push(64*t.round(n/64))}function br(e,t){var r=t.stack,n=r.pop(),a=t.ppem,o=t.deltaBase+16*(e-1),i=t.deltaShift;E.DEBUG&&console.log(t.step,"DELTAC["+e+"]",n,r);for(var s=0;s>4)===a){var u=(15&p)-8;0<=u&&u++;var c=u*i;E.DEBUG&&console.log(t.step,"DELTACFIX",l,"by",c),t.cvt[l]+=c}}}function _r(e,t){var r,n,a=t.stack,o=a.pop(),i=a.pop(),s=t.z2[o],l=t.z1[i];E.DEBUG&&console.log(t.step,"SDPVTL["+e+"]",o,i),n=e?(r=s.y-l.y,l.x-s.x):(r=l.x-s.x,l.y-s.y),t.dpv=Zt(r,n)}function xr(e,t){var r=t.stack,n=t.prog,a=t.ip;E.DEBUG&&console.log(t.step,"PUSHB["+e+"]");for(var o=0;o":"_")+(n?"R":"_")+(0===a?"Gr":1===a?"Bl":2===a?"Wh":"")+"]",e?c+"("+o.cvt[c]+","+p+")":"",d,"(d =",i,"->",l*s,")"),o.rp1=o.rp0,o.rp2=d,t&&(o.rp0=d)}Ut.prototype.exec=function(e,t){if("number"!=typeof t)throw new Error("Point size is not a number!");if(!(2",n),s.interpolate(c,o,i,l),s.touch(c)}e.loop=1},hr.bind(void 0,0),hr.bind(void 0,1),function(e){for(var t=e.stack,r=e.rp0,n=e.z0[r],a=e.loop,o=e.fv,i=e.pv,s=e.z1;a--;){var l=t.pop(),p=s[l];E.DEBUG&&console.log(e.step,(1"].indexOf(a[0])?void 0:a[0],lineNumber:a[1],columnNumber:a[2],source:e}},this)},parseFFOrSafari:function(e){return e.stack.split("\n").filter(function(e){return!e.match(n)},this).map(function(e){if(-1 eval")&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===e.indexOf("@")&&-1===e.indexOf(":"))return{functionName:e};var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=e.match(t),n=r&&r[1]?r[1]:void 0,a=this.extractLocation(e.replace(t,""));return{functionName:n,fileName:a[0],lineNumber:a[1],columnNumber:a[2],source:e}},this)},parseOpera:function(e){return!e.stacktrace||-1e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(e){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),n=[],a=2,o=r.length;a/,"$2").replace(/\([^)]*\)/g,"")||void 0;return a.match(/\(([^)]*)\)/)&&(t=a.replace(/^[^(]+\(([^)]*)\)$/,"$1")),{functionName:o,args:void 0===t||"[arguments not available]"===t?void 0:t.split(","),fileName:n[0],lineNumber:n[1],columnNumber:n[2],source:e}},this)}}}a.default._getErrorStackParser=function(){return new o};var i=a.default;r.default=i},{"../main":32}],27:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,a=(n=e("../main"))&&n.__esModule?n:{default:n};(function(e){if(e&&e.__esModule)return;if(null===e||"object"!==s(e)&&"function"!=typeof e)return;var t=i();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r)})(e("../constants")),e("../internationalization");function i(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return i=function(){return e},e}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}a.default._validateParameters=a.default._clearValidateParamsCache=function(){};var o=a.default;r.default=o},{"../../../docs/parameterData.json":1,"../constants":22,"../internationalization":30,"../main":32}],28:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var o=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("./constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}var n={modeAdjust:function(e,t,r,n,a){return a===o.CORNER?{x:e,y:t,w:r,h:n}:a===o.CORNERS?{x:e,y:t,w:r-e,h:n-t}:a===o.RADIUS?{x:e-r,y:t-n,w:2*r,h:2*n}:a===o.CENTER?{x:e-.5*r,y:t-.5*n,w:r,h:n}:void 0}};r.default=n},{"./constants":22}],29:[function(e,t,r){"use strict";var n,a=(n=e("../core/main"))&&n.__esModule?n:{default:n};e("./internationalization");var o=Promise.resolve();Promise.all([new Promise(function(e,t){"complete"===document.readyState?e():window.addEventListener("load",e,!1)}),o]).then(function(){void 0===window._setupDone?window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!a.default.instance&&new a.default:console.warn("p5.js seems to have been imported multiple times. Please remove the duplicate import")})},{"../core/main":32,"./internationalization":30}],30:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.initialize=n.translator=void 0;var a,o=r(e("i18next")),i=r(e("i18next-browser-languagedetector"));function r(e){return e&&e.__esModule?e:{default:e}}var s=function(){return console.debug("p5.js translator called before translations were loaded"),""};n.translator=s;n.initialize=function(){return new Promise(function(t,r){o.default.use(i.default).init({fallbackLng:"en",nestingPrefix:"$tr(",nestingSuffix:")",defaultNS:"translation",returnEmptyString:!1,interpolation:{escapeValue:!1},detection:{checkWhitelist:!1},resources:a}).then(function(e){n.translator=s=e,t()},function(e){return r("Translations failed to load (".concat(e,")"))})})}},{"../../translations":void 0,i18next:4,"i18next-browser-languagedetector":4}],31:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,a=(n=e("./main"))&&n.__esModule?n:{default:n};a.default.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},a.default.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},a.default.prototype.popMatrix=function(){throw new Error("popMatrix() not used, see pop()")},a.default.prototype.pushMatrix=function(){throw new Error("pushMatrix() not used, see push()")};var o=a.default;r.default=o},{"./main":32}],32:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0,e("./shim");var n=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("./constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function a(e,t){for(var r=0;r=i.width||t>=i.height?[0,0,0,0]:this._getPixel(e,t);var s=new l.default.Image(r,n);return s.canvas.getContext("2d").drawImage(i,e,t,r*o,n*o,0,0,r,n),s},l.default.Renderer.prototype.textLeading=function(e){return"number"==typeof e?(this._setProperty("_textLeading",e),this._pInst):this._textLeading},l.default.Renderer.prototype.textSize=function(e){return"number"==typeof e?(this._setProperty("_textSize",e),this._setProperty("_textLeading",e*b._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},l.default.Renderer.prototype.textStyle=function(e){return e?(e!==b.NORMAL&&e!==b.ITALIC&&e!==b.BOLD&&e!==b.BOLDITALIC||this._setProperty("_textStyle",e),this._applyTextProperties()):this._textStyle},l.default.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},l.default.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},l.default.Renderer.prototype.textAlign=function(e,t){return void 0!==e?(this._setProperty("_textAlign",e),void 0!==t&&this._setProperty("_textBaseline",t),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},l.default.Renderer.prototype.text=function(e,t,r,n,a){var o,i,s,l,p,u,c,d,h,m=this._pInst,f=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==e){if("string"!=typeof e&&(e=e.toString()),o=(e=e.replace(/(\t)/g," ")).split("\n"),void 0!==n){for(c=1,s=h=0;ss.HALF_PI&&e<=3*s.HALF_PI?Math.atan(r/n*Math.tan(e))+s.PI:Math.atan(r/n*Math.tan(e))+s.TWO_PI,t=t<=s.HALF_PI?Math.atan(r/n*Math.tan(t)):t>s.HALF_PI&&t<=3*s.HALF_PI?Math.atan(r/n*Math.tan(t))+s.PI:Math.atan(r/n*Math.tan(t))+s.TWO_PI),tg||Math.abs(this.accelerationY-this.pAccelerationY)>g||Math.abs(this.accelerationZ-this.pAccelerationZ)>g)&&e();var t=this.deviceTurned||window.deviceTurned;if("function"==typeof t){var r=this.rotationX+180,n=this.pRotationX+180,a=c+180;0>>24],n+=x[(16711680&C)>>16],a+=x[(65280&C)>>8],o+=x[255&C],r+=L[_],s++}S[l=T+v]=i/r,w[l]=n/r,M[l]=a/r,E[l]=o/r}T+=h}for(u=(p=-N)*h,b=T=0;b>>16,e[r+1]=(65280&t[n])>>>8,e[r+2]=255&t[n],e[r+3]=(4278190080&t[n])>>>24},P._toImageData=function(e){return e instanceof ImageData?e:e.getContext("2d").getImageData(0,0,e.width,e.height)},P._createImageData=function(e,t){return P._tmpCanvas=document.createElement("canvas"),P._tmpCtx=P._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(e,t)},P.apply=function(e,t,r){var n=e.getContext("2d"),a=n.getImageData(0,0,e.width,e.height),o=t(a,r);o instanceof ImageData?n.putImageData(o,0,0,0,0,e.width,e.height):n.putImageData(a,0,0,0,0,e.width,e.height)},P.threshold=function(e,t){var r=P._toPixels(e);void 0===t&&(t=.5);for(var n=Math.floor(255*t),a=0;a>8)/n,r[a+1]=255*(i*t>>8)/n,r[a+2]=255*(s*t>>8)/n}},P.dilate=function(e){for(var t,r,n,a,o,i,s,l,p,u,c,d,h,m,f,y,g,v=P._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(n>>8&255)+28*(255&n))<(f=77*(c>>16&255)+151*(c>>8&255)+28*(255&c))&&(a=c,o=f),o<(m=77*((u=P._getARGB(v,i))>>16&255)+151*(u>>8&255)+28*(255&u))&&(a=u,o=m),o<(y=77*(d>>16&255)+151*(d>>8&255)+28*(255&d))&&(a=d,o=y),o<(g=77*(h>>16&255)+151*(h>>8&255)+28*(255&h))&&(a=h,o=g),x[b++]=a;P._setPixels(v,x)},P.erode=function(e){for(var t,r,n,a,o,i,s,l,p,u,c,d,h,m,f,y,g,v=P._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(c>>8&255)+28*(255&c))<(o=77*(n>>16&255)+151*(n>>8&255)+28*(255&n))&&(a=c,o=f),(m=77*((u=P._getARGB(v,i))>>16&255)+151*(u>>8&255)+28*(255&u))>16&255)+151*(d>>8&255)+28*(255&d))>16&255)+151*(h>>8&255)+28*(255&h))=r){var n=Math.floor(t.timeDisplayed/r);if(t.timeDisplayed=0,t.displayIndex+=n,t.loopCount=Math.floor(t.displayIndex/t.numFrames),null!==t.loopLimit&&t.loopCount>=t.loopLimit)t.playing=!1;else{var a=t.displayIndex%t.numFrames;this.drawingContext.putImageData(t.frames[a].image,0,0),t.displayIndex=a,this.setModified(!0)}}}},a.default.Image.prototype._setProperty=function(e,t){this[e]=t,this.setModified(!0)},a.default.Image.prototype.loadPixels=function(){a.default.Renderer2D.prototype.loadPixels.call(this),this.setModified(!0)},a.default.Image.prototype.updatePixels=function(e,t,r,n){a.default.Renderer2D.prototype.updatePixels.call(this,e,t,r,n),this.setModified(!0)},a.default.Image.prototype.get=function(e,t,r,n){return a.default._validateParameters("p5.Image.get",arguments),a.default.Renderer2D.prototype.get.apply(this,arguments)},a.default.Image.prototype._getPixel=a.default.Renderer2D.prototype._getPixel,a.default.Image.prototype.set=function(e,t,r){a.default.Renderer2D.prototype.set.call(this,e,t,r),this.setModified(!0)},a.default.Image.prototype.resize=function(e,t){0===e&&0===t?(e=this.canvas.width,t=this.canvas.height):0===e?e=this.canvas.width*t/this.canvas.height:0===t&&(t=this.canvas.height*e/this.canvas.width),e=Math.floor(e),t=Math.floor(t);var r=document.createElement("canvas");if(r.width=e,r.height=t,this.gifProperties)for(var n=this.gifProperties,a=function(e,t){for(var r=0,n=0;n/g,">").replace(/"/g,""").replace(/'/g,"'")}function l(e,t){t&&!0!==t&&"true"!==t||(t="");var r="";return(e=e||"untitled")&&e.includes(".")&&(r=e.split(".").pop()),t&&r!==t&&(r=t,e="".concat(e,".").concat(r)),[e,r]}e("../core/friendly_errors/validate_params"),e("../core/friendly_errors/file_errors"),e("../core/friendly_errors/fes_core"),g.default.prototype.loadJSON=function(){for(var e=arguments.length,t=new Array(e),r=0;r"),a.print("");if(a.print(' '),a.print(""),a.print(""),a.print(" "),"0"!==o[0]){a.print(" ");for(var u=0;u".concat(c)),a.print(" ")}a.print(" ")}for(var d=0;d");for(var h=0;h".concat(m)),a.print(" ")}a.print(" ")}a.print("
"),a.print(""),a.print("")}a.close(),a.clear()},g.default.prototype.writeFile=function(e,t,r){var n="application/octet-stream";g.default.prototype._isSafari()&&(n="text/plain");var a=new Blob(e,{type:n});g.default.prototype.downloadFile(a,t,r)},g.default.prototype.downloadFile=function(e,t,r){var n=l(t,r),a=n[0];if(e instanceof Blob)s.default.saveAs(e,a);else{var o=document.createElement("a");if(o.href=e,o.download=a,o.onclick=function(e){var t;t=e,document.body.removeChild(t.target),e.stopPropagation()},o.style.display="none",document.body.appendChild(o),g.default.prototype._isSafari()){var i="Hello, Safari user! To download this file...\n";i+="1. Go to File --\x3e Save As.\n",i+='2. Choose "Page Source" as the Format.\n',i+='3. Name it with this extension: ."'.concat(n[1],'"'),alert(i)}o.click()}},g.default.prototype._checkFileExtension=l,g.default.prototype._isSafari=function(){return 0>>0},getSeed:function(){return t},rand:function(){return(r=(1664525*r+1013904223)%n)/n}});a.setSeed(e),_=new Array(4096);for(var o=0;o<4096;o++)_[o]=a.rand()};var o=a.default;r.default=o},{"../core/main":32}],65:[function(e,t,r){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,l=(n=e("../core/main"))&&n.__esModule?n:{default:n},o=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==i(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var o=n?Object.getOwnPropertyDescriptor(e,a):null;o&&(o.get||o.set)?Object.defineProperty(r,a,o):r[a]=e[a]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}l.default.Vector=function(e,t,r){var n,a,o;o=e instanceof l.default?(this.p5=e,n=t[0]||0,a=t[1]||0,t[2]||0):(n=e||0,a=t||0,r||0),this.x=n,this.y=a,this.z=o},l.default.Vector.prototype.toString=function(){return"p5.Vector Object : [".concat(this.x,", ").concat(this.y,", ").concat(this.z,"]")},l.default.Vector.prototype.set=function(e,t,r){return e instanceof l.default.Vector?(this.x=e.x||0,this.y=e.y||0,this.z=e.z||0):e instanceof Array?(this.x=e[0]||0,this.y=e[1]||0,this.z=e[2]||0):(this.x=e||0,this.y=t||0,this.z=r||0),this},l.default.Vector.prototype.copy=function(){return this.p5?new l.default.Vector(this.p5,[this.x,this.y,this.z]):new l.default.Vector(this.x,this.y,this.z)},l.default.Vector.prototype.add=function(e,t,r){return e instanceof l.default.Vector?(this.x+=e.x||0,this.y+=e.y||0,this.z+=e.z||0):e instanceof Array?(this.x+=e[0]||0,this.y+=e[1]||0,this.z+=e[2]||0):(this.x+=e||0,this.y+=t||0,this.z+=r||0),this};function p(e,t){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),this}function u(e,t,r){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),0!==r&&(this.z=this.z%r),this}l.default.Vector.prototype.rem=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)){var n=parseFloat(e.x),a=parseFloat(e.y),o=parseFloat(e.z);u.call(this,n,a,o)}}else if(e instanceof Array)e.every(function(e){return Number.isFinite(e)})&&(2===e.length&&p.call(this,e[0],e[1]),3===e.length&&u.call(this,e[0],e[1],e[2]));else if(1===arguments.length){if(Number.isFinite(e)&&0!==e)return this.x=this.x%e,this.y=this.y%e,this.z=this.z%e,this}else if(2===arguments.length){var i=Array.prototype.slice.call(arguments);i.every(function(e){return Number.isFinite(e)})&&2===i.length&&p.call(this,i[0],i[1])}else if(3===arguments.length){var s=Array.prototype.slice.call(arguments);s.every(function(e){return Number.isFinite(e)})&&3===s.length&&u.call(this,s[0],s[1],s[2])}},l.default.Vector.prototype.sub=function(e,t,r){return e instanceof l.default.Vector?(this.x-=e.x||0,this.y-=e.y||0,this.z-=e.z||0):e instanceof Array?(this.x-=e[0]||0,this.y-=e[1]||0,this.z-=e[2]||0):(this.x-=e||0,this.y-=t||0,this.z-=r||0),this},l.default.Vector.prototype.mult=function(e,t,r){if(e instanceof l.default.Vector)return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z?(this.x*=e.x,this.y*=e.y,this.z*=e.z):console.warn("p5.Vector.prototype.mult:","x contains components that are either undefined or not finite numbers"),this;if(e instanceof Array)return e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})?1===e.length?(this.x*=e[0],this.y*=e[0],this.z*=e[0]):2===e.length?(this.x*=e[0],this.y*=e[1]):3===e.length&&(this.x*=e[0],this.y*=e[1],this.z*=e[2]):console.warn("p5.Vector.prototype.mult:","x contains elements that are either undefined or not finite numbers"),this;var n=Array.prototype.slice.call(arguments);return n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})?(1===arguments.length&&(this.x*=e,this.y*=e,this.z*=e),2===arguments.length&&(this.x*=e,this.y*=t),3===arguments.length&&(this.x*=e,this.y*=t,this.z*=r)):console.warn("p5.Vector.prototype.mult:","x, y, or z arguments are either undefined or not a finite number"),this},l.default.Vector.prototype.div=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z){if(0===e.x||0===e.y||0===e.z)return console.warn("p5.Vector.prototype.div:","divide by 0"),this;this.x/=e.x,this.y/=e.y,this.z/=e.z}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}if(e instanceof Array){if(e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})){if(e.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===e.length?(this.x/=e[0],this.y/=e[0],this.z/=e[0]):2===e.length?(this.x/=e[0],this.y/=e[1]):3===e.length&&(this.x/=e[0],this.y/=e[1],this.z/=e[2])}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}var n=Array.prototype.slice.call(arguments);if(n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})){if(n.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===arguments.length&&(this.x/=e,this.y/=e,this.z/=e),2===arguments.length&&(this.x/=e,this.y/=t),3===arguments.length&&(this.x/=e,this.y/=t,this.z/=r)}else console.warn("p5.Vector.prototype.div:","x, y, or z arguments are either undefined or not a finite number");return this},l.default.Vector.prototype.mag=function(){return Math.sqrt(this.magSq())},l.default.Vector.prototype.magSq=function(){var e=this.x,t=this.y,r=this.z;return e*e+t*t+r*r},l.default.Vector.prototype.dot=function(e,t,r){return e instanceof l.default.Vector?this.dot(e.x,e.y,e.z):this.x*(e||0)+this.y*(t||0)+this.z*(r||0)},l.default.Vector.prototype.cross=function(e){var t=this.y*e.z-this.z*e.y,r=this.z*e.x-this.x*e.z,n=this.x*e.y-this.y*e.x;return this.p5?new l.default.Vector(this.p5,[t,r,n]):new l.default.Vector(t,r,n)},l.default.Vector.prototype.dist=function(e){return e.copy().sub(this).mag()},l.default.Vector.prototype.normalize=function(){var e=this.mag();return 0!==e&&this.mult(1/e),this},l.default.Vector.prototype.limit=function(e){var t=this.magSq();return e*e>>0},a.default.prototype.randomSeed=function(e){this._lcgSetSeed(o,e),this._gaussian_previous=!1},a.default.prototype.random=function(e,t){var r;if(a.default._validateParameters("random",arguments),r=null!=this[o]?this._lcg(o):Math.random(),void 0===e)return r;if(void 0===t)return e instanceof Array?e[Math.floor(r*e.length)]:r*e;if(td){var N=m,O=l,L=p;m=h+d*(s&&h=t&&(r=r.substring(r.length-t,r.length)),r}},a.default.prototype.unhex=function(e){return e instanceof Array?e.map(a.default.prototype.unhex):parseInt("0x".concat(e),16)};var o=a.default;r.default=o},{"../core/main":32}],73:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,i=(n=e("../core/main"))&&n.__esModule?n:{default:n};function a(e,t,r){var n=e<0,a=n?e.toString().substring(1):e.toString(),o=a.indexOf("."),i=-1!==o?a.substring(0,o):a,s=-1!==o?a.substring(o+1):"",l=n?"-":"";if(void 0!==r){var p="";(-1!==o||0r&&(s=s.substring(0,r));for(var u=0;un.length)for(var o=t-(n+=-1===r?".":"").length+1,i=0;i=h.TWO_PI?"".concat("ellipse","|").concat(p,"|"):"".concat("arc","|").concat(i,"|").concat(s,"|").concat(l,"|").concat(p,"|"),!this.geometryInHash(t)){var u=new T.default.Geometry(p,1,function(){if(this.strokeIndices=[],i.toFixed(10)!==s.toFixed(10)){l!==h.PIE&&void 0!==l||(this.vertices.push(new T.default.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var e=0;e<=p;e++){var t=(s-i)*(e/p)+i,r=.5+Math.cos(t)/2,n=.5+Math.sin(t)/2;this.vertices.push(new T.default.Vector(r,n,0)),this.uvs.push([r,n]),e>5&31)/31,(v>>10&31)/31):(r=i,n=s,l)}for(var b=new w.default.Vector(f,y,g),_=1;_<=3;_++){var x=m+12*_,S=new w.default.Vector(p.getFloat32(x,!0),p.getFloat32(4+x,!0),p.getFloat32(8+x,!0));e.vertices.push(S),e.vertexNormals.push(b),c&&o.push(r,n,a)}e.faces.push([3*h,3*h+1,3*h+2]),e.uvs.push([0,0],[0,0],[0,0])}}(e,t);else{var r=new DataView(t);if(!("TextDecoder"in window))return console.warn("Sorry, ASCII STL loading only works in browsers that support TextDecoder (https://caniuse.com/#feat=textencoder)");var n=new TextDecoder("utf-8").decode(r).split("\n");!function(e,t){for(var r,n,a="",o=[],i=0;iMath.PI?l=Math.PI:l<=0&&(l=.001);var p=Math.sin(l)*i*Math.sin(s),u=Math.cos(l)*i,c=Math.sin(l)*i*Math.cos(s);this.camera(p+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},f.default.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},f.default.prototype.setCamera=function(e){this._renderer._curCamera=e,this._renderer.uPMatrix.set(e.projMatrix.mat4[0],e.projMatrix.mat4[1],e.projMatrix.mat4[2],e.projMatrix.mat4[3],e.projMatrix.mat4[4],e.projMatrix.mat4[5],e.projMatrix.mat4[6],e.projMatrix.mat4[7],e.projMatrix.mat4[8],e.projMatrix.mat4[9],e.projMatrix.mat4[10],e.projMatrix.mat4[11],e.projMatrix.mat4[12],e.projMatrix.mat4[13],e.projMatrix.mat4[14],e.projMatrix.mat4[15])};var a=f.default.Camera;r.default=a},{"../core/main":32}],81:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,u=(n=e("../core/main"))&&n.__esModule?n:{default:n};u.default.Geometry=function(e,t,r){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.vertexColors=[],this.detailX=void 0!==e?e:1,this.detailY=void 0!==t?t:1,this.dirtyFlags={},r instanceof Function&&r.call(this),this},u.default.Geometry.prototype.reset=function(){this.lineVertices.length=0,this.lineNormals.length=0,this.vertices.length=0,this.edges.length=0,this.vertexColors.length=0,this.vertexNormals.length=0,this.uvs.length=0,this.dirtyFlags={}},u.default.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var e,t,r,n,a=this.detailX+1,o=0;othis.vertices.length-1-this.detailX;n--)e.add(this.vertexNormals[n]);e=u.default.Vector.div(e,this.detailX);for(var a=this.vertices.length-1;a>this.vertices.length-1-this.detailX;a--)this.vertexNormals[a]=e;return this},u.default.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var e=0,t=this.strokeIndices.length;e vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\nuniform int uPerspective;\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n // using a scale <1 moves the lines towards the camera\n // in order to prevent popping effects due to half of\n // the line disappearing behind the geometry faces.\n vec3 scale = vec3(0.9995);\n\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n vec2 curPerspScale;\n\n if(uPerspective == 1) {\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n curPerspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n } else {\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n curPerspScale = p.w / (0.5 * uViewport.zw);\n }\n\n gl_Position.xy = p.xy + offset.xy * curPerspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};p.default.RendererGL=function(e,t,r,n){return p.default.Renderer.call(this,e,t,r),this._setAttributeDefaults(t),this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this._pInst._setProperty("drawingContext",this.drawingContext),this._isErasing=!1,this._enableLighting=!1,this.ambientLightColors=[],this.specularColors=[1,1,1],this.directionalLightDirections=[],this.directionalLightDiffuseColors=[],this.directionalLightSpecularColors=[],this.pointLightPositions=[],this.pointLightDiffuseColors=[],this.pointLightSpecularColors=[],this.spotLightPositions=[],this.spotLightDirections=[],this.spotLightDiffuseColors=[],this.spotLightSpecularColors=[],this.spotLightAngle=[],this.spotLightConc=[],this.drawMode=o.FILL,this.curFillColor=this._cachedFillStyle=[1,1,1,1],this.curStrokeColor=this._cachedStrokeStyle=[0,0,0,1],this.curBlendMode=o.BLEND,this._cachedBlendMode=void 0,this.blendExt=this.GL.getExtension("EXT_blend_minmax"),this._isBlending=!1,this._useSpecularMaterial=!1,this._useEmissiveMaterial=!1,this._useNormalMaterial=!1,this._useShininess=1,this._tint=[255,255,255,255],this.constantAttenuation=1,this.linearAttenuation=0,this.quadraticAttenuation=0,this.uMVMatrix=new p.default.Matrix,this.uPMatrix=new p.default.Matrix,this.uNMatrix=new p.default.Matrix("mat3"),this._curCamera=new p.default.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.userFillShader=void 0,this.userStrokeShader=void 0,this.userPointShader=void 0,this.retainedMode={geometry:{},buffers:{stroke:[new p.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new p.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],fill:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new p.default.RenderBuffer(4,"vertexColors","colorBuffer","aMaterialColor",this),new p.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],text:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)]}},this.immediateMode={geometry:new p.default.Geometry,shapeMode:o.TRIANGLE_FAN,_bezierVertex:[],_quadraticVertex:[],_curveVertex:[],buffers:{fill:[new p.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new p.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new p.default.RenderBuffer(4,"vertexColors","colorBuffer","aVertexColor",this),new p.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new p.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],stroke:[new p.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new p.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],point:this.GL.createBuffer()}},this.pointSize=5,this.curStrokeWeight=1,this.textures=[],this.textureMode=o.IMAGE,this.textureWrapX=o.CLAMP,this.textureWrapY=o.CLAMP,this._tex=null,this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this._curShader=void 0,this},p.default.RendererGL.prototype=Object.create(p.default.Renderer.prototype),p.default.RendererGL.prototype._setAttributeDefaults=function(e){var t={alpha:!0,depth:!0,stencil:!0,antialias:navigator.userAgent.toLowerCase().includes("safari"),premultipliedAlpha:!1,preserveDrawingBuffer:!0,perPixelLighting:!0};null===e._glAttributes?e._glAttributes=t:e._glAttributes=Object.assign(t,e._glAttributes)},p.default.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this._pInst._glAttributes)||this.canvas.getContext("experimental-webgl",this._pInst._glAttributes),null===this.drawingContext)throw new Error("Error creating webgl context");var e=this.drawingContext;e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(e){throw e}},p.default.RendererGL.prototype._resetContext=function(e,t){var r=this.width,n=this.height,a=this.canvas.id,o=this._pInst instanceof p.default.Graphics;if(o){var i=this._pInst;i.canvas.parentNode.removeChild(i.canvas),i.canvas=document.createElement("canvas"),(i._pInst._userNode||document.body).appendChild(i.canvas),p.default.Element.call(i,i.canvas,i._pInst),i.width=r,i.height=n}else{var s=this.canvas;s&&s.parentNode.removeChild(s),(s=document.createElement("canvas")).id=a,this._pInst._userNode?this._pInst._userNode.appendChild(s):document.body.appendChild(s),this._pInst.canvas=s}var l=new p.default.RendererGL(this._pInst.canvas,this._pInst,!o);this._pInst._setProperty("_renderer",l),l.resize(r,n),l._applyDefaults(),o||this._pInst._elements.push(l),"function"==typeof t&&setTimeout(function(){t.apply(window._renderer,e)},0)},p.default.prototype.setAttributes=function(e,t){if(void 0!==this._glAttributes){var r=!0;if(void 0!==t?(null===this._glAttributes&&(this._glAttributes={}),this._glAttributes[e]!==t&&(this._glAttributes[e]=t,r=!1)):e instanceof Object&&this._glAttributes!==e&&(this._glAttributes=e,r=!1),this._renderer.isP3D&&!r){if(!this._setupDone)for(var n in this._renderer.retainedMode.geometry)if(this._renderer.retainedMode.geometry.hasOwnProperty(n))return void console.error("Sorry, Could not set the attributes, you need to call setAttributes() before calling the other drawing methods in setup()");this.push(),this._renderer._resetContext(),this.pop(),this._renderer._curCamera&&(this._renderer._curCamera._renderer=this._renderer)}}else console.log("You are trying to use setAttributes on a p5.Graphics object that does not use a WEBGL renderer.")},p.default.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.specularColors=[1,1,1],this.directionalLightDirections.length=0,this.directionalLightDiffuseColors.length=0,this.directionalLightSpecularColors.length=0,this.pointLightPositions.length=0,this.pointLightDiffuseColors.length=0,this.pointLightSpecularColors.length=0,this.spotLightPositions.length=0,this.spotLightDirections.length=0,this.spotLightDiffuseColors.length=0,this.spotLightSpecularColors.length=0,this.spotLightAngle.length=0,this.spotLightConc.length=0,this._enableLighting=!1,this._tint=[255,255,255,255],this.GL.clear(this.GL.DEPTH_BUFFER_BIT)},p.default.RendererGL.prototype.background=function(){var e,t=(e=this._pInst).color.apply(e,arguments),r=t.levels[0]/255,n=t.levels[1]/255,a=t.levels[2]/255,o=t.levels[3]/255;this.GL.clearColor(r,n,a,o),this.GL.clear(this.GL.COLOR_BUFFER_BIT)},p.default.RendererGL.prototype.fill=function(e,t,r,n){var a=p.default.prototype.color.apply(this._pInst,arguments);this.curFillColor=a._array,this.drawMode=o.FILL,this._useNormalMaterial=!1,this._tex=null},p.default.RendererGL.prototype.stroke=function(e,t,r,n){arguments[3]=255;var a=p.default.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=a._array},p.default.RendererGL.prototype.strokeCap=function(e){console.error("Sorry, strokeCap() is not yet implemented in WEBGL mode")},p.default.RendererGL.prototype.strokeJoin=function(e){console.error("Sorry, strokeJoin() is not yet implemented in WEBGL mode")},p.default.RendererGL.prototype.filter=function(e){console.error("filter() does not work in WEBGL mode")},p.default.RendererGL.prototype.blendMode=function(e){e===o.DARKEST||e===o.LIGHTEST||e===o.ADD||e===o.BLEND||e===o.SUBTRACT||e===o.SCREEN||e===o.EXCLUSION||e===o.REPLACE||e===o.MULTIPLY||e===o.REMOVE?this.curBlendMode=e:e!==o.BURN&&e!==o.OVERLAY&&e!==o.HARD_LIGHT&&e!==o.SOFT_LIGHT&&e!==o.DODGE||console.warn("BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.")},p.default.RendererGL.prototype.erase=function(e,t){this._isErasing||(this._applyBlendMode(o.REMOVE),this._isErasing=!0,this._cachedFillStyle=this.curFillColor.slice(),this.curFillColor=[1,1,1,e/255],this._cachedStrokeStyle=this.curStrokeColor.slice(),this.curStrokeColor=[1,1,1,t/255])},p.default.RendererGL.prototype.noErase=function(){this._isErasing&&(this._isErasing=!1,this.curFillColor=this._cachedFillStyle.slice(),this.curStrokeColor=this._cachedStrokeStyle.slice(),this.blendMode(this._cachedBlendMode))},p.default.RendererGL.prototype.strokeWeight=function(e){this.curStrokeWeight!==e&&(this.pointSize=e,this.curStrokeWeight=e)},p.default.RendererGL.prototype._getPixel=function(e,t){var r;return r=new Uint8Array(4),this.drawingContext.readPixels(e,t,1,1,this.drawingContext.RGBA,this.drawingContext.UNSIGNED_BYTE,r),[r[0],r[1],r[2],r[3]]},p.default.RendererGL.prototype.loadPixels=function(){var e=this._pixelsState;if(!0===this._pInst._glAttributes.preserveDrawingBuffer){var t=e.pixels,r=this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4;t instanceof Uint8Array&&t.length===r||(t=new Uint8Array(r),this._pixelsState._setProperty("pixels",t));var n=this._pInst._pixelDensity;this.GL.readPixels(0,0,this.width*n,this.height*n,this.GL.RGBA,this.GL.UNSIGNED_BYTE,t)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},p.default.RendererGL.prototype.geometryInHash=function(e){return void 0!==this.retainedMode.geometry[e]},p.default.RendererGL.prototype.resize=function(e,t){p.default.Renderer.prototype.resize.call(this,e,t),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize();var r=this._pixelsState;void 0!==r.pixels&&r._setProperty("pixels",new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},p.default.RendererGL.prototype.clear=function(){var e=(arguments.length<=0?void 0:arguments[0])||0,t=(arguments.length<=1?void 0:arguments[1])||0,r=(arguments.length<=2?void 0:arguments[2])||0,n=(arguments.length<=3?void 0:arguments[3])||0;this.GL.clearColor(e,t,r,n),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},p.default.RendererGL.prototype.applyMatrix=function(e,t,r,n,a,o){16===arguments.length?p.default.Matrix.prototype.apply.apply(this.uMVMatrix,arguments):this.uMVMatrix.apply([e,t,0,0,r,n,0,0,0,0,1,0,a,o,0,1])},p.default.RendererGL.prototype.translate=function(e,t,r){return e instanceof p.default.Vector&&(r=e.z,t=e.y,e=e.x),this.uMVMatrix.translate([e,t,r]),this},p.default.RendererGL.prototype.scale=function(e,t,r){return this.uMVMatrix.scale(e,t,r),this},p.default.RendererGL.prototype.rotate=function(e,t){return void 0===t?this.rotateZ(e):(p.default.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},p.default.RendererGL.prototype.rotateX=function(e){return this.rotate(e,1,0,0),this},p.default.RendererGL.prototype.rotateY=function(e){return this.rotate(e,0,1,0),this},p.default.RendererGL.prototype.rotateZ=function(e){return this.rotate(e,0,0,1),this},p.default.RendererGL.prototype.push=function(){var e=p.default.Renderer.prototype.push.apply(this),t=e.properties;return t.uMVMatrix=this.uMVMatrix.copy(),t.uPMatrix=this.uPMatrix.copy(),t._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t.ambientLightColors=this.ambientLightColors.slice(),t.specularColors=this.specularColors.slice(),t.directionalLightDirections=this.directionalLightDirections.slice(),t.directionalLightDiffuseColors=this.directionalLightDiffuseColors.slice(),t.directionalLightSpecularColors=this.directionalLightSpecularColors.slice(),t.pointLightPositions=this.pointLightPositions.slice(),t.pointLightDiffuseColors=this.pointLightDiffuseColors.slice(),t.pointLightSpecularColors=this.pointLightSpecularColors.slice(),t.spotLightPositions=this.spotLightPositions.slice(),t.spotLightDirections=this.spotLightDirections.slice(),t.spotLightDiffuseColors=this.spotLightDiffuseColors.slice(),t.spotLightSpecularColors=this.spotLightSpecularColors.slice(),t.spotLightAngle=this.spotLightAngle.slice(),t.spotLightConc=this.spotLightConc.slice(),t.userFillShader=this.userFillShader,t.userStrokeShader=this.userStrokeShader,t.userPointShader=this.userPointShader,t.pointSize=this.pointSize,t.curStrokeWeight=this.curStrokeWeight,t.curStrokeColor=this.curStrokeColor,t.curFillColor=this.curFillColor,t._useSpecularMaterial=this._useSpecularMaterial,t._useEmissiveMaterial=this._useEmissiveMaterial,t._useShininess=this._useShininess,t.constantAttenuation=this.constantAttenuation,t.linearAttenuation=this.linearAttenuation,t.quadraticAttenuation=this.quadraticAttenuation,t._enableLighting=this._enableLighting,t._useNormalMaterial=this._useNormalMaterial,t._tex=this._tex,t.drawMode=this.drawMode,e},p.default.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=p.default.Matrix.identity(this._pInst),this},p.default.RendererGL.prototype._getImmediateStrokeShader=function(){var e=this.userStrokeShader;return e&&e.isStrokeShader()?e:this._getLineShader()},p.default.RendererGL.prototype._getRetainedStrokeShader=p.default.RendererGL.prototype._getImmediateStrokeShader,p.default.RendererGL.prototype._getImmediateFillShader=function(){var e=this.userFillShader;if(this._useNormalMaterial&&(!e||!e.isNormalShader()))return this._getNormalShader();if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getImmediateModeShader();return e},p.default.RendererGL.prototype._getRetainedFillShader=function(){if(this._useNormalMaterial)return this._getNormalShader();var e=this.userFillShader;if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getColorShader();return e},p.default.RendererGL.prototype._getImmediatePointShader=function(){var e=this.userPointShader;return e&&e.isPointShader()?e:this._getPointShader()},p.default.RendererGL.prototype._getRetainedLineShader=p.default.RendererGL.prototype._getImmediateLineShader,p.default.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this._pInst._glAttributes.perPixelLighting?this._defaultLightShader=new p.default.Shader(this,c.phongVert,c.phongFrag):this._defaultLightShader=new p.default.Shader(this,c.lightVert,c.lightTextureFrag)),this._defaultLightShader},p.default.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new p.default.Shader(this,c.immediateVert,c.vertexColorFrag)),this._defaultImmediateModeShader},p.default.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new p.default.Shader(this,c.normalVert,c.normalFrag)),this._defaultNormalShader},p.default.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new p.default.Shader(this,c.normalVert,c.basicFrag)),this._defaultColorShader},p.default.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new p.default.Shader(this,c.pointVert,c.pointFrag)),this._defaultPointShader},p.default.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new p.default.Shader(this,c.lineVert,c.lineFrag)),this._defaultLineShader},p.default.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new p.default.Shader(this,c.fontVert,c.fontFrag)),this._defaultFontShader},p.default.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var e=new p.default.Image(1,1);e.set(0,0,255),this._emptyTexture=new p.default.Texture(this,e)}return this._emptyTexture},p.default.RendererGL.prototype.getTexture=function(e){var t=this.textures,r=!0,n=!1,a=void 0;try{for(var o,i=t[Symbol.iterator]();!(r=(o=i.next()).done);r=!0){var s=o.value;if(s.src===e)return s}}catch(e){n=!0,a=e}finally{try{r||null==i.return||i.return()}finally{if(n)throw a}}var l=new p.default.Texture(this,e);return t.push(l),l},p.default.RendererGL.prototype._setStrokeUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uStrokeWeight",this.curStrokeWeight)},p.default.RendererGL.prototype._setFillUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curFillColor),e.setUniform("isTexture",!!this._tex),this._tex&&e.setUniform("uSampler",this._tex),e.setUniform("uTint",this._tint),e.setUniform("uSpecular",this._useSpecularMaterial),e.setUniform("uEmissive",this._useEmissiveMaterial),e.setUniform("uShininess",this._useShininess),e.setUniform("uUseLighting",this._enableLighting);var t=this.pointLightDiffuseColors.length/3;e.setUniform("uPointLightCount",t),e.setUniform("uPointLightLocation",this.pointLightPositions),e.setUniform("uPointLightDiffuseColors",this.pointLightDiffuseColors),e.setUniform("uPointLightSpecularColors",this.pointLightSpecularColors);var r=this.directionalLightDiffuseColors.length/3;e.setUniform("uDirectionalLightCount",r),e.setUniform("uLightingDirection",this.directionalLightDirections),e.setUniform("uDirectionalDiffuseColors",this.directionalLightDiffuseColors),e.setUniform("uDirectionalSpecularColors",this.directionalLightSpecularColors);var n=this.ambientLightColors.length/3;e.setUniform("uAmbientLightCount",n),e.setUniform("uAmbientColor",this.ambientLightColors);var a=this.spotLightDiffuseColors.length/3;e.setUniform("uSpotLightCount",a),e.setUniform("uSpotLightAngle",this.spotLightAngle),e.setUniform("uSpotLightConc",this.spotLightConc),e.setUniform("uSpotLightDiffuseColors",this.spotLightDiffuseColors),e.setUniform("uSpotLightSpecularColors",this.spotLightSpecularColors),e.setUniform("uSpotLightLocation",this.spotLightPositions),e.setUniform("uSpotLightDirection",this.spotLightDirections),e.setUniform("uConstantAttenuation",this.constantAttenuation),e.setUniform("uLinearAttenuation",this.linearAttenuation),e.setUniform("uQuadraticAttenuation",this.quadraticAttenuation),e.bindTextures()},p.default.RendererGL.prototype._setPointUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uPointSize",this.pointSize)},p.default.RendererGL.prototype._bindBuffer=function(e,t,r,n,a){if(t=t||this.GL.ARRAY_BUFFER,this.GL.bindBuffer(t,e),void 0!==r){var o=new(n||Float32Array)(r);this.GL.bufferData(t,o,a||this.GL.STATIC_DRAW)}},p.default.RendererGL.prototype._arraysEqual=function(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;n>7,127&d,c>>7,127&c);for(var h=0;h>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:o,dimImageInfo:a}}return(t=this.glyphInfos[e.index]={glyph:e,uGlyphRect:[n.x1,-n.y1,n.x2,-n.y2],strokeImageInfo:k,strokes:h,colInfo:G(f,this.colDimImageInfos,this.colCellImageInfos),rowInfo:G(m,this.rowDimImageInfos,this.rowCellImageInfos)}).uGridOffset=[t.colInfo.dimOffset,t.rowInfo.dimOffset],t}}var z=Math.sqrt(3);j.default.RendererGL.prototype._renderText=function(e,t,r,n,a){if(this._textFont&&"string"!=typeof this._textFont){if(!(a<=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only Opentype (.otf) and Truetype (.ttf) fonts are supported"),e;e.push();var o=this._doStroke,i=this.drawMode;this._doStroke=!1,this.drawMode=R.TEXTURE;var s=this._textFont.font,l=this._textFont._fontInfo;l=l||(this._textFont._fontInfo=new D(s));var p=this._textFont._handleAlignment(this,t,r,n),u=this._textSize/s.unitsPerEm;this.translate(p.x,p.y,0),this.scale(u,u,1);var c=this.GL,d=!this._defaultFontShader,h=this._getFontShader();h.init(),h.bindShader(),d&&(h.setUniform("uGridImageSize",[64,64]),h.setUniform("uCellsImageSize",[64,64]),h.setUniform("uStrokeImageSize",[64,64]),h.setUniform("uGridSize",[9,9])),this._applyColorBlend(this.curFillColor);var m=this.retainedMode.geometry.glyph;if(!m){var f=this._textGeom=new j.default.Geometry(1,1,function(){for(var e=0;e<=1;e++)for(var t=0;t<=1;t++)this.vertices.push(new j.default.Vector(t,e,0)),this.uvs.push(t,e)});f.computeFaces().computeNormals(),m=this.createBuffers("glyph",f)}var y=!0,g=!1,v=void 0;try{for(var b,_=this.retainedMode.buffers.text[Symbol.iterator]();!(y=(b=_.next()).done);y=!0){b.value._prepareBuffer(m,h)}}catch(e){g=!0,v=e}finally{try{y||null==_.return||_.return()}finally{if(g)throw v}}this._bindBuffer(m.indexBuffer,c.ELEMENT_ARRAY_BUFFER),h.setUniform("uMaterialColor",this.curFillColor);try{var x=0,S=null,w=s.stringToGlyphs(t),M=!0,E=!1,T=void 0;try{for(var C,N=w[Symbol.iterator]();!(M=(C=N.next()).done);M=!0){var O=C.value;S&&(x+=s.getKerningValue(S,O));var L=l.getGlyphInfo(O);if(L.uGlyphRect){var I=L.rowInfo,P=L.colInfo;h.setUniform("uSamplerStrokes",L.strokeImageInfo.imageData),h.setUniform("uSamplerRowStrokes",I.cellImageInfo.imageData),h.setUniform("uSamplerRows",I.dimImageInfo.imageData),h.setUniform("uSamplerColStrokes",P.cellImageInfo.imageData),h.setUniform("uSamplerCols",P.dimImageInfo.imageData),h.setUniform("uGridOffset",L.uGridOffset),h.setUniform("uGlyphRect",L.uGlyphRect),h.setUniform("uGlyphOffset",x),h.bindTextures(),c.drawElements(c.TRIANGLES,6,this.GL.UNSIGNED_SHORT,0)}x+=O.advanceWidth,S=O}}catch(e){E=!0,T=e}finally{try{M||null==N.return||N.return()}finally{if(E)throw T}}}finally{h.unbindShader(),this._doStroke=o,this.drawMode=i,e.pop()}return e}}else console.log("WEBGL: you must load and set a font before drawing text. See `loadFont` and `textFont` for more details.")}},{"../core/constants":22,"../core/main":32,"./p5.RendererGL.Retained":85,"./p5.Shader":87}]},{},[17])(17)}); \ No newline at end of file +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).p5=e()}}(function(){var i,e,t;return function i(a,s,l){function u(t,e){if(!s[t]){if(!a[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(c)return c(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var o=s[t]={exports:{}};a[t][0].call(o.exports,function(e){return u(a[t][1][e]||e)},o,o.exports,i,a,s,l)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;e>16&255,a[s++]=t>>8&255,a[s++]=255&t;2===i&&(t=u[e.charCodeAt(r)]<<2|u[e.charCodeAt(r+1)]>>4,a[s++]=255&t);1===i&&(t=u[e.charCodeAt(r)]<<10|u[e.charCodeAt(r+1)]<<4|u[e.charCodeAt(r+2)]>>2,a[s++]=t>>8&255,a[s++]=255&t);return a},r.fromByteArray=function(e){for(var t,r=e.length,n=r%3,o=[],i=0,a=r-n;i>2]+s[t<<4&63]+"==")):2==n&&(t=(e[r-2]<<8)+e[r-1],o.push(s[t>>10]+s[t>>4&63]+s[t<<2&63]+"="));return o.join("")};for(var s=[],u=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,i=n.length;o>18&63]+s[o>>12&63]+s[o>>6&63]+s[63&o]);return i.join("")}u["-".charCodeAt(0)]=62,u["_".charCodeAt(0)]=63},{}],2:[function(e,t,r){},{}],3:[function(e,t,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],4:[function(U,e,N){(function(d){"use strict";var n=U("base64-js"),i=U("ieee754"),e="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;N.Buffer=d,N.SlowBuffer=function(e){+e!=e&&(e=0);return d.alloc(+e)},N.INSPECT_MAX_BYTES=50;var r=2147483647;function a(e){if(r>>1;case"base64":return A(e).length;default:if(o)return n?-1:P(e).length;t=(""+t).toLowerCase(),o=!0}}function h(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function p(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):2147483647=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=d.from(t,n)),d.isBuffer(t))return 0===t.length?-1:y(e,t,r,n,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):y(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function y(e,t,r,n,o){var i,a=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s/=a=2,l/=2,r/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var c=-1;for(i=r;i>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function b(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function _(e,t,r){r=Math.min(e.length,r);for(var n=[],o=t;o>>10&1023|55296),c=56320|1023&c),n.push(c),o+=d}return function(e){var t=e.length;if(t<=x)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e=e||"utf8";;)switch(e){case"hex":return S(this,t,r);case"utf8":case"utf-8":return _(this,t,r);case"ascii":return w(this,t,r);case"latin1":case"binary":return j(this,t,r);case"base64":return b(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},d.prototype.equals=function(e){if(!d.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===d.compare(this,e)},d.prototype.inspect=function(){var e="",t=N.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},e&&(d.prototype[e]=d.prototype.inspect),d.prototype.compare=function(e,t,r,n,o){if(R(e,Uint8Array)&&(e=d.from(e,e.offset,e.byteLength)),!d.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),t<0||r>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(o<=n&&r<=t)return 0;if(o<=n)return-1;if(r<=t)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),s=Math.min(i,a),l=this.slice(n,o),u=e.slice(t,r),c=0;c>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var o=this.length-t;if((void 0===r||othis.length)throw new RangeError("Attempt to write outside buffer bounds");n=n||"utf8";for(var i,a,s,l,u,c,d=!1;;)switch(n){case"hex":return m(this,e,t,r);case"utf8":case"utf-8":return u=t,c=r,k(P(e,(l=this).length-u),l,u,c);case"ascii":return g(this,e,t,r);case"latin1":case"binary":return g(this,e,t,r);case"base64":return i=this,a=t,s=r,k(A(e),i,a,s);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,e,t,r);default:if(d)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),d=!0}},d.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var x=4096;function w(e,t,r){var n="";r=Math.min(e.length,r);for(var o=t;oe.length)throw new RangeError("Index out of range")}function O(e,t,r,n){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function C(e,t,r,n,o){return t=+t,r>>>=0,o||O(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function L(e,t,r,n,o){return t=+t,r>>>=0,o||O(e,0,r,8),i.write(e,t,r,n,52,8),r+8}d.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):r>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e],o=1,i=0;++i>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e+--t],o=1;0>>=0,t||E(e,1,this.length),this[e]},d.prototype.readUInt16LE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]|this[e+1]<<8},d.prototype.readUInt16BE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]<<8|this[e+1]},d.prototype.readUInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},d.prototype.readUInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},d.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e],o=1,i=0;++i>>=0,t>>>=0,r||E(e,t,this.length);for(var n=t,o=1,i=this[e+--n];0>>=0,t||E(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},d.prototype.readInt16LE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},d.prototype.readInt16BE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},d.prototype.readInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},d.prototype.readInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},d.prototype.readFloatLE=function(e,t){return e>>>=0,t||E(e,4,this.length),i.read(this,e,!0,23,4)},d.prototype.readFloatBE=function(e,t){return e>>>=0,t||E(e,4,this.length),i.read(this,e,!1,23,4)},d.prototype.readDoubleLE=function(e,t){return e>>>=0,t||E(e,8,this.length),i.read(this,e,!0,52,8)},d.prototype.readDoubleBE=function(e,t){return e>>>=0,t||E(e,8,this.length),i.read(this,e,!1,52,8)},d.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||T(this,e,t,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n||T(this,e,t,r,Math.pow(2,8*r)-1,0);var o=r-1,i=1;for(this[t+o]=255&e;0<=--o&&(i*=256);)this[t+o]=e/i&255;return t+r},d.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,1,255,0),this[t]=255&e,t+1},d.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},d.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},d.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},d.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},d.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);T(this,e,t,r,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+r},d.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);T(this,e,t,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[t+i]=255&e;0<=--i&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+r},d.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},d.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},d.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},d.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},d.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||T(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},d.prototype.writeFloatLE=function(e,t,r){return C(this,e,t,!0,r)},d.prototype.writeFloatBE=function(e,t,r){return C(this,e,t,!1,r)},d.prototype.writeDoubleLE=function(e,t,r){return L(this,e,t,!0,r)},d.prototype.writeDoubleBE=function(e,t,r){return L(this,e,t,!1,r)},d.prototype.copy=function(e,t,r,n){if(!d.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r=r||0,n||0===n||(n=this.length),t>=e.length&&(t=e.length),t=t||0,0=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,"number"==typeof(e=e||0))for(i=t;i>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function A(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(t,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function k(e,t,r,n){for(var o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function R(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function D(e){return e!=e}var I=function(){for(var e="0123456789abcdef",t=new Array(256),r=0;r<16;++r)for(var n=16*r,o=0;o<16;++o)t[n+o]=e[r]+e[o];return t}()}).call(this,U("buffer").Buffer)},{"base64-js":1,buffer:4,ieee754:236}],5:[function(e,t,r){t.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},{}],6:[function(e,t,r){var n=e("../internals/is-object");t.exports=function(e){if(!n(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},{"../internals/is-object":74}],7:[function(e,t,r){var n=e("../internals/well-known-symbol"),o=e("../internals/object-create"),i=e("../internals/object-define-property"),a=n("unscopables"),s=Array.prototype;null==s[a]&&i.f(s,a,{configurable:!0,value:o(null)}),t.exports=function(e){s[a][e]=!0}},{"../internals/object-create":90,"../internals/object-define-property":92,"../internals/well-known-symbol":146}],8:[function(e,t,r){"use strict";var n=e("../internals/string-multibyte").charAt;t.exports=function(e,t,r){return t+(r?n(e,t).length:1)}},{"../internals/string-multibyte":123}],9:[function(e,t,r){t.exports=function(e,t,r){if(!(e instanceof t))throw TypeError("Incorrect "+(r?r+" ":"")+"invocation");return e}},{}],10:[function(e,t,r){var n=e("../internals/is-object");t.exports=function(e){if(!n(e))throw TypeError(String(e)+" is not an object");return e}},{"../internals/is-object":74}],11:[function(e,t,r){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},{}],12:[function(e,t,r){"use strict";function n(e){return l(e)&&u(L,c(e))}var o,i=e("../internals/array-buffer-native"),a=e("../internals/descriptors"),s=e("../internals/global"),l=e("../internals/is-object"),u=e("../internals/has"),c=e("../internals/classof"),d=e("../internals/create-non-enumerable-property"),f=e("../internals/redefine"),h=e("../internals/object-define-property").f,p=e("../internals/object-get-prototype-of"),y=e("../internals/object-set-prototype-of"),m=e("../internals/well-known-symbol"),g=e("../internals/uid"),v=s.Int8Array,b=v&&v.prototype,_=s.Uint8ClampedArray,x=_&&_.prototype,w=v&&p(v),j=b&&p(b),S=Object.prototype,M=S.isPrototypeOf,E=m("toStringTag"),T=g("TYPED_ARRAY_TAG"),O=i&&!!y&&"Opera"!==c(s.opera),C=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8};for(o in L)s[o]||(O=!1);if((!O||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},O))for(o in L)s[o]&&y(s[o],w);if((!O||!j||j===S)&&(j=w.prototype,O))for(o in L)s[o]&&y(s[o].prototype,j);if(O&&p(x)!==j&&y(x,j),a&&!u(j,E))for(o in C=!0,h(j,E,{get:function(){return l(this)?this[T]:void 0}}),L)s[o]&&d(s[o],T,o);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:C&&T,aTypedArray:function(e){if(n(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(y){if(M.call(w,e))return e}else for(var t in L)if(u(L,o)){var r=s[t];if(r&&(e===r||M.call(r,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r){if(a){if(r)for(var n in L){var o=s[n];o&&u(o.prototype,e)&&delete o.prototype[e]}j[e]&&!r||f(j,e,r?t:O&&b[e]||t)}},exportTypedArrayStaticMethod:function(e,t,r){var n,o;if(a){if(y){if(r)for(n in L)(o=s[n])&&u(o,e)&&delete o[e];if(w[e]&&!r)return;try{return f(w,e,r?t:O&&v[e]||t)}catch(e){}}for(n in L)!(o=s[n])||o[e]&&!r||f(o,e,t)}},isView:function(e){var t=c(e);return"DataView"===t||u(L,t)},isTypedArray:n,TypedArray:w,TypedArrayPrototype:j}},{"../internals/array-buffer-native":11,"../internals/classof":29,"../internals/create-non-enumerable-property":37,"../internals/descriptors":42,"../internals/global":59,"../internals/has":60,"../internals/is-object":74,"../internals/object-define-property":92,"../internals/object-get-prototype-of":97,"../internals/object-set-prototype-of":101,"../internals/redefine":108,"../internals/uid":143,"../internals/well-known-symbol":146}],13:[function(e,t,r){"use strict";function n(e){return[255&e]}function o(e){return[255&e,e>>8&255]}function i(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function a(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function s(e){return V(e,23,4)}function l(e){return V(e,52,8)}function u(e,t){E(e[R],t,{get:function(){return L(this)[t]}})}function c(e,t,r,n){var o=x(r),i=L(e);if(o+t>i.byteLength)throw G(D);var a=L(i.buffer).bytes,s=o+i.byteOffset,l=a.slice(s,s+t);return n?l:l.reverse()}function d(e,t,r,n,o,i){var a=x(r),s=L(e);if(a+t>s.byteLength)throw G(D);for(var l=L(s.buffer).bytes,u=a+s.byteOffset,c=n(+o),d=0;dX;)(H=q[X++])in U||y(U,H,I[H]);W.constructor=U}S&&j(F)!==B&&S(F,B);var Y=new N(new U(2)),Z=F.setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||m(F,{setInt8:function(e,t){Z.call(this,e,t<<24>>24)},setUint8:function(e,t){Z.call(this,e,t<<24>>24)}},{unsafe:!0})}else U=function(e){v(this,U,A);var t=x(e);P(this,{bytes:T.call(new Array(t),0),byteLength:t}),h||(this.byteLength=t)},N=function(e,t,r){v(this,N,k),v(e,U,k);var n=L(e).byteLength,o=b(t);if(o<0||n>24},getUint8:function(e){return c(this,1,e)[0]},getInt16:function(e,t){var r=c(this,2,e,1>16},getUint16:function(e,t){var r=c(this,2,e,1>>0},getFloat32:function(e,t){return z(c(this,4,e,1"+o+""}},{"../internals/require-object-coercible":113}],36:[function(e,t,r){"use strict";function o(){return this}var i=e("../internals/iterators-core").IteratorPrototype,a=e("../internals/object-create"),s=e("../internals/create-property-descriptor"),l=e("../internals/set-to-string-tag"),u=e("../internals/iterators");t.exports=function(e,t,r){var n=t+" Iterator";return e.prototype=a(i,{next:s(1,r)}),l(e,n,!1,!0),u[n]=o,e}},{"../internals/create-property-descriptor":38,"../internals/iterators":79,"../internals/iterators-core":78,"../internals/object-create":90,"../internals/set-to-string-tag":117}],37:[function(e,t,r){var n=e("../internals/descriptors"),o=e("../internals/object-define-property"),i=e("../internals/create-property-descriptor");t.exports=n?function(e,t,r){return o.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},{"../internals/create-property-descriptor":38,"../internals/descriptors":42,"../internals/object-define-property":92}],38:[function(e,t,r){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],39:[function(e,t,r){"use strict";var o=e("../internals/to-primitive"),i=e("../internals/object-define-property"),a=e("../internals/create-property-descriptor");t.exports=function(e,t,r){var n=o(t);n in e?i.f(e,n,a(0,r)):e[n]=r}},{"../internals/create-property-descriptor":38,"../internals/object-define-property":92,"../internals/to-primitive":138}],40:[function(e,t,r){"use strict";function g(){return this}var v=e("../internals/export"),b=e("../internals/create-iterator-constructor"),_=e("../internals/object-get-prototype-of"),x=e("../internals/object-set-prototype-of"),w=e("../internals/set-to-string-tag"),j=e("../internals/create-non-enumerable-property"),S=e("../internals/redefine"),n=e("../internals/well-known-symbol"),M=e("../internals/is-pure"),E=e("../internals/iterators"),o=e("../internals/iterators-core"),T=o.IteratorPrototype,O=o.BUGGY_SAFARI_ITERATORS,C=n("iterator"),L="values",P="entries";t.exports=function(e,t,r,n,o,i,a){b(r,t,n);function s(e){if(e===o&&y)return y;if(!O&&e in h)return h[e];switch(e){case"keys":case L:case P:return function(){return new r(this,e)}}return function(){return new r(this)}}var l,u,c,d=t+" Iterator",f=!1,h=e.prototype,p=h[C]||h["@@iterator"]||o&&h[o],y=!O&&p||s(o),m="Array"==t&&h.entries||p;if(m&&(l=_(m.call(new e)),T!==Object.prototype&&l.next&&(M||_(l)===T||(x?x(l,T):"function"!=typeof l[C]&&j(l,C,g)),w(l,d,!0,!0),M&&(E[d]=g))),o==L&&p&&p.name!==L&&(f=!0,y=function(){return p.call(this)}),M&&!a||h[C]===y||j(h,C,y),E[t]=y,o)if(u={values:s(L),keys:i?y:s("keys"),entries:s(P)},a)for(c in u)!O&&!f&&c in h||S(h,c,u[c]);else v({target:t,proto:!0,forced:O||f},u);return u}},{"../internals/create-iterator-constructor":36,"../internals/create-non-enumerable-property":37,"../internals/export":49,"../internals/is-pure":75,"../internals/iterators":79,"../internals/iterators-core":78,"../internals/object-get-prototype-of":97,"../internals/object-set-prototype-of":101,"../internals/redefine":108,"../internals/set-to-string-tag":117,"../internals/well-known-symbol":146}],41:[function(e,t,r){var n=e("../internals/path"),o=e("../internals/has"),i=e("../internals/well-known-symbol-wrapped"),a=e("../internals/object-define-property").f;t.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},{"../internals/has":60,"../internals/object-define-property":92,"../internals/path":104,"../internals/well-known-symbol-wrapped":145}],42:[function(e,t,r){var n=e("../internals/fails");t.exports=!n(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},{"../internals/fails":50}],43:[function(e,t,r){var n=e("../internals/global"),o=e("../internals/is-object"),i=n.document,a=o(i)&&o(i.createElement);t.exports=function(e){return a?i.createElement(e):{}}},{"../internals/global":59,"../internals/is-object":74}],44:[function(e,t,r){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},{}],45:[function(e,t,r){var n=e("../internals/engine-user-agent");t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(n)},{"../internals/engine-user-agent":46}],46:[function(e,t,r){var n=e("../internals/get-built-in");t.exports=n("navigator","userAgent")||""},{"../internals/get-built-in":56}],47:[function(e,t,r){var n,o,i=e("../internals/global"),a=e("../internals/engine-user-agent"),s=i.process,l=s&&s.versions,u=l&&l.v8;u?o=(n=u.split("."))[0]+n[1]:a&&(!(n=a.match(/Edge\/(\d+)/))||74<=n[1])&&(n=a.match(/Chrome\/(\d+)/))&&(o=n[1]),t.exports=o&&+o},{"../internals/engine-user-agent":46,"../internals/global":59}],48:[function(e,t,r){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],49:[function(e,t,r){var c=e("../internals/global"),d=e("../internals/object-get-own-property-descriptor").f,f=e("../internals/create-non-enumerable-property"),h=e("../internals/redefine"),p=e("../internals/set-global"),y=e("../internals/copy-constructor-properties"),m=e("../internals/is-forced");t.exports=function(e,t){var r,n,o,i,a,s=e.target,l=e.global,u=e.stat;if(r=l?c:u?c[s]||p(s,{}):(c[s]||{}).prototype)for(n in t){if(i=t[n],o=e.noTargetGet?(a=d(r,n))&&a.value:r[n],!m(l?n:s+(u?".":"#")+n,e.forced)&&void 0!==o){if(typeof i==typeof o)continue;y(i,o)}(e.sham||o&&o.sham)&&f(i,"sham",!0),h(r,n,i,e)}}},{"../internals/copy-constructor-properties":32,"../internals/create-non-enumerable-property":37,"../internals/global":59,"../internals/is-forced":73,"../internals/object-get-own-property-descriptor":93,"../internals/redefine":108,"../internals/set-global":115}],50:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],51:[function(e,t,r){"use strict";e("../modules/es.regexp.exec");var d=e("../internals/redefine"),f=e("../internals/fails"),h=e("../internals/well-known-symbol"),p=e("../internals/regexp-exec"),y=e("../internals/create-non-enumerable-property"),m=h("species"),g=!f(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}),v="$0"==="a".replace(/./,"$0"),n=h("replace"),b=!!/./[n]&&""===/./[n]("a","$0"),_=!f(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var r="ab".split(e);return 2!==r.length||"a"!==r[0]||"b"!==r[1]});t.exports=function(r,e,t,n){var o=h(r),i=!f(function(){var e={};return e[o]=function(){return 7},7!=""[r](e)}),a=i&&!f(function(){var e=!1,t=/a/;return"split"===r&&((t={constructor:{}}).constructor[m]=function(){return t},t.flags="",t[o]=/./[o]),t.exec=function(){return e=!0,null},t[o](""),!e});if(!i||!a||"replace"===r&&(!g||!v||b)||"split"===r&&!_){var s=/./[o],l=t(o,""[r],function(e,t,r,n,o){return t.exec===p?i&&!o?{done:!0,value:s.call(t,r,n)}:{done:!0,value:e.call(r,t,n)}:{done:!1}},{REPLACE_KEEPS_$0:v,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:b}),u=l[0],c=l[1];d(String.prototype,r,u),d(RegExp.prototype,o,2==e?function(e,t){return c.call(e,this,t)}:function(e){return c.call(e,this)})}n&&y(RegExp.prototype[o],"sham",!0)}},{"../internals/create-non-enumerable-property":37,"../internals/fails":50,"../internals/redefine":108,"../internals/regexp-exec":110,"../internals/well-known-symbol":146,"../modules/es.regexp.exec":181}],52:[function(e,t,r){"use strict";var f=e("../internals/is-array"),h=e("../internals/to-length"),p=e("../internals/function-bind-context"),y=function(e,t,r,n,o,i,a,s){for(var l,u=o,c=0,d=!!a&&p(a,s,3);c>1,c=23===t?p(2,-24)-p(2,-77):0,d=e<0||0===e&&1/e<0?1:0,f=0;for((e=h(e))!=e||e===1/0?(o=e!=e?1:0,n=l):(n=y(m(e)/g),e*(i=p(2,-n))<1&&(n--,i*=2),2<=(e+=1<=n+u?c/i:c*p(2,1-u))*i&&(n++,i/=2),l<=n+u?(o=0,n=l):1<=n+u?(o=(e*i-1)*p(2,t),n+=u):(o=e*p(2,u-1)*p(2,t),n=0));8<=t;a[f++]=255&o,o/=256,t-=8);for(n=n<>1,s=o-7,l=n-1,u=e[l--],c=127&u;for(u>>=7;0>=-s,s+=t;0"+e+""}var i,a=e("../internals/an-object"),s=e("../internals/object-define-properties"),l=e("../internals/enum-bug-keys"),u=e("../internals/hidden-keys"),c=e("../internals/html"),d=e("../internals/document-create-element"),f=e("../internals/shared-key"),h="prototype",p="script",y=f("IE_PROTO"),m=function(){try{i=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;m=i?function(e){e.write(o("")),e.close();var t=e.parentWindow.Object;return e=null,t}(i):((t=d("iframe")).style.display="none",c.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(o("document.F=Object")),e.close(),e.F);for(var r=l.length;r--;)delete m[h][l[r]];return m()};u[y]=!0,t.exports=Object.create||function(e,t){var r;return null!==e?(n[h]=a(e),r=new n,n[h]=null,r[y]=e):r=m(),void 0===t?r:s(r,t)}},{"../internals/an-object":10,"../internals/document-create-element":43,"../internals/enum-bug-keys":48,"../internals/hidden-keys":61,"../internals/html":63,"../internals/object-define-properties":91,"../internals/shared-key":118}],91:[function(e,t,r){var n=e("../internals/descriptors"),a=e("../internals/object-define-property"),s=e("../internals/an-object"),l=e("../internals/object-keys");t.exports=n?Object.defineProperties:function(e,t){s(e);for(var r,n=l(t),o=n.length,i=0;io;)a(n,r=t[o++])&&(~l(i,r)||i.push(r));return i}},{"../internals/array-includes":18,"../internals/has":60,"../internals/hidden-keys":61,"../internals/to-indexed-object":132}],99:[function(e,t,r){var n=e("../internals/object-keys-internal"),o=e("../internals/enum-bug-keys");t.exports=Object.keys||function(e){return n(e,o)}},{"../internals/enum-bug-keys":48,"../internals/object-keys-internal":98}],100:[function(e,t,r){"use strict";var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!n.call({1:2},1);r.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},{}],101:[function(e,t,r){var o=e("../internals/an-object"),i=e("../internals/a-possible-prototype");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var r,n=!1,e={};try{(r=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(e,[]),n=e instanceof Array}catch(e){}return function(e,t){return o(e),i(t),n?r.call(e,t):e.__proto__=t,e}}():void 0)},{"../internals/a-possible-prototype":6,"../internals/an-object":10}],102:[function(e,t,r){"use strict";var n=e("../internals/to-string-tag-support"),o=e("../internals/classof");t.exports=n?{}.toString:function(){return"[object "+o(this)+"]"}},{"../internals/classof":29,"../internals/to-string-tag-support":139}],103:[function(e,t,r){var n=e("../internals/get-built-in"),o=e("../internals/object-get-own-property-names"),i=e("../internals/object-get-own-property-symbols"),a=e("../internals/an-object");t.exports=n("Reflect","ownKeys")||function(e){var t=o.f(a(e)),r=i.f;return r?t.concat(r(e)):t}},{"../internals/an-object":10,"../internals/get-built-in":56,"../internals/object-get-own-property-names":95,"../internals/object-get-own-property-symbols":96}],104:[function(e,t,r){var n=e("../internals/global");t.exports=n},{"../internals/global":59}],105:[function(e,t,r){t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},{}],106:[function(e,t,r){var n=e("../internals/an-object"),o=e("../internals/is-object"),i=e("../internals/new-promise-capability");t.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=i.f(e);return(0,r.resolve)(t),r.promise}},{"../internals/an-object":10,"../internals/is-object":74,"../internals/new-promise-capability":86}],107:[function(e,t,r){var o=e("../internals/redefine");t.exports=function(e,t,r){for(var n in t)o(e,n,t[n],r);return e}},{"../internals/redefine":108}],108:[function(e,t,r){var s=e("../internals/global"),l=e("../internals/create-non-enumerable-property"),u=e("../internals/has"),c=e("../internals/set-global"),n=e("../internals/inspect-source"),o=e("../internals/internal-state"),i=o.get,d=o.enforce,f=String(String).split("String");(t.exports=function(e,t,r,n){var o=!!n&&!!n.unsafe,i=!!n&&!!n.enumerable,a=!!n&&!!n.noTargetGet;"function"==typeof r&&("string"!=typeof t||u(r,"name")||l(r,"name",t),d(r).source=f.join("string"==typeof t?t:"")),e!==s?(o?!a&&e[t]&&(i=!0):delete e[t],i?e[t]=r:l(e,t,r)):i?e[t]=r:c(t,r)})(Function.prototype,"toString",function(){return"function"==typeof this&&i(this).source||n(this)})},{"../internals/create-non-enumerable-property":37,"../internals/global":59,"../internals/has":60,"../internals/inspect-source":68,"../internals/internal-state":70,"../internals/set-global":115}],109:[function(e,t,r){var o=e("./classof-raw"),i=e("./regexp-exec");t.exports=function(e,t){var r=e.exec;if("function"==typeof r){var n=r.call(e,t);if("object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==o(e))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(e,t)}},{"./classof-raw":28,"./regexp-exec":110}],110:[function(e,t,r){"use strict";var n,o,d=e("./regexp-flags"),i=e("./regexp-sticky-helpers"),f=RegExp.prototype.exec,h=String.prototype.replace,a=f,p=(n=/a/,o=/b*/g,f.call(n,"a"),f.call(o,"a"),0!==n.lastIndex||0!==o.lastIndex),y=i.UNSUPPORTED_Y||i.BROKEN_CARET,m=void 0!==/()??/.exec("")[1];(p||m||y)&&(a=function(e){var t,r,n,o,i=this,a=y&&i.sticky,s=d.call(i),l=i.source,u=0,c=e;return a&&(-1===(s=s.replace("y","")).indexOf("g")&&(s+="g"),c=String(e).slice(i.lastIndex),0>1,e+=x(e/t);455x((b-a)/d))throw RangeError(_);for(a+=(c-i)*d,i=c,t=0;tb)throw RangeError(_);if(r==i){for(var f=a,h=36;;h+=36){var p=h<=s?1:s+26<=h?26:h-s;if(f>>=1)&&(t+=t))1&n&&(r+=t);return r}},{"../internals/require-object-coercible":113,"../internals/to-integer":133}],126:[function(e,t,r){var n=e("../internals/fails"),o=e("../internals/whitespaces");t.exports=function(e){return n(function(){return!!o[e]()||"​…᠎"!="​…᠎"[e]()||o[e].name!==e})}},{"../internals/fails":50,"../internals/whitespaces":147}],127:[function(e,t,r){function n(r){return function(e){var t=String(o(e));return 1&r&&(t=t.replace(a,"")),2&r&&(t=t.replace(s,"")),t}}var o=e("../internals/require-object-coercible"),i="["+e("../internals/whitespaces")+"]",a=RegExp("^"+i+i+"*"),s=RegExp(i+i+"*$");t.exports={start:n(1),end:n(2),trim:n(3)}},{"../internals/require-object-coercible":113,"../internals/whitespaces":147}],128:[function(e,t,r){function n(e){if(S.hasOwnProperty(e)){var t=S[e];delete S[e],t()}}function o(e){return function(){n(e)}}function i(e){n(e.data)}function a(e){c.postMessage(e+"",g.protocol+"//"+g.host)}var s,l,u,c=e("../internals/global"),d=e("../internals/fails"),f=e("../internals/classof-raw"),h=e("../internals/function-bind-context"),p=e("../internals/html"),y=e("../internals/document-create-element"),m=e("../internals/engine-is-ios"),g=c.location,v=c.setImmediate,b=c.clearImmediate,_=c.process,x=c.MessageChannel,w=c.Dispatch,j=0,S={},M="onreadystatechange";v&&b||(v=function(e){for(var t=[],r=1;r=t.length?{value:e.target=void 0,done:!0}:"keys"==r?{value:n,done:!1}:"values"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}},"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},{"../internals/add-to-unscopables":7,"../internals/define-iterator":40,"../internals/internal-state":70,"../internals/iterators":79,"../internals/to-indexed-object":132}],159:[function(e,t,r){"use strict";var n=e("../internals/export"),o=e("../internals/indexed-object"),i=e("../internals/to-indexed-object"),a=e("../internals/array-method-is-strict"),s=[].join,l=o!=Object,u=a("join",",");n({target:"Array",proto:!0,forced:l||!u},{join:function(e){return s.call(i(this),void 0===e?",":e)}})},{"../internals/array-method-is-strict":22,"../internals/export":49,"../internals/indexed-object":66,"../internals/to-indexed-object":132}],160:[function(e,t,r){var n=e("../internals/export"),o=e("../internals/array-last-index-of");n({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},{"../internals/array-last-index-of":20,"../internals/export":49}],161:[function(e,t,r){"use strict";var n=e("../internals/export"),o=e("../internals/array-iteration").map,i=e("../internals/array-method-has-species-support"),a=e("../internals/array-method-uses-to-length"),s=i("map"),l=a("map");n({target:"Array",proto:!0,forced:!s||!l},{map:function(e,t){return o(this,e,1M;M++)l(b,w=S[M])&&!l(j,w)&&m(j,w,y(b,w));(j.prototype=_).constructor=j,s(i,v,j)}},{"../internals/classof-raw":28,"../internals/descriptors":42,"../internals/fails":50,"../internals/global":59,"../internals/has":60,"../internals/inherit-if-required":67,"../internals/is-forced":73,"../internals/object-create":90,"../internals/object-define-property":92,"../internals/object-get-own-property-descriptor":93,"../internals/object-get-own-property-names":95,"../internals/redefine":108,"../internals/string-trim":127,"../internals/to-primitive":138}],171:[function(e,t,r){e("../internals/export")({target:"Number",stat:!0},{isFinite:e("../internals/number-is-finite")})},{"../internals/export":49,"../internals/number-is-finite":88}],172:[function(e,t,r){"use strict";var n=e("../internals/export"),h=e("../internals/to-integer"),p=e("../internals/this-number-value"),y=e("../internals/string-repeat"),o=e("../internals/fails"),i=1..toFixed,m=Math.floor,g=function(e,t,r){return 0===t?r:t%2==1?g(e,t-1,r*e):g(e*e,t/2,r)};n({target:"Number",proto:!0,forced:i&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!o(function(){i.call({})})},{toFixed:function(e){function t(e,t){for(var r=-1,n=t;++r<6;)n+=e*c[r],c[r]=n%1e7,n=m(n/1e7)}function r(e){for(var t=6,r=0;0<=--t;)r+=c[t],c[t]=m(r/e),r=r%e*1e7}function n(){for(var e=6,t="";0<=--e;)if(""!==t||0===e||0!==c[e]){var r=String(c[e]);t=""===t?r:t+y.call("0",7-r.length)+r}return t}var o,i,a,s,l=p(this),u=h(e),c=[0,0,0,0,0,0],d="",f="0";if(u<0||20r;){var n,o,i,a=p[r++],s=t?a.ok:a.fail,l=a.resolve,u=a.reject,c=a.domain;try{s?(t||(2===f.rejection&&oe(d,f),f.rejection=1),!0===s?n=e:(c&&c.enter(),n=s(e),c&&(c.exit(),i=!0)),n===a.promise?u(W("Promise-chain cycle")):(o=y(n))?o.call(n,l,u):l(n)):u(e)}catch(e){c&&!i&&c.exit(),u(e)}}f.reactions=[],f.notified=!1,h&&!f.rejection&&re(d,f)})}}function o(e,t,r){var n,o;J?((n=q.createEvent("Event")).promise=t,n.reason=r,n.initEvent(e,!1,!0),h.dispatchEvent(n)):n={promise:t,reason:r},(o=h["on"+e])?o(n):e===$&&A("Unhandled promise rejection",r)}function a(t,r,n,o){return function(e){t(r,n,e,o)}}function s(e,t,r,n){t.done||(t.done=!0,n&&(t=n),t.value=r,t.state=2,i(e,t,!0))}var n,l,u,c,d=e("../internals/export"),f=e("../internals/is-pure"),h=e("../internals/global"),p=e("../internals/get-built-in"),m=e("../internals/native-promise-constructor"),g=e("../internals/redefine"),v=e("../internals/redefine-all"),b=e("../internals/set-to-string-tag"),_=e("../internals/set-species"),x=e("../internals/is-object"),w=e("../internals/a-function"),j=e("../internals/an-instance"),S=e("../internals/classof-raw"),M=e("../internals/inspect-source"),E=e("../internals/iterate"),T=e("../internals/check-correctness-of-iteration"),O=e("../internals/species-constructor"),C=e("../internals/task").set,L=e("../internals/microtask"),P=e("../internals/promise-resolve"),A=e("../internals/host-report-errors"),k=e("../internals/new-promise-capability"),R=e("../internals/perform"),D=e("../internals/internal-state"),I=e("../internals/is-forced"),U=e("../internals/well-known-symbol"),N=e("../internals/engine-v8-version"),F=U("species"),B="Promise",G=D.get,V=D.set,z=D.getterFor(B),H=m,W=h.TypeError,q=h.document,X=h.process,Y=p("fetch"),Z=k.f,Q=Z,K="process"==S(X),J=!!(q&&q.createEvent&&h.dispatchEvent),$="unhandledrejection",ee=I(B,function(){if(!(M(H)!==String(H))){if(66===N)return!0;if(!K&&"function"!=typeof PromiseRejectionEvent)return!0}if(f&&!H.prototype.finally)return!0;if(51<=N&&/native code/.test(H))return!1;function e(e){e(function(){},function(){})}var t=H.resolve(1);return(t.constructor={})[F]=e,!(t.then(function(){})instanceof e)}),te=ee||!T(function(e){H.all(e).catch(function(){})}),re=function(r,n){C.call(h,function(){var e,t=n.value;if(ne(n)&&(e=R(function(){K?X.emit("unhandledRejection",t,r):o($,r,t)}),n.rejection=K||ne(n)?2:1,e.error))throw e.value})},ne=function(e){return 1!==e.rejection&&!e.parent},oe=function(e,t){C.call(h,function(){K?X.emit("rejectionHandled",e):o("rejectionhandled",e,t.value)})},ie=function(r,n,e,t){if(!n.done){n.done=!0,t&&(n=t);try{if(r===e)throw W("Promise can't be resolved itself");var o=y(e);o?L(function(){var t={done:!1};try{o.call(e,a(ie,r,t,n),a(s,r,t,n))}catch(e){s(r,t,e,n)}}):(n.value=e,n.state=1,i(r,n,!1))}catch(e){s(r,{done:!1},e,n)}}};ee&&(H=function(e){j(this,H,B),w(e),n.call(this);var t=G(this);try{e(a(ie,this,t),a(s,this,t))}catch(e){s(this,t,e)}},(n=function(){V(this,{type:B,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=v(H.prototype,{then:function(e,t){var r=z(this),n=Z(O(this,H));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=K?X.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&i(this,r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),l=function(){var e=new n,t=G(e);this.promise=e,this.resolve=a(ie,e,t),this.reject=a(s,e,t)},k.f=Z=function(e){return e===H||e===u?new l(e):Q(e)},f||"function"!=typeof m||(c=m.prototype.then,g(m.prototype,"then",function(e,t){var r=this;return new H(function(e,t){c.call(r,e,t)}).then(e,t)},{unsafe:!0}),"function"==typeof Y&&d({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return P(H,Y.apply(h,arguments))}}))),d({global:!0,wrap:!0,forced:ee},{Promise:H}),b(H,B,!1,!0),_(B),u=p(B),d({target:B,stat:!0,forced:ee},{reject:function(e){var t=Z(this);return t.reject.call(void 0,e),t.promise}}),d({target:B,stat:!0,forced:f||ee},{resolve:function(e){return P(f&&this===u?H:this,e)}}),d({target:B,stat:!0,forced:te},{all:function(e){var s=this,t=Z(s),l=t.resolve,u=t.reject,r=R(function(){var n=w(s.resolve),o=[],i=0,a=1;E(e,function(e){var t=i++,r=!1;o.push(void 0),a++,n.call(s,e).then(function(e){r||(r=!0,o[t]=e,--a||l(o))},u)}),--a||l(o)});return r.error&&u(r.value),t.promise},race:function(e){var r=this,n=Z(r),o=n.reject,t=R(function(){var t=w(r.resolve);E(e,function(e){t.call(r,e).then(n.resolve,o)})});return t.error&&o(t.value),n.promise}})},{"../internals/a-function":5,"../internals/an-instance":9,"../internals/check-correctness-of-iteration":27,"../internals/classof-raw":28,"../internals/engine-v8-version":47,"../internals/export":49,"../internals/get-built-in":56,"../internals/global":59,"../internals/host-report-errors":62,"../internals/inspect-source":68,"../internals/internal-state":70,"../internals/is-forced":73,"../internals/is-object":74,"../internals/is-pure":75,"../internals/iterate":77,"../internals/microtask":81,"../internals/native-promise-constructor":82,"../internals/new-promise-capability":86,"../internals/perform":105,"../internals/promise-resolve":106,"../internals/redefine":108,"../internals/redefine-all":107,"../internals/set-species":116,"../internals/set-to-string-tag":117,"../internals/species-constructor":121,"../internals/task":128,"../internals/well-known-symbol":146}],179:[function(e,t,r){var n=e("../internals/export"),o=e("../internals/get-built-in"),l=e("../internals/a-function"),u=e("../internals/an-object"),c=e("../internals/is-object"),d=e("../internals/object-create"),f=e("../internals/function-bind"),i=e("../internals/fails"),h=o("Reflect","construct"),p=i(function(){function e(){}return!(h(function(){},[],e)instanceof e)}),y=!i(function(){h(function(){})}),a=p||y;n({target:"Reflect",stat:!0,forced:a,sham:a},{construct:function(e,t,r){l(e),u(t);var n=arguments.length<3?e:l(r);if(y&&!p)return h(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var o=[null];return o.push.apply(o,t),new(f.apply(e,o))}var i=n.prototype,a=d(c(i)?i:Object.prototype),s=Function.apply.call(e,a,t);return c(s)?s:a}})},{"../internals/a-function":5,"../internals/an-object":10,"../internals/export":49,"../internals/fails":50,"../internals/function-bind":55,"../internals/get-built-in":56,"../internals/is-object":74,"../internals/object-create":90}],180:[function(e,t,r){var n=e("../internals/descriptors"),o=e("../internals/global"),i=e("../internals/is-forced"),s=e("../internals/inherit-if-required"),a=e("../internals/object-define-property").f,l=e("../internals/object-get-own-property-names").f,u=e("../internals/is-regexp"),c=e("../internals/regexp-flags"),d=e("../internals/regexp-sticky-helpers"),f=e("../internals/redefine"),h=e("../internals/fails"),p=e("../internals/internal-state").set,y=e("../internals/set-species"),m=e("../internals/well-known-symbol")("match"),g=o.RegExp,v=g.prototype,b=/a/g,_=/a/g,x=new g(b)!==b,w=d.UNSUPPORTED_Y;if(n&&i("RegExp",!x||w||h(function(){return _[m]=!1,g(b)!=b||g(_)==_||"/a/i"!=g(b,"i")}))){function j(t){t in S||a(S,t,{configurable:!0,get:function(){return g[t]},set:function(e){g[t]=e}})}for(var S=function(e,t){var r,n=this instanceof S,o=u(e),i=void 0===t;if(!n&&o&&e.constructor===S&&i)return e;x?o&&!i&&(e=e.source):e instanceof S&&(i&&(t=c.call(e)),e=e.source),w&&(r=!!t&&-1E;)j(M[E++]);(v.constructor=S).prototype=v,f(o,"RegExp",S)}y("RegExp")},{"../internals/descriptors":42,"../internals/fails":50,"../internals/global":59,"../internals/inherit-if-required":67,"../internals/internal-state":70,"../internals/is-forced":73,"../internals/is-regexp":76,"../internals/object-define-property":92,"../internals/object-get-own-property-names":95,"../internals/redefine":108,"../internals/regexp-flags":111,"../internals/regexp-sticky-helpers":112,"../internals/set-species":116,"../internals/well-known-symbol":146}],181:[function(e,t,r){"use strict";var n=e("../internals/export"),o=e("../internals/regexp-exec");n({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},{"../internals/export":49,"../internals/regexp-exec":110}],182:[function(e,t,r){"use strict";var n=e("../internals/redefine"),o=e("../internals/an-object"),i=e("../internals/fails"),a=e("../internals/regexp-flags"),s="toString",l=RegExp.prototype,u=l[s],c=i(function(){return"/a/b"!=u.call({source:"a",flags:"b"})}),d=u.name!=s;(c||d)&&n(RegExp.prototype,s,function(){var e=o(this),t=String(e.source),r=e.flags;return"/"+t+"/"+String(void 0===r&&e instanceof RegExp&&!("flags"in l)?a.call(e):r)},{unsafe:!0})},{"../internals/an-object":10,"../internals/fails":50,"../internals/redefine":108,"../internals/regexp-flags":111}],183:[function(e,t,r){"use strict";var n=e("../internals/collection"),o=e("../internals/collection-strong");t.exports=n("Set",function(t){return function(e){return t(this,arguments.length?e:void 0)}},o)},{"../internals/collection":31,"../internals/collection-strong":30}],184:[function(e,t,r){"use strict";var n,o=e("../internals/export"),i=e("../internals/object-get-own-property-descriptor").f,s=e("../internals/to-length"),l=e("../internals/not-a-regexp"),u=e("../internals/require-object-coercible"),a=e("../internals/correct-is-regexp-logic"),c=e("../internals/is-pure"),d="".endsWith,f=Math.min,h=a("endsWith");o({target:"String",proto:!0,forced:!!(c||h||(!(n=i(String.prototype,"endsWith"))||n.writable))&&!h},{endsWith:function(e,t){var r=String(u(this));l(e);var n=1=r.length?{value:void 0,done:!0}:(e=o(r,n),t.index+=e.length,{value:e,done:!1})})},{"../internals/define-iterator":40,"../internals/internal-state":70,"../internals/string-multibyte":123}],187:[function(e,t,r){"use strict";var n=e("../internals/fix-regexp-well-known-symbol-logic"),d=e("../internals/an-object"),f=e("../internals/to-length"),o=e("../internals/require-object-coercible"),h=e("../internals/advance-string-index"),p=e("../internals/regexp-exec-abstract");n("match",1,function(n,u,c){return[function(e){var t=o(this),r=null==e?void 0:e[n];return void 0!==r?r.call(e,t):new RegExp(e)[n](String(t))},function(e){var t=c(u,e,this);if(t.done)return t.value;var r=d(e),n=String(this);if(!r.global)return p(r,n);for(var o,i=r.unicode,a=[],s=r.lastIndex=0;null!==(o=p(r,n));){var l=String(o[0]);""===(a[s]=l)&&(r.lastIndex=h(n,f(r.lastIndex),i)),s++}return 0===s?null:a}]})},{"../internals/advance-string-index":8,"../internals/an-object":10,"../internals/fix-regexp-well-known-symbol-logic":51,"../internals/regexp-exec-abstract":109,"../internals/require-object-coercible":113,"../internals/to-length":134}],188:[function(e,t,r){e("../internals/export")({target:"String",proto:!0},{repeat:e("../internals/string-repeat")})},{"../internals/export":49,"../internals/string-repeat":125}],189:[function(e,t,r){"use strict";var n=e("../internals/fix-regexp-well-known-symbol-logic"),T=e("../internals/an-object"),f=e("../internals/to-object"),O=e("../internals/to-length"),C=e("../internals/to-integer"),i=e("../internals/require-object-coercible"),L=e("../internals/advance-string-index"),P=e("../internals/regexp-exec-abstract"),A=Math.max,k=Math.min,h=Math.floor,p=/\$([$&'`]|\d\d?|<[^>]*>)/g,y=/\$([$&'`]|\d\d?)/g;n("replace",2,function(o,x,w,e){var j=e.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,S=e.REPLACE_KEEPS_$0,M=j?"$":"$0";return[function(e,t){var r=i(this),n=null==e?void 0:e[o];return void 0!==n?n.call(e,r,t):x.call(String(r),e,t)},function(e,t){if(!j&&S||"string"==typeof t&&-1===t.indexOf(M)){var r=w(x,e,this,t);if(r.done)return r.value}var n=T(e),o=String(this),i="function"==typeof t;i||(t=String(t));var a=n.global;if(a){var s=n.unicode;n.lastIndex=0}for(var l=[];;){var u=P(n,o);if(null===u)break;if(l.push(u),!a)break;""===String(u[0])&&(n.lastIndex=L(o,O(n.lastIndex),s))}for(var c,d="",f=0,h=0;h>>0;if(0==n)return[];if(void 0===e)return[r];if(!d(e))return m.call(r,e,n);for(var o,i,a,s=[],l=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),u=0,c=new RegExp(e.source,l+"g");(o=h.call(c,r))&&!(u<(i=c.lastIndex)&&(s.push(r.slice(u,o.index)),1=n));)c.lastIndex===o.index&&c.lastIndex++;return u===r.length?!a&&c.test("")||s.push(""):s.push(r.slice(u)),s.length>n?s.slice(0,n):s}:"0".split(void 0,0).length?function(e,t){return void 0===e&&0===t?[]:m.call(this,e,t)}:m,[function(e,t){var r=f(this),n=null==e?void 0:e[o];return void 0!==n?n.call(e,r,t):v.call(String(r),e,t)},function(e,t){var r=g(v,e,this,t,v!==m);if(r.done)return r.value;var n=b(e),o=String(this),i=_(n,RegExp),a=n.unicode,s=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(E?"y":"g"),l=new i(E?n:"^(?:"+n.source+")",s),u=void 0===t?M:t>>>0;if(0==u)return[];if(0===o.length)return null===j(l,o)?[o]:[];for(var c=0,d=0,f=[];de.key){o.splice(t,0,e);break}t===r&&o.push(e)}n.updateURL()},forEach:function(e,t){for(var r,n=D(this).entries,o=_(e,1=R(256,5-t))return null}else if(255":1,"`":1}),$=p({},J,{"#":1,"?":1,"{":1,"}":1}),ee=p({},$,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),te=function(e,t){var r=y(e,0);return 32>1,c=-7,d=r?o-1:0,f=r?-1:1,h=e[t+d];for(d+=f,i=h&(1<<-c)-1,h>>=-c,c+=s;0>=-c,c+=n;0>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,p=n?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),2<=(t+=1<=a+d?f/l:f*Math.pow(2,1-d))*l&&(a++,l/=2),c<=a+d?(s=0,a=c):1<=a+d?(s=(t*l-1)*Math.pow(2,o),a+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,o),a=0));8<=o;e[r+h]=255&s,h+=p,s/=256,o-=8);for(a=a<Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t}function T(e,t){e.f+=t.f,e.b.f+=t.b.f}function u(e,t,r){return e=e.a,t=t.a,r=r.a,t.b.a===e?r.b.a===e?g(t.a,r.a)?b(r.b.a,t.a,r.a)<=0:0<=b(t.b.a,r.a,t.a):b(r.b.a,e,r.a)<=0:r.b.a===e?0<=b(t.b.a,e,t.a):(t=v(t.b.a,e,t.a),(e=v(r.b.a,e,r.a))<=t)}function O(e){e.a.i=null;var t=e.e;t.a.c=t.c,t.c.a=t.a,e.e=null}function c(e,t){d(e.a),e.c=!1,(e.a=t).i=e}function C(e){for(var t=e.a.a;(e=de(e)).a.a===t;);return e.c&&(c(e,t=f(ce(e).a.b,e.a.e)),e=de(e)),e}function L(e,t,r){var n=new ue;return n.a=r,n.e=H(e.f,t.e,n),r.i=n}function P(e,t){switch(e.s){case 100130:return 0!=(1&t);case 100131:return 0!==t;case 100132:return 0>1]],s[a[u]])?se(r,u):le(r,u)),s[i]=null,l[i]=r.b,r.b=i}else for(r.c[-(i+1)]=null;0Math.max(a.a,l.a))return!1;if(g(i,a)){if(0n.f&&(n.f*=2,n.c=oe(n.c,n.f+1)),0===n.b?r=o:(r=n.b,n.b=n.c[n.b]),n.e[r]=t,n.c[r]=o,n.d[o]=r,n.h&&le(n,o),r}return n=e.a++,e.c[n]=t,-(n+1)}function re(e){if(0===e.a)return ae(e.b);var t=e.c[e.d[e.a-1]];if(0!==e.b.a&&g(ie(e.b),t))return ae(e.b);for(;--e.a,0e.a||g(n[a],n[l])){o[r[i]=a]=i;break}o[r[i]=l]=i,i=s}}function le(e,t){for(var r=e.d,n=e.e,o=e.c,i=t,a=r[i];;){var s=i>>1,l=r[s];if(0==s||g(n[l],n[a])){o[r[i]=a]=i;break}o[r[i]=l]=i,i=s}}function ue(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function ce(e){return e.e.c.b}function de(e){return e.e.a.b}(n=q.prototype).x=function(){X(this,0)},n.B=function(e,t){switch(e){case 100142:return;case 100140:switch(t){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=t)}break;case 100141:return void(this.m=!!t);default:return void Y(this,100900)}Y(this,100901)},n.y=function(e){switch(e){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},n.A=function(e,t,r){this.j[0]=e,this.j[1]=t,this.j[2]=r},n.z=function(e,t){var r=t||null;switch(e){case 100100:case 100106:this.h=r;break;case 100104:case 100110:this.l=r;break;case 100101:case 100107:this.k=r;break;case 100102:case 100108:this.i=r;break;case 100103:case 100109:this.p=r;break;case 100105:case 100111:this.o=r;break;case 100112:this.r=r;break;default:Y(this,100900)}},n.C=function(e,t){var r=!1,n=[0,0,0];X(this,2);for(var o=0;o<3;++o){var i=e[o];i<-1e150&&(i=-1e150,r=!0),1e150o[u]&&(o[u]=c,a[u]=l)}if(l=0,o[1]-i[1]>o[0]-i[0]&&(l=1),o[2]-i[2]>o[l]-i[l]&&(l=2),i[l]>=o[l])n[0]=0,n[1]=0,n[2]=1;else{for(o=0,i=s[l],a=a[l],s=[0,0,0],i=[i.g[0]-a.g[0],i.g[1]-a.g[1],i.g[2]-a.g[2]],u=[0,0,0],l=r.e;l!==r;l=l.e)u[0]=l.g[0]-a.g[0],u[1]=l.g[1]-a.g[1],u[2]=l.g[2]-a.g[2],s[0]=i[1]*u[2]-i[2]*u[1],s[1]=i[2]*u[0]-i[0]*u[2],s[2]=i[0]*u[1]-i[1]*u[0],o<(c=s[0]*s[0]+s[1]*s[1]+s[2]*s[2])&&(o=c,n[0]=s[0],n[1]=s[1],n[2]=s[2]);o<=0&&(n[0]=n[1]=n[2]=0,n[E(i)]=1)}r=!0}for(s=E(n),l=this.b.c,o=(s+1)%3,a=(s+2)%3,s=0>=l,c-=l,m!=i){if(m==a)break;for(var g=m>8,++v;var _=b;if(n>=8;null!==y&&s<4096&&(p[s++]=y<<8|_,u+1<=s&&l<12&&(++l,u=u<<1|1)),y=m}else s=1+a,u=(1<<(l=o+1))-1,y=null}return f!==n&&console.log("Warning, gif stream shorter than expected."),r}try{r.GifWriter=function(g,e,t,r){var v=0,n=void 0===(r=void 0===r?{}:r).loop?null:r.loop,b=void 0===r.palette?null:r.palette;if(e<=0||t<=0||65535>=1;)++o;if(a=1<>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=(null!==b?128:0)|o,g[v++]=i,g[v++]=0,null!==b)for(var s=0,l=b.length;s>16&255,g[v++]=u>>8&255,g[v++]=255&u}if(null!==n){if(n<0||65535>8&255,g[v++]=0}var x=!1;this.addFrame=function(e,t,r,n,o,i){if(!0===x&&(--v,x=!1),i=void 0===i?{}:i,e<0||t<0||65535>=1;)++u;l=1<>8&255,g[v++]=h,g[v++]=0),g[v++]=44,g[v++]=255&e,g[v++]=e>>8&255,g[v++]=255&t,g[v++]=t>>8&255,g[v++]=255&r,g[v++]=r>>8&255,g[v++]=255&n,g[v++]=n>>8&255,g[v++]=!0===a?128|u-1:0,!0===a)for(var p=0,y=s.length;p>16&255,g[v++]=m>>8&255,g[v++]=255&m}return v=function(t,r,e,n){t[r++]=e;var o=r++,i=1<>=8,c-=8,r===o+256&&(t[o]=255,o=r++)}function h(e){d|=e<>=8,c-=8,r===o+256&&(t[o]=255,o=r++);4096===l?(h(i),l=1+s,u=e+1,y={}):(1<>7,o=1<<1+(7&r);x[e++],x[e++];var i=null,a=null;n&&(i=e,e+=3*(a=o));var s=!0,l=[],u=0,c=null,d=0,f=null;for(this.width=w,this.height=t;s&&e>2&7,e++;break;case 254:for(;;){if(!(0<=(T=x[e++])))throw Error("Invalid block size");if(0===T)break;e+=T}break;default:throw new Error("Unknown graphic control label: 0x"+x[e-1].toString(16))}break;case 44:var p=x[e++]|x[e++]<<8,y=x[e++]|x[e++]<<8,m=x[e++]|x[e++]<<8,g=x[e++]|x[e++]<<8,v=x[e++],b=v>>6&1,_=1<<1+(7&v),j=i,S=a,M=!1;if(v>>7){M=!0;j=e,e+=3*(S=_)}var E=e;for(e++;;){var T;if(!(0<=(T=x[e++])))throw Error("Invalid block size");if(0===T)break;e+=T}l.push({x:p,y:y,width:m,height:g,has_local_palette:M,palette_offset:j,palette_size:S,data_offset:E,data_length:e-E,transparent_index:c,interlaced:!!b,delay:u,disposal:d});break;case 59:s=!1;break;default:throw new Error("Unknown gif block: 0x"+x[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return f},this.frameInfo=function(e){if(e<0||e>=l.length)throw new Error("Frame index out of range.");return l[e]},this.decodeAndBlitFrameBGRA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,o=new Uint8Array(n);O(x,r.data_offset,o,n);var i=r.palette_offset,a=r.transparent_index;null===a&&(a=256);var s=r.width,l=w-s,u=s,c=4*(r.y*w+r.x),d=4*((r.y+r.height)*w+r.x),f=c,h=4*l;!0===r.interlaced&&(h+=4*w*7);for(var p=8,y=0,m=o.length;y>=1)),g===a)f+=4;else{var v=x[i+3*g],b=x[i+3*g+1],_=x[i+3*g+2];t[f++]=_,t[f++]=b,t[f++]=v,t[f++]=255}--u}},this.decodeAndBlitFrameRGBA=function(e,t){var r=this.frameInfo(e),n=r.width*r.height,o=new Uint8Array(n);O(x,r.data_offset,o,n);var i=r.palette_offset,a=r.transparent_index;null===a&&(a=256);var s=r.width,l=w-s,u=s,c=4*(r.y*w+r.x),d=4*((r.y+r.height)*w+r.x),f=c,h=4*l;!0===r.interlaced&&(h+=4*w*7);for(var p=8,y=0,m=o.length;y>=1)),g===a)f+=4;else{var v=x[i+3*g],b=x[i+3*g+1],_=x[i+3*g+2];t[f++]=v,t[f++]=b,t[f++]=_,t[f++]=255}--u}}}}catch(e){}},{}],239:[function(Br,r,n){(function(Fr){var e,t;e=this,t=function(M){"use strict";function e(e){if(null==this)throw TypeError();var t=String(this),r=t.length,n=e?Number(e):0;if(n!=n&&(n=0),!(n<0||r<=n)){var o,i=t.charCodeAt(n);return 55296<=i&&i<=56319&&n+1>>=1,t}function _(e,t,r){if(!t)return r;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>16-t;return e.tag>>>=t,e.bitcount-=t,n+r}function x(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<>>=1,++o,r+=t.table[o],0<=(n-=t.table[o]););return e.tag=i,e.bitcount-=o,t.trans[r+n]}function w(e,t,r){var n,o,i,a,s,l;for(n=_(e,5,257),o=_(e,5,1),i=_(e,4,4),a=0;a<19;++a)m[a]=0;for(a=0;athis.x2&&(this.x2=e)),"number"==typeof t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),tthis.y2&&(this.y2=t))},T.prototype.addX=function(e){this.addPoint(e,null)},T.prototype.addY=function(e){this.addPoint(null,e)},T.prototype.addBezier=function(e,t,r,n,o,i,a,s){var l=[e,t],u=[r,n],c=[o,i],d=[a,s];this.addPoint(e,t),this.addPoint(a,s);for(var f=0;f<=1;f++){var h=6*l[f]-12*u[f]+6*c[f],p=-3*l[f]+9*u[f]-9*c[f]+3*d[f],y=3*u[f]-3*l[f];if(0!=p){var m=Math.pow(h,2)-4*y*p;if(!(m<0)){var g=(-h+Math.sqrt(m))/(2*p);0>8&255,255&e]},k.USHORT=R(2),A.SHORT=function(e){return 32768<=e&&(e=-(65536-e)),[e>>8&255,255&e]},k.SHORT=R(2),A.UINT24=function(e){return[e>>16&255,e>>8&255,255&e]},k.UINT24=R(3),A.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]},k.ULONG=R(4),A.LONG=function(e){return 2147483648<=e&&(e=-(4294967296-e)),[e>>24&255,e>>16&255,e>>8&255,255&e]},k.LONG=R(4),A.FIXED=A.ULONG,k.FIXED=k.ULONG,A.FWORD=A.SHORT,k.FWORD=k.SHORT,A.UFWORD=A.USHORT,k.UFWORD=k.USHORT,A.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,255&e]},k.LONGDATETIME=R(8),A.TAG=function(e){return L.argument(4===e.length,"Tag should be exactly 4 ASCII characters."),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},k.TAG=R(4),A.Card8=A.BYTE,k.Card8=k.BYTE,A.Card16=A.USHORT,k.Card16=k.USHORT,A.OffSize=A.BYTE,k.OffSize=k.BYTE,A.SID=A.USHORT,k.SID=k.USHORT,A.NUMBER=function(e){return-107<=e&&e<=107?[e+139]:108<=e&&e<=1131?[247+((e-=108)>>8),255&e]:-1131<=e&&e<=-108?[251+((e=-e-108)>>8),255&e]:-32768<=e&&e<=32767?A.NUMBER16(e):A.NUMBER32(e)},k.NUMBER=function(e){return A.NUMBER(e).length},A.NUMBER16=function(e){return[28,e>>8&255,255&e]},k.NUMBER16=R(3),A.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,255&e]},k.NUMBER32=R(5),A.REAL=function(e){var t=e.toString(),r=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(r){var n=parseFloat("1e"+((r[2]?+r[2]:0)+r[1].length));t=(Math.round(e*n)/n).toString()}for(var o="",i=0,a=t.length;i>8&255,t[t.length]=255&n}return t},k.UTF16=function(e){return 2*e.length};var I={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};P.MACSTRING=function(e,t,r,n){var o=I[n];if(void 0!==o){for(var i="",a=0;a>8&255,l+256&255)}return i}A.MACSTRING=function(e,t){var r=function(e){if(!U)for(var t in U={},I)U[t]=new String(t);var r=U[e];if(void 0!==r){if(N){var n=N.get(r);if(void 0!==n)return n}var o=I[e];if(void 0!==o){for(var i={},a=0;a>8,t[d+1]=255&f,t=t.concat(n[c])}return t},k.TABLE=function(e){for(var t=0,r=e.fields.length,n=0;n>1,t.skip("uShort",3),e.glyphIndexMap={};for(var a=new ae.Parser(r,n+o+14),s=new ae.Parser(r,n+o+16+2*i),l=new ae.Parser(r,n+o+16+4*i),u=new ae.Parser(r,n+o+16+6*i),c=n+o+16+8*i,d=0;d>4,i=15&n;if(15==o)break;if(t+=r[o],15==i)break;t+=r[i]}return parseFloat(t)}(e);if(32<=t&&t<=246)return t-139;if(247<=t&&t<=250)return 256*(t-247)+e.parseByte()+108;if(251<=t&&t<=254)return 256*-(t-251)-e.parseByte()-108;throw new Error("Invalid b0 "+t)}function Me(e,t,r){t=void 0!==t?t:0;var n=new ae.Parser(e,t),o=[],i=[];for(r=void 0!==r?r:e.length;n.relativeOffset>1,E.length=0,O=!0}return function e(t){for(var r,n,o,i,a,s,l,u,c,d,f,h,p=0;pMath.abs(h-P)?L=f+E.shift():P=h+E.shift(),M.curveTo(v,b,_,x,l,u),M.curveTo(c,d,f,h,L,P);break;default:console.log("Glyph "+g.index+": unknown operator 1200"+y),E.length=0}break;case 14:0>3;break;case 21:2>16),p+=2;break;case 29:a=E.pop()+m.gsubrsBias,(s=m.gsubrs[a])&&e(s);break;case 30:for(;0=r.begin&&e=de.length){var a=n.parseChar();r.names.push(n.parseString(a))}break;case 2.5:r.numberOfGlyphs=n.parseUShort(),r.offset=new Array(r.numberOfGlyphs);for(var s=0;st.value.tag?1:-1}),t.fields=t.fields.concat(n),t.fields=t.fields.concat(o),t}function yt(e,t,r){for(var n=0;n 123 are reserved for internal usage");h|=1<>>1,i=e[o].tag;if(i===t)return o;i>>1,i=e[o];if(i===t)return o;i>>1,a=(r=e[i]).start;if(a===t)return r;a(r=e[n-1]).end?0:r}function _t(e,t){this.font=e,this.tableName=t}function xt(e){_t.call(this,e,"gpos")}function wt(e){_t.call(this,e,"gsub")}function jt(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;nt.points.length-1||n.matchedPoints[1]>o.points.length-1)throw Error("Matched points out of range in "+t.name);var a=t.points[n.matchedPoints[0]],s=o.points[n.matchedPoints[1]],l={xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:0,dy:0};s=Ct([s],l)[0],l.dx=a.x-s.x,l.dy=a.y-s.y,i=Ct(o.points,l)}t.points=t.points.concat(i)}}return Lt(t.points)}(xt.prototype=_t.prototype={searchTag:gt,binSearch:vt,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,r=0;r=s[u-1].tag,"Features must be added in alphabetical order."),i={tag:r,feature:{params:0,lookupListIndexes:[]}},s.push(i),a.push(u),i.feature}}},getLookupTables:function(e,t,r,n,o){var i=this.getFeatureTable(e,t,r,o),a=[];if(i){for(var s,l=i.lookupListIndexes,u=this.font.tables[this.tableName].lookups,c=0;c",s),t.stack.push(Math.round(64*s))}function mr(e,t){var r=t.stack,n=r.pop(),o=t.fv,i=t.pv,a=t.ppem,s=t.deltaBase+16*(e-1),l=t.deltaShift,u=t.z0;M.DEBUG&&console.log(t.step,"DELTAP["+e+"]",n,r);for(var c=0;c>4)===a){var h=(15&f)-8;0<=h&&h++,M.DEBUG&&console.log(t.step,"DELTAPFIX",d,"by",h*l);var p=u[d];o.setRelative(p,p,h*l,i)}}}function gr(e,t){var r=t.stack,n=r.pop();M.DEBUG&&console.log(t.step,"ROUND[]"),r.push(64*t.round(n/64))}function vr(e,t){var r=t.stack,n=r.pop(),o=t.ppem,i=t.deltaBase+16*(e-1),a=t.deltaShift;M.DEBUG&&console.log(t.step,"DELTAC["+e+"]",n,r);for(var s=0;s>4)===o){var c=(15&u)-8;0<=c&&c++;var d=c*a;M.DEBUG&&console.log(t.step,"DELTACFIX",l,"by",d),t.cvt[l]+=d}}}function br(e,t){var r,n,o=t.stack,i=o.pop(),a=o.pop(),s=t.z2[i],l=t.z1[a];M.DEBUG&&console.log(t.step,"SDPVTL["+e+"]",i,a),n=e?(r=s.y-l.y,l.x-s.x):(r=l.x-s.x,l.y-s.y),t.dpv=Yt(r,n)}function _r(e,t){var r=t.stack,n=t.prog,o=t.ip;M.DEBUG&&console.log(t.step,"PUSHB["+e+"]");for(var i=0;i":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",e?d+"("+i.cvt[d]+","+u+")":"",f,"(d =",a,"->",l*s,")"),i.rp1=i.rp0,i.rp2=f,t&&(i.rp0=f)}Ut.prototype.exec=function(e,t){if("number"!=typeof t)throw new Error("Point size is not a number!");if(!(2",n),s.interpolate(d,i,a,l),s.touch(d)}e.loop=1},fr.bind(void 0,0),fr.bind(void 0,1),function(e){for(var t=e.stack,r=e.rp0,n=e.z0[r],o=e.loop,i=e.fv,a=e.pv,s=e.z1;o--;){var l=t.pop(),u=s[l];M.DEBUG&&console.log(e.step,(1").concat(t,"");this.dummyDOM||(this.dummyDOM=document.getElementById(n).parentNode),this.descriptions?this.descriptions.fallbackElements||(this.descriptions.fallbackElements={}):this.descriptions={fallbackElements:{}},this.descriptions.fallbackElements[e]?this.descriptions.fallbackElements[e].innerHTML!==i&&(this.descriptions.fallbackElements[e].innerHTML=i):this._describeElementHTML("fallback",e,i),r===this.LABEL&&(this.descriptions.labelElements||(this.descriptions.labelElements={}),this.descriptions.labelElements[e]?this.descriptions.labelElements[e].innerHTML!==i&&(this.descriptions.labelElements[e].innerHTML=i):this._describeElementHTML("label",e,i))}},a.default.prototype._describeHTML=function(e,t){var r=this.canvas.id;if("fallback"===e){if(this.dummyDOM.querySelector("#".concat(r+l)))this.dummyDOM.querySelector("#"+r+c).insertAdjacentHTML("beforebegin",'

'));else{var n='

');this.dummyDOM.querySelector("#".concat(r,"accessibleOutput"))?this.dummyDOM.querySelector("#".concat(r,"accessibleOutput")).insertAdjacentHTML("beforebegin",n):this.dummyDOM.querySelector("#".concat(r)).innerHTML=n}return this.descriptions.fallback=this.dummyDOM.querySelector("#".concat(r).concat(u)),void(this.descriptions.fallback.innerHTML=t)}if("label"===e){if(this.dummyDOM.querySelector("#".concat(r+d)))this.dummyDOM.querySelector("#".concat(r+h))&&this.dummyDOM.querySelector("#".concat(r+h)).insertAdjacentHTML("beforebegin",'

'));else{var o='

');this.dummyDOM.querySelector("#".concat(r,"accessibleOutputLabel"))?this.dummyDOM.querySelector("#".concat(r,"accessibleOutputLabel")).insertAdjacentHTML("beforebegin",o):this.dummyDOM.querySelector("#"+r).insertAdjacentHTML("afterend",o)}return this.descriptions.label=this.dummyDOM.querySelector("#"+r+f),void(this.descriptions.label.innerHTML=t)}},a.default.prototype._describeElementHTML=function(e,t,r){var n=this.canvas.id;if("fallback"===e){if(this.dummyDOM.querySelector("#".concat(n+l)))this.dummyDOM.querySelector("#"+n+c)||this.dummyDOM.querySelector("#"+n+u).insertAdjacentHTML("afterend",'
Canvas elements and their descriptions
'));else{var o='
Canvas elements and their descriptions
');this.dummyDOM.querySelector("#".concat(n,"accessibleOutput"))?this.dummyDOM.querySelector("#".concat(n,"accessibleOutput")).insertAdjacentHTML("beforebegin",o):this.dummyDOM.querySelector("#"+n).innerHTML=o}var i=document.createElement("tr");return i.id=n+"_fte_"+t,this.dummyDOM.querySelector("#"+n+c).appendChild(i),this.descriptions.fallbackElements[t]=this.dummyDOM.querySelector("#".concat(n).concat("_fte_").concat(t)),void(this.descriptions.fallbackElements[t].innerHTML=r)}if("label"===e){if(this.dummyDOM.querySelector("#".concat(n+d)))this.dummyDOM.querySelector("#".concat(n+h))||this.dummyDOM.querySelector("#"+n+f).insertAdjacentHTML("afterend",'
'));else{var a='
');this.dummyDOM.querySelector("#".concat(n,"accessibleOutputLabel"))?this.dummyDOM.querySelector("#".concat(n,"accessibleOutputLabel")).insertAdjacentHTML("beforebegin",a):this.dummyDOM.querySelector("#"+n).insertAdjacentHTML("afterend",a)}var s=document.createElement("tr");s.id=n+"_lte_"+t,this.dummyDOM.querySelector("#"+n+h).appendChild(s),this.descriptions.labelElements[t]=this.dummyDOM.querySelector("#".concat(n).concat("_lte_").concat(t)),this.descriptions.labelElements[t].innerHTML=r}};var o=a.default;r.default=o},{"../core/main":264,"core-js/modules/es.array.concat":149,"core-js/modules/es.regexp.exec":181,"core-js/modules/es.string.ends-with":184,"core-js/modules/es.string.replace":189}],245:[function(e,t,r){"use strict";e("core-js/modules/es.array.concat"),e("core-js/modules/es.array.map"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,o=(n=e("../core/main"))&&n.__esModule?n:{default:n};o.default.prototype._updateGridOutput=function(e){if(this.dummyDOM.querySelector("#".concat(e,"_summary"))){var t=this._accessibleOutputs[e],r=function(e,t){var r="",n="",o=0;for(var i in t){var a=0;for(var s in t[i]){var l='
  • ').concat(t[i][s].color," ").concat(i,",");"line"===i?l+=" location = ".concat(t[i][s].pos,", length = ").concat(t[i][s].length," pixels"):(l+=" location = ".concat(t[i][s].pos),"point"!==i&&(l+=", area = ".concat(t[i][s].area," %")),l+="
  • "),r+=l,a++,o++}n=1').concat(t[a][s].color," ").concat(a,"
    "):'').concat(t[a][s].color," ").concat(a," midpoint"),o[t[a][s].loc.locY][t[a][s].loc.locX]?o[t[a][s].loc.locY][t[a][s].loc.locX]=o[t[a][s].loc.locY][t[a][s].loc.locX]+" "+l:o[t[a][s].loc.locY][t[a][s].loc.locX]=l,r++}for(var u in o){var c="";for(var d in o[u])c+="",void 0!==o[u][d]&&(c+=o[u][d]),c+="";n=n+c+""}return n}(e,this.ingredients.shapes);n!==t.summary.innerHTML&&(t.summary.innerHTML=n),o!==t.map.innerHTML&&(t.map.innerHTML=o),r.details!==t.shapeDetails.innerHTML&&(t.shapeDetails.innerHTML=r.details),this._accessibleOutputs[e]=t}};var i=o.default;r.default=i},{"../core/main":264,"core-js/modules/es.array.concat":149,"core-js/modules/es.array.map":161}],246:[function(e,t,r){"use strict";e("core-js/modules/es.array.concat"),e("core-js/modules/es.array.fill"),e("core-js/modules/es.array.map"),e("core-js/modules/es.number.to-fixed"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,o=(n=e("../core/main"))&&n.__esModule?n:{default:n};function l(e,t,r){return e[0]<.4*t?e[1]<.4*r?"top left":e[1]>.6*r?"bottom left":"mid left":e[0]>.6*t?e[1]<.4*r?"top right":e[1]>.6*r?"bottom right":"mid right":e[1]<.4*r?"top middle":e[1]>.6*r?"bottom middle":"middle"}function u(e,t,r){var n=Math.floor(e[0]/t*10),o=Math.floor(e[1]/r*10);return 10===n&&--n,10===o&&--o,{locX:n,locY:o}}o.default.prototype.textOutput=function(e){o.default._validateParameters("textOutput",arguments),this._accessibleOutputs.text||(this._accessibleOutputs.text=!0,this._createOutput("textOutput","Fallback"),e===this.LABEL&&(this._accessibleOutputs.textLabel=!0,this._createOutput("textOutput","Label")))},o.default.prototype.gridOutput=function(e){o.default._validateParameters("gridOutput",arguments),this._accessibleOutputs.grid||(this._accessibleOutputs.grid=!0,this._createOutput("gridOutput","Fallback"),e===this.LABEL&&(this._accessibleOutputs.gridLabel=!0,this._createOutput("gridOutput","Label")))},o.default.prototype._addAccsOutput=function(){return this._accessibleOutputs||(this._accessibleOutputs={text:!1,grid:!1,textLabel:!1,gridLabel:!1}),this._accessibleOutputs.grid||this._accessibleOutputs.text},o.default.prototype._createOutput=function(e,t){var r,n,o,i=this.canvas.id;this.ingredients||(this.ingredients={shapes:{},colors:{background:"white",fill:"white",stroke:"black"},pShapes:""}),this.dummyDOM||(this.dummyDOM=document.getElementById(i).parentNode);var a="";"Fallback"===t?(r=i+e,n=i+"accessibleOutput",this.dummyDOM.querySelector("#".concat(n))||(this.dummyDOM.querySelector("#".concat(i,"_Description"))?this.dummyDOM.querySelector("#".concat(i,"_Description")).insertAdjacentHTML("afterend",'
    ')):this.dummyDOM.querySelector("#".concat(i)).innerHTML='
    '))):"Label"===t&&(r=i+e+(a=t),n=i+"accessibleOutput"+t,this.dummyDOM.querySelector("#".concat(n))||(this.dummyDOM.querySelector("#".concat(i,"_Label"))?this.dummyDOM.querySelector("#".concat(i,"_Label")).insertAdjacentHTML("afterend",'
    ')):this.dummyDOM.querySelector("#".concat(i)).insertAdjacentHTML("afterend",'
    ')))),this._accessibleOutputs[r]={},"textOutput"===e?(a="#".concat(i,"gridOutput").concat(a),o='
    Text Output

      '),this.dummyDOM.querySelector(a)?this.dummyDOM.querySelector(a).insertAdjacentHTML("beforebegin",o):this.dummyDOM.querySelector("#".concat(n)).innerHTML=o,this._accessibleOutputs[r].list=this.dummyDOM.querySelector("#".concat(r,"_list"))):"gridOutput"===e&&(a="#".concat(i,"textOutput").concat(a),o='
      Grid Output

        '),this.dummyDOM.querySelector(a)?this.dummyDOM.querySelector(a).insertAdjacentHTML("afterend",o):this.dummyDOM.querySelector("#".concat(n)).innerHTML=o,this._accessibleOutputs[r].map=this.dummyDOM.querySelector("#".concat(r,"_map"))),this._accessibleOutputs[r].shapeDetails=this.dummyDOM.querySelector("#".concat(r,"_shapeDetails")),this._accessibleOutputs[r].summary=this.dummyDOM.querySelector("#".concat(r,"_summary"))},o.default.prototype._updateAccsOutput=function(){var e=this.canvas.id;JSON.stringify(this.ingredients.shapes)!==this.ingredients.pShapes&&(this.ingredients.pShapes=JSON.stringify(this.ingredients.shapes),this._accessibleOutputs.text&&this._updateTextOutput(e+"textOutput"),this._accessibleOutputs.grid&&this._updateGridOutput(e+"gridOutput"),this._accessibleOutputs.textLabel&&this._updateTextOutput(e+"textOutputLabel"),this._accessibleOutputs.gridLabel&&this._updateGridOutput(e+"gridOutputLabel"))},o.default.prototype._accsBackground=function(e){this.ingredients.pShapes=JSON.stringify(this.ingredients.shapes),this.ingredients.shapes={},this.ingredients.colors.backgroundRGBA!==e&&(this.ingredients.colors.backgroundRGBA=e,this.ingredients.colors.background=this._rgbColorName(e))},o.default.prototype._accsCanvasColors=function(e,t){"fill"===e?this.ingredients.colors.fillRGBA!==t&&(this.ingredients.colors.fillRGBA=t,this.ingredients.colors.fill=this._rgbColorName(t)):"stroke"===e&&this.ingredients.colors.strokeRGBA!==t&&(this.ingredients.colors.strokeRGBA=t,this.ingredients.colors.stroke=this._rgbColorName(t))},o.default.prototype._accsOutput=function(e,t){"ellipse"===e&&t[2]===t[3]?e="circle":"rectangle"===e&&t[2]===t[3]&&(e="square");var r={},n=!0,o=function(e,t){var r,n;n="rectangle"===e||"ellipse"===e||"arc"===e||"circle"===e||"square"===e?(r=Math.round(t[0]+t[2]/2),Math.round(t[1]+t[3]/2)):"triangle"===e?(r=(t[0]+t[2]+t[4])/3,(t[1]+t[3]+t[5])/3):"quadrilateral"===e?(r=(t[0]+t[2]+t[4]+t[6])/4,(t[1]+t[3]+t[5]+t[7])/4):"line"===e?(r=(t[0]+t[2])/2,(t[1]+t[3])/2):(r=t[0],t[1]);return[r,n]}(e,t);if("line"===e){r.color=this.ingredients.colors.stroke,r.length=Math.round(this.dist(t[0],t[1],t[2],t[3]));var i=l([t[0],[1]],this.width,this.height),a=l([t[2],[3]],this.width,this.height);r.loc=u(o,this.width,this.height),r.pos=i===a?"at ".concat(i):"from ".concat(i," to ").concat(a)}else"point"===e?r.color=this.ingredients.colors.stroke:(r.color=this.ingredients.colors.fill,r.area=function(e,t,r,n){var o=0;if("arc"===e){var i=((t[5]-t[4])%(2*Math.PI)+2*Math.PI)%(2*Math.PI);if(o=i*t[2]*t[3]/8,"open"===t[6]||"chord"===t[6]){var a=t[0],s=t[1],l=t[0]+t[2]/2*Math.cos(t[4]).toFixed(2),u=t[1]+t[3]/2*Math.sin(t[4]).toFixed(2),c=t[0]+t[2]/2*Math.cos(t[5]).toFixed(2),d=t[1]+t[3]/2*Math.sin(t[5]).toFixed(2),f=Math.abs(a*(u-d)+l*(d-s)+c*(s-u))/2;i>Math.PI?o+=f:o-=f}}else"ellipse"===e||"circle"===e?o=3.14*t[2]/2*t[3]/2:"line"===e?o=0:"point"===e?o=0:"quadrilateral"===e?o=Math.abs((t[6]+t[0])*(t[7]-t[1])+(t[0]+t[2])*(t[1]-t[3])+(t[2]+t[4])*(t[3]-t[5])+(t[4]+t[6])*(t[5]-t[7]))/2:"rectangle"===e||"square"===e?o=t[2]*t[3]:"triangle"===e&&(o=Math.abs(t[0]*(t[3]-t[5])+t[2]*(t[5]-t[1])+t[4]*(t[1]-t[3]))/2);return Math.round(100*o/(r*n))}(e,t,this.width,this.height)),r.pos=l(o,this.width,this.height),r.loc=u(o,this.width,this.height);if(this.ingredients.shapes[e]){if(this.ingredients.shapes[e]!==[r]){for(var s in this.ingredients.shapes[e])JSON.stringify(this.ingredients.shapes[e][s])===JSON.stringify(r)&&(n=!1);!0===n&&this.ingredients.shapes[e].push(r)}}else this.ingredients.shapes[e]=[r]};var i=o.default;r.default=i},{"../core/main":264,"core-js/modules/es.array.concat":149,"core-js/modules/es.array.fill":151,"core-js/modules/es.array.map":161,"core-js/modules/es.number.to-fixed":172}],247:[function(e,t,r){"use strict";e("core-js/modules/es.array.concat"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,o=(n=e("../core/main"))&&n.__esModule?n:{default:n};o.default.prototype._updateTextOutput=function(e){if(this.dummyDOM.querySelector("#".concat(e,"_summary"))){var t=this._accessibleOutputs[e],r=function(e,t){var r="",n=0;for(var o in t)for(var i in t[o]){var a='
      • ').concat(t[o][i].color," ").concat(o,"");"line"===o?a+=", ".concat(t[o][i].pos,", ").concat(t[o][i].length," pixels long.
      • "):(a+=", at ".concat(t[o][i].pos),"point"!==o&&(a+=", covering ".concat(t[o][i].area,"% of the canvas")),a+="."),r+=a,n++}return{numShapes:n,listShapes:r}}(e,this.ingredients.shapes),n=function(e,t,r,n){var o="Your output is a, ".concat(r," by ").concat(n," pixels, ").concat(t," canvas containing the following");o=1===e?"".concat(o," shape:"):"".concat(o," ").concat(e," shapes:");return o}(r.numShapes,this.ingredients.colors.background,this.width,this.height),o=function(e,t){var r="",n=0;for(var o in t)for(var i in t[o]){var a='').concat(t[o][i].color," ").concat(o,"");"line"===o?a+="location = ".concat(t[o][i].pos,"length = ").concat(t[o][i].length," pixels"):(a+="location = ".concat(t[o][i].pos,""),"point"!==o&&(a+=" area = ".concat(t[o][i].area,"%")),a+=""),r+=a,n++}return r}(e,this.ingredients.shapes);n!==t.summary.innerHTML&&(t.summary.innerHTML=n),r.listShapes!==t.list.innerHTML&&(t.list.innerHTML=r.listShapes),o!==t.shapeDetails.innerHTML&&(t.shapeDetails.innerHTML=o),this._accessibleOutputs[e]=t}};var i=o.default;r.default=i},{"../core/main":264,"core-js/modules/es.array.concat":149}],248:[function(e,t,r){"use strict";var n,o=(n=e("./core/main"))&&n.__esModule?n:{default:n};e("./core/constants"),e("./core/environment"),e("./core/friendly_errors/stacktrace"),e("./core/friendly_errors/validate_params"),e("./core/friendly_errors/file_errors"),e("./core/friendly_errors/fes_core"),e("./core/friendly_errors/sketch_reader"),e("./core/helpers"),e("./core/legacy"),e("./core/preload"),e("./core/p5.Element"),e("./core/p5.Graphics"),e("./core/p5.Renderer"),e("./core/p5.Renderer2D"),e("./core/rendering"),e("./core/shim"),e("./core/structure"),e("./core/transform"),e("./core/shape/2d_primitives"),e("./core/shape/attributes"),e("./core/shape/curves"),e("./core/shape/vertex"),e("./accessibility/outputs"),e("./accessibility/textOutput"),e("./accessibility/gridOutput"),e("./accessibility/color_namer"),e("./color/color_conversion"),e("./color/creating_reading"),e("./color/p5.Color"),e("./color/setting"),e("./data/p5.TypedDict"),e("./data/local_storage.js"),e("./dom/dom"),e("./accessibility/describe"),e("./events/acceleration"),e("./events/keyboard"),e("./events/mouse"),e("./events/touch"),e("./image/filters"),e("./image/image"),e("./image/loading_displaying"),e("./image/p5.Image"),e("./image/pixels"),e("./io/files"),e("./io/p5.Table"),e("./io/p5.TableRow"),e("./io/p5.XML"),e("./math/calculation"),e("./math/math"),e("./math/noise"),e("./math/p5.Vector"),e("./math/random"),e("./math/trigonometry"),e("./typography/attributes"),e("./typography/loading_displaying"),e("./typography/p5.Font"),e("./utilities/array_functions"),e("./utilities/conversion"),e("./utilities/string_functions"),e("./utilities/time_date"),e("./webgl/3d_primitives"),e("./webgl/interaction"),e("./webgl/light"),e("./webgl/loading"),e("./webgl/material"),e("./webgl/p5.Camera"),e("./webgl/p5.Geometry"),e("./webgl/p5.Matrix"),e("./webgl/p5.RendererGL.Immediate"),e("./webgl/p5.RendererGL"),e("./webgl/p5.RendererGL.Retained"),e("./webgl/p5.Shader"),e("./webgl/p5.RenderBuffer"),e("./webgl/p5.Texture"),e("./webgl/text"),e("./core/init"),t.exports=o.default},{"./accessibility/color_namer":243,"./accessibility/describe":244,"./accessibility/gridOutput":245,"./accessibility/outputs":246,"./accessibility/textOutput":247,"./color/color_conversion":249,"./color/creating_reading":250,"./color/p5.Color":251,"./color/setting":252,"./core/constants":253,"./core/environment":254,"./core/friendly_errors/fes_core":255,"./core/friendly_errors/file_errors":256,"./core/friendly_errors/sketch_reader":257,"./core/friendly_errors/stacktrace":258,"./core/friendly_errors/validate_params":259,"./core/helpers":260,"./core/init":261,"./core/legacy":263,"./core/main":264,"./core/p5.Element":265,"./core/p5.Graphics":266,"./core/p5.Renderer":267,"./core/p5.Renderer2D":268,"./core/preload":269,"./core/rendering":270,"./core/shape/2d_primitives":271,"./core/shape/attributes":272,"./core/shape/curves":273,"./core/shape/vertex":274,"./core/shim":275,"./core/structure":276,"./core/transform":277,"./data/local_storage.js":278,"./data/p5.TypedDict":279,"./dom/dom":280,"./events/acceleration":281,"./events/keyboard":282,"./events/mouse":283,"./events/touch":284,"./image/filters":285,"./image/image":286,"./image/loading_displaying":287,"./image/p5.Image":288,"./image/pixels":289,"./io/files":290,"./io/p5.Table":291,"./io/p5.TableRow":292,"./io/p5.XML":293,"./math/calculation":294,"./math/math":295,"./math/noise":296,"./math/p5.Vector":297,"./math/random":298,"./math/trigonometry":299,"./typography/attributes":300,"./typography/loading_displaying":301,"./typography/p5.Font":302,"./utilities/array_functions":303,"./utilities/conversion":304,"./utilities/string_functions":305,"./utilities/time_date":306,"./webgl/3d_primitives":307,"./webgl/interaction":308,"./webgl/light":309,"./webgl/loading":310,"./webgl/material":311,"./webgl/p5.Camera":312,"./webgl/p5.Geometry":313,"./webgl/p5.Matrix":314,"./webgl/p5.RenderBuffer":315,"./webgl/p5.RendererGL":318,"./webgl/p5.RendererGL.Immediate":316,"./webgl/p5.RendererGL.Retained":317,"./webgl/p5.Shader":319,"./webgl/p5.Texture":320,"./webgl/text":321}],249:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,o=(n=e("../core/main"))&&n.__esModule?n:{default:n};o.default.ColorConversion={},o.default.ColorConversion._hsbaToHSLA=function(e){var t=e[0],r=e[1],n=e[2],o=(2-r)*n/2;return 0!=o&&(1==o?r=0:o<.5?r/=2-r:r=r*n/(2-2*o)),[t,r,o,e[3]]},o.default.ColorConversion._hsbaToRGBA=function(e){var t=6*e[0],r=e[1],n=e[2],o=[];if(0===r)o=[n,n,n,e[3]];else{var i,a,s,l=Math.floor(t),u=n*(1-r),c=n*(1-r*(t-l)),d=n*(1-r*(1+l-t));s=1===l?(i=c,a=n,u):2===l?(i=u,a=n,d):3===l?(i=u,a=c,n):4===l?(i=d,a=u,n):5===l?(i=n,a=u,c):(i=n,a=d,u),o=[i,a,s,e[3]]}return o},o.default.ColorConversion._hslaToHSBA=function(e){var t,r=e[0],n=e[1],o=e[2];return[r,n=2*((t=o<.5?(1+n)*o:o+n-o*n)-o)/t,t,e[3]]},o.default.ColorConversion._hslaToRGBA=function(e){var t=6*e[0],r=e[1],n=e[2],o=[];if(0===r)o=[n,n,n,e[3]];else{var i,a=2*n-(i=n<.5?(1+r)*n:n+r-n*r),s=function(e,t,r){return e<0?e+=6:6<=e&&(e-=6),e<1?t+(r-t)*e:e<3?r:e<4?t+(r-t)*(4-e):t};o=[s(2+t,a,i),s(t,a,i),s(t-2,a,i),e[3]]}return o},o.default.ColorConversion._rgbaToHSBA=function(e){var t,r,n=e[0],o=e[1],i=e[2],a=Math.max(n,o,i),s=a-Math.min(n,o,i);return 0==s?r=t=0:(r=s/a,n===a?t=(o-i)/s:o===a?t=2+(i-n)/s:i===a&&(t=4+(n-o)/s),t<0?t+=6:6<=t&&(t-=6)),[t/6,r,a,e[3]]},o.default.ColorConversion._rgbaToHSLA=function(e){var t,r,n=e[0],o=e[1],i=e[2],a=Math.max(n,o,i),s=Math.min(n,o,i),l=a+s,u=a-s;return 0==u?r=t=0:(r=l<1?u/l:u/(2-l),n===a?t=(o-i)/u:o===a?t=2+(i-n)/u:i===a&&(t=4+(n-o)/u),t<0?t+=6:6<=t&&(t-=6)),[t/6,r,l/2,e[3]]};var i=o.default.ColorConversion;r.default=i},{"../core/main":264}],250:[function(e,t,r){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e("core-js/modules/es.array.map"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,d=(n=e("../core/main"))&&n.__esModule?n:{default:n},f=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}e("./p5.Color"),e("../core/friendly_errors/validate_params"),e("../core/friendly_errors/file_errors"),e("../core/friendly_errors/fes_core"),d.default.prototype.alpha=function(e){return d.default._validateParameters("alpha",arguments),this.color(e)._getAlpha()},d.default.prototype.blue=function(e){return d.default._validateParameters("blue",arguments),this.color(e)._getBlue()},d.default.prototype.brightness=function(e){return d.default._validateParameters("brightness",arguments),this.color(e)._getBrightness()},d.default.prototype.color=function(){if(d.default._validateParameters("color",arguments),arguments[0]instanceof d.default.Color)return arguments[0];var e=arguments[0]instanceof Array?arguments[0]:arguments;return new d.default.Color(this,e)},d.default.prototype.green=function(e){return d.default._validateParameters("green",arguments),this.color(e)._getGreen()},d.default.prototype.hue=function(e){return d.default._validateParameters("hue",arguments),this.color(e)._getHue()},d.default.prototype.lerpColor=function(e,t,r){d.default._validateParameters("lerpColor",arguments);var n,o,i,a,s,l,u=this._colorMode,c=this._colorMaxes;if(u===f.RGB)s=e.levels.map(function(e){return e/255}),l=t.levels.map(function(e){return e/255});else if(u===f.HSB)e._getBrightness(),t._getBrightness(),s=e.hsba,l=t.hsba;else{if(u!==f.HSL)throw new Error("".concat(u,"cannot be used for interpolation."));e._getLightness(),t._getLightness(),s=e.hsla,l=t.hsla}return r=Math.max(Math.min(r,1),0),void 0===this.lerp&&(this.lerp=function(e,t,r){return r*(t-e)+e}),n=this.lerp(s[0],l[0],r),o=this.lerp(s[1],l[1],r),i=this.lerp(s[2],l[2],r),a=this.lerp(s[3],l[3],r),n*=c[u][0],o*=c[u][1],i*=c[u][2],a*=c[u][3],this.color(n,o,i,a)},d.default.prototype.lightness=function(e){return d.default._validateParameters("lightness",arguments),this.color(e)._getLightness()},d.default.prototype.red=function(e){return d.default._validateParameters("red",arguments),this.color(e)._getRed()},d.default.prototype.saturation=function(e){return d.default._validateParameters("saturation",arguments),this.color(e)._getSaturation()};var o=d.default;r.default=o},{"../core/constants":253,"../core/friendly_errors/fes_core":255,"../core/friendly_errors/file_errors":256,"../core/friendly_errors/validate_params":259,"../core/main":264,"./p5.Color":251,"core-js/modules/es.array.map":161}],251:[function(e,t,r){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e("core-js/modules/es.array.join"),e("core-js/modules/es.array.map"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.regexp.constructor"),e("core-js/modules/es.regexp.exec"),e("core-js/modules/es.regexp.to-string"),e("core-js/modules/es.string.trim"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var d=n(e("../core/main")),f=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants")),h=n(e("./color_conversion"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function n(e){return e&&e.__esModule?e:{default:e}}d.default.Color=function(e,t){if(this._storeModeAndMaxes(e._colorMode,e._colorMaxes),this.mode!==f.RGB&&this.mode!==f.HSL&&this.mode!==f.HSB)throw new Error("".concat(this.mode," is an invalid colorMode."));return this._array=d.default.Color._parseInputs.apply(this,t),this._calculateLevels(),this},d.default.Color.prototype.toString=function(e){var t=this.levels,r=this._array,n=r[3];switch(e){case"#rrggbb":return"#".concat(t[0]<16?"0".concat(t[0].toString(16)):t[0].toString(16),t[1]<16?"0".concat(t[1].toString(16)):t[1].toString(16),t[2]<16?"0".concat(t[2].toString(16)):t[2].toString(16));case"#rrggbbaa":return"#".concat(t[0]<16?"0".concat(t[0].toString(16)):t[0].toString(16),t[1]<16?"0".concat(t[1].toString(16)):t[1].toString(16),t[2]<16?"0".concat(t[2].toString(16)):t[2].toString(16),t[3]<16?"0".concat(t[3].toString(16)):t[3].toString(16));case"#rgb":return"#".concat(Math.round(15*r[0]).toString(16),Math.round(15*r[1]).toString(16),Math.round(15*r[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*r[0]).toString(16),Math.round(15*r[1]).toString(16),Math.round(15*r[2]).toString(16),Math.round(15*r[3]).toString(16));case"rgb":return"rgb(".concat(t[0],", ",t[1],", ",t[2],")");case"rgb%":return"rgb(".concat((100*r[0]).toPrecision(3),"%, ",(100*r[1]).toPrecision(3),"%, ",(100*r[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*r[0]).toPrecision(3),"%, ",(100*r[1]).toPrecision(3),"%, ",(100*r[2]).toPrecision(3),"%, ",(100*r[3]).toPrecision(3),"%)");case"hsb":case"hsv":return this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),"hsb(".concat(this.hsba[0]*this.maxes[f.HSB][0],", ",this.hsba[1]*this.maxes[f.HSB][1],", ",this.hsba[2]*this.maxes[f.HSB][2],")");case"hsb%":case"hsv%":return this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),"hsba(".concat(this.hsba[0]*this.maxes[f.HSB][0],", ",this.hsba[1]*this.maxes[f.HSB][1],", ",this.hsba[2]*this.maxes[f.HSB][2],", ",n,")");case"hsba%":case"hsva%":return this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*n).toPrecision(3),"%)");case"hsl":return this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),"hsl(".concat(this.hsla[0]*this.maxes[f.HSL][0],", ",this.hsla[1]*this.maxes[f.HSL][1],", ",this.hsla[2]*this.maxes[f.HSL][2],")");case"hsl%":return this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),"hsla(".concat(this.hsla[0]*this.maxes[f.HSL][0],", ",this.hsla[1]*this.maxes[f.HSL][1],", ",this.hsla[2]*this.maxes[f.HSL][2],", ",n,")");case"hsla%":return this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*n).toPrecision(3),"%)");case"rgba":default:return"rgba(".concat(t[0],",",t[1],",",t[2],",",n,")")}},d.default.Color.prototype.setRed=function(e){this._array[0]=e/this.maxes[f.RGB][0],this._calculateLevels()},d.default.Color.prototype.setGreen=function(e){this._array[1]=e/this.maxes[f.RGB][1],this._calculateLevels()},d.default.Color.prototype.setBlue=function(e){this._array[2]=e/this.maxes[f.RGB][2],this._calculateLevels()},d.default.Color.prototype.setAlpha=function(e){this._array[3]=e/this.maxes[this.mode][3],this._calculateLevels()},d.default.Color.prototype._calculateLevels=function(){for(var e=this._array,t=this.levels=new Array(e.length),r=e.length-1;0<=r;--r)t[r]=Math.round(255*e[r]);this.hsla=null,this.hsba=null},d.default.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},d.default.Color.prototype._storeModeAndMaxes=function(e,t){this.mode=e,this.maxes=t},d.default.Color.prototype._getMode=function(){return this.mode},d.default.Color.prototype._getMaxes=function(){return this.maxes},d.default.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[f.RGB][2]},d.default.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[f.HSB][2]},d.default.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[f.RGB][1]},d.default.Color.prototype._getHue=function(){return this.mode===f.HSB?(this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[f.HSB][0]):(this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[f.HSL][0])},d.default.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[f.HSL][2]},d.default.Color.prototype._getRed=function(){return this._array[0]*this.maxes[f.RGB][0]},d.default.Color.prototype._getSaturation=function(){return this.mode===f.HSB?(this.hsba||(this.hsba=h.default._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[f.HSB][1]):(this.hsla||(this.hsla=h.default._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[f.HSL][1])};var p={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},o=/\s*/,i=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp("".concat(l.source,"%")),y={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",i.source,",",i.source,",",i.source,"\\)$"].join(o.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(o.source),"i"),RGBA:new RegExp(["^rgba\\(",i.source,",",i.source,",",i.source,",",l.source,"\\)$"].join(o.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(o.source),"i"),HSL:new RegExp(["^hsl\\(",i.source,",",u.source,",",u.source,"\\)$"].join(o.source),"i"),HSLA:new RegExp(["^hsla\\(",i.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(o.source),"i"),HSB:new RegExp(["^hsb\\(",i.source,",",u.source,",",u.source,"\\)$"].join(o.source),"i"),HSBA:new RegExp(["^hsba\\(",i.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(o.source),"i")};d.default.Color._parseInputs=function(e,t,r,n){var o,i=arguments.length,a=this.mode,s=this.maxes[a],l=[];if(3<=i){for(l[0]=e/s[0],l[1]=t/s[1],l[2]=r/s[2],l[3]="number"==typeof n?n/s[3]:1,o=l.length-1;0<=o;--o){var u=l[o];u<0?l[o]=0:1"].indexOf(o[0])?void 0:o[0],lineNumber:o[1],columnNumber:o[2],source:e}},this)},parseFFOrSafari:function(e){return e.stack.split("\n").filter(function(e){return!e.match(n)},this).map(function(e){if(-1 eval")&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===e.indexOf("@")&&-1===e.indexOf(":"))return{functionName:e};var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=e.match(t),n=r&&r[1]?r[1]:void 0,o=this.extractLocation(e.replace(t,""));return{functionName:n,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:e}},this)},parseOpera:function(e){return!e.stacktrace||-1e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(e){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=e.message.split("\n"),n=[],o=2,i=r.length;o/,"$2").replace(/\([^)]*\)/g,"")||void 0;return o.match(/\(([^)]*)\)/)&&(t=o.replace(/^[^(]+\(([^)]*)\)$/,"$1")),{functionName:i,args:void 0===t||"[arguments not available]"===t?void 0:t.split(","),fileName:n[0],lineNumber:n[1],columnNumber:n[2],source:e}},this)}}}o.default._getErrorStackParser=function(){return new i};var a=o.default;r.default=a},{"../main":264,"core-js/modules/es.array.filter":152,"core-js/modules/es.array.index-of":157,"core-js/modules/es.array.join":159,"core-js/modules/es.array.map":161,"core-js/modules/es.array.slice":162,"core-js/modules/es.regexp.exec":181,"core-js/modules/es.string.match":187,"core-js/modules/es.string.replace":189,"core-js/modules/es.string.split":191}],259:[function(e,t,r){"use strict";e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.description"),e("core-js/modules/es.symbol.iterator"),e("core-js/modules/es.array.concat"),e("core-js/modules/es.array.for-each"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.index-of"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.join"),e("core-js/modules/es.array.last-index-of"),e("core-js/modules/es.array.map"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.function.name"),e("core-js/modules/es.map"),e("core-js/modules/es.number.constructor"),e("core-js/modules/es.object.get-prototype-of"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.reflect.construct"),e("core-js/modules/es.regexp.exec"),e("core-js/modules/es.regexp.to-string"),e("core-js/modules/es.set"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.string.iterator"),e("core-js/modules/es.string.split"),e("core-js/modules/web.dom-collections.for-each"),e("core-js/modules/web.dom-collections.iterator"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,o=(n=e("../main"))&&n.__esModule?n:{default:n};(function(e){if(e&&e.__esModule)return;if(null===e||"object"!==s(e)&&"function"!=typeof e)return;var t=a();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r)})(e("../constants")),e("../internationalization");function a(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return a=function(){return e},e}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}o.default._validateParameters=o.default._clearValidateParamsCache=function(){};var i=o.default;r.default=i},{"../../../docs/parameterData.json":void 0,"../constants":253,"../internationalization":262,"../main":264,"core-js/modules/es.array.concat":149,"core-js/modules/es.array.for-each":154,"core-js/modules/es.array.includes":156,"core-js/modules/es.array.index-of":157,"core-js/modules/es.array.iterator":158,"core-js/modules/es.array.join":159,"core-js/modules/es.array.last-index-of":160,"core-js/modules/es.array.map":161,"core-js/modules/es.array.slice":162,"core-js/modules/es.function.name":166,"core-js/modules/es.map":167,"core-js/modules/es.number.constructor":170,"core-js/modules/es.object.get-prototype-of":175,"core-js/modules/es.object.keys":176,"core-js/modules/es.object.to-string":177,"core-js/modules/es.reflect.construct":179,"core-js/modules/es.regexp.exec":181,"core-js/modules/es.regexp.to-string":182,"core-js/modules/es.set":183,"core-js/modules/es.string.includes":185,"core-js/modules/es.string.iterator":186,"core-js/modules/es.string.split":191,"core-js/modules/es.symbol":196,"core-js/modules/es.symbol.description":194,"core-js/modules/es.symbol.iterator":195,"core-js/modules/web.dom-collections.for-each":228,"core-js/modules/web.dom-collections.iterator":229}],260:[function(e,t,r){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r);return r}(e("./constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}var n={modeAdjust:function(e,t,r,n,o){return o===i.CORNER?{x:e,y:t,w:r,h:n}:o===i.CORNERS?{x:e,y:t,w:r-e,h:n-t}:o===i.RADIUS?{x:e-r,y:t-n,w:2*r,h:2*n}:o===i.CENTER?{x:e-.5*r,y:t-.5*n,w:r,h:n}:void 0}};r.default=n},{"./constants":253}],261:[function(e,t,r){"use strict";e("core-js/modules/es.array.iterator"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.promise"),e("core-js/modules/es.string.iterator"),e("core-js/modules/web.dom-collections.iterator");var n,o=(n=e("../core/main"))&&n.__esModule?n:{default:n};e("./internationalization");var i=Promise.resolve();Promise.all([new Promise(function(e,t){"complete"===document.readyState?e():window.addEventListener("load",e,!1)}),i]).then(function(){void 0===window._setupDone?window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!o.default.instance&&new o.default:console.warn("p5.js seems to have been imported multiple times. Please remove the duplicate import")})},{"../core/main":264,"./internationalization":262,"core-js/modules/es.array.iterator":158,"core-js/modules/es.object.to-string":177,"core-js/modules/es.promise":178,"core-js/modules/es.string.iterator":186,"core-js/modules/web.dom-collections.iterator":229}],262:[function(e,t,r){"use strict";e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.join"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.promise"),e("core-js/modules/es.regexp.exec"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.string.iterator"),e("core-js/modules/es.string.split"),e("core-js/modules/web.dom-collections.iterator"),Object.defineProperty(r,"__esModule",{value:!0}),r.setTranslatorLanguage=r.currentTranslatorLanguage=r.availableTranslatorLanguages=r.initialize=r.translator=void 0;var i,a,n=s(e("i18next")),o=s(e("i18next-browser-languagedetector"));function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){for(var r=0;r=a.width||t>=a.height?[0,0,0,0]:this._getPixel(e,t);var s=new l.default.Image(r,n);return s.canvas.getContext("2d").drawImage(a,e,t,r*i,n*i,0,0,r,n),s},l.default.Renderer.prototype.textLeading=function(e){return"number"==typeof e?(this._setProperty("_leadingSet",!0),this._setProperty("_textLeading",e),this._pInst):this._textLeading},l.default.Renderer.prototype.textSize=function(e){return"number"==typeof e?(this._setProperty("_textSize",e),this._leadingSet||this._setProperty("_textLeading",e*k._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},l.default.Renderer.prototype.textStyle=function(e){return e?(e!==k.NORMAL&&e!==k.ITALIC&&e!==k.BOLD&&e!==k.BOLDITALIC||this._setProperty("_textStyle",e),this._applyTextProperties()):this._textStyle},l.default.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},l.default.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},l.default.Renderer.prototype.textAlign=function(e,t){return void 0!==e?(this._setProperty("_textAlign",e),void 0!==t&&this._setProperty("_textBaseline",t),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},l.default.Renderer.prototype.textWrap=function(e){return this._setProperty("_textWrap",e),this._textWrap},l.default.Renderer.prototype.text=function(e,t,r,n,o){var i,a,s,l,u,c,d,f=this._pInst,h=this._textWrap,p=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==e){if("string"!=typeof e&&(e=e.toString()),i=(e=e.replace(/(\t)/g," ")).split("\n"),void 0!==n){switch(this._rectMode===k.CENTER&&(t-=n/2),this._textAlign){case k.CENTER:t+=n/2;break;case k.RIGHT:t+=n}var y=!1;if(void 0!==o){switch(this._rectMode===k.CENTER&&(r-=o/2),this._textBaseline){case k.BOTTOM:d=r+o,r=Math.max(d,r);break;case k.CENTER:d=r+o/2,r=Math.max(d,r);break;case k.BASELINE:y=!0,this._textBaseline=k.TOP}p=r+o-f.textAscent()}if(h===k.WORD){for(var m=[],g=0;gs.HALF_PI&&e<=3*s.HALF_PI?Math.atan(r/n*Math.tan(e))+s.PI:Math.atan(r/n*Math.tan(e))+s.TWO_PI,t=t<=s.HALF_PI?Math.atan(r/n*Math.tan(t)):t>s.HALF_PI&&t<=3*s.HALF_PI?Math.atan(r/n*Math.tan(t))+s.PI:Math.atan(r/n*Math.tan(t))+s.TWO_PI),ty||Math.abs(this.accelerationY-this.pAccelerationY)>y||Math.abs(this.accelerationZ-this.pAccelerationZ)>y)&&r.deviceMoved(),"function"==typeof r.deviceTurned){var n=this.rotationX+180,o=this.pRotationX+180,i=u+180;0>>24],n+=x[(16711680&T)>>16],o+=x[(65280&T)>>8],i+=x[255&T],r+=L[_],s++}w[l=E+v]=a/r,j[l]=n/r,S[l]=o/r,M[l]=i/r}E+=h}for(c=(u=-O)*h,b=E=0;b>>16,e[r+1]=(65280&t[n])>>>8,e[r+2]=255&t[n],e[r+3]=(4278190080&t[n])>>>24},A._toImageData=function(e){return e instanceof ImageData?e:e.getContext("2d").getImageData(0,0,e.width,e.height)},A._createImageData=function(e,t){return A._tmpCanvas=document.createElement("canvas"),A._tmpCtx=A._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(e,t)},A.apply=function(e,t,r){var n=e.getContext("2d"),o=n.getImageData(0,0,e.width,e.height),i=t(o,r);i instanceof ImageData?n.putImageData(i,0,0,0,0,e.width,e.height):n.putImageData(o,0,0,0,0,e.width,e.height)},A.threshold=function(e,t){var r=A._toPixels(e);void 0===t&&(t=.5);for(var n=Math.floor(255*t),o=0;o>8)/n,r[o+1]=255*(a*t>>8)/n,r[o+2]=255*(s*t>>8)/n}},A.dilate=function(e){for(var t,r,n,o,i,a,s,l,u,c,d,f,h,p,y,m,g,v=A._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(n>>8&255)+28*(255&n))<(y=77*(d>>16&255)+151*(d>>8&255)+28*(255&d))&&(o=d,i=y),i<(p=77*((c=A._getARGB(v,a))>>16&255)+151*(c>>8&255)+28*(255&c))&&(o=c,i=p),i<(m=77*(f>>16&255)+151*(f>>8&255)+28*(255&f))&&(o=f,i=m),i<(g=77*(h>>16&255)+151*(h>>8&255)+28*(255&h))&&(o=h,i=g),x[b++]=o;A._setPixels(v,x)},A.erode=function(e){for(var t,r,n,o,i,a,s,l,u,c,d,f,h,p,y,m,g,v=A._toPixels(e),b=0,_=v.length?v.length/4:0,x=new Int32Array(_);b<_;)for(r=(t=b)+e.width;b>16&255)+151*(d>>8&255)+28*(255&d))<(i=77*(n>>16&255)+151*(n>>8&255)+28*(255&n))&&(o=d,i=y),(p=77*((c=A._getARGB(v,a))>>16&255)+151*(c>>8&255)+28*(255&c))>16&255)+151*(f>>8&255)+28*(255&f))>16&255)+151*(h>>8&255)+28*(255&h))=n){var o=Math.floor(t.timeDisplayed/n);if(t.timeDisplayed=0,t.lastChangeTime=r,t.displayIndex+=o,t.loopCount=Math.floor(t.displayIndex/t.numFrames),null!==t.loopLimit&&t.loopCount>=t.loopLimit)t.playing=!1;else{var i=t.displayIndex%t.numFrames;this.drawingContext.putImageData(t.frames[i].image,0,0),t.displayIndex=i,this.setModified(!0)}}}},o.default.Image.prototype._setProperty=function(e,t){this[e]=t,this.setModified(!0)},o.default.Image.prototype.loadPixels=function(){o.default.Renderer2D.prototype.loadPixels.call(this),this.setModified(!0)},o.default.Image.prototype.updatePixels=function(e,t,r,n){o.default.Renderer2D.prototype.updatePixels.call(this,e,t,r,n),this.setModified(!0)},o.default.Image.prototype.get=function(e,t,r,n){return o.default._validateParameters("p5.Image.get",arguments),o.default.Renderer2D.prototype.get.apply(this,arguments)},o.default.Image.prototype._getPixel=o.default.Renderer2D.prototype._getPixel,o.default.Image.prototype.set=function(e,t,r){o.default.Renderer2D.prototype.set.call(this,e,t,r),this.setModified(!0)},o.default.Image.prototype.resize=function(e,t){0===e&&0===t?(e=this.canvas.width,t=this.canvas.height):0===e?e=this.canvas.width*t/this.canvas.height:0===t&&(t=this.canvas.height*e/this.canvas.width),e=Math.floor(e),t=Math.floor(t);var r=document.createElement("canvas");if(r.width=e,r.height=t,this.gifProperties)for(var n=this.gifProperties,o=function(e,t){for(var r=0,n=0;n/g,">").replace(/"/g,""").replace(/'/g,"'")}function l(e,t){t&&!0!==t&&"true"!==t||(t="");var r="";return(e=e||"untitled")&&e.includes(".")&&(r=e.split(".").pop()),t&&r!==t&&(r=t,e="".concat(e,".").concat(r)),[e,r]}e("../core/friendly_errors/validate_params"),e("../core/friendly_errors/file_errors"),e("../core/friendly_errors/fes_core"),g.default.prototype.loadJSON=function(){for(var e=arguments.length,t=new Array(e),r=0;r"),o.print("");if(o.print(' '),o.print(""),o.print(""),o.print(" "),"0"!==i[0]){o.print(" ");for(var c=0;c".concat(d)),o.print(" ")}o.print(" ")}for(var f=0;f");for(var h=0;h".concat(p)),o.print(" ")}o.print(" ")}o.print("
        "),o.print(""),o.print("")}o.close(),o.clear()},g.default.prototype.writeFile=function(e,t,r){var n="application/octet-stream";g.default.prototype._isSafari()&&(n="text/plain");var o=new Blob(e,{type:n});g.default.prototype.downloadFile(o,t,r)},g.default.prototype.downloadFile=function(e,t,r){var n=l(t,r),o=n[0];if(e instanceof Blob)s.default.saveAs(e,o);else{var i=document.createElement("a");if(i.href=e,i.download=o,i.onclick=function(e){var t;t=e,document.body.removeChild(t.target),e.stopPropagation()},i.style.display="none",document.body.appendChild(i),g.default.prototype._isSafari()){var a="Hello, Safari user! To download this file...\n";a+="1. Go to File --\x3e Save As.\n",a+='2. Choose "Page Source" as the Format.\n',a+='3. Name it with this extension: ."'.concat(n[1],'"'),alert(a)}i.click()}},g.default.prototype._checkFileExtension=l,g.default.prototype._isSafari=function(){return 0>>0},getSeed:function(){return t},rand:function(){return(r=(1664525*r+1013904223)%n)/n}});o.setSeed(e),_=new Array(4096);for(var i=0;i<4096;i++)_[i]=o.rand()};var i=o.default;r.default=i},{"../core/main":264}],297:[function(e,t,r){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e("core-js/modules/es.array.concat"),e("core-js/modules/es.array.every"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.array.some"),e("core-js/modules/es.math.sign"),e("core-js/modules/es.number.constructor"),e("core-js/modules/es.number.is-finite"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.regexp.to-string"),e("core-js/modules/es.string.sub"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,l=(n=e("../core/main"))&&n.__esModule?n:{default:n},i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants"));function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}l.default.Vector=function(e,t,r,n,o){var i,a,s;s="[object Function]"==={}.toString.call(e)?(this.isPInst=!0,this._fromRadians=e,this._toRadians=t,i=r||0,a=n||0,o||0):(i=e||0,a=t||0,r||0),this.x=i,this.y=a,this.z=s},l.default.Vector.prototype.toString=function(){return"p5.Vector Object : [".concat(this.x,", ").concat(this.y,", ").concat(this.z,"]")},l.default.Vector.prototype.set=function(e,t,r){return e instanceof l.default.Vector?(this.x=e.x||0,this.y=e.y||0,this.z=e.z||0):e instanceof Array?(this.x=e[0]||0,this.y=e[1]||0,this.z=e[2]||0):(this.x=e||0,this.y=t||0,this.z=r||0),this},l.default.Vector.prototype.copy=function(){return this.isPInst?new l.default.Vector(this._fromRadians,this._toRadians,this.x,this.y,this.z):new l.default.Vector(this.x,this.y,this.z)},l.default.Vector.prototype.add=function(e,t,r){return e instanceof l.default.Vector?(this.x+=e.x||0,this.y+=e.y||0,this.z+=e.z||0):e instanceof Array?(this.x+=e[0]||0,this.y+=e[1]||0,this.z+=e[2]||0):(this.x+=e||0,this.y+=t||0,this.z+=r||0),this};function u(e,t){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),this}function c(e,t,r){return 0!==e&&(this.x=this.x%e),0!==t&&(this.y=this.y%t),0!==r&&(this.z=this.z%r),this}l.default.Vector.prototype.rem=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)){var n=parseFloat(e.x),o=parseFloat(e.y),i=parseFloat(e.z);return c.call(this,n,o,i)}}else if(e instanceof Array){if(e.every(function(e){return Number.isFinite(e)})){if(2===e.length)return u.call(this,e[0],e[1]);if(3===e.length)return c.call(this,e[0],e[1],e[2])}}else if(1===arguments.length){if(Number.isFinite(e)&&0!==e)return this.x=this.x%e,this.y=this.y%e,this.z=this.z%e,this}else if(2===arguments.length){var a=Array.prototype.slice.call(arguments);if(a.every(function(e){return Number.isFinite(e)})&&2===a.length)return u.call(this,a[0],a[1])}else if(3===arguments.length){var s=Array.prototype.slice.call(arguments);if(s.every(function(e){return Number.isFinite(e)})&&3===s.length)return c.call(this,s[0],s[1],s[2])}},l.default.Vector.prototype.sub=function(e,t,r){return e instanceof l.default.Vector?(this.x-=e.x||0,this.y-=e.y||0,this.z-=e.z||0):e instanceof Array?(this.x-=e[0]||0,this.y-=e[1]||0,this.z-=e[2]||0):(this.x-=e||0,this.y-=t||0,this.z-=r||0),this},l.default.Vector.prototype.mult=function(e,t,r){if(e instanceof l.default.Vector)return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z?(this.x*=e.x,this.y*=e.y,this.z*=e.z):console.warn("p5.Vector.prototype.mult:","x contains components that are either undefined or not finite numbers"),this;if(e instanceof Array)return e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})?1===e.length?(this.x*=e[0],this.y*=e[0],this.z*=e[0]):2===e.length?(this.x*=e[0],this.y*=e[1]):3===e.length&&(this.x*=e[0],this.y*=e[1],this.z*=e[2]):console.warn("p5.Vector.prototype.mult:","x contains elements that are either undefined or not finite numbers"),this;var n=Array.prototype.slice.call(arguments);return n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})?(1===arguments.length&&(this.x*=e,this.y*=e,this.z*=e),2===arguments.length&&(this.x*=e,this.y*=t),3===arguments.length&&(this.x*=e,this.y*=t,this.z*=r)):console.warn("p5.Vector.prototype.mult:","x, y, or z arguments are either undefined or not a finite number"),this},l.default.Vector.prototype.div=function(e,t,r){if(e instanceof l.default.Vector){if(Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z){if(0===e.x||0===e.y||0===e.z)return console.warn("p5.Vector.prototype.div:","divide by 0"),this;this.x/=e.x,this.y/=e.y,this.z/=e.z}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}if(e instanceof Array){if(e.every(function(e){return Number.isFinite(e)})&&e.every(function(e){return"number"==typeof e})){if(e.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===e.length?(this.x/=e[0],this.y/=e[0],this.z/=e[0]):2===e.length?(this.x/=e[0],this.y/=e[1]):3===e.length&&(this.x/=e[0],this.y/=e[1],this.z/=e[2])}else console.warn("p5.Vector.prototype.div:","x contains components that are either undefined or not finite numbers");return this}var n=Array.prototype.slice.call(arguments);if(n.every(function(e){return Number.isFinite(e)})&&n.every(function(e){return"number"==typeof e})){if(n.some(function(e){return 0===e}))return console.warn("p5.Vector.prototype.div:","divide by 0"),this;1===arguments.length&&(this.x/=e,this.y/=e,this.z/=e),2===arguments.length&&(this.x/=e,this.y/=t),3===arguments.length&&(this.x/=e,this.y/=t,this.z/=r)}else console.warn("p5.Vector.prototype.div:","x, y, or z arguments are either undefined or not a finite number");return this},l.default.Vector.prototype.mag=function(){return Math.sqrt(this.magSq())},l.default.Vector.prototype.magSq=function(){var e=this.x,t=this.y,r=this.z;return e*e+t*t+r*r},l.default.Vector.prototype.dot=function(e,t,r){return e instanceof l.default.Vector?this.dot(e.x,e.y,e.z):this.x*(e||0)+this.y*(t||0)+this.z*(r||0)},l.default.Vector.prototype.cross=function(e){var t=this.y*e.z-this.z*e.y,r=this.z*e.x-this.x*e.z,n=this.x*e.y-this.y*e.x;return this.isPInst?new l.default.Vector(this._fromRadians,this._toRadians,t,r,n):new l.default.Vector(t,r,n)},l.default.Vector.prototype.dist=function(e){return e.copy().sub(this).mag()},l.default.Vector.prototype.normalize=function(){var e=this.mag();return 0!==e&&this.mult(1/e),this},l.default.Vector.prototype.limit=function(e){var t=this.magSq();return e*e>>0},o.default.prototype.randomSeed=function(e){this._lcgSetSeed(i,e),this._gaussian_previous=!1},o.default.prototype.random=function(e,t){var r;if(o.default._validateParameters("random",arguments),r=null!=this[i]?this._lcg(i):Math.random(),void 0===e)return r;if(void 0===t)return e instanceof Array?e[Math.floor(r*e.length)]:r*e;if(tf){var O=p,C=l,L=u;p=h+f*(s&&h=t&&(r=r.substring(r.length-t,r.length)),r}},o.default.prototype.unhex=function(e){return e instanceof Array?e.map(o.default.prototype.unhex):parseInt("0x".concat(e),16)};var i=o.default;r.default=i},{"../core/main":264,"core-js/modules/es.array.map":161,"core-js/modules/es.number.constructor":170,"core-js/modules/es.object.to-string":177,"core-js/modules/es.regexp.to-string":182,"core-js/modules/es.string.repeat":188}],305:[function(e,t,r){"use strict";e("core-js/modules/es.array.filter"),e("core-js/modules/es.array.index-of"),e("core-js/modules/es.array.join"),e("core-js/modules/es.array.map"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.regexp.constructor"),e("core-js/modules/es.regexp.exec"),e("core-js/modules/es.regexp.to-string"),e("core-js/modules/es.string.match"),e("core-js/modules/es.string.replace"),e("core-js/modules/es.string.split"),e("core-js/modules/es.string.trim"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,a=(n=e("../core/main"))&&n.__esModule?n:{default:n};function o(e,t,r){var n=e<0,o=n?e.toString().substring(1):e.toString(),i=o.indexOf("."),a=-1!==i?o.substring(0,i):o,s=-1!==i?o.substring(i+1):"",l=n?"-":"";if(void 0!==r){var u="";(-1!==i||0r&&(s=s.substring(0,r));for(var c=0;cn.length)for(var i=t-(n+=-1===r?".":"").length+1,a=0;a=h.TWO_PI?"".concat(t="ellipse","|").concat(c,"|"):"".concat(t="arc","|").concat(s,"|").concat(l,"|").concat(u,"|").concat(c,"|"),!this.geometryInHash(r)){var d=new E.default.Geometry(c,1,function(){if(this.strokeIndices=[],s.toFixed(10)!==l.toFixed(10)){u!==h.PIE&&void 0!==u||(this.vertices.push(new E.default.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var e=0;e<=c;e++){var t=(l-s)*(e/c)+s,r=.5+Math.cos(t)/2,n=.5+Math.sin(t)/2;this.vertices.push(new E.default.Vector(r,n,0)),this.uvs.push([r,n]),e>5&31)/31,(v>>10&31)/31):(r=a,n=s,l)}for(var b=new j.default.Vector(y,m,g),_=1;_<=3;_++){var x=p+12*_,w=new j.default.Vector(u.getFloat32(x,!0),u.getFloat32(4+x,!0),u.getFloat32(8+x,!0));e.vertices.push(w),e.vertexNormals.push(b),d&&i.push(r,n,o)}e.faces.push([3*h,3*h+1,3*h+2]),e.uvs.push([0,0],[0,0],[0,0])}}(e,t);else{var r=new DataView(t);if(!("TextDecoder"in window))return console.warn("Sorry, ASCII STL loading only works in browsers that support TextDecoder (https://caniuse.com/#feat=textencoder)");var n=new TextDecoder("utf-8").decode(r).split("\n");!function(e,t){for(var r,n,o="",i=[],a=0;aMath.PI?l=Math.PI:l<=0&&(l=.001);var u=Math.sin(l)*a*Math.sin(s),c=Math.cos(l)*a,d=Math.sin(l)*a*Math.cos(s);this.camera(u+this.centerX,c+this.centerY,d+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},y.default.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},y.default.prototype.setCamera=function(e){this._renderer._curCamera=e,this._renderer.uPMatrix.set(e.projMatrix.mat4[0],e.projMatrix.mat4[1],e.projMatrix.mat4[2],e.projMatrix.mat4[3],e.projMatrix.mat4[4],e.projMatrix.mat4[5],e.projMatrix.mat4[6],e.projMatrix.mat4[7],e.projMatrix.mat4[8],e.projMatrix.mat4[9],e.projMatrix.mat4[10],e.projMatrix.mat4[11],e.projMatrix.mat4[12],e.projMatrix.mat4[13],e.projMatrix.mat4[14],e.projMatrix.mat4[15])};var o=y.default.Camera;r.default=o},{"../core/main":264}],313:[function(e,t,r){"use strict";e("core-js/modules/es.string.sub"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n,c=(n=e("../core/main"))&&n.__esModule?n:{default:n};c.default.Geometry=function(e,t,r){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.vertexColors=[],this.detailX=void 0!==e?e:1,this.detailY=void 0!==t?t:1,this.dirtyFlags={},r instanceof Function&&r.call(this),this},c.default.Geometry.prototype.reset=function(){this.lineVertices.length=0,this.lineNormals.length=0,this.vertices.length=0,this.edges.length=0,this.vertexColors.length=0,this.vertexNormals.length=0,this.uvs.length=0,this.dirtyFlags={}},c.default.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var e,t,r,n,o=this.detailX+1,i=0;ithis.vertices.length-1-this.detailX;n--)e.add(this.vertexNormals[n]);e=c.default.Vector.div(e,this.detailX);for(var o=this.vertices.length-1;o>this.vertices.length-1-this.detailX;o--)this.vertexNormals[o]=e;return this},c.default.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var e=0,t=this.strokeIndices.length;e 65535 triangles. Your web browser does not support the WebGL Extension OES_element_index_uint.");n.drawElements(n.TRIANGLES,r.vertexCount,r.indexBufferType,0)}else n.drawArrays(e||n.TRIANGLES,0,r.vertexCount)},l.default.RendererGL.prototype._drawPoints=function(e,t){var r=this.GL,n=this._getImmediatePointShader();this._setPointUniforms(n),this._bindBuffer(t,r.ARRAY_BUFFER,this._vToNArray(e),Float32Array,r.STATIC_DRAW),n.enableAttrib(n.attributes.aPosition,3),r.drawArrays(r.Points,0,e.length),n.unbindShader()};var i=l.default.RendererGL;r.default=i},{"../core/main":264,"./p5.RenderBuffer":315,"./p5.RendererGL":318,"core-js/modules/es.array.fill":151,"core-js/modules/es.array.iterator":158,"core-js/modules/es.array.some":163,"core-js/modules/es.object.keys":176,"core-js/modules/es.object.to-string":177,"core-js/modules/es.string.iterator":186,"core-js/modules/es.symbol":196,"core-js/modules/es.symbol.description":194,"core-js/modules/es.symbol.iterator":195,"core-js/modules/es.typed-array.copy-within":197,"core-js/modules/es.typed-array.every":198,"core-js/modules/es.typed-array.fill":199,"core-js/modules/es.typed-array.filter":200,"core-js/modules/es.typed-array.find":202,"core-js/modules/es.typed-array.find-index":201,"core-js/modules/es.typed-array.float32-array":203,"core-js/modules/es.typed-array.for-each":205,"core-js/modules/es.typed-array.includes":206,"core-js/modules/es.typed-array.index-of":207,"core-js/modules/es.typed-array.iterator":210,"core-js/modules/es.typed-array.join":211,"core-js/modules/es.typed-array.last-index-of":212,"core-js/modules/es.typed-array.map":213,"core-js/modules/es.typed-array.reduce":215,"core-js/modules/es.typed-array.reduce-right":214,"core-js/modules/es.typed-array.reverse":216,"core-js/modules/es.typed-array.set":217,"core-js/modules/es.typed-array.slice":218,"core-js/modules/es.typed-array.some":219,"core-js/modules/es.typed-array.sort":220,"core-js/modules/es.typed-array.subarray":221,"core-js/modules/es.typed-array.to-locale-string":222,"core-js/modules/es.typed-array.to-string":223,"core-js/modules/es.typed-array.uint16-array":224,"core-js/modules/es.typed-array.uint32-array":225,"core-js/modules/web.dom-collections.iterator":229}],318:[function(e,t,r){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.description"),e("core-js/modules/es.symbol.iterator"),e("core-js/modules/es.array.concat"),e("core-js/modules/es.array.fill"),e("core-js/modules/es.array.filter"),e("core-js/modules/es.array.from"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.slice"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.to-string"),e("core-js/modules/es.regexp.to-string"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.string.iterator"),e("core-js/modules/es.typed-array.float32-array"),e("core-js/modules/es.typed-array.float64-array"),e("core-js/modules/es.typed-array.int16-array"),e("core-js/modules/es.typed-array.uint8-array"),e("core-js/modules/es.typed-array.uint16-array"),e("core-js/modules/es.typed-array.uint32-array"),e("core-js/modules/es.typed-array.copy-within"),e("core-js/modules/es.typed-array.every"),e("core-js/modules/es.typed-array.fill"),e("core-js/modules/es.typed-array.filter"),e("core-js/modules/es.typed-array.find"),e("core-js/modules/es.typed-array.find-index"),e("core-js/modules/es.typed-array.for-each"),e("core-js/modules/es.typed-array.includes"),e("core-js/modules/es.typed-array.index-of"),e("core-js/modules/es.typed-array.iterator"),e("core-js/modules/es.typed-array.join"),e("core-js/modules/es.typed-array.last-index-of"),e("core-js/modules/es.typed-array.map"),e("core-js/modules/es.typed-array.reduce"),e("core-js/modules/es.typed-array.reduce-right"),e("core-js/modules/es.typed-array.reverse"),e("core-js/modules/es.typed-array.set"),e("core-js/modules/es.typed-array.slice"),e("core-js/modules/es.typed-array.some"),e("core-js/modules/es.typed-array.sort"),e("core-js/modules/es.typed-array.subarray"),e("core-js/modules/es.typed-array.to-locale-string"),e("core-js/modules/es.typed-array.to-string"),e("core-js/modules/web.dom-collections.iterator"),Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var u=o(e("../core/main")),i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==a(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}r.default=e,t&&t.set(e,r);return r}(e("../core/constants")),n=o(e("libtess"));e("./p5.Shader"),e("./p5.Camera"),e("../core/p5.Renderer"),e("./p5.Matrix");e("path");function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function o(e){return e&&e.__esModule?e:{default:e}}function l(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\nuniform int uPerspective;\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n // using a scale <1 moves the lines towards the camera\n // in order to prevent popping effects due to half of\n // the line disappearing behind the geometry faces.\n vec3 scale = vec3(0.9995);\n\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n vec2 curPerspScale;\n\n if(uPerspective == 1) {\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n curPerspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n } else {\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n curPerspScale = p.w / (0.5 * uViewport.zw);\n }\n\n gl_Position.xy = p.xy + offset.xy * curPerspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};u.default.RendererGL=function(e,t,r,n){return u.default.Renderer.call(this,e,t,r),this._setAttributeDefaults(t),this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this._pInst._setProperty("drawingContext",this.drawingContext),this._isErasing=!1,this._enableLighting=!1,this.ambientLightColors=[],this.specularColors=[1,1,1],this.directionalLightDirections=[],this.directionalLightDiffuseColors=[],this.directionalLightSpecularColors=[],this.pointLightPositions=[],this.pointLightDiffuseColors=[],this.pointLightSpecularColors=[],this.spotLightPositions=[],this.spotLightDirections=[],this.spotLightDiffuseColors=[],this.spotLightSpecularColors=[],this.spotLightAngle=[],this.spotLightConc=[],this.drawMode=i.FILL,this.curFillColor=this._cachedFillStyle=[1,1,1,1],this.curStrokeColor=this._cachedStrokeStyle=[0,0,0,1],this.curBlendMode=i.BLEND,this._cachedBlendMode=void 0,this.blendExt=this.GL.getExtension("EXT_blend_minmax"),this._isBlending=!1,this._useSpecularMaterial=!1,this._useEmissiveMaterial=!1,this._useNormalMaterial=!1,this._useShininess=1,this._tint=[255,255,255,255],this.constantAttenuation=1,this.linearAttenuation=0,this.quadraticAttenuation=0,this.uMVMatrix=new u.default.Matrix,this.uPMatrix=new u.default.Matrix,this.uNMatrix=new u.default.Matrix("mat3"),this._currentNormal=new u.default.Vector(0,0,1),this._curCamera=new u.default.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.userFillShader=void 0,this.userStrokeShader=void 0,this.userPointShader=void 0,this.retainedMode={geometry:{},buffers:{stroke:[new u.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new u.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],fill:[new u.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new u.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new u.default.RenderBuffer(4,"vertexColors","colorBuffer","aVertexColor",this),new u.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new u.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],text:[new u.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new u.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)]}},this.immediateMode={geometry:new u.default.Geometry,shapeMode:i.TRIANGLE_FAN,_bezierVertex:[],_quadraticVertex:[],_curveVertex:[],buffers:{fill:[new u.default.RenderBuffer(3,"vertices","vertexBuffer","aPosition",this,this._vToNArray),new u.default.RenderBuffer(3,"vertexNormals","normalBuffer","aNormal",this,this._vToNArray),new u.default.RenderBuffer(4,"vertexColors","colorBuffer","aVertexColor",this),new u.default.RenderBuffer(3,"vertexAmbients","ambientBuffer","aAmbientColor",this),new u.default.RenderBuffer(2,"uvs","uvBuffer","aTexCoord",this,this._flatten)],stroke:[new u.default.RenderBuffer(3,"lineVertices","lineVertexBuffer","aPosition",this,this._flatten),new u.default.RenderBuffer(4,"lineNormals","lineNormalBuffer","aDirection",this,this._flatten)],point:this.GL.createBuffer()}},this.pointSize=5,this.curStrokeWeight=1,this.textures=[],this.textureMode=i.IMAGE,this.textureWrapX=i.CLAMP,this.textureWrapY=i.CLAMP,this._tex=null,this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this._curShader=void 0,this},u.default.RendererGL.prototype=Object.create(u.default.Renderer.prototype),u.default.RendererGL.prototype._setAttributeDefaults=function(e){var t={alpha:!1,depth:!0,stencil:!0,antialias:navigator.userAgent.toLowerCase().includes("safari"),premultipliedAlpha:!1,preserveDrawingBuffer:!0,perPixelLighting:!0};null===e._glAttributes?e._glAttributes=t:e._glAttributes=Object.assign(t,e._glAttributes)},u.default.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this._pInst._glAttributes)||this.canvas.getContext("experimental-webgl",this._pInst._glAttributes),null===this.drawingContext)throw new Error("Error creating webgl context");var e=this.drawingContext;e.enable(e.DEPTH_TEST),e.depthFunc(e.LEQUAL),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(e){throw e}},u.default.RendererGL.prototype._resetContext=function(e,t){var r=this.width,n=this.height,o=this.canvas.id,i=this._pInst instanceof u.default.Graphics;if(i){var a=this._pInst;a.canvas.parentNode.removeChild(a.canvas),a.canvas=document.createElement("canvas"),(a._pInst._userNode||document.body).appendChild(a.canvas),u.default.Element.call(a,a.canvas,a._pInst),a.width=r,a.height=n}else{var s=this.canvas;s&&s.parentNode.removeChild(s),(s=document.createElement("canvas")).id=o,this._pInst._userNode?this._pInst._userNode.appendChild(s):document.body.appendChild(s),this._pInst.canvas=s}var l=new u.default.RendererGL(this._pInst.canvas,this._pInst,!i);this._pInst._setProperty("_renderer",l),l.resize(r,n),l._applyDefaults(),i||this._pInst._elements.push(l),"function"==typeof t&&setTimeout(function(){t.apply(window._renderer,e)},0)},u.default.prototype.setAttributes=function(e,t){if(void 0!==this._glAttributes){var r=!0;if(void 0!==t?(null===this._glAttributes&&(this._glAttributes={}),this._glAttributes[e]!==t&&(this._glAttributes[e]=t,r=!1)):e instanceof Object&&this._glAttributes!==e&&(this._glAttributes=e,r=!1),this._renderer.isP3D&&!r){if(!this._setupDone)for(var n in this._renderer.retainedMode.geometry)if(this._renderer.retainedMode.geometry.hasOwnProperty(n))return void console.error("Sorry, Could not set the attributes, you need to call setAttributes() before calling the other drawing methods in setup()");this.push(),this._renderer._resetContext(),this.pop(),this._renderer._curCamera&&(this._renderer._curCamera._renderer=this._renderer)}}else console.log("You are trying to use setAttributes on a p5.Graphics object that does not use a WEBGL renderer.")},u.default.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.specularColors=[1,1,1],this.directionalLightDirections.length=0,this.directionalLightDiffuseColors.length=0,this.directionalLightSpecularColors.length=0,this.pointLightPositions.length=0,this.pointLightDiffuseColors.length=0,this.pointLightSpecularColors.length=0,this.spotLightPositions.length=0,this.spotLightDirections.length=0,this.spotLightDiffuseColors.length=0,this.spotLightSpecularColors.length=0,this.spotLightAngle.length=0,this.spotLightConc.length=0,this._enableLighting=!1,this._tint=[255,255,255,255],this.GL.clear(this.GL.DEPTH_BUFFER_BIT)},u.default.RendererGL.prototype.background=function(){var e,t=(e=this._pInst).color.apply(e,arguments),r=t.levels[0]/255,n=t.levels[1]/255,o=t.levels[2]/255,i=t.levels[3]/255;this.GL.clearColor(r,n,o,i),this.GL.clear(this.GL.COLOR_BUFFER_BIT)},u.default.RendererGL.prototype.fill=function(e,t,r,n){var o=u.default.prototype.color.apply(this._pInst,arguments);this.curFillColor=o._array,this.drawMode=i.FILL,this._useNormalMaterial=!1,this._tex=null},u.default.RendererGL.prototype.stroke=function(e,t,r,n){arguments[3]=255;var o=u.default.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array},u.default.RendererGL.prototype.strokeCap=function(e){console.error("Sorry, strokeCap() is not yet implemented in WEBGL mode")},u.default.RendererGL.prototype.strokeJoin=function(e){console.error("Sorry, strokeJoin() is not yet implemented in WEBGL mode")},u.default.RendererGL.prototype.filter=function(e){console.error("filter() does not work in WEBGL mode")},u.default.RendererGL.prototype.blendMode=function(e){e===i.DARKEST||e===i.LIGHTEST||e===i.ADD||e===i.BLEND||e===i.SUBTRACT||e===i.SCREEN||e===i.EXCLUSION||e===i.REPLACE||e===i.MULTIPLY||e===i.REMOVE?this.curBlendMode=e:e!==i.BURN&&e!==i.OVERLAY&&e!==i.HARD_LIGHT&&e!==i.SOFT_LIGHT&&e!==i.DODGE||console.warn("BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.")},u.default.RendererGL.prototype.erase=function(e,t){this._isErasing||(this._applyBlendMode(i.REMOVE),this._isErasing=!0,this._cachedFillStyle=this.curFillColor.slice(),this.curFillColor=[1,1,1,e/255],this._cachedStrokeStyle=this.curStrokeColor.slice(),this.curStrokeColor=[1,1,1,t/255])},u.default.RendererGL.prototype.noErase=function(){this._isErasing&&(this._isErasing=!1,this.curFillColor=this._cachedFillStyle.slice(),this.curStrokeColor=this._cachedStrokeStyle.slice(),this.blendMode(this._cachedBlendMode))},u.default.RendererGL.prototype.strokeWeight=function(e){this.curStrokeWeight!==e&&(this.pointSize=e,this.curStrokeWeight=e)},u.default.RendererGL.prototype._getPixel=function(e,t){var r;return r=new Uint8Array(4),this.drawingContext.readPixels(e,t,1,1,this.drawingContext.RGBA,this.drawingContext.UNSIGNED_BYTE,r),[r[0],r[1],r[2],r[3]]},u.default.RendererGL.prototype.loadPixels=function(){var e=this._pixelsState;if(!0===this._pInst._glAttributes.preserveDrawingBuffer){var t=e.pixels,r=this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4;t instanceof Uint8Array&&t.length===r||(t=new Uint8Array(r),this._pixelsState._setProperty("pixels",t));var n=this._pInst._pixelDensity;this.GL.readPixels(0,0,this.width*n,this.height*n,this.GL.RGBA,this.GL.UNSIGNED_BYTE,t)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},u.default.RendererGL.prototype.geometryInHash=function(e){return void 0!==this.retainedMode.geometry[e]},u.default.RendererGL.prototype.resize=function(e,t){u.default.Renderer.prototype.resize.call(this,e,t),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize();var r=this._pixelsState;void 0!==r.pixels&&r._setProperty("pixels",new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},u.default.RendererGL.prototype.clear=function(){var e=(arguments.length<=0?void 0:arguments[0])||0,t=(arguments.length<=1?void 0:arguments[1])||0,r=(arguments.length<=2?void 0:arguments[2])||0,n=(arguments.length<=3?void 0:arguments[3])||0;this.GL.clearColor(e,t,r,n),this.GL.clearDepth(1),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},u.default.RendererGL.prototype.applyMatrix=function(e,t,r,n,o,i){16===arguments.length?u.default.Matrix.prototype.apply.apply(this.uMVMatrix,arguments):this.uMVMatrix.apply([e,t,0,0,r,n,0,0,0,0,1,0,o,i,0,1])},u.default.RendererGL.prototype.translate=function(e,t,r){return e instanceof u.default.Vector&&(r=e.z,t=e.y,e=e.x),this.uMVMatrix.translate([e,t,r]),this},u.default.RendererGL.prototype.scale=function(e,t,r){return this.uMVMatrix.scale(e,t,r),this},u.default.RendererGL.prototype.rotate=function(e,t){return void 0===t?this.rotateZ(e):(u.default.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},u.default.RendererGL.prototype.rotateX=function(e){return this.rotate(e,1,0,0),this},u.default.RendererGL.prototype.rotateY=function(e){return this.rotate(e,0,1,0),this},u.default.RendererGL.prototype.rotateZ=function(e){return this.rotate(e,0,0,1),this},u.default.RendererGL.prototype.push=function(){var e=u.default.Renderer.prototype.push.apply(this),t=e.properties;return t.uMVMatrix=this.uMVMatrix.copy(),t.uPMatrix=this.uPMatrix.copy(),t._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t.ambientLightColors=this.ambientLightColors.slice(),t.specularColors=this.specularColors.slice(),t.directionalLightDirections=this.directionalLightDirections.slice(),t.directionalLightDiffuseColors=this.directionalLightDiffuseColors.slice(),t.directionalLightSpecularColors=this.directionalLightSpecularColors.slice(),t.pointLightPositions=this.pointLightPositions.slice(),t.pointLightDiffuseColors=this.pointLightDiffuseColors.slice(),t.pointLightSpecularColors=this.pointLightSpecularColors.slice(),t.spotLightPositions=this.spotLightPositions.slice(),t.spotLightDirections=this.spotLightDirections.slice(),t.spotLightDiffuseColors=this.spotLightDiffuseColors.slice(),t.spotLightSpecularColors=this.spotLightSpecularColors.slice(),t.spotLightAngle=this.spotLightAngle.slice(),t.spotLightConc=this.spotLightConc.slice(),t.userFillShader=this.userFillShader,t.userStrokeShader=this.userStrokeShader,t.userPointShader=this.userPointShader,t.pointSize=this.pointSize,t.curStrokeWeight=this.curStrokeWeight,t.curStrokeColor=this.curStrokeColor,t.curFillColor=this.curFillColor,t._useSpecularMaterial=this._useSpecularMaterial,t._useEmissiveMaterial=this._useEmissiveMaterial,t._useShininess=this._useShininess,t.constantAttenuation=this.constantAttenuation,t.linearAttenuation=this.linearAttenuation,t.quadraticAttenuation=this.quadraticAttenuation,t._enableLighting=this._enableLighting,t._useNormalMaterial=this._useNormalMaterial,t._tex=this._tex,t.drawMode=this.drawMode,t._currentNormal=this._currentNormal,e},u.default.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=u.default.Matrix.identity(this._pInst),this},u.default.RendererGL.prototype._getImmediateStrokeShader=function(){var e=this.userStrokeShader;return e&&e.isStrokeShader()?e:this._getLineShader()},u.default.RendererGL.prototype._getRetainedStrokeShader=u.default.RendererGL.prototype._getImmediateStrokeShader,u.default.RendererGL.prototype._getImmediateFillShader=function(){var e=this.userFillShader;if(this._useNormalMaterial&&(!e||!e.isNormalShader()))return this._getNormalShader();if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getImmediateModeShader();return e},u.default.RendererGL.prototype._getRetainedFillShader=function(){if(this._useNormalMaterial)return this._getNormalShader();var e=this.userFillShader;if(this._enableLighting){if(!e||!e.isLightShader())return this._getLightShader()}else if(this._tex){if(!e||!e.isTextureShader())return this._getLightShader()}else if(!e)return this._getColorShader();return e},u.default.RendererGL.prototype._getImmediatePointShader=function(){var e=this.userPointShader;return e&&e.isPointShader()?e:this._getPointShader()},u.default.RendererGL.prototype._getRetainedLineShader=u.default.RendererGL.prototype._getImmediateLineShader,u.default.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this._pInst._glAttributes.perPixelLighting?this._defaultLightShader=new u.default.Shader(this,d.phongVert,d.phongFrag):this._defaultLightShader=new u.default.Shader(this,d.lightVert,d.lightTextureFrag)),this._defaultLightShader},u.default.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new u.default.Shader(this,d.immediateVert,d.vertexColorFrag)),this._defaultImmediateModeShader},u.default.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new u.default.Shader(this,d.normalVert,d.normalFrag)),this._defaultNormalShader},u.default.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new u.default.Shader(this,d.normalVert,d.basicFrag)),this._defaultColorShader},u.default.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new u.default.Shader(this,d.pointVert,d.pointFrag)),this._defaultPointShader},u.default.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new u.default.Shader(this,d.lineVert,d.lineFrag)),this._defaultLineShader},u.default.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new u.default.Shader(this,d.fontVert,d.fontFrag)),this._defaultFontShader},u.default.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var e=new u.default.Image(1,1);e.set(0,0,255),this._emptyTexture=new u.default.Texture(this,e)}return this._emptyTexture},u.default.RendererGL.prototype.getTexture=function(e){var t=this.textures,r=!0,n=!1,o=void 0;try{for(var i,a=t[Symbol.iterator]();!(r=(i=a.next()).done);r=!0){var s=i.value;if(s.src===e)return s}}catch(e){n=!0,o=e}finally{try{r||null==a.return||a.return()}finally{if(n)throw o}}var l=new u.default.Texture(this,e);return t.push(l),l},u.default.RendererGL.prototype._setStrokeUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uStrokeWeight",this.curStrokeWeight)},u.default.RendererGL.prototype._setFillUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curFillColor),e.setUniform("isTexture",!!this._tex),this._tex&&e.setUniform("uSampler",this._tex),e.setUniform("uTint",this._tint),e.setUniform("uSpecular",this._useSpecularMaterial),e.setUniform("uEmissive",this._useEmissiveMaterial),e.setUniform("uShininess",this._useShininess),e.setUniform("uUseLighting",this._enableLighting);var t=this.pointLightDiffuseColors.length/3;e.setUniform("uPointLightCount",t),e.setUniform("uPointLightLocation",this.pointLightPositions),e.setUniform("uPointLightDiffuseColors",this.pointLightDiffuseColors),e.setUniform("uPointLightSpecularColors",this.pointLightSpecularColors);var r=this.directionalLightDiffuseColors.length/3;e.setUniform("uDirectionalLightCount",r),e.setUniform("uLightingDirection",this.directionalLightDirections),e.setUniform("uDirectionalDiffuseColors",this.directionalLightDiffuseColors),e.setUniform("uDirectionalSpecularColors",this.directionalLightSpecularColors);var n=this.ambientLightColors.length/3;e.setUniform("uAmbientLightCount",n),e.setUniform("uAmbientColor",this.ambientLightColors);var o=this.spotLightDiffuseColors.length/3;e.setUniform("uSpotLightCount",o),e.setUniform("uSpotLightAngle",this.spotLightAngle),e.setUniform("uSpotLightConc",this.spotLightConc),e.setUniform("uSpotLightDiffuseColors",this.spotLightDiffuseColors),e.setUniform("uSpotLightSpecularColors",this.spotLightSpecularColors),e.setUniform("uSpotLightLocation",this.spotLightPositions),e.setUniform("uSpotLightDirection",this.spotLightDirections),e.setUniform("uConstantAttenuation",this.constantAttenuation),e.setUniform("uLinearAttenuation",this.linearAttenuation),e.setUniform("uQuadraticAttenuation",this.quadraticAttenuation),e.bindTextures()},u.default.RendererGL.prototype._setPointUniforms=function(e){e.bindShader(),e.setUniform("uMaterialColor",this.curStrokeColor),e.setUniform("uPointSize",this.pointSize*this._pInst._pixelDensity)},u.default.RendererGL.prototype._bindBuffer=function(e,t,r,n,o){if(t=t||this.GL.ARRAY_BUFFER,this.GL.bindBuffer(t,e),void 0!==r){var i=new(n||Float32Array)(r);this.GL.bufferData(t,i,o||this.GL.STATIC_DRAW)}},u.default.RendererGL.prototype._arraysEqual=function(e,t){var r=e.length;if(r!==t.length)return!1;for(var n=0;n>7,127&f,d>>7,127&d);for(var h=0;h>7,127&p,0,0)}}return{cellImageInfo:l,dimOffset:i,dimImageInfo:o}}return(t=this.glyphInfos[e.index]={glyph:e,uGlyphRect:[n.x1,-n.y1,n.x2,-n.y2],strokeImageInfo:I,strokes:h,colInfo:B(y,this.colDimImageInfos,this.colCellImageInfos),rowInfo:B(p,this.rowDimImageInfos,this.rowCellImageInfos)}).uGridOffset=[t.colInfo.dimOffset,t.rowInfo.dimOffset],t}}var z=Math.sqrt(3);G.default.RendererGL.prototype._renderText=function(e,t,r,n,o){if(this._textFont&&"string"!=typeof this._textFont){if(!(o<=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only Opentype (.otf) and Truetype (.ttf) fonts are supported"),e;e.push();var i=this._doStroke,a=this.drawMode;this._doStroke=!1,this.drawMode=k.TEXTURE;var s=this._textFont.font,l=this._textFont._fontInfo;l=l||(this._textFont._fontInfo=new R(s));var u=this._textFont._handleAlignment(this,t,r,n),c=this._textSize/s.unitsPerEm;this.translate(u.x,u.y,0),this.scale(c,c,1);var d=this.GL,f=!this._defaultFontShader,h=this._getFontShader();h.init(),h.bindShader(),f&&(h.setUniform("uGridImageSize",[64,64]),h.setUniform("uCellsImageSize",[64,64]),h.setUniform("uStrokeImageSize",[64,64]),h.setUniform("uGridSize",[9,9])),this._applyColorBlend(this.curFillColor);var p=this.retainedMode.geometry.glyph;if(!p){var y=this._textGeom=new G.default.Geometry(1,1,function(){for(var e=0;e<=1;e++)for(var t=0;t<=1;t++)this.vertices.push(new G.default.Vector(t,e,0)),this.uvs.push(t,e)});y.computeFaces().computeNormals(),p=this.createBuffers("glyph",y)}var m=!0,g=!1,v=void 0;try{for(var b,_=this.retainedMode.buffers.text[Symbol.iterator]();!(m=(b=_.next()).done);m=!0){b.value._prepareBuffer(p,h)}}catch(e){g=!0,v=e}finally{try{m||null==_.return||_.return()}finally{if(g)throw v}}this._bindBuffer(p.indexBuffer,d.ELEMENT_ARRAY_BUFFER),h.setUniform("uMaterialColor",this.curFillColor);try{var x=0,w=null,j=s.stringToGlyphs(t),S=!0,M=!1,E=void 0;try{for(var T,O=j[Symbol.iterator]();!(S=(T=O.next()).done);S=!0){var C=T.value;w&&(x+=s.getKerningValue(w,C));var L=l.getGlyphInfo(C);if(L.uGlyphRect){var P=L.rowInfo,A=L.colInfo;h.setUniform("uSamplerStrokes",L.strokeImageInfo.imageData),h.setUniform("uSamplerRowStrokes",P.cellImageInfo.imageData),h.setUniform("uSamplerRows",P.dimImageInfo.imageData),h.setUniform("uSamplerColStrokes",A.cellImageInfo.imageData),h.setUniform("uSamplerCols",A.dimImageInfo.imageData),h.setUniform("uGridOffset",L.uGridOffset),h.setUniform("uGlyphRect",L.uGlyphRect),h.setUniform("uGlyphOffset",x),h.bindTextures(),d.drawElements(d.TRIANGLES,6,this.GL.UNSIGNED_SHORT,0)}x+=C.advanceWidth,w=C}}catch(e){M=!0,E=e}finally{try{S||null==O.return||O.return()}finally{if(M)throw E}}}finally{h.unbindShader(),this._doStroke=i,this.drawMode=a,e.pop()}return e}}else console.log("WEBGL: you must load and set a font before drawing text. See `loadFont` and `textFont` for more details.")}},{"../core/constants":253,"../core/main":264,"./p5.RendererGL.Retained":317,"./p5.Shader":319,"core-js/modules/es.array.iterator":158,"core-js/modules/es.object.to-string":177,"core-js/modules/es.regexp.exec":181,"core-js/modules/es.string.iterator":186,"core-js/modules/es.string.split":191,"core-js/modules/es.string.sub":192,"core-js/modules/es.symbol":196,"core-js/modules/es.symbol.description":194,"core-js/modules/es.symbol.iterator":195,"core-js/modules/web.dom-collections.iterator":229}]},{},[248])(248)}); \ No newline at end of file diff --git a/src/assets/js/p5.sound.min.js b/src/assets/js/p5.sound.min.js index fe65a81f13..8537307691 100644 --- a/src/assets/js/p5.sound.min.js +++ b/src/assets/js/p5.sound.min.js @@ -1,3 +1 @@ -/** [p5.sound] Version: 0.3.12 - 2020-01-06 */ - !function(n){var i={};function o(t){if(i[t])return i[t].exports;var e=i[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=n,o.c=i,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)o.d(n,i,function(t){return e[t]}.bind(null,i));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=31)}([function(t,e,n){var i;void 0===(i=function(){"use strict";function c(t,e){this.isUndef(t)||1===t?this.input=this.context.createGain():1t)this.cancelScheduledValues(t),this.linearRampToValueAtTime(e,t);else{var i=this._searchAfter(t);i&&(this.cancelScheduledValues(t),i.type===u.TimelineSignal.Type.Linear?this.linearRampToValueAtTime(e,t):i.type===u.TimelineSignal.Type.Exponential&&this.exponentialRampToValueAtTime(e,t)),this.setValueAtTime(e,t)}return this},u.TimelineSignal.prototype.linearRampToValueBetween=function(t,e,n){return this.setRampPoint(e),this.linearRampToValueAtTime(t,n),this},u.TimelineSignal.prototype.exponentialRampToValueBetween=function(t,e,n){return this.setRampPoint(e),this.exponentialRampToValueAtTime(t,n),this},u.TimelineSignal.prototype._searchBefore=function(t){return this._events.get(t)},u.TimelineSignal.prototype._searchAfter=function(t){return this._events.getAfter(t)},u.TimelineSignal.prototype.getValueAtTime=function(t){t=this.toSeconds(t);var e=this._searchAfter(t),n=this._searchBefore(t),i=this._initial;if(null===n)i=this._initial;else if(n.type===u.TimelineSignal.Type.Target){var o,r=this._events.getBefore(n.time);o=null===r?this._initial:r.value,i=this._exponentialApproach(n.time,o,n.value,n.constant,t)}else i=n.type===u.TimelineSignal.Type.Curve?this._curveInterpolate(n.time,n.value,n.duration,t):null===e?n.value:e.type===u.TimelineSignal.Type.Linear?this._linearInterpolate(n.time,n.value,e.time,e.value,t):e.type===u.TimelineSignal.Type.Exponential?this._exponentialInterpolate(n.time,n.value,e.time,e.value,t):n.value;return i},u.TimelineSignal.prototype.connect=u.SignalBase.prototype.connect,u.TimelineSignal.prototype._exponentialApproach=function(t,e,n,i,o){return n+(e-n)*Math.exp(-(o-t)/i)},u.TimelineSignal.prototype._linearInterpolate=function(t,e,n,i,o){return e+(o-t)/(n-t)*(i-e)},u.TimelineSignal.prototype._exponentialInterpolate=function(t,e,n,i,o){return(e=Math.max(this._minOutput,e))*Math.pow(i/e,(o-t)/(n-t))},u.TimelineSignal.prototype._curveInterpolate=function(t,e,n,i){var o=e.length;if(t+n<=i)return e[o-1];if(i<=t)return e[0];var r=(i-t)/n,s=Math.floor((o-1)*r),a=Math.ceil((o-1)*r),u=e[s],p=e[a];return a===s?u:this._linearInterpolate(s,u,a,p,r*(o-1))},u.TimelineSignal.prototype.dispose=function(){u.Signal.prototype.dispose.call(this),u.Param.prototype.dispose.call(this),this._events.dispose(),this._events=null},u.TimelineSignal}.apply(e,i))||(t.exports=o)},function(t,e,n){"use strict";var i;void 0===(i=function(t){var e=n(4);return p5.Filter=function(t){e.call(this),this.biquad=this.ac.createBiquadFilter(),this.input.connect(this.biquad),this.biquad.connect(this.wet),t&&this.setType(t),this._on=!0,this._untoggledType=this.biquad.type},p5.Filter.prototype=Object.create(e.prototype),p5.Filter.prototype.process=function(t,e,n,i){t.connect(this.input),this.set(e,n,i)},p5.Filter.prototype.set=function(t,e,n){t&&this.freq(t,n),e&&this.res(e,n)},p5.Filter.prototype.freq=function(t,e){var n=e||0;return t<=0&&(t=1),"number"==typeof t?(this.biquad.frequency.cancelScheduledValues(this.ac.currentTime+.01+n),this.biquad.frequency.exponentialRampToValueAtTime(t,this.ac.currentTime+.02+n)):t&&t.connect(this.biquad.frequency),this.biquad.frequency.value},p5.Filter.prototype.res=function(t,e){var n=e||0;return"number"==typeof t?(this.biquad.Q.value=t,this.biquad.Q.cancelScheduledValues(this.ac.currentTime+.01+n),this.biquad.Q.linearRampToValueAtTime(t,this.ac.currentTime+.02+n)):t&&t.connect(this.biquad.Q),this.biquad.Q.value},p5.Filter.prototype.gain=function(t,e){var n=e||0;return"number"==typeof t?(this.biquad.gain.value=t,this.biquad.gain.cancelScheduledValues(this.ac.currentTime+.01+n),this.biquad.gain.linearRampToValueAtTime(t,this.ac.currentTime+.02+n)):t&&t.connect(this.biquad.gain),this.biquad.gain.value},p5.Filter.prototype.toggle=function(){return this._on=!this._on,!0===this._on?this.biquad.type=this._untoggledType:!1===this._on&&(this.biquad.type="allpass"),this._on},p5.Filter.prototype.setType=function(t){this.biquad.type=t,this._untoggledType=this.biquad.type},p5.Filter.prototype.dispose=function(){e.prototype.dispose.apply(this),this.biquad&&(this.biquad.disconnect(),delete this.biquad)},p5.LowPass=function(){p5.Filter.call(this,"lowpass")},p5.LowPass.prototype=Object.create(p5.Filter.prototype),p5.HighPass=function(){p5.Filter.call(this,"highpass")},p5.HighPass.prototype=Object.create(p5.Filter.prototype),p5.BandPass=function(){p5.Filter.call(this,"bandpass")},p5.BandPass.prototype=Object.create(p5.Filter.prototype),p5.Filter}.call(e,n,e,t))||(t.exports=i)},function(t,e,n){var i,o;i=[n(0),n(7),n(25),n(2),n(9)],void 0===(o=function(e){"use strict";return e.Subtract=function(t){this.createInsOuts(2,0),this._sum=this.input[0]=this.output=new e.Gain,this._neg=new e.Negate,this._param=this.input[1]=new e.Signal(t),this._param.chain(this._neg,this._sum)},e.extend(e.Subtract,e.Signal),e.Subtract.prototype.dispose=function(){return e.prototype.dispose.call(this),this._neg.dispose(),this._neg=null,this._sum.disconnect(),this._sum=null,this._param.dispose(),this._param=null,this},e.Subtract}.apply(e,i))||(t.exports=o)},function(i,o,r){"use strict";(function(t){var e,n;t.TONE_SILENCE_VERSION_LOGGING=!0,e=[r(35),r(12),r(0)],void 0===(n=function(i,t,e){var o=new window.AudioContext;return e.context.dispose(),e.setContext(o),p5.prototype.getAudioContext=function(){return o},p5.prototype.userStartAudio=function(t,e){var n=t;return t instanceof p5.Element?n=t.elt:t instanceof Array&&t[0]instanceof p5.Element&&(n=t.map(function(t){return t.elt})),i(o,n,e)},o}.apply(o,e))||(i.exports=n)}).call(this,r(34))},function(t,e,n){var i,o;i=[n(0)],void 0===(o=function(s){"use strict";return s.Emitter=function(){this._events={}},s.extend(s.Emitter),s.Emitter.prototype.on=function(t,e){for(var n=t.split(/\W+/),i=0;ithis.memory){var n=this.length-this.memory;this._timeline.splice(0,n)}return this},e.Timeline.prototype.remove=function(t){if(this._iterating)this._toRemove.push(t);else{var e=this._timeline.indexOf(t);-1!==e&&this._timeline.splice(e,1)}return this},e.Timeline.prototype.get=function(t){var e=this._search(t);return-1!==e?this._timeline[e]:null},e.Timeline.prototype.peek=function(){return this._timeline[0]},e.Timeline.prototype.shift=function(){return this._timeline.shift()},e.Timeline.prototype.getAfter=function(t){var e=this._search(t);return e+1=t&&(this._timeline=[]);return this},e.Timeline.prototype.cancelBefore=function(t){if(this._timeline.length){var e=this._search(t);0<=e&&(this._timeline=this._timeline.slice(e+1))}return this},e.Timeline.prototype._search=function(t){var e=0,n=this._timeline.length,i=n;if(0t)return o;r.time>t?i=o:r.time=t;)n--;return this._iterate(e,n+1),this},e.Timeline.prototype.forEachAtTime=function(e,n){var t=this._search(e);return-1!==t&&this._iterate(function(t){t.time===e&&n(t)},0,t),this},e.Timeline.prototype.dispose=function(){e.prototype.dispose.call(this),this._timeline=null,this._toRemove=null},e.Timeline}.apply(e,i))||(t.exports=o)},function(t,e,n){var i,o;i=[n(0),n(3),n(2)],void 0===(o=function(t){"use strict";return t.Negate=function(){this._multiply=this.input=this.output=new t.Multiply(-1)},t.extend(t.Negate,t.SignalBase),t.Negate.prototype.dispose=function(){return t.prototype.dispose.call(this),this._multiply.dispose(),this._multiply=null,this},t.Negate}.apply(e,i))||(t.exports=o)},function(t,e,n){var i,o;i=[n(0),n(2),n(3),n(5)],void 0===(o=function(t){"use strict";return t.GreaterThanZero=function(){this._thresh=this.output=new t.WaveShaper(function(t){return t<=0?0:1},127),this._scale=this.input=new t.Multiply(1e4),this._scale.connect(this._thresh)},t.extend(t.GreaterThanZero,t.SignalBase),t.GreaterThanZero.prototype.dispose=function(){return t.prototype.dispose.call(this),this._scale.dispose(),this._scale=null,this._thresh.dispose(),this._thresh=null,this},t.GreaterThanZero}.apply(e,i))||(t.exports=o)},function(t,e,n){var i,o;i=[n(0),n(14),n(66),n(18),n(12)],void 0===(o=function(o){"use strict";return o.Clock=function(){o.Emitter.call(this);var t=this.optionsObject(arguments,["callback","frequency"],o.Clock.defaults);this.callback=t.callback,this._nextTick=0,this._lastState=o.State.Stopped,this.frequency=new o.TimelineSignal(t.frequency,o.Type.Frequency),this._readOnly("frequency"),this.ticks=0,this._state=new o.TimelineState(o.State.Stopped),this._boundLoop=this._loop.bind(this),this.context.on("tick",this._boundLoop)},o.extend(o.Clock,o.Emitter),o.Clock.defaults={callback:o.noOp,frequency:1,lookAhead:"auto"},Object.defineProperty(o.Clock.prototype,"state",{get:function(){return this._state.getValueAtTime(this.now())}}),o.Clock.prototype.start=function(t,e){return t=this.toSeconds(t),this._state.getValueAtTime(t)!==o.State.Started&&this._state.add({state:o.State.Started,time:t,offset:e}),this},o.Clock.prototype.stop=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._state.setStateAtTime(o.State.Stopped,t),this},o.Clock.prototype.pause=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)===o.State.Started&&this._state.setStateAtTime(o.State.Paused,t),this},o.Clock.prototype._loop=function(){for(var t=this.now()+this.context.lookAhead+this.context.updateInterval+2*this.context.lag;t>this._nextTick&&this._state;){var e=this._state.getValueAtTime(this._nextTick);if(e!==this._lastState){this._lastState=e;var n=this._state.get(this._nextTick);e===o.State.Started?(this._nextTick=n.time,this.isUndef(n.offset)||(this.ticks=n.offset),this.emit("start",n.time,this.ticks)):e===o.State.Stopped?(this.ticks=0,this.emit("stop",n.time)):e===o.State.Paused&&this.emit("pause",n.time)}var i=this._nextTick;this.frequency&&(this._nextTick+=1/this.frequency.getValueAtTime(this._nextTick),e===o.State.Started&&(this.callback(i),this.ticks++))}},o.Clock.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},o.Clock.prototype.dispose=function(){o.Emitter.prototype.dispose.call(this),this.context.off("tick",this._boundLoop),this._writable("frequency"),this.frequency.dispose(),this.frequency=null,this._boundLoop=null,this._nextTick=1/0,this.callback=null,this._state.dispose(),this._state=null},o.Clock}.apply(e,i))||(t.exports=o)},function(t,e,i){"use strict";var n;void 0===(n=function(t){var n=i(1),e=i(29),r=i(6).noteToFreq;p5.MonoSynth=function(){e.call(this),this.oscillator=new p5.Oscillator,this.env=new p5.Envelope,this.env.setRange(1,0),this.env.setExp(!0),this.setADSR(.02,.25,.05,.35),this.oscillator.disconnect(),this.oscillator.connect(this.output),this.env.disconnect(),this.env.setInput(this.output.gain),this.oscillator.output.gain.value=1,this.oscillator.start(),this.connect(),n.soundArray.push(this)},p5.MonoSynth.prototype=Object.create(p5.AudioVoice.prototype),p5.MonoSynth.prototype.play=function(t,e,n,i){this.triggerAttack(t,e,~~n),this.triggerRelease(~~n+(i||.15))},p5.MonoSynth.prototype.triggerAttack=function(t,e,n){n=~~n;var i=r(t),o=e||.1;this.oscillator.freq(i,0,n),this.env.ramp(this.output.gain,n,o)},p5.MonoSynth.prototype.triggerRelease=function(t){t=t||0;this.env.ramp(this.output.gain,t,0)},p5.MonoSynth.prototype.setADSR=function(t,e,n,i){this.env.setADSR(t,e,n,i)},Object.defineProperties(p5.MonoSynth.prototype,{attack:{get:function(){return this.env.aTime},set:function(t){this.env.setADSR(t,this.env.dTime,this.env.sPercent,this.env.rTime)}},decay:{get:function(){return this.env.dTime},set:function(t){this.env.setADSR(this.env.aTime,t,this.env.sPercent,this.env.rTime)}},sustain:{get:function(){return this.env.sPercent},set:function(t){this.env.setADSR(this.env.aTime,this.env.dTime,t,this.env.rTime)}},release:{get:function(){return this.env.rTime},set:function(t){this.env.setADSR(this.env.aTime,this.env.dTime,this.env.sPercent,t)}}}),p5.MonoSynth.prototype.amp=function(t,e){var n=e||0;return void 0!==t&&this.oscillator.amp(t,n),this.oscillator.amp().value},p5.MonoSynth.prototype.connect=function(t){var e=t||n.input;this.output.connect(e.input?e.input:e)},p5.MonoSynth.prototype.disconnect=function(){this.output&&this.output.disconnect()},p5.MonoSynth.prototype.dispose=function(){e.prototype.dispose.apply(this),this.env&&this.env.dispose(),this.oscillator&&this.oscillator.dispose()}}.call(e,i,e,t))||(t.exports=n)},function(t,e,i){"use strict";var n;void 0===(n=function(){var n=i(1);return p5.AudioVoice=function(){this.ac=n.audiocontext,this.output=this.ac.createGain(),this.connect(),n.soundArray.push(this)},p5.AudioVoice.prototype.play=function(t,e,n,i){},p5.AudioVoice.prototype.triggerAttack=function(t,e,n){},p5.AudioVoice.prototype.triggerRelease=function(t){},p5.AudioVoice.prototype.amp=function(t,e){},p5.AudioVoice.prototype.connect=function(t){var e=t||n.input;this.output.connect(e.input?e.input:e)},p5.AudioVoice.prototype.disconnect=function(){this.output.disconnect()},p5.AudioVoice.prototype.dispose=function(){this.output&&(this.output.disconnect(),delete this.output)},p5.AudioVoice}.call(e,i,e,t))||(t.exports=n)},function(t,e,n){"use strict";var i;void 0===(i=function(t){var c=n(1),h=n(14),l=n(6).noteToFreq;p5.PolySynth=function(t,e){this.audiovoices=[],this.notes={},this._newest=0,this._oldest=0,this.maxVoices=e||8,this.AudioVoice=void 0===t?p5.MonoSynth:t,this._voicesInUse=new h(0),this.output=c.audiocontext.createGain(),this.connect(),this._allocateVoices(),c.soundArray.push(this)},p5.PolySynth.prototype._allocateVoices=function(){for(var t=0;t= this._length) {\n this._writeIndex = 0;\n } // For excessive frames, the buffer will be overwritten.\n\n\n this._framesAvailable += sourceLength;\n\n if (this._framesAvailable > this._length) {\n this._framesAvailable = this._length;\n }\n }\n /**\n * Pull data out of buffer and fill a given sequence of Float32Arrays.\n *\n * @param {array} arraySequence An array of Float32Arrays.\n */\n\n }, {\n key: "pull",\n value: function pull(arraySequence) {\n // The channel count of arraySequence and the length of each channel must\n // match with this buffer obejct.\n // If the FIFO is completely empty, do nothing.\n if (this._framesAvailable === 0) {\n return;\n }\n\n var destinationLength = arraySequence[0].length; // Transfer data from the internal buffer to the |arraySequence| storage.\n\n for (var i = 0; i < destinationLength; ++i) {\n var readIndex = (this._readIndex + i) % this._length;\n\n for (var channel = 0; channel < this._channelCount; ++channel) {\n arraySequence[channel][i] = this._channelData[channel][readIndex];\n }\n }\n\n this._readIndex += destinationLength;\n\n if (this._readIndex >= this._length) {\n this._readIndex = 0;\n }\n\n this._framesAvailable -= destinationLength;\n\n if (this._framesAvailable < 0) {\n this._framesAvailable = 0;\n }\n }\n }, {\n key: "framesAvailable",\n get: function get() {\n return this._framesAvailable;\n }\n }]);\n\n return RingBuffer;\n }()\n}["default"];\n\nvar RecorderProcessor =\n/*#__PURE__*/\nfunction (_AudioWorkletProcesso) {\n _inherits(RecorderProcessor, _AudioWorkletProcesso);\n\n function RecorderProcessor(options) {\n var _this;\n\n _classCallCheck(this, RecorderProcessor);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(RecorderProcessor).call(this));\n var processorOptions = options.processorOptions || {};\n _this.numOutputChannels = options.outputChannelCount || 2;\n _this.numInputChannels = processorOptions.numInputChannels || 2;\n _this.bufferSize = processorOptions.bufferSize || 1024;\n _this.recording = false;\n\n _this.clear();\n\n _this.port.onmessage = function (event) {\n var data = event.data;\n\n if (data.name === \'start\') {\n _this.record(data.duration);\n } else if (data.name === \'stop\') {\n _this.stop();\n }\n };\n\n return _this;\n }\n\n _createClass(RecorderProcessor, [{\n key: "process",\n value: function process(inputs) {\n if (!this.recording) {\n return true;\n } else if (this.sampleLimit && this.recordedSamples >= this.sampleLimit) {\n this.stop();\n return true;\n }\n\n var input = inputs[0];\n this.inputRingBuffer.push(input);\n\n if (this.inputRingBuffer.framesAvailable >= this.bufferSize) {\n this.inputRingBuffer.pull(this.inputRingBufferArraySequence);\n\n for (var channel = 0; channel < this.numOutputChannels; ++channel) {\n var inputChannelCopy = this.inputRingBufferArraySequence[channel].slice();\n\n if (channel === 0) {\n this.leftBuffers.push(inputChannelCopy);\n\n if (this.numInputChannels === 1) {\n this.rightBuffers.push(inputChannelCopy);\n }\n } else if (channel === 1 && this.numInputChannels > 1) {\n this.rightBuffers.push(inputChannelCopy);\n }\n }\n\n this.recordedSamples += this.bufferSize;\n }\n\n return true;\n }\n }, {\n key: "record",\n value: function record(duration) {\n if (duration) {\n this.sampleLimit = Math.round(duration * sampleRate);\n }\n\n this.recording = true;\n }\n }, {\n key: "stop",\n value: function stop() {\n this.recording = false;\n var buffers = this.getBuffers();\n var leftBuffer = buffers[0].buffer;\n var rightBuffer = buffers[1].buffer;\n this.port.postMessage({\n name: \'buffers\',\n leftBuffer: leftBuffer,\n rightBuffer: rightBuffer\n }, [leftBuffer, rightBuffer]);\n this.clear();\n }\n }, {\n key: "getBuffers",\n value: function getBuffers() {\n var buffers = [];\n buffers.push(this.mergeBuffers(this.leftBuffers));\n buffers.push(this.mergeBuffers(this.rightBuffers));\n return buffers;\n }\n }, {\n key: "mergeBuffers",\n value: function mergeBuffers(channelBuffer) {\n var result = new Float32Array(this.recordedSamples);\n var offset = 0;\n var lng = channelBuffer.length;\n\n for (var i = 0; i < lng; i++) {\n var buffer = channelBuffer[i];\n result.set(buffer, offset);\n offset += buffer.length;\n }\n\n return result;\n }\n }, {\n key: "clear",\n value: function clear() {\n var _this2 = this;\n\n this.leftBuffers = [];\n this.rightBuffers = [];\n this.inputRingBuffer = new RingBuffer(this.bufferSize, this.numInputChannels);\n this.inputRingBufferArraySequence = new Array(this.numInputChannels).fill(null).map(function () {\n return new Float32Array(_this2.bufferSize);\n });\n this.recordedSamples = 0;\n this.sampleLimit = null;\n }\n }]);\n\n return RecorderProcessor;\n}(_wrapNativeSuper(AudioWorkletProcessor));\n\nregisterProcessor(processorNames.recorderProcessor, RecorderProcessor);'},function(t,e,n){"use strict";n.r(e),e.default='function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// import dependencies via preval.require so that they\'re available as values at compile time\nvar processorNames = {\n "recorderProcessor": "recorder-processor",\n "soundFileProcessor": "sound-file-processor",\n "amplitudeProcessor": "amplitude-processor"\n};\nvar RingBuffer = {\n "default":\n /*#__PURE__*/\n function () {\n /**\n * @constructor\n * @param {number} length Buffer length in frames.\n * @param {number} channelCount Buffer channel count.\n */\n function RingBuffer(length, channelCount) {\n _classCallCheck(this, RingBuffer);\n\n this._readIndex = 0;\n this._writeIndex = 0;\n this._framesAvailable = 0;\n this._channelCount = channelCount;\n this._length = length;\n this._channelData = [];\n\n for (var i = 0; i < this._channelCount; ++i) {\n this._channelData[i] = new Float32Array(length);\n }\n }\n /**\n * Getter for Available frames in buffer.\n *\n * @return {number} Available frames in buffer.\n */\n\n\n _createClass(RingBuffer, [{\n key: "push",\n\n /**\n * Push a sequence of Float32Arrays to buffer.\n *\n * @param {array} arraySequence A sequence of Float32Arrays.\n */\n value: function push(arraySequence) {\n // The channel count of arraySequence and the length of each channel must\n // match with this buffer obejct.\n // Transfer data from the |arraySequence| storage to the internal buffer.\n var sourceLength = arraySequence[0].length;\n\n for (var i = 0; i < sourceLength; ++i) {\n var writeIndex = (this._writeIndex + i) % this._length;\n\n for (var channel = 0; channel < this._channelCount; ++channel) {\n this._channelData[channel][writeIndex] = arraySequence[channel][i];\n }\n }\n\n this._writeIndex += sourceLength;\n\n if (this._writeIndex >= this._length) {\n this._writeIndex = 0;\n } // For excessive frames, the buffer will be overwritten.\n\n\n this._framesAvailable += sourceLength;\n\n if (this._framesAvailable > this._length) {\n this._framesAvailable = this._length;\n }\n }\n /**\n * Pull data out of buffer and fill a given sequence of Float32Arrays.\n *\n * @param {array} arraySequence An array of Float32Arrays.\n */\n\n }, {\n key: "pull",\n value: function pull(arraySequence) {\n // The channel count of arraySequence and the length of each channel must\n // match with this buffer obejct.\n // If the FIFO is completely empty, do nothing.\n if (this._framesAvailable === 0) {\n return;\n }\n\n var destinationLength = arraySequence[0].length; // Transfer data from the internal buffer to the |arraySequence| storage.\n\n for (var i = 0; i < destinationLength; ++i) {\n var readIndex = (this._readIndex + i) % this._length;\n\n for (var channel = 0; channel < this._channelCount; ++channel) {\n arraySequence[channel][i] = this._channelData[channel][readIndex];\n }\n }\n\n this._readIndex += destinationLength;\n\n if (this._readIndex >= this._length) {\n this._readIndex = 0;\n }\n\n this._framesAvailable -= destinationLength;\n\n if (this._framesAvailable < 0) {\n this._framesAvailable = 0;\n }\n }\n }, {\n key: "framesAvailable",\n get: function get() {\n return this._framesAvailable;\n }\n }]);\n\n return RingBuffer;\n }()\n}["default"];\n\nvar SoundFileProcessor =\n/*#__PURE__*/\nfunction (_AudioWorkletProcesso) {\n _inherits(SoundFileProcessor, _AudioWorkletProcesso);\n\n function SoundFileProcessor(options) {\n var _this;\n\n _classCallCheck(this, SoundFileProcessor);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(SoundFileProcessor).call(this));\n var processorOptions = options.processorOptions || {};\n _this.bufferSize = processorOptions.bufferSize || 256;\n _this.inputRingBuffer = new RingBuffer(_this.bufferSize, 1);\n _this.inputRingBufferArraySequence = [new Float32Array(_this.bufferSize)];\n return _this;\n }\n\n _createClass(SoundFileProcessor, [{\n key: "process",\n value: function process(inputs) {\n var input = inputs[0]; // we only care about the first input channel, because that contains the position data\n\n this.inputRingBuffer.push([input[0]]);\n\n if (this.inputRingBuffer.framesAvailable >= this.bufferSize) {\n this.inputRingBuffer.pull(this.inputRingBufferArraySequence);\n var inputChannel = this.inputRingBufferArraySequence[0];\n var position = inputChannel[inputChannel.length - 1] || 0;\n this.port.postMessage({\n name: \'position\',\n position: position\n });\n }\n\n return true;\n }\n }]);\n\n return SoundFileProcessor;\n}(_wrapNativeSuper(AudioWorkletProcessor));\n\nregisterProcessor(processorNames.soundFileProcessor, SoundFileProcessor);'},function(t,e,n){"use strict";n.r(e),e.default='function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// import dependencies via preval.require so that they\'re available as values at compile time\nvar processorNames = {\n "recorderProcessor": "recorder-processor",\n "soundFileProcessor": "sound-file-processor",\n "amplitudeProcessor": "amplitude-processor"\n};\nvar RingBuffer = {\n "default":\n /*#__PURE__*/\n function () {\n /**\n * @constructor\n * @param {number} length Buffer length in frames.\n * @param {number} channelCount Buffer channel count.\n */\n function RingBuffer(length, channelCount) {\n _classCallCheck(this, RingBuffer);\n\n this._readIndex = 0;\n this._writeIndex = 0;\n this._framesAvailable = 0;\n this._channelCount = channelCount;\n this._length = length;\n this._channelData = [];\n\n for (var i = 0; i < this._channelCount; ++i) {\n this._channelData[i] = new Float32Array(length);\n }\n }\n /**\n * Getter for Available frames in buffer.\n *\n * @return {number} Available frames in buffer.\n */\n\n\n _createClass(RingBuffer, [{\n key: "push",\n\n /**\n * Push a sequence of Float32Arrays to buffer.\n *\n * @param {array} arraySequence A sequence of Float32Arrays.\n */\n value: function push(arraySequence) {\n // The channel count of arraySequence and the length of each channel must\n // match with this buffer obejct.\n // Transfer data from the |arraySequence| storage to the internal buffer.\n var sourceLength = arraySequence[0].length;\n\n for (var i = 0; i < sourceLength; ++i) {\n var writeIndex = (this._writeIndex + i) % this._length;\n\n for (var channel = 0; channel < this._channelCount; ++channel) {\n this._channelData[channel][writeIndex] = arraySequence[channel][i];\n }\n }\n\n this._writeIndex += sourceLength;\n\n if (this._writeIndex >= this._length) {\n this._writeIndex = 0;\n } // For excessive frames, the buffer will be overwritten.\n\n\n this._framesAvailable += sourceLength;\n\n if (this._framesAvailable > this._length) {\n this._framesAvailable = this._length;\n }\n }\n /**\n * Pull data out of buffer and fill a given sequence of Float32Arrays.\n *\n * @param {array} arraySequence An array of Float32Arrays.\n */\n\n }, {\n key: "pull",\n value: function pull(arraySequence) {\n // The channel count of arraySequence and the length of each channel must\n // match with this buffer obejct.\n // If the FIFO is completely empty, do nothing.\n if (this._framesAvailable === 0) {\n return;\n }\n\n var destinationLength = arraySequence[0].length; // Transfer data from the internal buffer to the |arraySequence| storage.\n\n for (var i = 0; i < destinationLength; ++i) {\n var readIndex = (this._readIndex + i) % this._length;\n\n for (var channel = 0; channel < this._channelCount; ++channel) {\n arraySequence[channel][i] = this._channelData[channel][readIndex];\n }\n }\n\n this._readIndex += destinationLength;\n\n if (this._readIndex >= this._length) {\n this._readIndex = 0;\n }\n\n this._framesAvailable -= destinationLength;\n\n if (this._framesAvailable < 0) {\n this._framesAvailable = 0;\n }\n }\n }, {\n key: "framesAvailable",\n get: function get() {\n return this._framesAvailable;\n }\n }]);\n\n return RingBuffer;\n }()\n}["default"];\n\nvar AmplitudeProcessor =\n/*#__PURE__*/\nfunction (_AudioWorkletProcesso) {\n _inherits(AmplitudeProcessor, _AudioWorkletProcesso);\n\n function AmplitudeProcessor(options) {\n var _this;\n\n _classCallCheck(this, AmplitudeProcessor);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AmplitudeProcessor).call(this));\n var processorOptions = options.processorOptions || {};\n _this.numOutputChannels = options.outputChannelCount || 1;\n _this.numInputChannels = processorOptions.numInputChannels || 2;\n _this.normalize = processorOptions.normalize || false;\n _this.smoothing = processorOptions.smoothing || 0;\n _this.bufferSize = processorOptions.bufferSize || 2048;\n _this.inputRingBuffer = new RingBuffer(_this.bufferSize, _this.numInputChannels);\n _this.outputRingBuffer = new RingBuffer(_this.bufferSize, _this.numOutputChannels);\n _this.inputRingBufferArraySequence = new Array(_this.numInputChannels).fill(null).map(function () {\n return new Float32Array(_this.bufferSize);\n });\n _this.stereoVol = [0, 0];\n _this.stereoVolNorm = [0, 0];\n _this.volMax = 0.001;\n\n _this.port.onmessage = function (event) {\n var data = event.data;\n\n if (data.name === \'toggleNormalize\') {\n _this.normalize = data.normalize;\n } else if (data.name === \'smoothing\') {\n _this.smoothing = Math.max(0, Math.min(1, data.smoothing));\n }\n };\n\n return _this;\n } // TO DO make this stereo / dependent on # of audio channels\n\n\n _createClass(AmplitudeProcessor, [{\n key: "process",\n value: function process(inputs, outputs) {\n var input = inputs[0];\n var output = outputs[0];\n var smoothing = this.smoothing;\n this.inputRingBuffer.push(input);\n\n if (this.inputRingBuffer.framesAvailable >= this.bufferSize) {\n this.inputRingBuffer.pull(this.inputRingBufferArraySequence);\n\n for (var channel = 0; channel < this.numInputChannels; ++channel) {\n var inputBuffer = this.inputRingBufferArraySequence[channel];\n var bufLength = inputBuffer.length;\n var sum = 0;\n\n for (var i = 0; i < bufLength; i++) {\n var x = inputBuffer[i];\n\n if (this.normalize) {\n sum += Math.max(Math.min(x / this.volMax, 1), -1) * Math.max(Math.min(x / this.volMax, 1), -1);\n } else {\n sum += x * x;\n }\n } // ... then take the square root of the sum.\n\n\n var rms = Math.sqrt(sum / bufLength);\n this.stereoVol[channel] = Math.max(rms, this.stereoVol[channel] * smoothing);\n this.volMax = Math.max(this.stereoVol[channel], this.volMax);\n } // calculate stero normalized volume and add volume from all channels together\n\n\n var volSum = 0;\n\n for (var index = 0; index < this.stereoVol.length; index++) {\n this.stereoVolNorm[index] = Math.max(Math.min(this.stereoVol[index] / this.volMax, 1), 0);\n volSum += this.stereoVol[index];\n } // volume is average of channels\n\n\n var volume = volSum / this.stereoVol.length; // normalized value\n\n var volNorm = Math.max(Math.min(volume / this.volMax, 1), 0);\n this.port.postMessage({\n name: \'amplitude\',\n volume: volume,\n volNorm: volNorm,\n stereoVol: this.stereoVol,\n stereoVolNorm: this.stereoVolNorm\n }); // pass input through to output\n\n this.outputRingBuffer.push(this.inputRingBufferArraySequence);\n } // pull 128 frames out of the ring buffer\n // if the ring buffer does not have enough frames, the output will be silent\n\n\n this.outputRingBuffer.pull(output);\n return true;\n }\n }]);\n\n return AmplitudeProcessor;\n}(_wrapNativeSuper(AudioWorkletProcessor));\n\nregisterProcessor(processorNames.amplitudeProcessor, AmplitudeProcessor);'},function(t,e,n){"use strict";var i;function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}void 0===(i=function(t){var a=n(1).audiocontext;void 0!==a.createStereoPanner?(p5.Panner=function(t,e){this.stereoPanner=this.input=a.createStereoPanner(),t.connect(this.stereoPanner),this.stereoPanner.connect(e)},p5.Panner.prototype.pan=function(t,e){var n=e||0,i=a.currentTime+n;this.stereoPanner.pan.linearRampToValueAtTime(t,i)},p5.Panner.prototype.inputChannels=function(){},p5.Panner.prototype.connect=function(t){this.stereoPanner.connect(t)},p5.Panner.prototype.disconnect=function(){this.stereoPanner&&this.stereoPanner.disconnect()}):(p5.Panner=function(t,e,n){this.input=a.createGain(),t.connect(this.input),this.left=a.createGain(),this.right=a.createGain(),this.left.channelInterpretation="discrete",this.right.channelInterpretation="discrete",1this.buffer.duration)throw"jump time out of range";if(e>this.buffer.duration-t)throw"end time out of range";var n=t||0,i=e||void 0;this.isPlaying()&&(this.stop(0),this.play(0,this.playbackRate,this.output.gain.value,n,i))},p5.SoundFile.prototype.channels=function(){return this.buffer.numberOfChannels},p5.SoundFile.prototype.sampleRate=function(){return this.buffer.sampleRate},p5.SoundFile.prototype.frames=function(){return this.buffer.length},p5.SoundFile.prototype.getPeaks=function(t){if(!this.buffer)throw"Cannot load peaks yet, buffer is not loaded";if(t=t||5*window.width,this.buffer){for(var e=this.buffer,n=e.length/t,i=~~(n/10)||1,o=e.numberOfChannels,r=new Float32Array(Math.round(t)),s=0;sr[u])&&(r[u]=h)}return r}},p5.SoundFile.prototype.reverseBuffer=function(){if(!this.buffer)throw"SoundFile is not done loading";var t=this._lastPos/p.sampleRate,e=this.getVolume();this.setVolume(0,.001);for(var n=this.buffer.numberOfChannels,i=0;ie){var r=t[o],s=new c(r,o);n[o]=s,o+=6e3}o++}return n}function m(t){if(isFinite(t)&&0!==t){for(;t<90;)t*=2;for(;180t[r].hi&&r++,o[r]=void 0!==o[r]?(o[r]+n[s])/2:n[s]}return o},p5.FFT.prototype.getOctaveBands=function(t,e){t=t||3;var n=[],i={lo:(e=e||15.625)/Math.pow(2,1/(2*t)),ctr:e,hi:e*Math.pow(2,1/(2*t))};n.push(i);for(var o=c.audiocontext.sampleRate/2;i.hi=this._maxDelay)throw new Error("Delay Time exceeds maximum delay time of "+this._maxDelay+" second.");t.connect(this.input),this.leftDelay.delayTime.setValueAtTime(r,this.ac.currentTime),this.rightDelay.delayTime.setValueAtTime(r,this.ac.currentTime),this._leftGain.gain.value=o,this._rightGain.gain.value=o,i&&(this._leftFilter.freq(i),this._rightFilter.freq(i))},p5.Delay.prototype.delayTime=function(t){"number"!=typeof t?(t.connect(this.leftDelay.delayTime),t.connect(this.rightDelay.delayTime)):(this.leftDelay.delayTime.cancelScheduledValues(this.ac.currentTime),this.rightDelay.delayTime.cancelScheduledValues(this.ac.currentTime),this.leftDelay.delayTime.linearRampToValueAtTime(t,this.ac.currentTime),this.rightDelay.delayTime.linearRampToValueAtTime(t,this.ac.currentTime))},p5.Delay.prototype.feedback=function(t){if(t&&"number"!=typeof t)t.connect(this._leftGain.gain),t.connect(this._rightGain.gain);else{if(1<=t)throw new Error("Feedback value will force a positive feedback loop.");"number"==typeof t&&(this._leftGain.gain.value=t,this._rightGain.gain.value=t)}return this._leftGain.gain.value},p5.Delay.prototype.filter=function(t,e){this._leftFilter.set(t,e),this._rightFilter.set(t,e)},p5.Delay.prototype.setType=function(t){switch(1===t&&(t="pingPong"),this._split.disconnect(),this._leftFilter.disconnect(),this._rightFilter.disconnect(),this._split.connect(this.leftDelay,0),this._split.connect(this.rightDelay,1),t){case"pingPong":this._rightFilter.setType(this._leftFilter.biquad.type),this._leftFilter.output.connect(this._merge,0,0),this._rightFilter.output.connect(this._merge,0,1),this._leftFilter.output.connect(this.rightDelay),this._rightFilter.output.connect(this.leftDelay);break;default:this._leftFilter.output.connect(this._merge,0,0),this._rightFilter.output.connect(this._merge,0,1),this._leftFilter.output.connect(this.leftDelay),this._rightFilter.output.connect(this.rightDelay)}},p5.Delay.prototype.dispose=function(){n.prototype.dispose.apply(this),this._split.disconnect(),this._leftFilter.dispose(),this._rightFilter.dispose(),this._merge.disconnect(),this._leftGain.disconnect(),this._rightGain.disconnect(),this.leftDelay.disconnect(),this.rightDelay.disconnect(),this._split=void 0,this._leftFilter=void 0,this._rightFilter=void 0,this._merge=void 0,this._leftGain=void 0,this._rightGain=void 0,this.leftDelay=void 0,this.rightDelay=void 0}}.call(e,i,e,t))||(t.exports=n)},function(t,e,n){"use strict";var i;void 0===(i=function(t){var p=n(11),e=n(4);p5.Reverb=function(){e.call(this),this._initConvolverNode(),this.input.gain.value=.5,this._seconds=3,this._decay=2,this._reverse=!1,this._buildImpulse()},p5.Reverb.prototype=Object.create(e.prototype),p5.Reverb.prototype._initConvolverNode=function(){this.convolverNode=this.ac.createConvolver(),this.input.connect(this.convolverNode),this.convolverNode.connect(this.wet)},p5.Reverb.prototype._teardownConvolverNode=function(){this.convolverNode&&(this.convolverNode.disconnect(),delete this.convolverNode)},p5.Reverb.prototype._setBuffer=function(t){this._teardownConvolverNode(),this._initConvolverNode(),this.convolverNode.buffer=t},p5.Reverb.prototype.process=function(t,e,n,i){t.connect(this.input);var o=!1;e&&(this._seconds=e,o=!0),n&&(this._decay=n),i&&(this._reverse=i),o&&this._buildImpulse()},p5.Reverb.prototype.set=function(t,e,n){var i=!1;t&&(this._seconds=t,i=!0),e&&(this._decay=e),n&&(this._reverse=n),i&&this._buildImpulse()},p5.Reverb.prototype._buildImpulse=function(){var t,e,n=this.ac.sampleRate,i=n*this._seconds,o=this._decay,r=this.ac.createBuffer(2,i,n),s=r.getChannelData(0),a=r.getChannelData(1);for(e=0;e=t.parts.length?(t.scoreStep=0,t.onended()):(t.scoreStep=0,t.parts[t.currentPart-1].stop(),t.parts[t.currentPart].start())}p5.prototype.setBPM=function(t,e){for(var n in o=t,i.parts)i.parts[n]&&i.parts[n].setBPM(t,e)},p5.Phrase=function(t,e,n){this.phraseStep=0,this.name=t,this.callback=e,this.sequence=n},p5.Part=function(t,e){this.length=t||0,this.partStep=0,this.phrases=[],this.isPlaying=!1,this.noLoop(),this.tatums=e||.0625,this.metro=new p5.Metro,this.metro._init(),this.metro.beatLength(this.tatums),this.metro.setBPM(o),i.parts.push(this),this.callback=function(){}},p5.Part.prototype.setBPM=function(t,e){this.metro.setBPM(t,e)},p5.Part.prototype.getBPM=function(){return this.metro.getBPM()},p5.Part.prototype.start=function(t){if(!this.isPlaying){this.isPlaying=!0,this.metro.resetSync(this);var e=t||0;this.metro.start(e)}},p5.Part.prototype.loop=function(t){this.looping=!0,this.onended=function(){this.partStep=0};var e=t||0;this.start(e)},p5.Part.prototype.noLoop=function(){this.looping=!1,this.onended=function(){this.stop()}},p5.Part.prototype.stop=function(t){this.partStep=0,this.pause(t)},p5.Part.prototype.pause=function(t){this.isPlaying=!1;var e=t||0;this.metro.stop(e)},p5.Part.prototype.addPhrase=function(t,e,n){var i;if(3===arguments.length)i=new p5.Phrase(t,e,n);else{if(!(t instanceof p5.Phrase))throw"invalid input. addPhrase accepts name, callback, array or a p5.Phrase";i=t}this.phrases.push(i),i.sequence.length>this.length&&(this.length=i.sequence.length)},p5.Part.prototype.removePhrase=function(t){for(var e in this.phrases)this.phrases[e].name===t&&this.phrases.splice(e,1)},p5.Part.prototype.getPhrase=function(t){for(var e in this.phrases)if(this.phrases[e].name===t)return this.phrases[e]},p5.Part.prototype.replaceSequence=function(t,e){for(var n in this.phrases)this.phrases[n].name===t&&(this.phrases[n].sequence=e)},p5.Part.prototype.incrementStep=function(t){this.partStepthis.cutoff&&e>this.threshold&&0<%=item.name%><% if (it define('text!tpl/class.html',[],function () { return '\n<% if (typeof constructor !== \'undefined\') { %>\n
        \n <%=constructor%>\n
        \n<% } %>\n\n<% let fields = _.filter(things, function(item) { return item.itemtype === \'property\' && item.access !== \'private\' }); %>\n<% if (fields.length > 0) { %>\n

        Fields

        \n \n<% } %>\n\n<% let methods = _.filter(things, function(item) { return item.itemtype === \'method\' && item.access !== \'private\' }); %>\n<% if (methods.length > 0) { %>\n

        Methods

        \n \n<% } %>\n';}); -define('text!tpl/itemEnd.html',[],function () { return '\n

        \n\n
        \n<% if (item.file && item.line) { %>\nNotice any errors or typos? Please let us know. Please feel free to edit <%= item.file %> and issue a pull request!\n<% } %>\n
        \n\ncreative commons logo\n

        \n';}); +define('text!tpl/itemEnd.html',[],function () { return '\n

        \n\n
        \n<% if (item.file && item.line) { %>\nNotice any errors or typos? Please let us know. Please feel free to edit <%= item.file %> and issue a pull request!\n<% } %>\n
        \n\ncreative commons logo\n

        \n';}); // Copyright (C) 2006 Google Inc. // diff --git a/src/assets/js/render.js b/src/assets/js/render.js index 15920772ce..dee7680335 100644 --- a/src/assets/js/render.js +++ b/src/assets/js/render.js @@ -184,8 +184,8 @@ var renderCode = function(exampleName) { var s = function(p) { var fxns = [ 'setup', 'draw', 'preload', 'mousePressed', 'mouseReleased', - 'mouseMoved', 'mouseDragged', 'mouseClicked', 'mouseWheel', - 'touchStarted', 'touchMoved', 'touchEnded', + 'mouseMoved', 'mouseDragged', 'mouseClicked', 'doubleClicked', + 'mouseWheel', 'touchStarted', 'touchMoved', 'touchEnded', 'keyPressed', 'keyReleased', 'keyTyped' ]; var _found = []; diff --git a/src/data/data.yml b/src/data/data.yml index e354d417b0..c35e7cb297 100644 --- a/src/data/data.yml +++ b/src/data/data.yml @@ -1,2 +1,2 @@ title: p5.js -version: 1.3.1 +version: 1.4.2 diff --git a/src/data/en.yml b/src/data/en.yml index d08a89df2c..d8aab10cd5 100644 --- a/src/data/en.yml +++ b/src/data/en.yml @@ -9,6 +9,7 @@ Start: Get Started Reference: Reference Libraries: Libraries Learn: Learn +Teach: Teach Examples: Examples Books: Books Community: Community @@ -17,10 +18,13 @@ Forum: Forum Showcase: Showcase footerxh1: Credits footer1: 'p5.js is currently led by ' -footer2: ' and was created by ' -footer3: '. p5.js is developed by a community of collaborators, with support from the ' -footer4: ' and ' -footer5: 'Identity and graphic design by ' +footer3: ' and was created by ' +footer4: '. p5.js is developed by a community of collaborators, with support from the ' +footer5: ' and ' +footer6: '. Identity and graphic design by ' +footer7: '. ' +footer8: 'Info' +footer9: '.' tagline1: Processing fun times JavaScript quirkiness tagline2: Processing simplicity times JavaScript flexibility tagline3: Processing intuition times JavaScript power @@ -74,9 +78,8 @@ home: sketch_info: Hunminjeongeum2020 created by Seonghyeon Kim copyright: copyright-title: Copyright Information - copyright1: >- - The p5.js library is free software; you can redistribute it and/or modify it - under the terms of the + copyright1: 'The p5.js library is free software; you can redistribute it and/or modify it + under the terms of the ' copyright2: ' as published by the Free Software Foundation, version 2.1.' copyright3: 'The Reference for the language is under a ' copyright4: ' license which makes it possible to reuse this content for non-commercial purposes if it is credited.' @@ -90,9 +93,9 @@ get started: get-started4: ', you can open the web editor and can scroll down to ' get-started5: Your First Sketch get-started6: >- - . If you would like to work on the the desktop version of p5.js you can + . If you would like to work on the desktop version of p5.js you can scroll down to - get-started7: downloading instructions, + get-started7: downloading instructions get-started-button: 'Copy' settingUp-title: Setting up p5.js with an editor on your own computer download-title: Downloading a copy of the p5.js library @@ -254,10 +257,10 @@ download: supported-browsers: 'Supported browsers ' support-title: Support p5.js! support-options: Support Options - support-1: >- - We need your help! p5.js is free, open-source software. We want to make our community as open + support-1: + 'We need your help! p5.js is free, open-source software. We want to make our community as open and inclusive as possible. You can support this work by making a donation to - the + the ' support-2: >- , the organization that supports p5.js. Your donation supports software development for p5.js, education resources @@ -327,7 +330,7 @@ learn: teach-title2: Teach learn1: >- These tutorials provide more in-depth or step-by-step overviews of - particular topics. Check out the + particular topics. Check out the learn2: examples page learn3: to explore short demonstrations of various p5.js topics. introduction-to-p5js-title: Introduction to p5.js @@ -425,7 +428,7 @@ learn: writing-a-tutorial-how-prepare-4: '. As is shown in this file, it must contain a header as shown below:' writing-a-tutorial-how-prepare-5: >- The folder containing your tutorial will be placed in the 'tutorials' folder - of the p5js site. The file called index.hbs is the + of the p5js site. The file called index.hbs is the writing-a-tutorial-how-prepare-6: 'p5.js tutorials landing page,' writing-a-tutorial-how-prepare-7: ' and the test-tutorial.hbs file is the test tutorial.' writing-a-tutorial-how-prepare-8: 'All content should go in the:' @@ -460,7 +463,7 @@ learn: writing-a-tutorial-iframe-1: >- An iframe is like creating a window through which you can explore another page, sandboxed from the rest of your page. In this case it will be a window - to the index.html containing your p5.js sketch. + to the index.html containing your p5.js sketch. writing-a-tutorial-iframe-2: >- Put your p5 sketches in the /src/assets/learn folder of the site, in a folder labelled with the name of your sketch as shown in the screenshot. @@ -468,7 +471,7 @@ learn: stored. writing-a-tutorial-iframe-3: >- In the subfolders containing your p5 examples there should be a sketch.js - file and the embed.html file for the sketch. + file and the embed.html file for the sketch. writing-a-tutorial-iframe-4: >- Make sure your embed.html file has the correct paths to the p5 libraries of the site. If your file structure is the same as above, the path to the p5.js @@ -476,10 +479,10 @@ learn: writing-a-tutorial-iframe-5: >- You can then embed the p5js index files as iframes in the .hbs file that contains your tutorial content. The embed code for the iframe would then - be: + be: writing-a-tutorial-iframe-6: >- Styling for the iframe (this could directly into the post or in a - stylesheet): + stylesheet): writing-a-tutorial-iframe-7: 'Here you can find the naked sketch running: ' writing-a-tutorial-iframe-8: 'And here it is embedded in the p5 site using the code below: ' writing-a-tutorial-iframe-9: >- @@ -501,7 +504,7 @@ learn: color-description1: >- This tutorial is from the book Learning Processing by Daniel Shiffman, published by Morgan Kaufmann, © 2008 Elsevier Inc. All rights reserved. It - was ported to P5 by Kelly Chang. If you find any errors or have comments, + was ported to P5 by Kelly Chang. If you find any errors or have comments, color-description2: ' please let us know.' color-p1x1: >- In the digital world, when we want to talk about a color, precision is @@ -515,16 +518,16 @@ learn: color-p2x3: ' functions before something is drawn, we can set the color of any given shape. There is also the function ' color-p2x4: ', which sets a background color for the window. Here''s an example.' color-code1: |- - background(255); // Setting the background to white - stroke(0); // Setting the outline (stroke) to black - fill(150); // Setting the interior of a shape (fill) to grey + background(255); // Setting the background to white + stroke(0); // Setting the outline (stroke) to black + fill(150); // Setting the interior of a shape (fill) to grey rect(50,50,75,100); // Drawing the rectangle color-p3x1: 'Stroke or fill can be eliminated with the functions: ' color-p3x2: ' and ' color-p3x3: >- . Our instinct might be to say "stroke(0)" for no outline, however, it is important to remember that 0 is not "nothing", but rather denotes the color - black. Also, remember not to eliminate both—with + black. Also, remember not to eliminate both—with color-p3x4: ' and ' color-p3x5: ', nothing will appear!' color-p4x1: >- @@ -579,7 +582,7 @@ learn: RGB color with ranges of 0 to 255 is not the only way you can handle color in p5.js, in fact, it allows us to think about color any way we like. For example, you might prefer to think of color as ranging from 0 to 100 (like a - percentage). You can do this by specifying a custom + percentage). You can do this by specifying a custom color-custom-ranges-p2x1: >- The above function says: "OK, we want to think about color in terms of red, green, and blue. The range of RGB values will be from 0 to 100." @@ -667,11 +670,11 @@ learn: coordinate-system-simple-shapes-p6x1: >- A second way to draw a rectangle involves specifying the centerpoint, along with width and height. If we prefer this method, we first indicate that we - want to use the + want to use the coordinate-system-simple-shapes-p6x2: ' mode before the instruction for the rectangle itself. Note that p5 is case-sensitive.' coordinate-system-simple-shapes-p7x1: >- Finally, we can also draw a rectangle with two points (the top left corner - and the bottom right corner). The mode here is + and the bottom right corner). The mode here is coordinate-system-simple-shapes-p7x2: . Note this example gives the same result on screen as the example above. coordinate-system-simple-shapes-p8x1: 'Once we have become comfortable with the concept of drawing a rectangle, an ' coordinate-system-simple-shapes-p8x2: ' is a snap. In fact, it is identical to ' @@ -684,7 +687,6 @@ learn: canvas dimensions of 200 by 200. Note the use of the createCanvas() function to specify the width and height of the canvas. teach-desc: 'Teach a p5 workshop or class, or create teaching materials!' -test-tutorial: null libraries: Libraries: Libraries core-libraries: Core Libraries @@ -706,11 +708,15 @@ libraries: With p5.bots you can interact with your Arduino (or other microprocessor) from within the browser. Use sensor data to drive a sketch; use a sketch to drive LEDs, motors, and more! + p5.bezier: A library helps draw high-degree Bézier curves with unlimited points. p5.clickable: 'Event driven, easy-to-use button library for p5.js.' p5.cmyk.js: CMYK ColorSpace p5.collide2D: >- p5.collide2D provides tools for calculating collision detection for 2D geometry with p5.js. + CO2Budget.js: >- + This library opens up the idea of the CO2-Countdown to creative communities of + coders, designers and artists associated with p5*js and JavaScript. p5.createloop: Create animation loops with noise and GIF exports in one line of code. p5.dimensions: >- p5.dimensions extends p5.js' vector functions to work in any number of @@ -727,11 +733,15 @@ libraries: p5.geolocation: >- p5.geolocation provides techniques for acquiring, watching, calculating, and geofencing user locations for p5.js. + p5.glitch: p5.glitch extends p5.js for glitching images and binary files. p5.gibber: p5.gibber provides rapid music sequencing and audio synthesis capabilities. grafica.js: >- grafica.js lets you add simple but highly configurable 2D plots to your p5.js sketches. p5.gui: p5.gui generates a graphical user interface for your p5.js sketches. + p5.j5: >- + The full Johnny-Five.io Nodebots/robotics library for Arduino and other + microcontrollers made to work directly in browser with WebSerial or WebUSB. p5.localmessage: >- p5.localmessage provides a simple interface to send messages locally from one sketch to another for easy multi-window sketching! @@ -742,6 +752,10 @@ libraries: ml5.js: >- ml5.js builds on Tensorflow.js and provides friendly access to machine learning algorithms and models in the browser. + numero: A friendly and intuitive math library for p5.js. + pdl.library: >- + A set of functions and classes to create interactive diagrams for teaching + and learning physics. p5.play: >- p5.play provides sprites, animations, input and collision functions for games and gamelike applications. @@ -749,6 +763,14 @@ libraries: The Particle and Fountain objects can be used to create data-driven effects that are defined through user structures or JSON input and user-draw functions. + p5.party: >- + p5.party is a library for easily creating networked multiuser games, apps, + and sketches. + p5.Polar: >- + p5.Polar provides mathematical abstractions making it easy to create + create beautiful, kaleidoscopic, radial patterns. + react-p5: This library lets you integrate p5 Sketches into your React App. + p5.recorder: Record sketch canvas and audio. p5.Riso: >- p5.Riso is a library for generating files suitable for Risograph printing. It helps turn your sketches into multi-color prints. @@ -763,13 +785,17 @@ libraries: p5.scribble: >- Draw 2D primitives in a sketchy look. Created by Janneck Wullschleger, based on a port of the original Processing library - p5.serial: >- - p5.serial enables serial communication between devices that support serial + p5.serialport: >- + p5.serialport enables serial communication between devices that support serial (RS-232) and p5 sketches running in the browser. Shape5: >- Shape5 is a 2D primative library for elementary students who are learning to code for the first time. p5.shape.js: A library built to add more simple shapes to the p5.js framework. + P5.slides: p5.slides is a presentation platform written in p5.js. + p5snap: >- + p5snap is a command-line interface that creates and saves snapshots + of a p5 sketch on an interval. p5.speech: >- p5.speech provides simple, clear access to the Web Speech and Speech Recognition APIs, allowing for the easy creation of sketches that can talk @@ -778,19 +804,82 @@ libraries: p5.tiledmap: >- p5.tiledmap provides drawing and helper functions to include maps in your sketches. + TiledPlay: >- + A small library to bridge the functionality of p5.js, p5.play.js and + p5.tiled.js to easily create 2D platformer games using javascript. p5.touchgui: A multi-touch and mouse GUI Library for p5.js. tramontana: >- Tramontana is a platform for easily use many devices (iOS, Android, tramontana Board, ...) to create interactive environments, interactive spaces or just prototype experiences at scale and in space. + TurtleGFX: >- + TurtleGFX allows to code with Turtle Graphics in JavaScript. + Great for education and creative coding. + p5.tween: >- + With p5.tween you can create easily animations as tween for your objects and + shapes. vida: >- Vida is a simple library that adds camera (or video) based motion detection and blob tracking functionality to p5js. p5.voronoi: >- p5.voronoi provides a set of tools to draw and utilize voronoi diagrams in your p5.js sketches. + p5.wasm: >- + p5.wasm is an addon library written in Rust and compiled to WebAssembly that + implements common functions found in p5.js. p5.xr: A library for creating VR and AR sketches with p5. p5.3D: 3D Text and Images in WebGL. + WEBMIDI.js: Easily send and receive MIDI messages from p5. + p5.buttons: A library that aims to de-complicate scripting buttons. + p5.button: >- + Small one function library to design and render simple or styled buttons + directly in p5.js canvas. + p5.math.js: >- + The mathematical operations of JavaScript have been converted into simple + human language so that they can understand really quickly. + p5LiveMedia: Real time audio, video, canvas, and data sharing. + P5.Create: >- + P5.Create is a library which provides save, animation, collision and tag + functions designed for efficient game creation. + p5.quadrille.js: p5.js quadrille library. + p5.animS: p5.animS animates p5.js shapes by rendering their drawing processes. + I_AM_UI: A UserInterface library. + simple.js: Helper functions and defaults for young and new coders. + p5.timer: >- + This library performs asynchronous timing functions like countdowns, + one-shot timers, % time elapsed and encapsulates the millis() function and + other related calculations that often clog up your code. + c2.js: >- + c2.js is a JavaScript library for creative coding based on computational + geometry, physics simulation, evolutionary algorithm and other modules. + Concave Hull: Calculate a Concave Hull from a set of points in 2D space. + p5.joystick: Connect and play with physical joysticks + p5.webserial: >- + A library for interacting with Serial devices from within the browser, + based on Web Serial API (available on Chrome and Edge). + p5.pattern: A pattern drawing library for p5.js. + p5.jacdac: Plug-and-play micro-controllers for p5js + p5.PatGrad: p5.PatGrad let's you add patterns and gradients to your sketches. + p5.projection: Easy projection mapping of sketches onto real world surfaces + p5.Framebuffer: >- + A fast offscreen canvas for WebGL, giving access to depth data for fog and + blur effects. + p5.capture: >- + p5.capture provides a simple GUI to easily record p5.js animations and output + video files in various formats (webm, gif, mp4, png, jpg, and webp). + p5.input: Adds more key support for p5.js. + p5.web-serial: >- + A p5.js library for using the Web Serial API to access devices like Arduino, + no setup required. + p5.wasm.core: A web assembly core for p5.js. + p5.videorecorder: Record your canvas as a video file with audio. + p5.mapper: >- + p5.mapper is a projection mapping library for p5.js. This library makes it + easy to code and keystone interactive, algorithmic sketches. + p5.teach: >- + A beginner friendly math animation library for p5.js. Created with mentorship + from Nick McIntyre and Jithin KS. + p5.fab: p5.fab controls digital fabrication machines from p5.js. using-a-library-title: Using a library using-a-library1: >- A p5.js library can be any JavaScript code that extends or adds to the p5.js @@ -1125,9 +1214,9 @@ books: book-6-pages: '298 pages. ' book-6-type: Hardcover. book-6-description: >- - Using p5.js, this book introduces and demonstrates the reflexive practice - of aesthetic programming, engaging with learning to program as a way to - understand and question existing technological objects and paradigms, + Using p5.js, this book introduces and demonstrates the reflexive practice + of aesthetic programming, engaging with learning to program as a way to + understand and question existing technological objects and paradigms, and to explore the potential for reprogramming wider eco-socio-technical systems. book-6-order-a: Download the PDF (FREE) book-6-order-b: Order from Barnes & Noble @@ -1170,8 +1259,8 @@ showcase: community. During Summer 2019, we asked a few creators to share more about how they've used p5.js through different projects and pieces. showcase-intro4: >- - The Summer 2020 Showcase is now open for submissions, nominate someone's - p5.js work or your own to be featured here! + The Summer 2021 Showcase: The Love Ethic is now open for submissions, nominate someone's + p5.js work or your own to be featured here! If Google is not available in your region, please email chankati@usc.edu to submit! nominate-project: Nominate a Project showcase-featuring: Featuring project-tag-art: Art @@ -1470,10 +1559,10 @@ teach: teach-title2: Teach teach-intro1: >- Every teaching has its own unique goals, messages, conditions, and - environments. + environments. teach-intro2: >- By documenting and sharing p5 workshops, classes, and materials, we hope to - better connect the p5.js learner and educator communities around the world. + better connect the p5.js learner and educator communities around the world. teach-intro3: Share or recommend teach-intro4: 'your own teaching experiences, too!' teach-heading: p5 Teaching Resources @@ -1521,18 +1610,19 @@ teach: teach-case1-content3: Advanced teach-case1-content4: >- To introduce a new public to programming through fun and compelling - examples. + examples. teach-case1-content5: >- Method: in-person workshop, 1 hour per session, with different participant each times. The students were using (Ubuntu) machines with the p5.js web editor. I was teaching using a video projector as well as a board. teach-case1-content5-1: >- Materials: The exercises I gave where accessible through p5.js web-editor - links available in + links available in teach-case2-title: >- Making The Thing that Makes the Thing: Exploring Generative Art & Design with p5.js teach-case2-lead-name: Priti Pandurangan & Ajith Ranka + teach-case2-image-alt: A group of participants collaborating to create some designs using the p5.js web editor on their laptops. teach-case2-content1: 'National Institute of Design, Bangalore' teach-case2-content1-1: '2020 February 8, 2:30-4:00 PM' teach-case2-content2: >- @@ -1541,7 +1631,7 @@ teach: teach-case2-content3: 'Priti: Intermediate & Ajith: Advanced' teach-case2-content4: >- To explore generative art & design and recreate some classical works - with p5.js. + with p5.js. teach-case2-content5: 'Methods: In-person, collaborative, hands-on workshop.' teach-case2-content5-1: '' teach-case2-content5-2: 'Course page ' @@ -1569,6 +1659,7 @@ teach: teach-case3-content5-3: More photos teach-case4-title: Introduction to Creative Programming with p5.js teach-case4-lead-name: Aarón Montoya-Moraga + teach-case4-image-alt: A group of 20 people sitting on a large shared table with their laptops looking at a projected screen. teach-case4-speech: 'p5.js is my happy place ' teach-case4-content1: ' PlusCode Media Arts Festival, Buenos Aires, Argentina & Virtual-Online ' teach-case4-content1-1: ' 2018 November 14, 3 hours' @@ -1606,6 +1697,7 @@ teach: teach-case5-content5-3: Introduction to Generative Drawing Booklet PDF teach-case6-title: 'Open Lecture, Creative Coding: 2020' teach-case6-lead-name: Shunsuke Takawo + teach-case6-image-alt: A table on which there is a laptop, some sheets of papers, colorful pens and two automatic machines drawing something with a pen on a sheet. teach-case6-speech: >- I love p5.js because it's so easy to read and write code in p5.js. Coding in your everyday life! @@ -1634,6 +1726,7 @@ teach: teach-case7-content5-1: Syllabus & Material teach-case8-title: Generative Typography teach-case8-lead-name: Dae In Chung + teach-case8-image-alt: A image with black background displaying the letter 'b' in 5 different styles along with a menu with various styling options to choose. teach-case8-content1: ' Baltimore, Maryland, USA & Virtual-Online ' teach-case8-content1-1: ' 2019 January 21 - May 08, every Wednesday, 4-10 PM' teach-case8-content2: 14 undergrads and grad students who had little to no experience in coding. @@ -1644,6 +1737,7 @@ teach: teach-case8-content5-2: Works of participants teach-case9-title: Machine Learning for the Web teach-case9-lead-name: Yining Shi + teach-case9-image-alt: A group of 16 people sitting around tables with their laptops, mobile phones and some other accessories, facing towards a large television screen. teach-case9-content1: ' ITP, NYU, 370 Jay St, Brooklyn, NY 11201, USA' teach-case9-content1-1: '2019 March 09 - October 12, every Tuesday, 6:30-9:00 PM' teach-case9-content2: >- @@ -1656,7 +1750,7 @@ teach: ml5.js and p5.js. teach-case9-content5: >- This class is a mix of lectures, coding sessions, group discussions, and - presentations. I used + presentations. I used teach-case9-content5-1: GitHub teach-case9-content5-2: ' to host class syllabus and all the coding materials, Google Slides for lectures and p5.js Web Editor for live coding sessions. Every week, there were one-on-one office hours to talk about any difficulties of coming up with an idea for the homework or any coding changes.' teach-case9-content5-3: 'Methods: online/offline lectures and critiques.' @@ -1671,11 +1765,12 @@ teach: teach-case10-content5: >- p5.js source code (for the introductory project), JavaScript source code (illustrating some basic JavaScript functionalities), accompanying slides in - .pdf format, all hosted publicly on GitHub. + .pdf format, all hosted publicly on GitHub. teach-case10-content5-1: Overview teach-case10-content5-2: ' of the workshop and its contents (including all links to the material hosted on GitHub) on my academic webpage.' teach-case11-title: Digital Weaving & Physical Computing Workshop Series teach-case11-lead-name: Qianqian Ye & Evelyn Masso + teach-case11-image-alt: This image is divided in two parts. The left part shows a group of 15 women sitting on chairs with their laptops and looking at a presentor who is explaining a code on a projected screen. The right part of the image shows a person learning weaving using a physical pattern and a weaving tool. teach-case11-content1: ' Womens Center for Creative Work (WCCW), Los Angeles, CA, US' teach-case11-content1-1: ' 2019 October 19 - November 02, every Saturday 3-6 PM' teach-case11-content2: '15 women and non-binary artists, designer, makers, programers. ' @@ -1695,6 +1790,7 @@ teach: teach-case11-content5-5: ' on WCCW website.' teach-case12-title: Signing Coders teach-case12-lead-name: Taeyoon Choi + teach-case12-image-alt: Two volunteers explaining concepts using a white board and a screen to a bunch of deaf and hard of hearing students, each student facing a computer screen. teach-case12-speech: >- I'm working on a new series of coding class for Disabled students in South Korea. I'm researching about the pedagogy and translation. I plan to hold diff --git a/src/data/es.yml b/src/data/es.yml index 9a2d62cc10..3d244cc5c5 100644 --- a/src/data/es.yml +++ b/src/data/es.yml @@ -9,6 +9,7 @@ Start: Empezar Reference: Referencia Libraries: Bibliotecas Learn: Aprender +Teach: Enseñar Examples: Ejemplos Books: Libros Community: Comunidad @@ -16,11 +17,14 @@ Contribute: Contribuir Forum: Foro Showcase: Showcase footerxh1: Créditos -footer1: 'p5.js actualmente está dirigido por ' -footer2: y fue creado por -footer3: ' p5.js es desarrollado por una comunidad de colaboradores, con apoyo de ' -footer4: ' y ' -footer5: 'Identidad y diseño gráfico por ' +footer1: 'p5.js está actualmente dirigido por ' +footer3: ' y fue creado por ' +footer4: '. p5.js es desarrollado por una comunidad de colaboradores, con el apoyo de ' +footer5: ' y ' +footer6: '. Identidad y diseño gráfico por ' +footer7: '. ' +footer8: Info +footer9: . tagline1: la diversión de Processing x la excentricidad de JavaScript tagline2: la simplicidad de Processing x la flexibilidad de JavaScript tagline3: la intuición de Processing x el poder de JavaScript @@ -101,11 +105,13 @@ get started: download1: La manera más simple de empezar es usando el ejemplo en blanco incluido en download2: p5.js completo download3: disponible en el sitio. - download8: 'After download, you need to set up a local server. See instructions ' - download9: here + download8: >- + Después de la descarga, es necesario configurar un servidor local. Mira las + instrucciones + download9: aquí download10: >- - . Run your local server within the downloaded folder and on your browser, go - to + . Ejecuta tu servidor local dentro de la carpeta descargada y en tu + navegador, ves a download11: 'http://localhost:{your-port-num}/empty-example' download4: >- Si revisas el archivo index.html, te darás cuenta que tiene un enlace al @@ -142,15 +148,15 @@ get started: Abre el archivo index.html en tu navegador haciendo doble click en él o escribiendo: environment12: 'file:///la/ubicacion/de/tu/archivo/html' - environment14: ' (or ' + environment14: ' (o ' environment15: 'http://localhost:{your-port-num}/empty-example' - environment16: ' if you are using a local server)' + environment16: ' si estás usando un servidor local)' environment13: ' en la barra de direcciones de tu navegador para ver tu bosquejo.' your-first-sketch-title: Tu primer bosquejo your-first-sketch-intro1: 'En el ' your-first-sketch-intro2: 'https://editor.p5js.org/' your-first-sketch-intro3: editor web p5.js - your-first-sketch-intro4: ' vas encontrar el siguiente código:' + your-first-sketch-intro4: ' vas a encontrar el siguiente código:' your-first-sketch1: 'Despúes de ' your-first-sketch2: ' incluye esta línea de código: ' your-first-sketch3: 'Ahora tu código debe estar así: ' @@ -158,9 +164,9 @@ get started: La línea que acabas de agreagar dibuja una elipse, con su centro a 50 píxeles del borde izquierdo y 50 píxeles del borde superior del bosquejo, con un ancho y un alto de 80 píxeles. - your-first-sketch5: ¡En el editor presiona play para ejecutar el código! + your-first-sketch5: ¡Presiona play en el editor para ejecutar el código! your-first-sketch6: >- - Si estas utilizando un lector de pantalla, tienes que activar las salidas + Si estás utilizando un lector de pantalla, tienes que activar las salidas accesibles en el editor, fuera del editor tienes que agregar la biblioteca de accesibilidad a tu html. Para aprender más visita el your-first-sketch7: ' tutorial usando p5 con un lector de pantalla' @@ -169,27 +175,27 @@ get started: visualización: your-first-sketch9: canvas tiene un circulo de ancho y alto 50 en la posición 80 x y 80 ye your-first-sketch10: >- - Si nada aparece, el editor puede estar teniendo problemas entendiendo lo que - escribiste. Si esto sucede, asegúrate de haber copiado el ejemplo de código - tal y como está: los números deben estar separados por comas y contenidos - entre paréntesis, la línea debe terminar con punto y coma, y la palabra - "ellipse" debe estar escrita como en inglés. + Si no aparece nada, el editor puede estar teniendo problemas entendiendo lo + que escribiste. Si esto sucede, asegúrate de haber copiado el ejemplo de + código tal y como está: los números deben estar separados por comas y + contenidos entre paréntesis, la línea debe terminar con punto y coma, y la + palabra "ellipse" debe estar escrita como en inglés. your-first-sketch11: >- Una de las cosas más difíciles de comenzar a programar es que debes ser muy - específicx con la sintaxis. El navegador no siempre es lo suficientemente + específico con la sintaxis. El navegador no siempre es lo suficientemente inteligente como para saber lo que quieres decir, y puede ser bastante exigente con respecto a la ubicación de la puntuación. Ya te acostrumbrarás, sólo toma un poco de práctica. En la parte inferior izquierda del editor vas - encontrar la sección de consola. Aquí, encontrarás mensajes del editor con + a encontrar la sección de consola. Aquí, encontrarás mensajes del editor con detalles de cualquier error que se encuentre. your-first-sketch12: >- - Ahora, vamos a crear un bosquejo que es un poco más interesante. Modica el + Ahora, vamos a crear un bosquejo que es un poco más interesante. Modifica el ejemplo anterior para probar lo siguiente: your-first-sketch13: >- Este programa crea un canvas que es de 400 píxeles de ancho y 400 píxeles de alto, y luego empieza a dibujar círculos blancos en la posición del ratón. Cuando algún botón del ratón es presionado, el color del círculo cambia a - negro. Ejecuta el código, mueve el cursor, y has click para experimentarlo. + negro. Ejecuta el código, mueve el cursor, y haz click para experimentarlo. your-first-sketch14: >- canvas tiene múltiples círculos dibujados que siguen los movimientos del cursor @@ -264,11 +270,12 @@ download: support-options: Opciones de apoyo support-1: >- ¡Necesitamos tu ayuda! p5.js es un software gratuito y de código abierto. - Queremos hacer nuestra comunidad lo más abierta e inclusiva posible. You - can support this work by making a donation to the + Queremos hacer nuestra comunidad lo más abierta e inclusiva posible. Puedes + apoyar nuestro trabajo haciendo una donación a support-2: >- - , the organization that supports p5.js. Your donation supports software - development for p5.js, education resources like code examples and tutorials, + , la organización que soporta p5.js. Tu donación ayudará al desarrollo de + software para p5.js, recursos educativos como ejemplos de código y + tutoriales, support-3: becarios support-4: ', y ' support-5: eventos para la comunidad. @@ -333,7 +340,7 @@ download: support-31-alt: '' learn: learn-title: Aprender - teach-title2: Teach + teach-title2: Enseñar learn1: >- Estos tutoriales proveen una revisión en mayor profundidad o paso a paso sobre temas particulares. Revisa la @@ -717,7 +724,6 @@ learn: dimensiones 200 por 200. Notemos el uso de la función createCanvas() para especificar el tamaño de la ventana. teach-desc: 'Teach a p5 workshop or class, or create teaching materials!' -test-tutorial: null libraries: Libraries: Bibliotecas core-libraries: Bibliotecas principales @@ -739,11 +745,15 @@ libraries: Con p5.bots puedes interactuar con Arduino (u otro microprocesador) desde el navegador. Usa los datos de los sensores para controlar tu bosquejo, usa un bosquejo para controlar LEDs, motores, y más. + p5.bezier: A library helps draw high-degree Bézier curves with unlimited points. p5.clickable: 'Biblioteca para crear botones y eventos fácilmente con p5.js. ' p5.cmyk.js: Espacio de color cian-magenta-amarillo-negro. p5.collide2D: >- p5.collide2D provee herramientas para calcular detección de colisiones en geometría 2D con p5.js. + CO2Budget.js: >- + Esta biblioteca abre la idea de la cuenta regresiva de CO2 a las comunidades + creativas de codificadores, diseñadores y artistas asociados con p5*js. p5.createloop: >- Crea ciclos de animaciones con ruido y exporta GIF en una sola línea de código. @@ -752,7 +762,7 @@ libraries: con cualquier número de dimensiones. p5.EasyCam: >- Control de cámara 3D simple con desplazamiento, zoom y rotación inerciales. - Major contributions by Thomas Diewald. + Contribuciones importantes por Thomas Diewald. p5.experience: >- Biblioteca extensa para p5.js que agrega eventos adicionales para crear aplicaciones web basadas en el canvas. @@ -762,6 +772,7 @@ libraries: p5.geolocation: >- p5.geolocation provee técnicas para adquirir, observar, calcular y georeferenciar ubicaciones de usuario para p5.js. + p5.glitch: p5.glitch extiende p5.js para imagenes de glitch y archivos binarios. p5.gibber: >- p5.gibber provee capacidades de secuenciamiento de música y de síntesis de audio. @@ -769,6 +780,10 @@ libraries: grafica.js te permite añadir gráficas 2D simples pero altamente configurables a tus bosquejos de p5.js. p5.gui: p5.gui genera una interfaz gráfica de usuario para tus bosquejos p5. + p5.j5: >- + La completa Johnny-Five.io Nodebots / robótica para Arduino y otros + microcontroladores diseñados para funcionar directamente en el navegador web + con WebSerial o WebUSB. p5.localmessage: >- p5.provee una interfaz simple para enviar mensajes locales de un bosquejo a otro y así dibujar en múltiples ventanas! @@ -780,6 +795,10 @@ libraries: ml5.js: >- ml5.js esta construido sobre TensorFlow.js y provee un acceso amigable a algoritmos de inteligencia artificial y machine learning desde el navegador. + numero: Una biblioteca matemática fácil e intuitiva para p5.js + pdl.library: >- + Un conjunto de funciones y clases para crear diagramas interactivos para + enseñar y aprender fisica. p5.play: >- p5.play provee funciones de sprites, animaciones, entrada y colisión para juegos y aplicaciones afines. @@ -787,6 +806,16 @@ libraries: Los objetos Particle y Fountain pueden ser usados para crear efectos controlados por datos que son definidos a través de estructuras de usuario o entrada JSON y funciones de usuario para dibujar. + p5.party: >- + p5.party es una librería para la facil creación de juegos multiusuario + conectados en red, aplicaciones y bocetos. + p5.Polar: >- + p5.Polar provee abstracciones matematicas haciendo más facil crear hermosos, + calidoscópicos, patrones radiales. + react-p5: >- + Esta libreria te permite integrar bocetos de p5 dentro de tu aplicación de + React. + p5.recorder: Graba el canvas del boceto y audio. p5.Riso: p5.Riso.js es una biblioteca para impresión de Risograph. rita.js: >- RiTa.js provee un conjunto de objetos de procesamiento de lenguaje natural @@ -803,23 +832,31 @@ libraries: p5.scribble: >- Dibujar primitivas 2D con una apariencia poco acabada. Creada por Janneck Wullschleger, basada en un puerto de la biblioteca original de Processing. - p5.serial: >- - p5.serial permite la comunicación serial entre dispositivos que soportan - serial (RS-232) y bosquejos p5 corriendo en el navegador. + p5.serialport: >- + p5.serial habilita la comunicación serial entre dispositivos que soporten + serial (RS-232) y a los bocetos p5 correr en el navegador. Shape5: >- - Shape5 is a 2D primative library for elementary students who are learning to - code for the first time. + Shape5 es una libreria primitiva de graficos 2D para estudiante de primaria + quienes estan aprendiendo a programar por primera vez. p5.shape.js: Una biblioteca creada para agregar formas más simples al marco p5.js. + P5.slides: p5.slide es una plataforma de presentaciones escrito en p5.js. + p5snap: >- + p5snap es una interfaz de linea de comandos que crea y guarda capturas de un + boceto de p5 en un intervalo. p5.speech: >- p5.speech provee acceso simple y claro a las APIs de Habla Web y Detección de Habla, permitiendo la creación de bosquejos sencillos que pueden hablar y escuchar. p5.start2d.js: >- - extensión para p5 para crear gráficos 2D estáticos usnado px, mm, cm or - inches + Extensión para p5 para crear gráficos 2D estáticos usnado px, mm, cm o + pulgadas. p5.tiledmap: >- - p5.tiledmap provides drawing and helper functions to include maps in your - sketches. + p5.tilemap provee funciones de dibujo y de ayuda para incluir mapas en tus + bocetos. + TiledPlay: >- + Un libreria pequeña para conectar la funcionalidad de p5.js, p5.play, y + p5.tiled.js para facilmente crear juegos de plataformas 2d utilizando + JavaScript. p5.touchgui: >- Una biblioteca de interfaz gráfica de usuario (GUI) multi-tacto y para el ratón. @@ -827,14 +864,80 @@ libraries: Tramontana es una platforma para utilizar múltiples dispositos (iOS, Android, tramontana Board, ...) para crear ambientes interactivos o prototipar experiencias a escala. + TurtleGFX: >- + TurtleGFX permite codificar con Turtle Graphics en JavaScript. Excelente + para la educación y la codificación creativa. + p5.tween: >- + Con p5.tween puede crear facilmente animaciones como interpolación para tus + objetos y formas. vida: >- Vida es una biblioteca simple que agrega detección de movimiento utilizando la camara y la función de seguimiento blob a p5js. p5.voronoi: >- p5.voronoi brinda un conjunto de herramientas para dibujar y utilizar diagramas voronoi en tus bosquejos de p5.js. + p5.wasm: >- + p5.wasm es una libreria complemento escrita en Rust y compilada para + WebAssembly que implementa funciones comunes encontradas en p5.js. p5.xr: Una biblioteca para crear bocetos VR y AR con p5. p5.3D: 'Texto 3D e imágenes en WebGL. ' + WEBMIDI.js: Envia y recibe facilmente mensaje MIDI de p5. + p5.buttons: Una libreria que pretende simplificar el scripting de botones. + p5.button: >- + Pequeña libreria funcional para diseñar y renderizar simples y estilizados + botones directamente en un canvas de p5.js. + p5.math.js: >- + Las operaciones matemáticas de JavaScript han sido convertidas a simple + lenguaje humano, así que ellos podrán entenderlas realmente rápido. + p5LiveMedia: 'Audio, video, canvas e intercambio de datos en tiempo real.' + P5.Create: >- + p5.create es una biblioteca que proporciona funciones de guardado, + animación, colisión y etiquetado diseñadas para la creación eficiente de + juegos. + p5.quadrille.js: librería p5.js quadrille. + p5.animS: p5.animS anima forma de p5.js renderizando sus procesos de dibujado. + I_AM_UI: Una biblioteca de interfaz de usuario. + simple.js: >- + Funciones de ayuda y valores predeterminados para nuevos y jovenes + programadores. + p5.timer: >- + Este libreria ejecuta funciones de cronometraje asincronas como cuentas + atrás, temporizadores de un solo disparo, el % del tiempo transcurrido y + encapsula la función millis() y otras cálculos relacionados que + frecuentemente obstruyen tu código. + c2.js: >- + c2.js es una libreria de JavaScript para programación creativa basada en + geometría computacional, simulación de física, algoritmos evolutivos y otros + modulos. + Concave Hull: Cálcula un Concave Hull desde un conjunto de puntos en un espacio 2D. + p5.joystick: Conéctate y juega con joysticks físicos. + p5.webserial: >- + Una libreria para interactuar con dispositivos seriales desde dentro del + navegador, basado en la API de Web Serial (disponible en Chrome y Edge). + p5.pattern: Una libreria de patrones de dibujo para p5.js. + p5.jacdac: Plug-and-play micro-controladores para p5js. + p5.PatGrad: p5.PatGrad te permite agregar patrones y gradiantes a tus bocetos. + p5.projection: Facil mapeado de proyección de bocetos en superficies del mundo real. + p5.Framebuffer: >- + Un canvas fuera de la pantalla para WebGL, dando acceso a datos profundos + para efectos de niebla y difuminado. + p5.capture: >- + p5.capture provee un GUI simple para grabar facilmente animaciones de p5.js + y archivos de salida de video en varios formatos (webm, gif, mp4, png, jpg, + y webp). + p5.input: Añade más soporte clave para p5.js. + p5.web-serial: >- + Una libreria de p5js para usar la API de Web Serial para acceder a + dispositivos como Arduino, configuración no requerida. + p5.wasm.core: Un nucleo de web assembly para p5.js. + p5.videorecorder: Graba tu canvas como un archivo de video con audio. + p5.mapper: >- + p5.mapper es una libreria de mapeo de proyección para p5.js. Esta libreria + hace facil programar y proyectar bocetos interactivos y algorítmicos. + p5.teach: >- + Una libreria de animación matematica para p5.js, amigable para novatos. + Creada con la tutoría de Nick McIntyre and Jithin KS. + p5.fab: p5.fab controla la maquina de fabricación digital desde p5.js. using-a-library-title: Usando una biblioteca using-a-library1: >- Una biblioteca p5.js puede ser cualquier código p5.js que extiende o añade a @@ -1562,78 +1665,83 @@ showcase: project-a-5-1-moon: 'Echa un vistazo a ' project-a-5-2-moon: ' en Milán, Italia.' teach: - teach-title2: Teach + teach-title2: Enseñar teach-intro1: >- - Every teaching has its own unique goals, messages, conditions, and - environments. + Cada enseñanza tiene sus propios objetivos, mensajes, condiciones y + entornos. teach-intro2: >- - By documenting and sharing p5 workshops, classes, and materials, we hope to - better connect the p5.js learner and educator communities around the world. - teach-intro3: Share or recommend - teach-intro4: 'your own teaching experiences, too!' - teach-heading: p5 Teaching Resources - teach-search-filter: Search Filter + Al documentar y compartir talleres, clases y materiales de p5, esperamos + conectar mejor las comunidades de estudiantes y educadores de p5.js de todo + el mundo. + teach-intro3: Compartir o recomendar + teach-intro4: 'tus propias experiencias de enseñanza, también!' + teach-heading: p5 Recursos Didácticos + teach-search-filter: Filtro de Búsqueda teach-filter1: 'Diversity & Inclusion : ' - teach-filter1-label1: Gender - teach-filter1-label2: Race & Ethnicity - teach-filter1-label3: Language - teach-filter1-label4: Neuro-Type - teach-filter1-label5: Ability - teach-filter1-label6: Class - teach-filter1-label7: Religion - teach-filter1-label8: (Sub-)Culture - teach-filter1-label9: Political Opinion - teach-filter1-label10: Age - teach-filter1-label11: Skill Level - teach-filter1-label12: Occupation + teach-filter1-label1: Género + teach-filter1-label2: Raza y Etnia + teach-filter1-label3: Idioma + teach-filter1-label4: Neurotipo + teach-filter1-label5: Habilidad + teach-filter1-label6: Clase + teach-filter1-label7: Religión + teach-filter1-label8: (Sub-)Cultura + teach-filter1-label9: Opinión Política + teach-filter1-label10: Edad + teach-filter1-label11: Nivel de Haibilidad + teach-filter1-label12: Occupación teach-filter1-label13: '#noCodeSnobs' teach-filter1-label14: '#newKidLove' teach-filter1-label15: '#unassumeCore' teach-filter1-label16: '#BlackLivesMatter' teach-filter2: 'Venue : ' - teach-filter2-label1: Africa + teach-filter2-label1: África teach-filter2-label2: Asia teach-filter2-label3: Europe - teach-filter2-label4: North America - teach-filter2-label5: Oceania - teach-filter2-label6: South America + teach-filter2-label4: América del Norte + teach-filter2-label5: Oceanía + teach-filter2-label6: América del Sur teach-filter2-label7: 'Virtual-Online ' teach-filter3: 'Year : ' teach-filter4: 'Level of Difficulty : ' - teach-filter4-label1: Elementary - teach-filter4-label2: Intermediate - teach-filter4-label3: Advanced - teach-case-subtitle1: Venue & Date - teach-case-subtitle2: Participants - teach-case-subtitle3: Level of Difficulty - teach-case-subtitle4: Goals - teach-case-subtitle5: Method & Materials + teach-filter4-label1: Primaria + teach-filter4-label2: Intermedio + teach-filter4-label3: Advanzado + teach-case-subtitle1: Lugar y fecha + teach-case-subtitle2: Participantes + teach-case-subtitle3: Nivel de Dificultad + teach-case-subtitle4: Metas + teach-case-subtitle5: Método y Materiales teach-case1-title: p5.js at Ubuntu Party! teach-case1-lead-name: Basile Pesin teach-case1-content1: '2020 Ubuntu Party, ' teach-case1-content1-1: 'Cité des Sciences et de l''Industrie, Paris, France' - teach-case1-content2: 'Any age, including children and parents, young and older adults.' - teach-case1-content3: Advanced + teach-case1-content2: 'Cualquier edad, incluyendo niños y padres, jóvenes y adultos mayores.' + teach-case1-content3: Avanzado teach-case1-content4: >- - To introduce a new public to programming through fun and compelling - examples. + Para introducir a un nuevo público en la programación a través de divertidos + ejemplos. teach-case1-content5: >- - Method: in-person workshop, 1 hour per session, with different participant - each times. The students were using (Ubuntu) machines with the p5.js web - editor. I was teaching using a video projector as well as a board. + Method: taller presencial, 1 hora por sesión, con un participante diferente + cada vez. Los estudiantes utilizaron máquinas (Ubuntu) con el editor web + p5.js p5.js. Yo enseñaba usando un proyector de video además de una pizarra. teach-case1-content5-1: >- - Materials: The exercises I gave where accessible through p5.js web-editor - links available in + Materials: Los ejercicios que di fueron accesibles a través de los enlaces + del editor web p5.js, disponibles en teach-case2-title: >- - Making The Thing that Makes the Thing: Exploring Generative Art & Design - with p5.js - teach-case2-lead-name: Priti Pandurangan & Ajith Ranka - teach-case2-content1: 'National Institute of Design, Bangalore' + Making The Thing that Makes the Thing: Explorando el arte y el diseño + generativo con p5.js + teach-case2-lead-name: Priti Pandurangan y Ajith Ranka + teach-case2-image-alt: >- + Un grupo de participantes colaborando para crear algunos diseños utilizando + el editor web p5.js en sus ordenadores portátiles. + teach-case2-content1: 'Instituto Nacional de Diseño, Bangalore' teach-case2-content1-1: '2020 February 8, 2:30-4:00 PM' teach-case2-content2: >- - Our participants included art/design students & professionals, creative - coding enthusiasts. We had close to 50 participants. - teach-case2-content3: 'Priti: Intermediate & Ajith: Advanced' + Entre los participantes se encontraban estudiantes y profesionales del + arte/diseño, creativos entusiastas de la codificación. Tuvimos cerca de 50 + participantes. + teach-case2-content3: 'Priti: Intermedio y Ajith: Avanzado' teach-case2-content4: >- To explore generative art & design and recreate some classical works with p5.js. @@ -1645,270 +1753,211 @@ teach: teach-case2-content5-5: to p5 basics teach-case3-title: CC Fest (Creative Coding Festival) teach-case3-lead-name: Saber - teach-case3-speech: 'Love p5.js. It has meant so much to me, my students, and this community.' + teach-case3-speech: >- + Me encanta p5.js. Ha significado mucho para mí, mis estudiantes y esta + comunidad. teach-case3-content1: ' New York, Los Angeles, San Francisco, Virtual-Online ' - teach-case3-content1-1: ' Twice a year in NYC for four years; once a year in LA for three years; once a year in SF for two years; now virtual' + teach-case3-content1-1: ' Dos veces al año en Nueva York durante cuatro años; una vez al año en Los Ángeles durante tres años; una vez al año en SF durante dos años; ahora virtual' teach-case3-content2: >- - Our participants included art/design students & professionals, creative - coding enthusiasts. We had close to 50 participants. - teach-case3-content3: Intermediate + Entre los participantes se encontraban estudiantes y profesionales del + arte/diseño, creativos entusiastas de la codificación. Tuvimos cerca de 50 + participantes. + teach-case3-content3: Intermedio teach-case3-content4: >- - To build a teacher and student community around p5 for middle and high - school. + Construir una comunidad de profesores y estudiantes en torno a p5 para la + escuela secundaria. teach-case3-content5: >- - A half-day of workshop led by volunteer teachers. We saw lots of different - methods and materials. Most used some sort of slides or documentation, some - live coding using an editor, with work time for participant to remix. - teach-case3-content5-1: CC Fest Lessons page - teach-case3-content5-2: ' for teaching materials' - teach-case3-content5-3: More photos + Medio día de taller dirigido por profesores voluntarios. Vimos un montón de + diferentes métodos y materiales. La mayoría utilizó algún tipo de + diapositivas o documentación, algunos codificación en vivo utilizando un + editor, con tiempo de trabajo para que los participantes remezclen. + teach-case3-content5-1: Página de lecciones del CC Fest + teach-case3-content5-2: ' para el material didáctico' + teach-case3-content5-3: Más fotos teach-case4-title: Taller Introducción a la Programación Creativa con p5.js teach-case4-lead-name: Aarón Montoya-Moraga - teach-case4-speech: 'p5.js is my happy place ' + teach-case4-image-alt: >- + Un grupo de 20 personas sentadas en una gran mesa compartida con sus + ordenadores portátiles mirando una pantalla proyectada. + teach-case4-speech: 'p5.js es mi lugar feliz ' teach-case4-content1: ' PlusCode Media Arts Festival, Buenos Aires, Argentina & Virtual-Online ' - teach-case4-content1-1: ' 2018 November 14, 3 hours' + teach-case4-content1-1: ' 2018 14 de noviembre, 3 horas' teach-case4-content2: >- - I had around 16 students in the workshop, and a team including 3 people from - the PlusCode festival, and one person at the venue. - teach-case4-content3: 'Elementary, Intermediate, Advanced' + Tuve unos 16 alumnos en el taller, y un equipo que incluía 3 personas de el + festival PlusCode, y una persona del lugar. + teach-case4-content3: 'Primaria, Intermedio, Avanzado' teach-case4-content4: >- - Introduction to beginners and artists of graphic web programming and open - source, using p5.js, in Spanish :) - teach-case4-content5: 'I used the material on this ' + Introducción a principiantes y artistas de la programación web gráfica y + open source, usando p5.js, en español :) + teach-case4-content5: 'Utilicé el material de este ' teach-case4-content5-1: GitHub repo - teach-case4-content5-2: ', we used the p5.js web editor, we had a three hour long workshop' - teach-case4-content5-3: '+CODE electronic art festival 2018, Argentina' - teach-case4-content5-4: ', Medium' - teach-case5-title: Introduction to Generative Drawing + teach-case4-content5-2: >- + , utilizamos el editor web p5.js, tuvimos un taller de tres horas de + duración + teach-case4-content5-3: '+CODE festival de arte electrónico 2018, Argentina' + teach-case4-content5-4: ', Medio' + teach-case5-title: Introducción al dibujo generativo teach-case5-lead-name: Adam Herst teach-case5-speech: >- - My greatest source of uncertainty in developing the workshop was whether it - was trying to teach art to programmers or to teach programming to artists. - teach-case5-content1: Inter/Access - teach-case5-content1-1: ' (artist-run centre), Toronto, Ontario, Canada' - teach-case5-content1-2: In-person with a self-paced workbook for remote work - teach-case5-content1-3: ' 2020 February 12, 7PM-9PM' - teach-case5-content2: 15 artists - teach-case5-content3: Elementary + Mi mayor fuente de incertidumbre al desarrollar el taller fue si intentaba + enseñar arte a los programadores o enseñar programación a los artistas. + teach-case5-content1: Inter/acceso + teach-case5-content1-1: ' (centro gestionado por artistas), Toronto, Ontario, Canada' + teach-case5-content1-2: >- + En persona con un cuaderno de trabajo autodidacta para el trabajo a + distancia + teach-case5-content1-3: ' 2020 Febrero 12, 7PM-9PM' + teach-case5-content2: 15 artistas + teach-case5-content3: Primaria teach-case5-content4: >- - To introduce p5.js to artists with little or no programming experience and - to suggest one way an analogue practice can migrate to a digital form. + Presentar p5.js a artistas con poca o ninguna experiencia en programación y + sugerir una forma en que una práctica analógica puede migrar a una forma + digital. teach-case5-content5: >- - A printed workbook with activities that used the p5.js web editor to show - how translate an physical drawing into a digital drawing. - teach-case5-content5-1: 'Processing Community Day 2019: Generative Drawing at Inter/Access' - teach-case5-content5-2: Introduction to Generative Drawing Letter PDF - teach-case5-content5-3: Introduction to Generative Drawing Booklet PDF - teach-case6-title: 'Open Lecture, Creative Coding: 2020' + Un cuaderno de trabajo impreso con actividades que utilizan el editor web + p5.js para mostrar cómo traducir un dibujo físico en un dibujo digital. + teach-case5-content5-1: 'Día de la Comunidad de Procesamiento 2019: Dibujo Generativo en Inter/Access' + teach-case5-content5-2: Introducción al dibujo generativo Carta PDF + teach-case5-content5-3: Folleto de introducción al dibujo generativo PDF + teach-case6-title: 'Conferencia abierta, Codificación creativa: 2020' teach-case6-lead-name: Shunsuke Takawo + teach-case6-image-alt: >- + Una mesa en la que hay un ordenador portátil, algunas hojas de papel, + bolígrafos de colores y dos máquinas automáticas que dibujan algo con un + bolígrafo en una hoja. teach-case6-speech: >- - I love p5.js because it's so easy to read and write code in p5.js. Coding in - your everyday life! - teach-case6-content1: ' Kyoto University of Art and Design, Kyoto, Japan & Virtual-Online ' - teach-case6-content1-1: ' 2020 March 16-18, 1-7 PM' - teach-case6-content2: 'Students of Kyoto University of Art and Design, and anyone.' - teach-case6-content3: Elementary - teach-case6-content4: Making code as a tool for artistic expression. - teach-case6-content5: 'Dropbox Paper, p5.js web editor.' - teach-case6-content5-1: Syllabus - teach-case6-content5-2: Day 1 - teach-case6-content5-3: Day 2 - teach-case6-content5-4: Day 3 + Me encanta p5.js porque es muy fácil leer y escribir código en p5.js. + Escribir código en tu día a día! + teach-case6-content1: ' Universidad de Arte y Diseño de Kioto, Kioto, Japón & Virtual-Online ' + teach-case6-content1-1: ' 2020 Marzo 16-18, 1-7 PM' + teach-case6-content2: >- + Estudiantes de la Universidad de Arte y Diseño de Kioto, y cualquier + persona. + teach-case6-content3: Primaria + teach-case6-content4: Creando código como herramienta de expresión artística. + teach-case6-content5: 'Dropbox Paper, editor web p5.js.' + teach-case6-content5-1: Programa de estudios + teach-case6-content5-2: Día 1 + teach-case6-content5-3: Día 2 + teach-case6-content5-4: Día 3 teach-case6-content5-5: ', YouTube' - teach-case7-title: Creative Coding for Static Graphics + teach-case7-title: Codificación creativa para gráficos estáticos teach-case7-lead-name: Shunsuke Takawo teach-case7-speech: >- - Coding in p5.js is a lot of fun. If you haven't started yet, I encourage you - to give it a try! + Codificar en p5.js es muy divertido. ¡Si aún no has empezado, te animo a a + que lo pruebes! teach-case7-content1: ' FabCafe MTRL, Tokyo, Japan' - teach-case7-content1-1: ' 2019 September 15, 4-7 PM ' - teach-case7-content2: Anyone who wants to try coding in p5.js. - teach-case7-content3: Intermediate - teach-case7-content4: To code from the graphic design's perspective. - teach-case7-content5: 'Dropbox Paper, p5.js web editor.' - teach-case7-content5-1: Syllabus & Material - teach-case8-title: Generative Typography + teach-case7-content1-1: ' 2019 15 de septiembre, 4-7 PM ' + teach-case7-content2: Cualquiera que quiera intentar codificar en p5.js. + teach-case7-content3: Intermedio + teach-case7-content4: A Programar desde la perspectiva del diseño gráfico. + teach-case7-content5: 'Dropbox Paper, editor web p5.js.' + teach-case7-content5-1: Plan de estudios y material + teach-case8-title: Tipografía Generativa teach-case8-lead-name: Dae In Chung + teach-case8-image-alt: >- + Una imagen con fondo negro que muestra la letra 'b' en 5 estilos diferentes + junto con un menú con varias opciones de estilo para elegir. teach-case8-content1: ' Baltimore, Maryland, USA & Virtual-Online ' - teach-case8-content1-1: ' 2019 January 21 - May 08, every Wednesday, 4-10 PM' - teach-case8-content2: 14 undergrads and grad students who had little to no experience in coding. - teach-case8-content3: Elementary - teach-case8-content4: Experiment with typographic forms and structures through computation. - teach-case8-content5: 'Methods: online/offline lectures and critiques.' - teach-case8-content5-1: 'Materials: p5js online editor, Github, youtube tutorials.' - teach-case8-content5-2: Works of participants - teach-case9-title: Machine Learning for the Web + teach-case8-content1-1: ' 2019 21 de enero - 08 de mayo, todos los miércoles, de 16 a 22 horas' + teach-case8-content2: >- + 14 estudiantes de grado y posgrado con poca o ninguna experiencia en + codificación. + teach-case8-content3: Primaria + teach-case8-content4: >- + Experimentar con las formas y estructuras tipográficas a través de la + computación. + teach-case8-content5: 'Métodos: clases y críticas online/offline.' + teach-case8-content5-1: 'Materiales: editor online p5js, Github, tutoriales de youtube.' + teach-case8-content5-2: Trabajos de los participantes + teach-case9-title: Aprendizaje automático para la web teach-case9-lead-name: Yining Shi + teach-case9-image-alt: >- + Un grupo de 16 personas sentadas alrededor de mesas con sus ordenadores + portátiles, teléfonos móviles y algunos otros accesorios, mirando hacia una + gran pantalla de televisión. teach-case9-content1: ' ITP, NYU, 370 Jay St, Brooklyn, NY 11201, USA' - teach-case9-content1-1: '2019 March 09 - October 12, every Tuesday, 6:30-9:00 PM' + teach-case9-content1-1: '2019 Marzo 09 - Octubre 12, todos los martes, 6:30-9:00 PM' teach-case9-content2: >- - Students at Interactive Telecommunications Program, New York University. 16 - people. - teach-case9-content3: 'Elementary, Intermediate' + Estudiantes del Programa de Telecomunicaciones Interactivas de la + Universidad de Nueva York. 16 personas. + teach-case9-content3: 'Primaria, Intermedio' teach-case9-content4: >- - The goal of this class is to learn and understand common machine learning - techniques and apply them to generate creative outputs in the browser using - ml5.js and p5.js. + El objetivo de esta clase es aprender y comprender técnicas comunes de + aprendizaje automático y aplicarlas para generar resultados creativos en el + navegador utilizando ml5.js y p5.js. teach-case9-content5: >- - This class is a mix of lectures, coding sessions, group discussions, and - presentations. I used + Esta clase es una mezcla de conferencias, sesiones de codificación, + discusiones de grupo y presentaciones. He utilizado teach-case9-content5-1: GitHub - teach-case9-content5-2: ' to host class syllabus and all the coding materials, Google Slides for lectures and p5.js Web Editor for live coding sessions. Every week, there were one-on-one office hours to talk about any difficulties of coming up with an idea for the homework or any coding changes.' + teach-case9-content5-2: ' para alojar el programa de la clase y todo el material de codificación, Google Slides para las clases y el editor web p5.js para las sesiones de codificación en directo. Todas las semanas, había horas de oficina individuales para hablar de cualquier dificultad para llegar a una idea para la tarea o cualquier cambio de codificación". teach-case9-content5-3: ' teach-case9-content5-3: 'Methods: online/offline lectures and critiques.' - teach-case10-title: Introduction to p5.js and JavaScript + teach-case10-title: Introducción a p5.js y JavaScript teach-case10-lead-name: Nico Reski - teach-case10-content1: ' Currently available as self-study at own pace with accompanying slides, linked below.' - teach-case10-content3: 'Beginner, Elementary' + teach-case10-content1: ' Actualmente está disponible como autoaprendizaje a su propio ritmo con diapositivas adjuntas, enlazadas a continuación.' + teach-case10-content3: 'Principiante, Primaria' teach-case10-content4: >- - Introduce learners (potentially with no coding experiences at all) to the - very basics of p5.js (and JavaScript), in order to encourage creative coding - and enable them to pursue own projects in a safe environment. + Introducir a los alumnos (potencialmente sin experiencia en codificación) en + los a los fundamentos de p5.js (y JavaScript), con el fin de fomentar la + codificación creativa y permitirles realizar sus propios proyectos en un + entorno seguro. teach-case10-content5: >- - p5.js source code (for the introductory project), JavaScript source code - (illustrating some basic JavaScript functionalities), accompanying slides in - .pdf format, all hosted publicly on GitHub. - teach-case10-content5-1: Overview - teach-case10-content5-2: ' of the workshop and its contents (including all links to the material hosted on GitHub) on my academic webpage.' - teach-case11-title: Digital Weaving & Physical Computing Workshop Series - teach-case11-lead-name: Qianqian Ye & Evelyn Masso - teach-case11-content1: ' Womens Center for Creative Work (WCCW), Los Angeles, CA, US' - teach-case11-content1-1: ' 2019 October 19 - November 02, every Saturday 3-6 PM' - teach-case11-content2: '15 women and non-binary artists, designer, makers, programers. ' - teach-case11-content3: Elementary + Código fuente de p5.js (para el proyecto introductorio), código fuente de + JavaScript (que ilustra algunas funcionalidades básicas de JavaScript), + diapositivas adjuntas en .pdf, todo ello alojado públicamente en GitHub. + teach-case10-content5-1: Resumen + teach-case10-content5-2: ' del taller y sus contenidos (incluyendo todos los enlaces al material alojado en GitHub) en mi página web académica.' + teach-case11-title: Serie de talleres de tejido digital y computación física + teach-case11-lead-name: Qianqian Ye y Evelyn Masso + teach-case11-image-alt: >- + Esta imagen está dividida en dos partes. La parte izquierda muestra a un + grupo de 15 mujeres sentadas en sillas con sus ordenadores portátiles y + mirando a un presentador que está explicando un código en una pantalla + proyectada. La parte derecha de la imagen muestra a una persona aprendiendo + a tejer utilizando un patrón físico y una herramienta de tejido. + teach-case11-content1: ' Womens Center for Creative Work (WCCW), Los Ángeles, CA, US' + teach-case11-content1-1: ' 2019 19 de octubre - 02 de noviembre, todos los sábados 3-6 PM' + teach-case11-content2: '15 mujeres y artistas no binarios, diseñadores, creadores, programadores. ' + teach-case11-content3: Primaria teach-case11-content4: >- - Over the course of three workshops, we will draw and create patterns using - p5.js, an open-source graphical library; we will learn and apply - computational concepts to transform patterns and finally, we will bring a - weaving to life with electronic microcontrollers. - teach-case11-content5: 'Methods: small team session' + A lo largo de tres talleres, dibujaremos y crearemos patrones utilizando + p5.js, una biblioteca gráfica de código abierto; aprenderemos y aplicaremos + conceptos computacionales para transformar patrones y, por último, daremos + vida a un tejido con microcontroladores electrónicos. + teach-case11-content5: 'Métodos: sesión en pequeños equipos' teach-case11-content5-1: >- - Materials: slides, p5.js web editor, pen and paper to draw pattern, physical - pattern weaving tool. - teach-case11-content5-2: 'Workshop Slide #1' - teach-case11-content5-3: 'Workshop Slide #2' - teach-case11-content5-4: Workshop Information - teach-case11-content5-5: ' on WCCW website.' + Materials: diapositivas, editor web p5.js, lápiz y papel para dibujar el + patrón, herramienta de herramienta de tejido de patrones. + teach-case11-content5-2: 'Taller de diapositivas #1' + teach-case11-content5-3: 'Taller de diapositivas #2' + teach-case11-content5-4: Información sobre el taller + teach-case11-content5-5: ' en el sitio web del CMCA.' teach-case12-title: Signing Coders teach-case12-lead-name: Taeyoon Choi + teach-case12-image-alt: >- + Dos voluntarios explican conceptos utilizando una pizarra blanca y una + pantalla a un grupo de estudiantes sordos y con dificultades auditivas, cada + uno de ellos frente a una pantalla ordenador. teach-case12-speech: >- - I'm working on a new series of coding class for Disabled students in South - Korea. I'm researching about the pedagogy and translation. I plan to hold - workshops in December 2020. The project is supported by the Open Society - Foundation Human Rights Initiative and Korea Disability Arts & Culture - Center. - teach-case12-content1: ' WRIC, New York City, USA & Seoul Museum of Art, Seoul, South Korea.' - teach-case12-content1-1: '5 Sessions, each 2~3 hours' - teach-case12-content2: Deaf and Hard of Hearing students age 10~50 who live in NYC. - teach-case12-content3: Elementary + Estoy trabajando en una nueva serie de clases de codificación para + estudiantes discapacitados en Corea del Sur. Estoy investigando sobre la + pedagogía y la traducción. Tengo previsto celebrar talleres en diciembre de + 2020. El proyecto cuenta con el apoyo de la Iniciativa de Derechos Humanos + de la Open Society Foundation y el Centro de Arte y Cultura de la + Discapacidad de Corea del Sur. + teach-case12-content1: ' WRIC, Nueva York, EE.UU. y Museo de Arte de Seúl, Seúl, Corea del Sur.' + teach-case12-content1-1: '5 sesiones, cada una de 2~3 horas' + teach-case12-content2: >- + Estudiantes sordos o con dificultades auditivas de 10 a 50 años que vivan en + Nueva York. + teach-case12-content3: Primaria teach-case12-content4: >- - To help Deaf and Hard of Hearing students learn about computer programming - through playful exercises. To make ASL tutorial of basic coding concepts. + Ayudar a los estudiantes sordos y con dificultades auditivas a aprender + sobre programación informática a través de ejercicios lúdicos. Hacer un + tutorial en ASL de conceptos básicos de codificación. teach-case12-content5: >- We used p5.js Web editor and code examples on the website. We also used dice, playing cards and various paper tools to help students learn about coding concepts. teach-case12-content5-1: Syllabus & Material teach-case12-content5-2: More photos - teach-case13-title: Painting with Code - teach-case13-lead-name: Andreas Refsgaard - teach-case13-speech: >- - I'm working on a new series of coding class for Disabled students in South - Korea. I'm researching about the pedagogy and translation. I plan to hold - workshops in December 2020. The project is supported by the Open Society - Foundation Human Rights Initiative and Korea Disability Arts & Culture - Center. - teach-case13-content1: ' Copenhagen, Denmark' - teach-case13-content1-1: 2020 February 22 - teach-case13-content2: A wide range of people. - teach-case13-content3: Intermediate - teach-case13-content4: >- - Get creatives, designers, artists and other people who don't typically use - code introduced to p5.js. - teach-case13-content5: 'Website, p5.js editor.' - teach-case13-content5-1: Material - teach-case14-title: Smarter Home - teach-case14-lead-name: Lauren McCarthy - teach-case14-speech: >- - The Smarter Home / 더 똑똑한 집 American Arts Incubator Workshop reimagines smart - homes of the future. - teach-case14-content1: ' Gwangju Cultural Foundation(GJCF), Gwangju, South Korea' - teach-case14-content1-1: 2020 April 19 - May 11 - teach-case14-content1-2: ZERO1 American Art Incubator(AAI) - teach-case14-content2: 16 people (resident of Gwangju or surrounding areas) - teach-case14-content3: Elementary & Intermediate - teach-case14-content4: >- - To reimagine smart homes of the future, with such technologies as p5.js and - ml5.js. Spending a lot of time talking about the increasing role technology - is playing at home and in Korean society, the workshop aimed to offer a - vision of a smarter home driven by the participants' critical optimism for - the future. - teach-case14-content5: 'p5.js, p5 web editor, ml5.js, and installations. ' - teach-case14-content5-1: >- - 1) We set out to prototype the concept of a “smarter home”, trying to bring - technology into personal space on our own terms. - teach-case14-content5-2: >- - 2) Breaking into four teams, each selected an issue to address through a - room they would create within our larger home structure. - teach-case14-content5-3: >- - 3) We incorporated machine learning, audio processing, and computer vision - techniques to track and respond to the presence of people. - teach-case14-content5-4: >- - 4) Together, these works make one installation, comprised of four - interconnected smart rooms that each provoke discussion. - teach-case14-content5-5: More pictures - teach-case15-title: Introduction to p5js - teach-case15-lead-name: Bérenger Recoules (a.k.a b2renger) - teach-case15-content1: 'L''École de Design Nantes Atlantique, France' - teach-case15-content1-1: Since 2018 and ongoing - teach-case15-content2: Students from l'école de design Nantes Atlantique' - teach-case15-content3: Elementary - teach-case15-content4: 'To get to know p5.js and its functionalities (DOM, audio, WebGL, etc.) ' - teach-case15-content5: GitHub Readme File - teach-case15-content5-1: ' : a text tutorial in French' - teach-case16-title: "50+ Coding Club : My First Code Art with Handy(\U0001F590) and Family" - teach-case16-lead-name: Inhwa Yeom - teach-case16-speech: >- - This workshop was conducted in line with 'p5 for 50+' project, with supports - from 2020 Processing Foundation fellowship program and Asia Culture Center - (ACC). - teach-case16-content1: ' Asia Culture Center(ACC), Gwangju. Virtual & Online' - teach-case16-content1-1: >- - (In-Person) 2020 November 20 - 28, every Friday and Saturday; - (Virtual-Online) Anytime from 2020 December on via YouTube videos - teach-case16-content2: '8 people, composed of 6 older adults and their children' - teach-case16-content2-1: 1) Those who define themselves as older adults (age around 50 and older) - teach-case16-content2-2: '2) People from any age groups who accompany a person of 1) ' - teach-case16-content3: Elementary - teach-case16-content4: >- - Addressing the digital literacy and rights of age 50+ population in a - non-English-speaking country, this workshop aimed to lower their physical, - lingual, and emotional barriers to learning coding with smartphone-based - p5.js editor. - teach-case16-content5: p5for50+ web app - teach-case16-content5-1: >- - a smartphone-based web app, with p5.js web editor embedded in it. Created - with the editor, the participants' p5 sketches were printed out and framed - on-site, and distributed as their materialized outcomes. - teach-case16-content5-2: Curriculum - teach-case16-content5-3: YouTube - teach-case16-content5-4: More pictures - teach-case17-title: Programación Aplicada al Arte Visual e Interactivo - teach-case17-lead-name: Sebastián Zavatarelli - teach-case17-speech: >- - El curso es parte de la oferta de cursos de extensión de el Area - transdepartamental de artes multimediales de la Universidad Nacional de las - Artes en Argentina. - teach-case17-content1: ' Buenos Aires, Argentina. Virtual & Online' - teach-case17-content1-1: '2020 September 15 - October 14 every Wednesday 6:30-9:00 PM' - teach-case17-content2: Alrededor de 10 personas. La mayoría mujeres. - teach-case17-content3: Elementary & Intermediate - teach-case17-content4: >- - El curso está destinado a artistas que quieran comenzar a utilizar las - herramientas tecnológicas actuales para el desarrollo de sus obras. También - puede ser aprovechado por aquellxs que quieran iniciarse en la programación - de computadoras a través de un entorno de programación simple, visual, - accesible y divertido. - teach-case17-content5: >- - p5.js web editor. Online a trvés de plataforma Zoom y material subido en - Moodle. - teach-case17-content5-1: More pictures diff --git a/src/data/examples/build_examples/example_template.ejs b/src/data/examples/build_examples/example_template.ejs index 9df08ae374..a6d7c06da4 100644 --- a/src/data/examples/build_examples/example_template.ejs +++ b/src/data/examples/build_examples/example_template.ejs @@ -34,7 +34,7 @@ slug: examples/
        - +

        creative commons license

        diff --git a/src/data/examples/build_examples/package-lock.json b/src/data/examples/build_examples/package-lock.json index d5beb41c26..4f624275f6 100644 --- a/src/data/examples/build_examples/package-lock.json +++ b/src/data/examples/build_examples/package-lock.json @@ -10,11 +10,11 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "argparse": { @@ -32,10 +32,15 @@ } } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" }, "async": { "version": "0.9.2", @@ -56,47 +61,35 @@ "concat-map": "0.0.1" } }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "fill-range": "^7.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=" - }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.1.2", @@ -113,46 +106,24 @@ "resolved": "https://registry.npmjs.org/csv/-/csv-0.0.10.tgz", "integrity": "sha1-fb4nb2B8Gg9BKinel3gZsuz9jqs=" }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", + "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", "requires": { - "is-arrayish": "^0.2.1" + "jake": "^10.8.5" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -168,13 +139,51 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, "findup-sync": { @@ -199,20 +208,50 @@ } } }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==" }, "glob": { "version": "7.1.3", @@ -227,127 +266,176 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } }, "grunt": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", - "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", + "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", + "dateformat": "~3.0.3", "eventemitter2": "~0.4.13", - "exit": "~0.1.1", + "exit": "~0.1.2", "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", + "glob": "~7.1.6", + "grunt-cli": "~1.4.3", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", "iconv-lite": "~0.4.13", - "js-yaml": "~3.13.0", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" + "rimraf": "~3.0.2" }, "dependencies": { "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.2", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } } }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } } } }, "grunt-known-options": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==" }, "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", "requires": { "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", + "grunt-legacy-log-utils": "~2.1.0", "hooker": "~0.2.3", - "lodash": "~4.17.5" + "lodash": "~4.17.19" } }, "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" + "chalk": "~4.1.0", + "lodash": "~4.17.19" } }, "grunt-legacy-util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", - "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } } } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } }, "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=" }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -356,14 +444,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -378,84 +458,175 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { - "number-is-nan": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + } + } + }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", + "requires": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + } + } } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "kind-of": "^6.0.2" } }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "minimatch": { @@ -466,25 +637,10 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "nopt": { "version": "3.0.6", @@ -494,26 +650,33 @@ "abbrev": "1" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, - "number-is-nan": { + "object.map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } }, "once": { "version": "1.4.0", @@ -523,102 +686,93 @@ "wrappy": "1" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "error-ex": "^1.2.0" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "requires": { - "pinkie-promise": "^2.0.0" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-root-regex": "^0.1.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "requires": { - "pinkie": "^2.0.0" + "resolve": "^1.9.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "read-pkg-up": { + "resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "requires": { - "path-parse": "^1.0.6" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "rimraf": { @@ -634,84 +788,43 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" - }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "is-utf8": "^0.2.0" + "has-flag": "^4.0.0" } }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "^4.0.1" - } + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "has-flag": "^3.0.0" + "is-number": "^7.0.0" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "requires": { - "sprintf-js": "^1.0.3", + "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" } }, @@ -720,13 +833,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "homedir-polyfill": "^1.0.1" } }, "which": { diff --git a/src/data/examples/build_examples/package.json b/src/data/examples/build_examples/package.json index 8fa0a2cf4a..4ee72f1380 100644 --- a/src/data/examples/build_examples/package.json +++ b/src/data/examples/build_examples/package.json @@ -9,8 +9,8 @@ "dependencies": { "async": "^0.9.0", "csv": "^0.0.10", - "ejs": "^2.5.7", - "grunt": "^1.0.4", + "ejs": "^3.1.7", + "grunt": "^1.5.3", "rimraf": "^2.2.8" }, "devDependencies": {} diff --git a/src/data/examples/en/00_Structure/00_Statements_and_Comments.js b/src/data/examples/en/00_Structure/00_Statements_and_Comments.js index 8469f369b7..aafd4a5653 100644 --- a/src/data/examples/en/00_Structure/00_Statements_and_Comments.js +++ b/src/data/examples/en/00_Structure/00_Statements_and_Comments.js @@ -1,6 +1,10 @@ /* * @name Comments and Statements - * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. It is called the "statement * terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). (ported from https://processing.org/examples/statementscomments.html) + * @arialabel Mustard yellow background + * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). + *

        This example is ported from the Statements and Comments example + * on the Processing website */ // The createCanvas function is a statement that tells the computer // how large to make the window. diff --git a/src/data/examples/en/00_Structure/01_Coordinates.js b/src/data/examples/en/00_Structure/01_Coordinates.js index b783e1c093..76e304461d 100644 --- a/src/data/examples/en/00_Structure/01_Coordinates.js +++ b/src/data/examples/en/00_Structure/01_Coordinates.js @@ -1,5 +1,6 @@ /* * @name Coordinates + * @arialabel Black background with a orange outline of a square in the middle and a blue line across at the top ⅓ point of the square * @description All shapes drawn to the screen have a position that is * specified as a coordinate. All coordinates are measured as the distance from * the origin in units of pixels. The origin [0, 0] is the coordinate in the diff --git a/src/data/examples/en/00_Structure/02_Width_and_Height.js b/src/data/examples/en/00_Structure/02_Width_and_Height.js index 2c98de592e..a80a682a4b 100644 --- a/src/data/examples/en/00_Structure/02_Width_and_Height.js +++ b/src/data/examples/en/00_Structure/02_Width_and_Height.js @@ -1,5 +1,6 @@ /* * @name Width and Height + * @arialabel Pattern of grey and green horizontal lines. The left half also has white vertical lines. The left half is broken up into two triangular shapes, one which is predominately green stripes, and one which is white with the white stripes * @description The 'width' and 'height' variables contain the * width and height of the display window as defined in the createCanvas() * function. diff --git a/src/data/examples/en/00_Structure/03_Setup_and_Draw.js b/src/data/examples/en/00_Structure/03_Setup_and_Draw.js index 4f20978143..b5ab28f44e 100644 --- a/src/data/examples/en/00_Structure/03_Setup_and_Draw.js +++ b/src/data/examples/en/00_Structure/03_Setup_and_Draw.js @@ -1,7 +1,9 @@ /* * @name Setup and Draw + * @arialabel Animated horizontal white line on a black background that moves from the bottom to the top of the screen * @description The code inside the draw() function runs continuously from top - * to bottom until the program is stopped. + * to bottom until the program is stopped. The + * code in setup() is run once when the program starts. */ let y = 100; diff --git a/src/data/examples/en/00_Structure/04_No_Loop.js b/src/data/examples/en/00_Structure/04_No_Loop.js index 063073be5e..48e0095d7e 100644 --- a/src/data/examples/en/00_Structure/04_No_Loop.js +++ b/src/data/examples/en/00_Structure/04_No_Loop.js @@ -1,5 +1,6 @@ /* * @name No Loop + * @arialabel Horizontal white line across the middle of a black background * @description The noLoop() function causes draw() to only execute once. * Without calling noLoop(), the code inside draw() is run continually. */ diff --git a/src/data/examples/en/00_Structure/05_Loop.js b/src/data/examples/en/00_Structure/05_Loop.js index bc79823793..cfa6f830ba 100644 --- a/src/data/examples/en/00_Structure/05_Loop.js +++ b/src/data/examples/en/00_Structure/05_Loop.js @@ -1,9 +1,12 @@ /* * @name Loop - * @description The code inside the draw() function runs continuously from top - * to bottom until the program is stopped. + * @arialabel Horizontal white line on a black background that moves from the bottom to the top of the screen parallel to the x-axis + * @description If noLoop() is run in setup(), the code in draw() + * is only run once. In this example, click the mouse + * to run the loop() function to cause the draw() the + * run continuously. */ -let y = 100; +let y = 0; // The statements in the setup() function // execute once when the program begins @@ -11,6 +14,7 @@ function setup() { createCanvas(720, 400); // Size must be the first statement stroke(255); // Set line drawing color to white frameRate(30); + noLoop(); } // The statements in draw() are executed until the // program is stopped. Each statement is executed in @@ -24,3 +28,7 @@ function draw() { } line(0, y, width, y); } + +function mousePressed(){ + loop(); +} diff --git a/src/data/examples/en/00_Structure/06_Redraw.js b/src/data/examples/en/00_Structure/06_Redraw.js index 0d23d6bfb8..6a05360b92 100644 --- a/src/data/examples/en/00_Structure/06_Redraw.js +++ b/src/data/examples/en/00_Structure/06_Redraw.js @@ -1,5 +1,6 @@ /* * @name Redraw + * @arialabel Horizontal white line across a black background that moves higher on the screen with each mouse click * @description The redraw() function makes draw() execute once. In this example, * draw() is executed once every time the mouse is clicked. */ diff --git a/src/data/examples/en/00_Structure/07_Functions.js b/src/data/examples/en/00_Structure/07_Functions.js index 24422e123b..648915c01d 100644 --- a/src/data/examples/en/00_Structure/07_Functions.js +++ b/src/data/examples/en/00_Structure/07_Functions.js @@ -1,5 +1,6 @@ /* *@name Functions + *@arialabel Three targets are created in the shape of black circles. There is a gradient from white to black from the center of the circle to the outer edge. *@description The drawTarget() function makes it easy to draw many distinct *targets. Each call to drawTarget() specifies the position, size, and number of *rings for each target. diff --git a/src/data/examples/en/00_Structure/08_Recursion.js b/src/data/examples/en/00_Structure/08_Recursion.js index 2a7a486036..4f0b211912 100644 --- a/src/data/examples/en/00_Structure/08_Recursion.js +++ b/src/data/examples/en/00_Structure/08_Recursion.js @@ -1,8 +1,11 @@ /* *@name Recursion + *@arialabel Grey circle with two grey circles across its middle. Each of these two grey circles have more grey circles across its middle. This pattern continues until no more can be drawn within them. *@description A demonstration of recursion, which means functions call themselves. - * Notice how the drawCircle() function calls itself at the end of its block. - * It continues to do this until the variable "level" is equal to 1. + * A recursive function must have a terminating condition, without which it will + * go into an infinite loop. Notice how the drawCircle() function calls itself + * at the end of its block. It continues to do this until the variable "level" is + * equal to 1. */ function setup() { @@ -16,11 +19,17 @@ function draw() { } function drawCircle(x, radius, level) { + // 'level' is the variable that terminates the recursion once it reaches + // a certain value (here, 1). If a terminating condition is not + // specified, a recursive function keeps calling itself again and again + // until it runs out of stack space - not a favourable outcome! const tt = (126 * level) / 4.0; fill(tt); ellipse(x, height / 2, radius * 2, radius * 2); - if (level > 1) { - level = level - 1; + if (level > 1) { + // 'level' decreases by 1 at every step and thus makes the terminating condition + // attainable + level = level - 1; drawCircle(x - radius / 2, radius / 2, level); drawCircle(x + radius / 2, radius / 2, level); } diff --git a/src/data/examples/en/00_Structure/09_Create_Graphics.js b/src/data/examples/en/00_Structure/09_Create_Graphics.js index 763c899cf2..a786f0c06c 100644 --- a/src/data/examples/en/00_Structure/09_Create_Graphics.js +++ b/src/data/examples/en/00_Structure/09_Create_Graphics.js @@ -1,5 +1,6 @@ /* * @name Create Graphics + * @arialabel Black background with a very dark grey rectangle in the middle. The user’s mouse draws in white but not on the center rectangle. * @description Creates and returns a new p5.Renderer object. Use this * class if you need to draw into an off-screen graphics buffer. The two parameters * define the width and height in pixels. diff --git a/src/data/examples/en/01_Form/00_Points_and_Lines.js b/src/data/examples/en/01_Form/00_Points_and_Lines.js index 6871e34110..4aeb06e69f 100644 --- a/src/data/examples/en/01_Form/00_Points_and_Lines.js +++ b/src/data/examples/en/01_Form/00_Points_and_Lines.js @@ -1,5 +1,6 @@ /* * @name Points and Lines + * @arialabel White outline of a square on a black background * @description Points and lines can be used to draw basic geometry. * Change the value of the variable 'd' to scale the form. The four * variables set the positions based on the value of 'd'. diff --git a/src/data/examples/en/01_Form/01_Shape_Primitives.js b/src/data/examples/en/01_Form/01_Shape_Primitives.js index 728236f9f1..b7726f42ca 100644 --- a/src/data/examples/en/01_Form/01_Shape_Primitives.js +++ b/src/data/examples/en/01_Form/01_Shape_Primitives.js @@ -1,5 +1,6 @@ /* * @name Shape Primitives + * @arialabel From left to right: a grey triangle, a darker grey square, a light grey trapezoid, a white circle, a light grey triangle, and a white half circle, on a black background * @description The basic shape primitive functions are triangle(), * rect(), quad(), ellipse(), and arc(). Squares are made with rect() * and circles are made with ellipse(). Each of these functions requires diff --git a/src/data/examples/en/01_Form/02_Pie_Chart.js b/src/data/examples/en/01_Form/02_Pie_Chart.js index 9e5a538d42..b95d3b6b43 100644 --- a/src/data/examples/en/01_Form/02_Pie_Chart.js +++ b/src/data/examples/en/01_Form/02_Pie_Chart.js @@ -1,5 +1,6 @@ /* * @name Pie Chart + * @arialabel Pie chart on a grey background with the different slices of the pie chart in various shades of grey * @description Uses the arc() function to generate a pie chart from the data * stored in an array. */ diff --git a/src/data/examples/en/01_Form/03_Regular_Polygon.js b/src/data/examples/en/01_Form/03_Regular_Polygon.js index b282c64494..d84740c2fd 100644 --- a/src/data/examples/en/01_Form/03_Regular_Polygon.js +++ b/src/data/examples/en/01_Form/03_Regular_Polygon.js @@ -1,5 +1,6 @@ /* * @name Regular Polygon + * @arialabel Three white shapes with black outlines on a grey background rotating. From left to right, a triangle, icosagon, and a heptagon * @description What is your favorite? Pentagon? Hexagon? Heptagon? No? * What about the icosagon? The polygon() function created for this example is * capable of drawing any regular polygon. Try placing different numbers into diff --git a/src/data/examples/en/01_Form/04_Star.js b/src/data/examples/en/01_Form/04_Star.js index f546a5b0d2..e8dbb998c2 100644 --- a/src/data/examples/en/01_Form/04_Star.js +++ b/src/data/examples/en/01_Form/04_Star.js @@ -1,5 +1,6 @@ /* * @name Star + * @arialabel Grey background with three white shapes rotating with black outlines. From left to right, a 3-pointed star, a 40-pointed shape, and a 5-pointed star * @description The star() function created for this example is capable of * drawing a wide range of different forms. Try placing different numbers * into the star() function calls within draw() to explore. diff --git a/src/data/examples/en/01_Form/05_Triangle_Strip.js b/src/data/examples/en/01_Form/05_Triangle_Strip.js index 3d7ed3622b..be5a1d2807 100644 --- a/src/data/examples/en/01_Form/05_Triangle_Strip.js +++ b/src/data/examples/en/01_Form/05_Triangle_Strip.js @@ -1,5 +1,6 @@ /* * @name Triangle Strip + * @arialabel A ring of white triangles form a heptagon on the grey background. When a user drags their mouse from left to right, the number of triangles increase and create a smoother, circular ring * @description Example by Ira Greenberg. Generate a closed ring using the * vertex() function and beginShape(TRIANGLE_STRIP) mode. The outsideRadius * and insideRadius variables control ring's radii respectively. diff --git a/src/data/examples/en/01_Form/06_Bezier.js b/src/data/examples/en/01_Form/06_Bezier.js index 40325a9858..cef3778da3 100644 --- a/src/data/examples/en/01_Form/06_Bezier.js +++ b/src/data/examples/en/01_Form/06_Bezier.js @@ -1,5 +1,6 @@ /* * @name Bezier + * @arialabel 10 lines in a bezier curve formation. The bottom of the curve does not move but as the user’s mouse moves, the top of the curve follows the left and right movement * @description The first two parameters for the bezier() function specify the * first point in the curve and the last two parameters specify the last point. * The middle parameters set the control points that define the shape of the diff --git a/src/data/examples/en/01_Form/07_3D_Primitives.js b/src/data/examples/en/01_Form/07_3D_Primitives.js index bf925b71ee..89a93fc57f 100644 --- a/src/data/examples/en/01_Form/07_3D_Primitives.js +++ b/src/data/examples/en/01_Form/07_3D_Primitives.js @@ -1,5 +1,6 @@ /* * @name 3D Primitives + * @arialabel Grey background with a dark grey cube in the bottom left corner and a white outlined sphere in the bottom right corner * @frame 720,400 (optional) * @description Placing mathematically 3D objects in synthetic space. * The box() and sphere() functions take at least one parameter to specify their diff --git a/src/data/examples/en/01_Form/08_Trig_Wheels_and_Pie_Chart.js b/src/data/examples/en/01_Form/08_Trig_Wheels_and_Pie_Chart.js index 20597a112e..dcbf6dfd29 100644 --- a/src/data/examples/en/01_Form/08_Trig_Wheels_and_Pie_Chart.js +++ b/src/data/examples/en/01_Form/08_Trig_Wheels_and_Pie_Chart.js @@ -1,5 +1,6 @@ /* * @name Trig Wheels and Pie Chart + * @arialabel Two circles on a white background. One circle has slices of various colors. One circle is comprised of rectangles spiraled into a circle shape in a rainbow gradient * @frame 400,400 * @description contributed by Prof WM Harris, How to create diff --git a/src/data/examples/en/02_Data/00_Variables.js b/src/data/examples/en/02_Data/00_Variables.js index d30fbd12d5..95b750da04 100644 --- a/src/data/examples/en/02_Data/00_Variables.js +++ b/src/data/examples/en/02_Data/00_Variables.js @@ -1,5 +1,6 @@ /* * @name Variables + * @arialabel Black background with three sets of grey lines that form rectangles. * @description Variables are used for storing values. In this example, change * the values of variables to affect the composition. */ diff --git a/src/data/examples/en/02_Data/01_True_and_False.js b/src/data/examples/en/02_Data/01_True_and_False.js index ca32f3c0cf..d86f218d15 100644 --- a/src/data/examples/en/02_Data/01_True_and_False.js +++ b/src/data/examples/en/02_Data/01_True_and_False.js @@ -1,5 +1,6 @@ /* * @name True and False + * @arialabel Black background with vertical white lines on the left half and horizontal white lines on the right half * @description A Boolean variable has only two possible values: true or false. * It is common to use Booleans with control statements to determine the flow * of a program. In this example, when the boolean value "b" is true, vertical diff --git a/src/data/examples/en/02_Data/03_Variable_Scope.js b/src/data/examples/en/02_Data/03_Variable_Scope.js index a9e262c39e..a58724046a 100644 --- a/src/data/examples/en/02_Data/03_Variable_Scope.js +++ b/src/data/examples/en/02_Data/03_Variable_Scope.js @@ -1,5 +1,6 @@ /* * @name Variable Scope + * @arialabel Black background with vertical white lines condensed on the left side * @description Variables have a global or function "scope". For example, * variables declared within either the setup() or draw() functions may be * only used in these functions. Global variables, variables declared outside diff --git a/src/data/examples/en/02_Data/04_Numbers.js b/src/data/examples/en/02_Data/04_Numbers.js index de4d0ea147..b786a524b5 100644 --- a/src/data/examples/en/02_Data/04_Numbers.js +++ b/src/data/examples/en/02_Data/04_Numbers.js @@ -1,5 +1,6 @@ /* * @name Numbers + * @arialabel A black background with one white vertical line on the top half and one on the bottom. Both lines move from the left to the right of the screen with the top vertical line moving faster than the bottom. * @frame 720,400 * @description Numbers can be written with or without decimals. An integer * (more commonly called an int) is a number without a decimal point. A float diff --git a/src/data/examples/en/03_Arrays/00_Array.js b/src/data/examples/en/03_Arrays/00_Array.js index cfee6876d5..0c245ea30f 100644 --- a/src/data/examples/en/03_Arrays/00_Array.js +++ b/src/data/examples/en/03_Arrays/00_Array.js @@ -1,5 +1,6 @@ /* * @name Array + * @arialabel Vertical lines are graphed across a white background to visualize the values of a cosine curve * @description An array is a list of data. Each piece of data in an array * is identified by an index number representing its position in * the array. Arrays are zero based, which means that the first diff --git a/src/data/examples/en/03_Arrays/01_Array_2d.js b/src/data/examples/en/03_Arrays/01_Array_2d.js index 87809b11ab..82f04efe9a 100644 --- a/src/data/examples/en/03_Arrays/01_Array_2d.js +++ b/src/data/examples/en/03_Arrays/01_Array_2d.js @@ -1,5 +1,6 @@ /* * @name Array 2D + * @arialabel A grid of dots drawn on a black background. Dots closer to the center are darker in color and dots further away from the center are whiter in color * @description Demonstrates the syntax for creating a two-dimensional (2D) * array. Values in a 2D array are accessed through two index values. * 2D arrays are useful for storing images. In this example, each dot diff --git a/src/data/examples/en/03_Arrays/02_Array_Objects.js b/src/data/examples/en/03_Arrays/02_Array_Objects.js index 417b5c49a7..cae5bc765e 100644 --- a/src/data/examples/en/03_Arrays/02_Array_Objects.js +++ b/src/data/examples/en/03_Arrays/02_Array_Objects.js @@ -1,5 +1,6 @@ /* * @name Array Objects + * @arialabel Small white circles all over a black background that move side to side and sometimes collide and bounce off of each other * @description Demonstrates the syntax for creating an array of custom objects. */ diff --git a/src/data/examples/en/03_Arrays/03_Walk_Over_2dArray.js b/src/data/examples/en/03_Arrays/03_Walk_Over_2dArray.js index e5577e7383..b8e6d5431d 100644 --- a/src/data/examples/en/03_Arrays/03_Walk_Over_2dArray.js +++ b/src/data/examples/en/03_Arrays/03_Walk_Over_2dArray.js @@ -1,5 +1,6 @@ /* * @name Walk Over 2dArray + * @arialabel 20 phrases in black text are arranged on a black background with 4 phrases in a row, 5 rows total * @frame 400,400 * @description contributed by Prof WM Harris, How to display 2D array contents on the canvas diff --git a/src/data/examples/en/04_Control/00_Iteration.js b/src/data/examples/en/04_Control/00_Iteration.js index 6d940fbb85..6d51a4c860 100644 --- a/src/data/examples/en/04_Control/00_Iteration.js +++ b/src/data/examples/en/04_Control/00_Iteration.js @@ -1,5 +1,6 @@ /* * @name Iteration + * @arialabel White bars on the top half of the screen intersect with thin lines on the left and dark grey bars on the right * @description Iteration with a "for" structure to construct repetitive forms. */ let y; diff --git a/src/data/examples/en/04_Control/01_Embedded_Iteration.js b/src/data/examples/en/04_Control/01_Embedded_Iteration.js index 58163705a6..ff7b852a8e 100644 --- a/src/data/examples/en/04_Control/01_Embedded_Iteration.js +++ b/src/data/examples/en/04_Control/01_Embedded_Iteration.js @@ -1,5 +1,6 @@ /* * @name Embedded Iteration + * @arialabel Rays emerge from the center of the screen to the edges. There is also a square grid of white circles over the window * @description Embedding "for" structures allows repetition in two dimensions. */ function setup() { diff --git a/src/data/examples/en/04_Control/02_Conditionals_1.js b/src/data/examples/en/04_Control/02_Conditionals_1.js index 935bbbc919..e3b6b582f1 100644 --- a/src/data/examples/en/04_Control/02_Conditionals_1.js +++ b/src/data/examples/en/04_Control/02_Conditionals_1.js @@ -1,5 +1,6 @@ /* * @name Conditionals 1 + * @arialabel Pattern of alternating long and short lines * @description Conditions are like questions. * They allow a program to decide to take one action if * the answer to a question is true or to do another action diff --git a/src/data/examples/en/04_Control/03_Conditionals_2.js b/src/data/examples/en/04_Control/03_Conditionals_2.js index 71487dc708..a84c2ba04a 100644 --- a/src/data/examples/en/04_Control/03_Conditionals_2.js +++ b/src/data/examples/en/04_Control/03_Conditionals_2.js @@ -1,5 +1,6 @@ /* * @name Conditionals 2 + * @arialabel The top half of the window has spaced out vertical lines. The bottom half of the window has more condensed vertical lines * @description We extend the language of conditionals from the previous * example by adding the keyword "else". This allows conditionals * to ask two or more sequential questions, each with a different diff --git a/src/data/examples/en/04_Control/04_Logical_Operators.js b/src/data/examples/en/04_Control/04_Logical_Operators.js index aef6f2f0ff..7cc4decc76 100644 --- a/src/data/examples/en/04_Control/04_Logical_Operators.js +++ b/src/data/examples/en/04_Control/04_Logical_Operators.js @@ -1,5 +1,6 @@ /* * @name Logical Operators + * @arialabel Horizontal black lines across half of a grey background. Part of these lines are shifted left and there are vertical lines of dots above and below this * @description The logical operators for AND (&&) and OR (||) are used to * combine simple relational statements into more complex expressions. * The NOT (!) operator is used to negate a boolean statement. diff --git a/src/data/examples/en/04_Control/05_Logical_Operators_2.js b/src/data/examples/en/04_Control/05_Logical_Operators_2.js index 2684feb956..17b32a83a6 100644 --- a/src/data/examples/en/04_Control/05_Logical_Operators_2.js +++ b/src/data/examples/en/04_Control/05_Logical_Operators_2.js @@ -1,5 +1,6 @@ /* * @name Logical Operators 2 + * @arialabel Squares travel diagonally across the screen when a rectangle on the screen is pressed * @frame 400,400 * @description contributed by Prof WM Harris, How diff --git a/src/data/examples/en/04_Control/06_Conditional_Shapes.js b/src/data/examples/en/04_Control/06_Conditional_Shapes.js index 8d544e9081..f3562640ee 100644 --- a/src/data/examples/en/04_Control/06_Conditional_Shapes.js +++ b/src/data/examples/en/04_Control/06_Conditional_Shapes.js @@ -1,5 +1,6 @@ /* * @name Conditional Shapes + * @arialabel The middle of the window is white and the user’s mouse draws red dots within it. The side edges of the window are beige and as the user’s mouse travels up and down the edges, orange squares with a red border are drawn up and down the center of the window * @frame 400,400 * @description contributed by Prof WM Harris, How diff --git a/src/data/examples/en/05_Image/00_Load_and_Display_Image.js b/src/data/examples/en/05_Image/00_Load_and_Display_Image.js index 9824b68d46..2d4c70b8a8 100644 --- a/src/data/examples/en/05_Image/00_Load_and_Display_Image.js +++ b/src/data/examples/en/05_Image/00_Load_and_Display_Image.js @@ -1,5 +1,6 @@ /* * @name Load and Display Image + * @arialabel An astronaut on a planet with the same image in a smaller size in the bottom left quarter * @description Images can be loaded and displayed to the screen at their * actual size or any other size. *

        To run this example locally, you will need an diff --git a/src/data/examples/en/05_Image/01_Background_Image.js b/src/data/examples/en/05_Image/01_Background_Image.js index 80a63e461a..32a6af747c 100644 --- a/src/data/examples/en/05_Image/01_Background_Image.js +++ b/src/data/examples/en/05_Image/01_Background_Image.js @@ -1,5 +1,6 @@ /* * @name Background Image + * @arialabel An astronaut on a planet with a horizontal yellow line traveling from the top to the bottom of the image * @description This example presents the fastest way to load a * background image. To load an image as the background, * it must be the same width and height as the program. diff --git a/src/data/examples/en/05_Image/02_Transparency.js b/src/data/examples/en/05_Image/02_Transparency.js index 39cb96bb6a..8a12536041 100644 --- a/src/data/examples/en/05_Image/02_Transparency.js +++ b/src/data/examples/en/05_Image/02_Transparency.js @@ -1,5 +1,6 @@ /* * @name Transparency + * @arialabel An astronaut on planet as the background with a slightly transparent version of this image on top that moves with the horizontal direction of the user’s mouse * @description Move the pointer left and right across the image to change its * position. This program overlays one image over another by modifying the * alpha value of the image with the tint() function. diff --git a/src/data/examples/en/05_Image/03_Alpha_Mask.js b/src/data/examples/en/05_Image/03_Alpha_Mask.js index 0e57e3533c..477fc3bf89 100644 --- a/src/data/examples/en/05_Image/03_Alpha_Mask.js +++ b/src/data/examples/en/05_Image/03_Alpha_Mask.js @@ -1,5 +1,6 @@ /* * @name Alpha Mask + * @arialabel An astronaut on a planet as the background with a slightly transparent version of this image on top that moves with the horizontal direction of the user’s mouse. Both have a light blue gradient on the right side. * @description Loads a "mask" for an image to specify the transparency in * different parts of the image. The two images are blended together using * the mask() method of p5.Image. diff --git a/src/data/examples/en/05_Image/04_Create_Image.js b/src/data/examples/en/05_Image/04_Create_Image.js index 481f4b0ce4..cd2e0b9ec0 100644 --- a/src/data/examples/en/05_Image/04_Create_Image.js +++ b/src/data/examples/en/05_Image/04_Create_Image.js @@ -1,5 +1,6 @@ /* * @name Create Image + * @arialabel Black background with a blue gradient square on the left. Another blue gradient square follows the user’s mouse as it moves * @description The createImage() function provides a fresh buffer of pixels to * play with. This example creates an image gradient. */ diff --git a/src/data/examples/en/05_Image/05_Pointillism.js b/src/data/examples/en/05_Image/05_Pointillism.js index e256756c9e..22c60611c0 100644 --- a/src/data/examples/en/05_Image/05_Pointillism.js +++ b/src/data/examples/en/05_Image/05_Pointillism.js @@ -1,5 +1,6 @@ /* * @name Pointillism + * @arialabel Dots generate on the screen. As the user’s mouse moves left the dots become smaller and as the user’s mouse moves right, the dots become bigger. The colors of the dots are dependent on an image of choice * @description By Dan Shiffman. Mouse horizontal location controls size of * dots. Creates a simple pointillist effect using ellipses colored according * to pixels in an image. diff --git a/src/data/examples/en/05_Image/06_Blur.js b/src/data/examples/en/05_Image/06_Blur.js index 2374bc0345..f2992b49ba 100644 --- a/src/data/examples/en/05_Image/06_Blur.js +++ b/src/data/examples/en/05_Image/06_Blur.js @@ -1,5 +1,6 @@ /* * @name Blur + * @arialabel Astronaut rendered in black and white on the left and a blurred version of the image on the right * @description A low-pass filter that blurs an image. This program analyzes every pixel in an image and blends it with all the neighboring pixels to blur the image. *

        This example is ported from the Blur example * on the Processing website diff --git a/src/data/examples/en/05_Image/07_EdgeDetection.js b/src/data/examples/en/05_Image/07_EdgeDetection.js index 5eff38c2d2..5a8fb552ae 100644 --- a/src/data/examples/en/05_Image/07_EdgeDetection.js +++ b/src/data/examples/en/05_Image/07_EdgeDetection.js @@ -1,5 +1,6 @@ /* * @name Edge Detection + * @arialabel Astronaut rendered in black and white on the left and a highly sharpened version of the image on the right * @description A high-pass filter sharpens an image. This program analyzes every pixel in an image in relation to the neighboring pixels to sharpen the image. *

        This example is ported from the Edge Detection example * on the Processing website diff --git a/src/data/examples/en/05_Image/08_Brightness.js b/src/data/examples/en/05_Image/08_Brightness.js index 3c58a98876..c3f5e66f28 100644 --- a/src/data/examples/en/05_Image/08_Brightness.js +++ b/src/data/examples/en/05_Image/08_Brightness.js @@ -1,5 +1,6 @@ /* * @name Brightness + * @arialabel Astronaut rendered in black and white is covered with a black screen. The user’s mouse acts as a flashlight and parts of the image are illuminated as the user’s mouse travels over * @description This program adjusts the brightness of a part of the image by calculating the distance of each pixel to the mouse. *

        This example is ported from the Brightness example * on the Processing website diff --git a/src/data/examples/en/05_Image/09_Convolution.js b/src/data/examples/en/05_Image/09_Convolution.js index eb953c6729..4b9af4343d 100644 --- a/src/data/examples/en/05_Image/09_Convolution.js +++ b/src/data/examples/en/05_Image/09_Convolution.js @@ -1,5 +1,6 @@ /* * @name Convolution + * @arialabel An astronaut on a planet. As the user’s mouse moves, a square section increasing the sharpness of the image also moves * @description Applies a convolution matrix to a portion of an image. Move mouse to apply filter to different parts of the image. This example is a port of Dan Shiffman's example for Processing. Original comments written by Dan unless otherwise specified. *

        To run this example locally, you will need an * image file, and a running diff --git a/src/data/examples/en/05_Image/10_Copy_Method.js b/src/data/examples/en/05_Image/10_Copy_Method.js index 8fc5ba179d..eb9966e40e 100644 --- a/src/data/examples/en/05_Image/10_Copy_Method.js +++ b/src/data/examples/en/05_Image/10_Copy_Method.js @@ -1,20 +1,21 @@ -/* - * @name Copy() method - * @frame 600,400 - * @description An example of how to simulate coloring image with the copy() method. - */ -let draft, ready; -function preload() { - ready = loadImage("assets/parrot-color.png"); - draft = loadImage("assets/parrot-bw.png"); -} -function setup() { - createCanvas(600, 400); - noCursor(); - cursor("assets/brush.png", 20, -10); - image(ready, 0, 0); - image(draft, 0, 0); -} -function mouseDragged() { - copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); -} +/* + * @name Copy() method + * @arialabel Parrot rendered in black and white. The user’s cursor is a paint brush and as the user presses and holds on the image, the area becomes colored + * @frame 600,400 + * @description An example of how to simulate coloring image with the copy() method. + */ +let draft, ready; +function preload() { + ready = loadImage("assets/parrot-color.png"); + draft = loadImage("assets/parrot-bw.png"); +} +function setup() { + createCanvas(600, 400); + noCursor(); + cursor("assets/brush.png", 20, -10); + image(ready, 0, 0); + image(draft, 0, 0); +} +function mouseDragged() { + copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); +} diff --git a/src/data/examples/en/07_Color/00_Hue.js b/src/data/examples/en/07_Color/00_Hue.js index bb1e02ed95..7ea8fc1cbc 100644 --- a/src/data/examples/en/07_Color/00_Hue.js +++ b/src/data/examples/en/07_Color/00_Hue.js @@ -1,5 +1,6 @@ /* * @name Hue + * @arialabel Vertical bars of color appear in a gradient pattern as the user drags their mouse across the screen * @description Hue is the color reflected from or transmitted through an * object and is typically referred to as the name of the color (red, blue, * yellow, etc.) Move the cursor vertically over each bar to alter its hue. diff --git a/src/data/examples/en/07_Color/01_Saturation.js b/src/data/examples/en/07_Color/01_Saturation.js index 7394cf7dbf..27ff14d3f8 100644 --- a/src/data/examples/en/07_Color/01_Saturation.js +++ b/src/data/examples/en/07_Color/01_Saturation.js @@ -1,5 +1,6 @@ /* * @name Saturation + * @arialabel Vertical bars of color appear in a gradient rainbow pattern as the user drags their mouse across the screen. The saturation of these bars change as the user’s mouse drags through * @description Saturation is the strength or purity of the color and * represents the amount of gray in proportion to the hue. A "saturated" * color is pure and an "unsaturated" color has a large percentage of gray. diff --git a/src/data/examples/en/07_Color/02_Brightness.js b/src/data/examples/en/07_Color/02_Brightness.js index 17f29af7f2..e94eb2cd2e 100644 --- a/src/data/examples/en/07_Color/02_Brightness.js +++ b/src/data/examples/en/07_Color/02_Brightness.js @@ -1,5 +1,6 @@ /* * @name Brightness + * @arialabel A black and white photograph of an astronaut on the moon covered by black. The mouse acts as a light and a circular area of the photograph is illuminated where the mouse hovers * @description By Dan Shiffman. This program adjusts the brightness of a part * of the image by calculating the distance of each pixel to the mouse. *

        To run this example locally, you will need diff --git a/src/data/examples/en/07_Color/03_Color_Variables.js b/src/data/examples/en/07_Color/03_Color_Variables.js index 2151681561..5c211264dc 100644 --- a/src/data/examples/en/07_Color/03_Color_Variables.js +++ b/src/data/examples/en/07_Color/03_Color_Variables.js @@ -1,5 +1,6 @@ /* * @name Color Variables + * @arialabel Two squares on a brown background. Both squares are made up of two squares in a larger square. On the left, the outer square is burnt umber, the middle square is golden, and the center square is orange. On the right, the outer square is orange, the middle is burnt umber, and the middle is golden * @description (Homage to Albers.) This example creates variables for colors * that may be referred to in the program by a name, rather than a number. */ diff --git a/src/data/examples/en/07_Color/04_Relativity.js b/src/data/examples/en/07_Color/04_Relativity.js index 010ef7489f..ebeaa83a33 100644 --- a/src/data/examples/en/07_Color/04_Relativity.js +++ b/src/data/examples/en/07_Color/04_Relativity.js @@ -1,5 +1,6 @@ /* * @name Relativity + * @arialabel 4 vertical stripes in grey, blue, green, and orange. They are displayed in a different order on the top half of the screen compared to the bottom half and this causes the colors to be perceived differently * @description Each color is perceived in relation to other colors. The top * and bottom bars each contain the same component colors, but a different * display order causes individual colors to appear differently. diff --git a/src/data/examples/en/07_Color/05_Linear_Gradient.js b/src/data/examples/en/07_Color/05_Linear_Gradient.js index a99dcbbdf7..6e1b589d04 100644 --- a/src/data/examples/en/07_Color/05_Linear_Gradient.js +++ b/src/data/examples/en/07_Color/05_Linear_Gradient.js @@ -1,5 +1,6 @@ /* * @name Linear Gradient + * @arialabel The background is white on the left and right sides and gradients to a black at the center. There are two long rectangles on the background gradient. The top rectangle has orange on the top of the rectangle and gradients to blue on the bottom. The bottom rectangle starts with blue on the left side and gradients to orange on the right * @description The lerpColor() function is useful for interpolating between * two colors. */ diff --git a/src/data/examples/en/07_Color/06_Radial_Gradient.js b/src/data/examples/en/07_Color/06_Radial_Gradient.js index 51e1f37404..0882cb7ccb 100644 --- a/src/data/examples/en/07_Color/06_Radial_Gradient.js +++ b/src/data/examples/en/07_Color/06_Radial_Gradient.js @@ -1,5 +1,6 @@ /* * @name Radial Gradient + * @arialabel Three circles on a black background. The middle circle is completely visible but the user can only see half of the other two. There is a gradiant from the center of the circle to the outer edge that changes every second * @description Draws a series of concentric circles to create a gradient * from one color to another. */ diff --git a/src/data/examples/en/07_Color/07_Lerp_Color.js b/src/data/examples/en/07_Color/07_Lerp_Color.js index 471a2df17e..6bdf1d46eb 100644 --- a/src/data/examples/en/07_Color/07_Lerp_Color.js +++ b/src/data/examples/en/07_Color/07_Lerp_Color.js @@ -1,5 +1,6 @@ /* * @name Lerp Color + * @arialabel Four piles of triangles in random sizes: red, maroon, purple, and blue. The triangles move around within their pile to form different designs * @description Loop random shapes, * lerp color from red to blue. */ diff --git a/src/data/examples/en/08_Math/00_incrementdecrement.js b/src/data/examples/en/08_Math/00_incrementdecrement.js index 0b3d64d6e6..082922a048 100644 --- a/src/data/examples/en/08_Math/00_incrementdecrement.js +++ b/src/data/examples/en/08_Math/00_incrementdecrement.js @@ -1,5 +1,6 @@ /* * @name Increment Decrement + * @arialabel Two black gradient rectangles on the bottom right and top left of the screen travel horizontally to the other side and leave a gradient grey path behind * @description Writing "a++" is equivalent to "a = a + 1". * Writing "a--" is equivalent to "a = a - 1". */ diff --git a/src/data/examples/en/08_Math/01_operatorprecedence.js b/src/data/examples/en/08_Math/01_operatorprecedence.js index 175054f692..c42516635f 100644 --- a/src/data/examples/en/08_Math/01_operatorprecedence.js +++ b/src/data/examples/en/08_Math/01_operatorprecedence.js @@ -1,5 +1,6 @@ /* * @name Operator Precedence + * @arialabel Grey background with two rectangles outlined in white on the left, and white vertical lines on the top and bottom * @description If you don't explicitly state the order in which an * expression is evaluated, they are evaluated based on the operator * precedence. For example, in the statement "4+2*8", the 2 will diff --git a/src/data/examples/en/08_Math/02_distance1d.js b/src/data/examples/en/08_Math/02_distance1d.js index 7005d3a17b..0238a94c36 100644 --- a/src/data/examples/en/08_Math/02_distance1d.js +++ b/src/data/examples/en/08_Math/02_distance1d.js @@ -1,5 +1,6 @@ /* * @name Distance 1D + * @arialabel One thin grey bar and wider grey bar travel on the top half of the screen, and another set of these two bars travel on the bottom half. The bars change speed and direction as the user’s mouse moves across the screen * @description Move the mouse left and right to control * the speed and direction of the moving shapes. */ diff --git a/src/data/examples/en/08_Math/03_distance2d.js b/src/data/examples/en/08_Math/03_distance2d.js index 22bfcc1853..951edbd803 100644 --- a/src/data/examples/en/08_Math/03_distance2d.js +++ b/src/data/examples/en/08_Math/03_distance2d.js @@ -1,5 +1,6 @@ /* * @name Distance 2D + * @arialabel The user’s mouse creates a gradient of circles that decrease in size the closer they are to the mouse as it moves across the screen * @description Move the mouse across the image to obscure * and reveal the matrix. Measures the distance from the mouse * to each circle and sets the size proportionally. diff --git a/src/data/examples/en/08_Math/04_sine.js b/src/data/examples/en/08_Math/04_sine.js index 810d8a27be..3e8a4733d8 100644 --- a/src/data/examples/en/08_Math/04_sine.js +++ b/src/data/examples/en/08_Math/04_sine.js @@ -1,5 +1,6 @@ /* * @name Sine + * @arialabel Three yellow circles grow larger and smaller on a black background * @description Smoothly scaling size with the sin() function. */ let diameter; diff --git a/src/data/examples/en/08_Math/05_sincosine.js b/src/data/examples/en/08_Math/05_sincosine.js index 65966b9cbf..9577d762d8 100644 --- a/src/data/examples/en/08_Math/05_sincosine.js +++ b/src/data/examples/en/08_Math/05_sincosine.js @@ -1,5 +1,6 @@ /* * @name Sine Cosine + * @arialabel Two blue and two yellow circles move side to side on each side of a white square * @description Linear movement with sin() and cos(). * Numbers between 0 and 2π (2π which angles roughly 6.28) * are put into these functions and numbers between -1 and 1 are returned. diff --git a/src/data/examples/en/08_Math/06_sinewave.js b/src/data/examples/en/08_Math/06_sinewave.js index f52d7b1368..728c16284f 100644 --- a/src/data/examples/en/08_Math/06_sinewave.js +++ b/src/data/examples/en/08_Math/06_sinewave.js @@ -1,5 +1,6 @@ /* * @name Sine Wave + * @arialabel White circles line up to form a sine wave that moves across the black screen * @description Render a simple sine wave. * Original by Daniel Shiffman. */ diff --git a/src/data/examples/en/08_Math/07_additivewave.js b/src/data/examples/en/08_Math/07_additivewave.js index ade6a96075..0ab818066e 100644 --- a/src/data/examples/en/08_Math/07_additivewave.js +++ b/src/data/examples/en/08_Math/07_additivewave.js @@ -1,5 +1,6 @@ /* * @name Additive Wave + * @arialabel Slightly opaque white circles line up to form waves that moves ross the black screen * @description Create a more complex wave by adding two waves together. * Original by Daniel Shiffman */ diff --git a/src/data/examples/en/08_Math/08_polartocartesian.js b/src/data/examples/en/08_Math/08_polartocartesian.js index ed481bf2cc..6c2dff4b81 100644 --- a/src/data/examples/en/08_Math/08_polartocartesian.js +++ b/src/data/examples/en/08_Math/08_polartocartesian.js @@ -1,5 +1,6 @@ /* * @name PolarToCartesian + * @arialabel Grey circle travels faster and faster in a circle path on a black background * @description Convert a polar coordinate (r,θ) * to cartesian (x,y): x = r cos(θ), y = r sin(θ) * Original by Daniel Shiffman. diff --git a/src/data/examples/en/08_Math/09_arctangent.js b/src/data/examples/en/08_Math/09_arctangent.js index cc90d4499b..83a135efe9 100644 --- a/src/data/examples/en/08_Math/09_arctangent.js +++ b/src/data/examples/en/08_Math/09_arctangent.js @@ -1,5 +1,6 @@ /* * @name Arctangent + * @arialabel Three white circles have smaller green circles within them resembling eyes where the pupil, represented by the green circle, looks in the direction of where the user’s mouse is * @description Move the mouse to change the direction of the eyes.
        The atan2() function computes the angle from each eye to the cursor. */ let e1, e2, e3; diff --git a/src/data/examples/en/08_Math/10_Interpolate.js b/src/data/examples/en/08_Math/10_Interpolate.js index 27ec95ef92..e6b1c5c55b 100644 --- a/src/data/examples/en/08_Math/10_Interpolate.js +++ b/src/data/examples/en/08_Math/10_Interpolate.js @@ -1,5 +1,6 @@ /* * @name Linear Interpolation + * @arialabel White circle follows the user’s mouse around the screen * @frame 720, 400 * @description Move the mouse across the screen and the symbol will follow. * Between drawing each frame of the animation, the ellipse moves part diff --git a/src/data/examples/en/08_Math/11_doubleRandom.js b/src/data/examples/en/08_Math/11_doubleRandom.js index 5abd9f7b01..946d268673 100644 --- a/src/data/examples/en/08_Math/11_doubleRandom.js +++ b/src/data/examples/en/08_Math/11_doubleRandom.js @@ -1,5 +1,6 @@ /* * @name Double Random + * @arialabel Little white dots clump around the horizontal axis on the middle of the screen and change positions every second between being more condensed and scattered * @frame 720,400 (optional) * @description Using two random() calls and the point() * function to create an irregular sawtooth line. diff --git a/src/data/examples/en/08_Math/12_random.js b/src/data/examples/en/08_Math/12_random.js index 6475297be5..0d150abf10 100644 --- a/src/data/examples/en/08_Math/12_random.js +++ b/src/data/examples/en/08_Math/12_random.js @@ -1,5 +1,6 @@ /* * @name Random + * @arialabel Various shades of grey bars change patterns randomly every half a second * @description Random numbers create the basis of this image. * Each time the program is loaded the result is different. */ diff --git a/src/data/examples/en/08_Math/13_noise1D.js b/src/data/examples/en/08_Math/13_noise1D.js index a9704cd9fe..12d20b9a6b 100644 --- a/src/data/examples/en/08_Math/13_noise1D.js +++ b/src/data/examples/en/08_Math/13_noise1D.js @@ -1,5 +1,6 @@ /* * @name Noise1D + * @arialabel White circle travels side to side based on perlin noise * @description Using 1D Perlin Noise to assign location. */ let xoff = 0.0; diff --git a/src/data/examples/en/08_Math/14_noisewave.js b/src/data/examples/en/08_Math/14_noisewave.js index df1b1e0a24..b953310739 100644 --- a/src/data/examples/en/08_Math/14_noisewave.js +++ b/src/data/examples/en/08_Math/14_noisewave.js @@ -1,5 +1,6 @@ /* * @name Noise Wave + * @arialabel Wave shapes are generated by perlin noise * @description Using Perlin Noise to generate a wave-like pattern. * Original by Daniel Shiffman. */ diff --git a/src/data/examples/en/08_Math/15_Noise2D.js b/src/data/examples/en/08_Math/15_Noise2D.js index 2aec0d5690..be75543d2b 100644 --- a/src/data/examples/en/08_Math/15_Noise2D.js +++ b/src/data/examples/en/08_Math/15_Noise2D.js @@ -1,5 +1,6 @@ /* * @name Noise2D + * @arialabel Two gradient, perlin noises, one on the left and one on the right * @frame 710,400 (optional) * @description Create a 2D noise with different parameters. * @@ -17,7 +18,7 @@ function draw() { // Draw the left half of image for (let y = 0; y < height - 30; y++) { for (let x = 0; x < width / 2; x++) { - // noiceDetail of the pixels octave count and falloff value + // noiseDetail of the pixels octave count and falloff value noiseDetail(2, 0.2); noiseVal = noise((mouseX + x) * noiseScale, (mouseY + y) * noiseScale); stroke(noiseVal * 255); @@ -27,7 +28,7 @@ function draw() { // Draw the right half of image for (let y = 0; y < height - 30; y++) { for (let x = width / 2; x < width; x++) { - // noiceDetail of the pixels octave count and falloff value + // noiseDetail of the pixels octave count and falloff value noiseDetail(5, 0.5); noiseVal = noise((mouseX + x) * noiseScale, (mouseY + y) * noiseScale); stroke(noiseVal * 255); @@ -37,6 +38,6 @@ function draw() { //Show the details of two partitions textSize(18); fill(255, 255, 255); - text('Noice2D with 2 octaves and 0.2 falloff', 10, 350); - text('Noice2D with 1 octaves and 0.7 falloff', 330, 350); + text('Noise2D with 2 octaves and 0.2 falloff', 10, 350); + text('Noise2D with 1 octaves and 0.7 falloff', 330, 350); } diff --git a/src/data/examples/en/08_Math/16_Noise3D.js b/src/data/examples/en/08_Math/16_Noise3D.js index 94bd75841d..82ccbe67ea 100644 --- a/src/data/examples/en/08_Math/16_Noise3D.js +++ b/src/data/examples/en/08_Math/16_Noise3D.js @@ -1,5 +1,6 @@ /* * @name Noise3D + * @arialabel Gradient noise * @frame 710,400 (optional) * @description Using 3D noise to create simple animated texture. */ diff --git a/src/data/examples/en/08_Math/17_Randomchords.js b/src/data/examples/en/08_Math/17_Randomchords.js index 709a148655..94c3de0a1d 100644 --- a/src/data/examples/en/08_Math/17_Randomchords.js +++ b/src/data/examples/en/08_Math/17_Randomchords.js @@ -1,5 +1,6 @@ /* * @name Random Chords + * @arialabel Random lines are drawn from one side of a circle to the other until it looks like a shaded sphere * @description Accumulates random chords of a circle. Each chord in translucent * so they accumulate to give the illusion of a shaded sphere. * Contributed by Aatish Bhatia, inspired by
        Anders Hoff diff --git a/src/data/examples/en/08_Math/18_randomGaussian.js b/src/data/examples/en/08_Math/18_randomGaussian.js index a92e7d76a9..8874f4cae2 100644 --- a/src/data/examples/en/08_Math/18_randomGaussian.js +++ b/src/data/examples/en/08_Math/18_randomGaussian.js @@ -1,8 +1,10 @@ /* * @name Random Gaussian + * @arialabel Translucent white circles are drawn in a line left and right multiple times until they overlap to form a white streak * @frame 720,400 * @description This sketch draws ellipses with x and y locations tied to a gaussian distribution of random numbers. - * (ported from https://processing.org/examples/randomgaussian.html) + *

        This example is ported from the Random Gaussian example + * on the Processing website */ function setup() { diff --git a/src/data/examples/en/08_Math/19_Map.js b/src/data/examples/en/08_Math/19_Map.js index 2411d7e852..feeed43c2a 100644 --- a/src/data/examples/en/08_Math/19_Map.js +++ b/src/data/examples/en/08_Math/19_Map.js @@ -1,5 +1,6 @@ /* * @name Map + * @arialabel Red circle grows larger and turns more yellow as the user’s mouse moves right on the screen and does the opposite as the user’s mouse moves left * @description Use the map() function to take any number and scale it to a * new number that is more useful for the project that you are working on. * For example, use the numbers from the mouse position to control the size or color of a shape. diff --git a/src/data/examples/en/08_Math/20_Graphing2DEquations.js b/src/data/examples/en/08_Math/20_Graphing2DEquations.js index af71814bbb..1e22963abd 100644 --- a/src/data/examples/en/08_Math/20_Graphing2DEquations.js +++ b/src/data/examples/en/08_Math/20_Graphing2DEquations.js @@ -1,5 +1,6 @@ /** * @name Graphing 2D Equations + * @arialabel Rays in a black and white pattern swirl together as the user’s mouse moves right and unswirl as the user’s mouse moves left * @frame 710, 400 * @description Graphics the following equation: sin(n cos(r) + 5θ) where n is a function of horizontal mouse location. Original by Daniel Shiffman */ diff --git a/src/data/examples/en/08_Math/21_parametricEquation.js b/src/data/examples/en/08_Math/21_parametricEquation.js index 83c1a3c336..d52dbfdc0a 100644 --- a/src/data/examples/en/08_Math/21_parametricEquation.js +++ b/src/data/examples/en/08_Math/21_parametricEquation.js @@ -1,5 +1,6 @@ /* * @name Parametric Equations + * @arialabel Black vertical lines travel in a spiral pattern in a 3D space * @description A parametric equation is where x and y * coordinates are both written in terms of another letter. This is * called a parameter and is usually given in the letter t or θ. diff --git a/src/data/examples/en/09_Simulate/00_Forces.js b/src/data/examples/en/09_Simulate/00_Forces.js index 653c3992a1..224dbdaf27 100644 --- a/src/data/examples/en/09_Simulate/00_Forces.js +++ b/src/data/examples/en/09_Simulate/00_Forces.js @@ -1,5 +1,6 @@ /* * @name Forces + * @arialabel 9 grey balls drop from the top of the window and slow down as they reach the bottom half of the screen which is dark grey in color. Their change in speed mimics objects slowing down due to water resistance * @description Demonstration of multiple force acting on bodies * (natureofcode.com) */ diff --git a/src/data/examples/en/09_Simulate/01_ParticleSystem.js b/src/data/examples/en/09_Simulate/01_ParticleSystem.js index a026e4623c..6cfe27a74a 100644 --- a/src/data/examples/en/09_Simulate/01_ParticleSystem.js +++ b/src/data/examples/en/09_Simulate/01_ParticleSystem.js @@ -1,5 +1,6 @@ /* * @name Particle System + * @arialabel Light grey circles flowing out from a point like a sparkler * @description This is a basic Particle System * (natureofcode.com) */ diff --git a/src/data/examples/en/09_Simulate/02_Flocking.js b/src/data/examples/en/09_Simulate/02_Flocking.js index 345a22721d..832b1d60f4 100644 --- a/src/data/examples/en/09_Simulate/02_Flocking.js +++ b/src/data/examples/en/09_Simulate/02_Flocking.js @@ -1,5 +1,6 @@ /* * @name Flocking + * @arialabel Groups of little grey triangles moving across a darker grey background * @description Demonstration of Craig Reynolds' "Flocking" behavior. * See: http://www.red3d.com/cwr/ * Rules: Cohesion, Separation, Alignment diff --git a/src/data/examples/en/09_Simulate/03_WolframCA.js b/src/data/examples/en/09_Simulate/03_WolframCA.js index 06b9bc5765..15f5030d4e 100644 --- a/src/data/examples/en/09_Simulate/03_WolframCA.js +++ b/src/data/examples/en/09_Simulate/03_WolframCA.js @@ -1,5 +1,6 @@ /* * @name Wolfram CA + * @arialabel 1-dimensional cellular automata is depicted which is a pyramid shape with a design consisting of white squares that create a pixelated look * @description Simple demonstration of a Wolfram 1-dimensional cellular automata * (natureofcode.com) */ diff --git a/src/data/examples/en/09_Simulate/04_GameOfLife.js b/src/data/examples/en/09_Simulate/04_GameOfLife.js index 81d5be870f..166a4a18c1 100644 --- a/src/data/examples/en/09_Simulate/04_GameOfLife.js +++ b/src/data/examples/en/09_Simulate/04_GameOfLife.js @@ -1,5 +1,6 @@ /* * @name Game of Life + * @arialabel Grid of white squares on a black background with some squares flickering between white and black to generate random patterns * @description A basic implementation of John Conway's Game of Life CA * (natureofcode.com) */ diff --git a/src/data/examples/en/09_Simulate/05_MultipleParticleSystems.js b/src/data/examples/en/09_Simulate/05_MultipleParticleSystems.js index afd65424c1..9a84cf67dd 100644 --- a/src/data/examples/en/09_Simulate/05_MultipleParticleSystems.js +++ b/src/data/examples/en/09_Simulate/05_MultipleParticleSystems.js @@ -1,5 +1,6 @@ /* * @name Multiple Particle Systems + * @arialabel When the user clicks anywhere on the black background, a particle system begins where light grey circles flow out from the point like a sparkler * @description Click the mouse to generate a burst of particles at mouse location.
        Each burst is one instance of a particle system with Particles and CrazyParticles (a subclass of Particle).
        Note use of Inheritance and Polymorphism here.
        * Original by Daniel Shiffman. */ diff --git a/src/data/examples/en/09_Simulate/06_Spirograph.js b/src/data/examples/en/09_Simulate/06_Spirograph.js index d1f711ab30..4d503a631a 100644 --- a/src/data/examples/en/09_Simulate/06_Spirograph.js +++ b/src/data/examples/en/09_Simulate/06_Spirograph.js @@ -1,6 +1,7 @@ /* * @name Spirograph + * @arialabel A spirograph is created by interlocking black circle outlines rotating around each other on a grey background. When the user clicks the space bar, the background turns white and paths of circles of various sizes in an indigo color are visible * @description This sketch uses simple transformations to create a * Spirograph-like effect with interlocking circles (called sines). * Press the spacebar to switch between tracing and showing the underlying geometry.
        diff --git a/src/data/examples/en/09_Simulate/07_LSystems.js b/src/data/examples/en/09_Simulate/07_LSystems.js index ad4fe98162..4f395fca31 100644 --- a/src/data/examples/en/09_Simulate/07_LSystems.js +++ b/src/data/examples/en/09_Simulate/07_LSystems.js @@ -1,5 +1,6 @@ /* * @name L-Systems + * @arialabel Circles of various colors and patterns connected to each other by perpendicular black lines are drawn on the screen to form a grid formation * @description This sketch creates an automated drawing based on a Lindenmayer * or (L-) system. L-systems are often used in procedural graphics to make * natural, geometric, or interesting "fractal-style" patterns.
        diff --git a/src/data/examples/en/09_Simulate/08_Spring.js b/src/data/examples/en/09_Simulate/08_Spring.js index b307142cca..e3d363a32a 100644 --- a/src/data/examples/en/09_Simulate/08_Spring.js +++ b/src/data/examples/en/09_Simulate/08_Spring.js @@ -1,5 +1,6 @@ /* * @name Spring + * @arialabel Light grey horizontal rectangle on a black vertical rectangle on a grey background. The user can move the horizontal rectangle up and down. Upon releasing the horizontal rectangle, the system moves like a spring and the vertical rectangle expands and compresses as the horizontal rectangle moves up and down. * @frame 710, 400 * @description Click, drag, and release the horizontal bar to start the spring. */ diff --git a/src/data/examples/en/09_Simulate/09_Springs.js b/src/data/examples/en/09_Simulate/09_Springs.js index 43d6f7e6d6..0dd3a3c1cc 100644 --- a/src/data/examples/en/09_Simulate/09_Springs.js +++ b/src/data/examples/en/09_Simulate/09_Springs.js @@ -1,10 +1,11 @@ /* * @name Springs + * @arialabel Three white circles on a dark grey background. The user can drag each circle and the circle springs back and forth till finally settling in the original position * @frame 710,400 * @description Move the mouse over one of the circles and click to re-position. * When you release the mouse, it will snap back into position. * Each circle has a slightly different behavior. - * (ported from https://processing.org/examples/springs.html) + *

        This example is ported from the Processing website */ let num = 3; let springs = []; diff --git a/src/data/examples/en/09_Simulate/10_SoftBody.js b/src/data/examples/en/09_Simulate/10_SoftBody.js index b227393300..32a9d665e3 100644 --- a/src/data/examples/en/09_Simulate/10_SoftBody.js +++ b/src/data/examples/en/09_Simulate/10_SoftBody.js @@ -1,5 +1,6 @@ /* * @name Soft Body + * @arialabel White pentagon on a black screen that morphs into a blob as it follows the user’s mouse * @description Original example by Ira Greenberg. *

        Softbody dynamics simulation using curveVertex() and curveTightness(). */ diff --git a/src/data/examples/en/09_Simulate/11_SmokeParticleSystem.js b/src/data/examples/en/09_Simulate/11_SmokeParticleSystem.js index ddb21859d3..e298313b34 100644 --- a/src/data/examples/en/09_Simulate/11_SmokeParticleSystem.js +++ b/src/data/examples/en/09_Simulate/11_SmokeParticleSystem.js @@ -1,5 +1,6 @@ /* * @name SmokeParticles + * @arialabel White circle gives off smoke on the middle of the bottom of the screen. The smoke blows in the direction of the user’s mouse as it moves side to side. There is a white arrow on the top that also points to the side where the user’s mouse is * @description a port of Dan Shiffman's SmokeParticleSystem example originally * for Processing. Creates smokey particles :p */ diff --git a/src/data/examples/en/09_Simulate/12_BrownianMotion.js b/src/data/examples/en/09_Simulate/12_BrownianMotion.js index 449e5ad27e..a9e0404a80 100755 --- a/src/data/examples/en/09_Simulate/12_BrownianMotion.js +++ b/src/data/examples/en/09_Simulate/12_BrownianMotion.js @@ -1,5 +1,6 @@ /* * @name Brownian Motion + * @arialabel A continuous white line draws squiggles on a grey background * @description Recording random movement as a continuous line. * Port of original example from the Processing examples page. */ diff --git a/src/data/examples/en/09_Simulate/13_Chain.js b/src/data/examples/en/09_Simulate/13_Chain.js index ba52c54587..6ad50e63e6 100644 --- a/src/data/examples/en/09_Simulate/13_Chain.js +++ b/src/data/examples/en/09_Simulate/13_Chain.js @@ -1,7 +1,8 @@ /* * @name Chain + * @arialabel Two slightly opaque white circles connected by a white line. The user’s mouse moves the top of the string and the circles follow but are also affected by gravity. * @description One mass is attached to the mouse position and the other is attached the position of the other mass. The gravity in the environment pulls down on both. - * Ported from the Processing Examples page. + *

        This example is ported from the Processing website */ let s1, s2; let gravity = 9.0; diff --git a/src/data/examples/en/09_Simulate/14_SnowflakeParticleSystem.js b/src/data/examples/en/09_Simulate/14_SnowflakeParticleSystem.js index 0956a80792..ac3fc46f9a 100755 --- a/src/data/examples/en/09_Simulate/14_SnowflakeParticleSystem.js +++ b/src/data/examples/en/09_Simulate/14_SnowflakeParticleSystem.js @@ -1,5 +1,6 @@ /* * @name Snowflakes + * @arialabel White snowflakes fall in a random pattern from the top of a red background * @description Particle system simulating the motion of falling snowflakes. * Uses an array of objects to hold the snowflake particles. * Contributed by Aatish Bhatia. diff --git a/src/data/examples/en/09_Simulate/15_penrose_tiles.js b/src/data/examples/en/09_Simulate/15_penrose_tiles.js index fd93ffa845..c5b5cd0f3f 100644 --- a/src/data/examples/en/09_Simulate/15_penrose_tiles.js +++ b/src/data/examples/en/09_Simulate/15_penrose_tiles.js @@ -1,5 +1,6 @@ /* * @name Penrose Tiles + * @arialabel A penrose tile pattern is created by white rhombi being drawn on a black background * @frame 710,400 * @description This is a port by David Blitz of the "Penrose Tile" example from processing.org/examples */ diff --git a/src/data/examples/en/09_Simulate/16_Recursive_Tree.js b/src/data/examples/en/09_Simulate/16_Recursive_Tree.js index c86a08e6a1..9ca1982709 100644 --- a/src/data/examples/en/09_Simulate/16_Recursive_Tree.js +++ b/src/data/examples/en/09_Simulate/16_Recursive_Tree.js @@ -1,5 +1,6 @@ /* * @name Recursive Tree + * @arialabel If the user’s mouse is on the far left side of the screen, there is a white vertical line on a black background. As the user’s mouse moves right, the top of the vertical line begins to expand into branches of a tree until it curves down into a very geometric tree * @description Renders a simple tree-like structure via recursion. * The branching angle is calculated as a function of the horizontal mouse * location. Move the mouse left and right to change the angle. diff --git a/src/data/examples/en/09_Simulate/17_Mandelbrot.js b/src/data/examples/en/09_Simulate/17_Mandelbrot.js index 76b0bdc4b2..dc7ae43320 100644 --- a/src/data/examples/en/09_Simulate/17_Mandelbrot.js +++ b/src/data/examples/en/09_Simulate/17_Mandelbrot.js @@ -1,5 +1,6 @@ /* * @name The Mandelbrot Set + * @arialabel A fractal that roughly resembles a series of heart-shaped disks, to which smaller disks are attached and consists of a connected set * @description Simple rendering of the Mandelbrot set. * Based on Daniel Shiffman's Mandelbrot Example for Processing. */ diff --git a/src/data/examples/en/09_Simulate/18_Koch.js b/src/data/examples/en/09_Simulate/18_Koch.js index d8acc9fd55..4d5c2ec3d1 100644 --- a/src/data/examples/en/09_Simulate/18_Koch.js +++ b/src/data/examples/en/09_Simulate/18_Koch.js @@ -1,5 +1,6 @@ /* * @name Koch Curve + * @arialabel Koch snowflake is created by a single horizontal white line on a black background that then morphs into a triangle in the middle, and then each side of the triangle also becomes two more triangles, and this repeats 5 times * @description Renders a simple fractal, the Koch snowflake. Each recursive level is drawn in sequence. * By Daniel Shiffman */ diff --git a/src/data/examples/en/09_Simulate/19_Bubblesort.js b/src/data/examples/en/09_Simulate/19_Bubblesort.js index 85d3402dfb..89e1079ede 100644 --- a/src/data/examples/en/09_Simulate/19_Bubblesort.js +++ b/src/data/examples/en/09_Simulate/19_Bubblesort.js @@ -1,5 +1,6 @@ /* * @name Bubble Sort + * @arialabel Dark grey bars of different heights on a light grey background are sorted from tallest to shortest from the right to the left side of the screen * @description Sorts the randomly distributed bars * according to their height in ascending order * while simulating the whole sorting process. diff --git a/src/data/examples/en/09_Simulate/20_SteepingFeet.js b/src/data/examples/en/09_Simulate/20_SteepingFeet.js index 6f3d7449eb..b77d79d031 100644 --- a/src/data/examples/en/09_Simulate/20_SteepingFeet.js +++ b/src/data/examples/en/09_Simulate/20_SteepingFeet.js @@ -1,5 +1,6 @@ /* * @name Stepping Feet Illusion + * @arialabel Vertical black and white lines. A white rectangle moves across the screen under the white vertical lines and on top of the black ones. A black rectangle moves across the screen on top of both colored lines. * @description Stepping feet illusion is a very famous psychological experiment * Both the bricks will appear to move at different speed * even though they are moving at the same speed. @@ -9,7 +10,7 @@ */ // this class describes the structure -// and movents of the brick +// and movements of the brick class Brick{ constructor(bc, y){ this.brickColor = bc; @@ -29,7 +30,7 @@ class Brick{ this.xSpeed = 1; } - // this function set the bricks in motion + // this function sets the bricks in motion moveBrick(){ this.xPos+=this.xSpeed; if(this.xPos+100 >= width || this.xPos <= 0){ @@ -50,7 +51,8 @@ function setup() { let brick1 = new Brick("white",100); let brick2 = new Brick("black",250); -// +// This function sets speed of +// brick 1 and brick2 to 1. brick1.setSpeed(); brick2.setSpeed(); @@ -74,7 +76,7 @@ function createBars() { let len = 12; for(let i = 0;i Prof WM Harris, using the random function with events to color/weight a line
        diff --git a/src/data/examples/en/10_Interaction/20_Follow1.js b/src/data/examples/en/10_Interaction/20_Follow1.js index df0902cc09..ebce244abc 100644 --- a/src/data/examples/en/10_Interaction/20_Follow1.js +++ b/src/data/examples/en/10_Interaction/20_Follow1.js @@ -1,5 +1,6 @@ /* * @name Follow 1 + * @arialabel Circle connected to a long oval. The user’s mouse is attached to the end of the oval. When the mouse moves, the oval and circle moves with it. * @frame 710,400 * @description A line segment is pushed and pulled by the cursor. * Based on code from Keith Peters. diff --git a/src/data/examples/en/10_Interaction/21_Follow2.js b/src/data/examples/en/10_Interaction/21_Follow2.js index ebb87cb2ca..6a25565488 100644 --- a/src/data/examples/en/10_Interaction/21_Follow2.js +++ b/src/data/examples/en/10_Interaction/21_Follow2.js @@ -1,5 +1,6 @@ /* * @name Follow 2 + * @arialabel Two long ovals connected at the end. The user’s mouse is attached to the end of one of the ovals and when the mouse moves, the two ovals move as well * @frame 710,400 * @description A two-segmented arm follows the cursor position. The relative * angle between the segments is calculated with atan2() and the position diff --git a/src/data/examples/en/10_Interaction/22_Follow3.js b/src/data/examples/en/10_Interaction/22_Follow3.js index 79878f8f2c..0057e748e6 100644 --- a/src/data/examples/en/10_Interaction/22_Follow3.js +++ b/src/data/examples/en/10_Interaction/22_Follow3.js @@ -1,5 +1,6 @@ /* * @name Follow 3 + * @arialabel Long segmented snake shape follows the user’s mouse as it moves * @frame 710,400 * @description A segmented line follows the mouse. The relative angle from * each segment to the next is calculated with atan2() and the position of diff --git a/src/data/examples/en/10_Interaction/23_snake.js b/src/data/examples/en/10_Interaction/23_snake.js index ac56aa3fd3..6a213d5eef 100644 --- a/src/data/examples/en/10_Interaction/23_snake.js +++ b/src/data/examples/en/10_Interaction/23_snake.js @@ -1,5 +1,6 @@ /* * @name Snake game + * @arialabel Snake game where a snake represented by a long white oval on a black background is controlled by the i,j,k,l keys. Users use these keys to move the snake to not hit the sides of the window and to eat a small white circle which represents food and allows the snake to grow. * @description The famous snake game! Once you click run, click anywhere * inside the black area, and control the snake using i j k and l. Don't let * the snake hit itself or the wall!
        diff --git a/src/data/examples/en/10_Interaction/24_Wavemaker.js b/src/data/examples/en/10_Interaction/24_Wavemaker.js index 26d29ee0b2..50d3d2061e 100644 --- a/src/data/examples/en/10_Interaction/24_Wavemaker.js +++ b/src/data/examples/en/10_Interaction/24_Wavemaker.js @@ -1,5 +1,6 @@ /* * @name Wavemaker + * @arialabel Water like waves of neon green lines moving in circular patterns. The user’s mouse can change the direction of the current in the waves * @description This illustrates how waves (like water waves) emerge * from particles oscillating in place. Move your mouse to direct the wave. * Contributed by Aatish Bhatia, inspired by Orbiters by Dave Whyte. diff --git a/src/data/examples/en/10_Interaction/25_reach1.js b/src/data/examples/en/10_Interaction/25_reach1.js index 7982061aac..36a039008b 100644 --- a/src/data/examples/en/10_Interaction/25_reach1.js +++ b/src/data/examples/en/10_Interaction/25_reach1.js @@ -1,5 +1,6 @@ /* * @name Reach 1 + * @arialabel Two long ovals connected at the end. The user’s mouse is attached to the end of one of the ovals and when the mouse moves, the two ovals move as well. However, the end of the other oval is permanently attached to the middle of the background. * @frame 710,400 * @description The arm follows the position of the mouse by calculating the * angles with atan2(). Based on code from Keith Peters. diff --git a/src/data/examples/en/10_Interaction/26_reach2.js b/src/data/examples/en/10_Interaction/26_reach2.js index 4d6ea72174..4143ef5c97 100644 --- a/src/data/examples/en/10_Interaction/26_reach2.js +++ b/src/data/examples/en/10_Interaction/26_reach2.js @@ -1,5 +1,6 @@ /* * @name Reach 2 + * @arialabel Grey triangle segmented and attached to the bottom of the black screen. The tip of the triangle follows the direction of the user’s mouse * @frame 710,400 * @description The arm follows the position of the mouse by calculating the * angles with atan2(). Based on code from Keith Peters. diff --git a/src/data/examples/en/10_Interaction/27_reach3.js b/src/data/examples/en/10_Interaction/27_reach3.js index 32739138b3..133b1479b9 100644 --- a/src/data/examples/en/10_Interaction/27_reach3.js +++ b/src/data/examples/en/10_Interaction/27_reach3.js @@ -1,5 +1,6 @@ /* * @name Reach 3 + * @arialabel Grey triangle segmented and attached to the bottom of the black screen. The tip of the triangle follows the direction of a grey circular donut shape that is also bouncing around the screen * @frame 710,400 * @description The arm follows the position of the ball by calculating the * angles with atan2(). Based on code from Keith Peters. diff --git a/src/data/examples/en/10_Interaction/29_kaleidoscope.js b/src/data/examples/en/10_Interaction/29_kaleidoscope.js index 2593d1143a..8eec6dcdc6 100644 --- a/src/data/examples/en/10_Interaction/29_kaleidoscope.js +++ b/src/data/examples/en/10_Interaction/29_kaleidoscope.js @@ -1,5 +1,6 @@ /* * @name Kaleidoscope + * @arialabel User draws thick black lines on the grey background and it is mirrored 5 times in a circle like a kaleidoscope * @description A kaleidoscope is an optical instrument with two or more reflecting surfaces tilted to each other in an angle. This example tries to replicate the behavior of a kaleidoscope. Set the number of reflections at the symmetry variable and start drawing on the screen. Adjust the brush size with the help of the slider. The clear screen as it says clears the screen. The save button will download a .jpg file of the art that you have created. */ // Symmetry corresponding to the number of reflections. Change the number for different number of reflections diff --git a/src/data/examples/en/11_Objects/01_Objects.js b/src/data/examples/en/11_Objects/01_Objects.js index 79f10d3295..d299c1ab88 100644 --- a/src/data/examples/en/11_Objects/01_Objects.js +++ b/src/data/examples/en/11_Objects/01_Objects.js @@ -1,5 +1,6 @@ /* * @name Objects + * @arialabel Small white circle on dark navy background that moves in small amounts in various directions by a small amount by itself like it is jittering * @description Create a Jitter class, instantiate an object, * and move it around the screen. Adapted from Getting Started with * Processing by Casey Reas and Ben Fry. diff --git a/src/data/examples/en/11_Objects/02_Multiple_Objects.js b/src/data/examples/en/11_Objects/02_Multiple_Objects.js index b57e9209e2..734a6aae3f 100644 --- a/src/data/examples/en/11_Objects/02_Multiple_Objects.js +++ b/src/data/examples/en/11_Objects/02_Multiple_Objects.js @@ -1,5 +1,6 @@ /* * @name Multiple Objects + * @arialabel Four small white circles places randomly on a dark navy background that move in small amounts in various directions by itself like they are jittering * @description Create a Jitter class, instantiate multiple objects, * and move it around the screen. */ diff --git a/src/data/examples/en/11_Objects/03_Objects_Array.js b/src/data/examples/en/11_Objects/03_Objects_Array.js index ccc5406037..c9a5dd335f 100644 --- a/src/data/examples/en/11_Objects/03_Objects_Array.js +++ b/src/data/examples/en/11_Objects/03_Objects_Array.js @@ -1,5 +1,6 @@ /* * @name Array of Objects + * @arialabel Multiple sizes of small white circles placed randomly on a dark navy background that move in small amounts in various directions by itself like they are jittering * @description Create a Jitter class, instantiate an array of objects * and move them around the screen. */ diff --git a/src/data/examples/en/11_Objects/03_Objects_Optional_Arguments.js b/src/data/examples/en/11_Objects/03_Objects_Optional_Arguments.js index 2796774489..2adbd9a7b8 100644 --- a/src/data/examples/en/11_Objects/03_Objects_Optional_Arguments.js +++ b/src/data/examples/en/11_Objects/03_Objects_Optional_Arguments.js @@ -1,5 +1,6 @@ /* * @name Objects 2 + * @arialabel 4 sets of vertical white lines that form rectangles of different sizes on a black background. They move around as the user’s mouse moves * @description Ported from example by hbarragan. Move the cursor across the * image to change the speed and positions of the geometry. The class MRect * defines a group of lines. @@ -8,58 +9,58 @@ let r1, r2, r3, r4; function setup() { - createCanvas(710, 400); - fill(255, 204); - noStroke(); - r1 = new MRect(1, 134.0, 0.532, 0.1 * height, 10.0, 60.0); - r2 = new MRect(2, 44.0, 0.166, 0.3 * height, 5.0, 50.0); - r3 = new MRect(2, 58.0, 0.332, 0.4 * height, 10.0, 35.0); - r4 = new MRect(1, 120.0, 0.0498, 0.9 * height, 15.0, 60.0); +createCanvas(710, 400); +fill(255, 204); +noStroke(); +r1 = new MRect(1, 134.0, 0.532, 0.1 * height, 10.0, 60.0); +r2 = new MRect(2, 44.0, 0.166, 0.3 * height, 5.0, 50.0); +r3 = new MRect(2, 58.0, 0.332, 0.4 * height, 10.0, 35.0); +r4 = new MRect(1, 120.0, 0.0498, 0.9 * height, 15.0, 60.0); } function draw() { - background(0); +background(0); - r1.display(); - r2.display(); - r3.display(); - r4.display(); +r1.display(); +r2.display(); +r3.display(); +r4.display(); - r1.move(mouseX - width / 2, mouseY + height * 0.1, 30); - r2.move((mouseX + width * 0.05) % width, mouseY + height * 0.025, 20); - r3.move(mouseX / 4, mouseY - height * 0.025, 40); - r4.move(mouseX - width / 2, height - mouseY, 50); +r1.move(mouseX - width / 2, mouseY + height * 0.1, 30); +r2.move((mouseX + width * 0.05) % width, mouseY + height * 0.025, 20); +r3.move(mouseX / 4, mouseY - height * 0.025, 40); +r4.move(mouseX - width / 2, height - mouseY, 50); } class MRect { - constructor(iw, ixp, ih, iyp, id, it) { + constructor(iw, ixp, ih, iyp, id, it) { this.w = iw; // single bar width this.xpos = ixp; // rect xposition this.h = ih; // rect height this.ypos = iyp; // rect yposition this.d = id; // single bar distance this.t = it; // number of bars - } - - move(posX, posY, damping) { - let dif = this.ypos - posY; - if (abs(dif) > 1) { - this.ypos -= dif / damping; } - dif = this.xpos - posX; - if (abs(dif) > 1) { - this.xpos -= dif / damping; + + move(posX, posY, damping) { + let dif = this.ypos - posY; + if (abs(dif) > 1) { + this.ypos -= dif / damping; + } + dif = this.xpos - posX; + if (abs(dif) > 1) { + this.xpos -= dif / damping; + } } - } - display() { - for (let i = 0; i < this.t; i++) { - rect( - this.xpos + i * (this.d + this.w), - this.ypos, - this.w, - height * this.h - ); + display() { + for (let i = 0; i < this.t; i++) { + rect( + this.xpos + i * (this.d + this.w), + this.ypos, + this.w, + height * this.h + ); + } } - } } diff --git a/src/data/examples/en/11_Objects/04_Inheritance.js b/src/data/examples/en/11_Objects/04_Inheritance.js index 9070daa336..9e47eb9630 100644 --- a/src/data/examples/en/11_Objects/04_Inheritance.js +++ b/src/data/examples/en/11_Objects/04_Inheritance.js @@ -1,4 +1,5 @@ /* @name Inheritance + * @arialabel Two white circles connected and spinning around each other anti-clockwise with a black line behind that is spinning clockwise * @description A class can be defined using another class as a * foundation. In object-oriented programming terminology, one class can * inherit fields and methods from another. An object that inherits from @@ -8,38 +9,38 @@ let spots, arm; function setup() { - createCanvas(640, 360); - arm = new SpinArm(width/2, height/2, 0.01); - spots = new SpinSpots(width/2, height/2, -0.02, 90.0); +createCanvas(640, 360); +arm = new SpinArm(width/2, height/2, 0.01); +spots = new SpinSpots(width/2, height/2, -0.02, 90.0); } function draw() { - background(204); - arm.update(); - arm.display(); - spots.update(); - spots.display(); +background(204); +arm.update(); +arm.display(); +spots.update(); +spots.display(); } class Spin { - constructor(x, y, s) { +constructor(x, y, s) { this.x = x; this.y = y; this.speed = s; this.angle = 0.0; - } +} - update() { +update() { this.angle += this.speed; - } +} } class SpinArm extends Spin { - constructor(x, y, s) { +constructor(x, y, s) { super(x, y, s) - } +} - display() { +display() { strokeWeight(1); stroke(0); push(); @@ -48,16 +49,16 @@ class SpinArm extends Spin { rotate(this.angle); line(0, 0, 165, 0); pop(); - } +} } class SpinSpots extends Spin { - constructor(x, y, s, d) { +constructor(x, y, s, d) { super(x, y, s) this.dim = d; - } +} - display() { +display() { noStroke(); push(); translate(this.x, this.y); @@ -66,5 +67,5 @@ class SpinSpots extends Spin { ellipse(-this.dim/2, 0, this.dim, this.dim); ellipse(this.dim/2, 0, this.dim, this.dim); pop(); - } -} \ No newline at end of file +} +} diff --git a/src/data/examples/en/11_Objects/05_Composite_Objects.js b/src/data/examples/en/11_Objects/05_Composite_Objects.js index 4fbd2f1a44..1fd5313ea9 100644 --- a/src/data/examples/en/11_Objects/05_Composite_Objects.js +++ b/src/data/examples/en/11_Objects/05_Composite_Objects.js @@ -1,4 +1,5 @@ /* @name Composite Objects + * @arialabel Two white egg shapes that totter side to side. There is a grey circle within each egg that expands larger until it is off the screen * @description An object can include several other objects. * Creating such composite objects is a good way to use the principles * of modularity and build higher levels of abstraction within a program. @@ -6,32 +7,32 @@ let er1, er2; function setup() { - createCanvas(640, 360); - er1 = new EggRing(width*0.45, height*0.5, 0.1, 120); - er2 = new EggRing(width*0.65, height*0.8, 0.05, 180); +createCanvas(640, 360); +er1 = new EggRing(width * 0.45, height * 0.5, 0.1, 120); +er2 = new EggRing(width * 0.65, height * 0.8, 0.05, 180); } function draw() { - background(0); - er1.transmit(); - er2.transmit(); +background(0); +er1.transmit(); +er2.transmit(); } class Egg { - constructor(xpos, ypos, t, s) { +constructor(xpos, ypos, t, s) { this.x = xpos; this.y = ypos; this.tilt = t; this.scalar = s / 100.0; this.angle = 0.0; - } +} - wobble() { +wobble() { this.tilt = cos(this.angle) / 8; this.angle += 0.1; - } +} - display() { +display() { noStroke(); fill(255); push(); @@ -46,38 +47,38 @@ class Egg { bezierVertex(-40, -65, -25, -100, 0, -100); endShape(); pop(); - } +} } class Ring { - start(xpos, ypos) { +start(xpos, ypos) { this.x = xpos; this.y = ypos; this.on = true; this.diameter = 1; - } +} - grow() { +grow() { if (this.on == true) { - this.diameter += 0.5; - if (this.diameter > width*2) { - this.diameter = 0.0; - } + this.diameter += 0.5; + if (this.diameter > width * 2) { + this.diameter = 0.0; + } + } } - } - display() { +display() { if (this.on == true) { - noFill(); - strokeWeight(4); - stroke(155, 153); - ellipse(this.x, this.y, this.diameter, this.diameter); + noFill(); + strokeWeight(4); + stroke(155, 153); + ellipse(this.x, this.y, this.diameter, this.diameter); } - } +} } class EggRing { - constructor(x, y, t, sp) { +constructor(x, y, t, sp) { this.x = x; this.y = y; this.t = t; @@ -85,15 +86,15 @@ class EggRing { this.circle = new Ring(); this.ovoid = new Egg(this.x, this.y, this.t, this.sp); this.circle.start(this.x, this.y - this.sp/2); - } +} - transmit() { +transmit() { this.ovoid.wobble(); this.ovoid.display(); this.circle.grow(); this.circle.display(); if (circle.on == false) { - circle.on = true; + circle.on = true; } - } +} } diff --git a/src/data/examples/zh-Hans/15_Instance_Mode/03_Car_Instances.js b/src/data/examples/en/11_Objects/06_Car_Instances.js similarity index 92% rename from src/data/examples/zh-Hans/15_Instance_Mode/03_Car_Instances.js rename to src/data/examples/en/11_Objects/06_Car_Instances.js index 1966f9c8e3..8e10eb089e 100644 --- a/src/data/examples/zh-Hans/15_Instance_Mode/03_Car_Instances.js +++ b/src/data/examples/en/11_Objects/06_Car_Instances.js @@ -1,5 +1,6 @@ /* * @name Car Instances + * @arialabel Vertical pale sage background with three rectangles--blue, yellow, and grey--moving across the screen horizontally at different speeds * @frame 400,400 * @description contributed by Prof WM Harris, How to create three instances of Car Class and diff --git a/src/data/examples/en/12_Lights/02_Directional.js b/src/data/examples/en/12_Lights/02_Directional.js index 1c806373fc..2b6a74bb7b 100755 --- a/src/data/examples/en/12_Lights/02_Directional.js +++ b/src/data/examples/en/12_Lights/02_Directional.js @@ -1,5 +1,6 @@ /* * @name Directional + * @arialabel Two spheres on both sides of a black screen that is lit by the mouse which acts as a light source. You can move this light source by moving your mouse to shine on different parts of the sphere and create different shadows * @frame 710,400 * @description Move the mouse to change the direction of the light. * Directional light comes from one direction and is stronger when hitting a diff --git a/src/data/examples/en/12_Lights/05_Mixture.js b/src/data/examples/en/12_Lights/05_Mixture.js index a929e15dc9..70b3461a4f 100644 --- a/src/data/examples/en/12_Lights/05_Mixture.js +++ b/src/data/examples/en/12_Lights/05_Mixture.js @@ -1,5 +1,6 @@ /* * @name Mixture + * @arialabel Cube where we can see three sides, one blue and two forest green on a black background. An orange light shines where your mouse is when it is placed in the cube * @frame 710,400 (optional) * @description Display a box with three different kinds of lights. */ diff --git a/src/data/examples/en/13_Motion/01_non_orthogonal_reflection.js b/src/data/examples/en/13_Motion/01_non_orthogonal_reflection.js index 1d5ed269c5..3f07f8e469 100644 --- a/src/data/examples/en/13_Motion/01_non_orthogonal_reflection.js +++ b/src/data/examples/en/13_Motion/01_non_orthogonal_reflection.js @@ -1,5 +1,6 @@ /* * @name Non Orthogonal Reflection + * @arialabel A white circle bounces around a black screen and on a grey slanted floor leaving a white streak behind it. The grey slanted floor changes every couple of frames * @frame 710,400 (optional) * @description This is a port by David Blitz of the "Reflection 1" example from processing.org/examples */ diff --git a/src/data/examples/en/13_Motion/02_Linear_Motion.js b/src/data/examples/en/13_Motion/02_Linear_Motion.js index 421f99c104..f76560d1de 100644 --- a/src/data/examples/en/13_Motion/02_Linear_Motion.js +++ b/src/data/examples/en/13_Motion/02_Linear_Motion.js @@ -1,5 +1,6 @@ /* * @name Linear + * @arialabel Horizontal white line on a black background traveling from the bottom to the top of the screen parallel to the x axis * @frame 720,400 * @description Changing a variable to create a moving line. * When the line moves off the edge of the window, diff --git a/src/data/examples/en/13_Motion/03_Bounce.js b/src/data/examples/en/13_Motion/03_Bounce.js index a3354e015f..1267f8cfec 100644 --- a/src/data/examples/en/13_Motion/03_Bounce.js +++ b/src/data/examples/en/13_Motion/03_Bounce.js @@ -1,5 +1,6 @@ /* * @name Bounce + * @arialabel White circle moving on a grey background. When it hits the edge of the background window, it changes it’s direction * @frame 720,400 * @description When the shape hits the edge of the window, it reverses its direction. */ diff --git a/src/data/examples/en/13_Motion/04_Bouncy_Bubbles.js b/src/data/examples/en/13_Motion/04_Bouncy_Bubbles.js index 7347157665..2dba410120 100644 --- a/src/data/examples/en/13_Motion/04_Bouncy_Bubbles.js +++ b/src/data/examples/en/13_Motion/04_Bouncy_Bubbles.js @@ -1,5 +1,6 @@ /* * @name Bouncy Bubbles + * @arialabel Grey circles of varying sizes bounce off the sides of the canvas and each other, eventually settling on the bottom of the screen * @frame 720,400 * @description based on code from Keith Peters. Multiple-object collision.. */ diff --git a/src/data/examples/en/13_Motion/05_Brownian.js b/src/data/examples/en/13_Motion/05_Brownian.js deleted file mode 100644 index b79570eff1..0000000000 --- a/src/data/examples/en/13_Motion/05_Brownian.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @name Brownian Motion - * @description Recording random movement as a continuous line. - * (ported from https://processing.org/examples/brownian.html) - */ - -let num = 2000; -let range = 6; - -// global variable -let i; - -let ax = []; -let ay = []; - -function setup() -{ - createCanvas(640, 360); - for(i = 0; i < num; i++) { - ax[i] = width/2; - ay[i] = height/2; - } - frameRate(30); -} - -function draw() -{ - background(51); - - // Shift all elements 1 place to the left - for( i = 1; i < num; i++) { - ax[i-1] = ax[i]; - ay[i-1] = ay[i]; - } - - // Put a new value at the end of the array - ax[num-1] += random(-range, range); - ay[num-1] += random(-range, range); - - // Constrain all points to the screen - ax[num-1] = constrain(ax[num-1], 0, width); - ay[num-1] = constrain(ay[num-1], 0, height); - - // Draw a line connecting the points - for( i=1; i This example uses vectors for better visualization of physical Quantity */ diff --git a/src/data/examples/en/13_Motion/08_Moving_On_Curves.js b/src/data/examples/en/13_Motion/08_Moving_On_Curves.js deleted file mode 100644 index 4c347c7e00..0000000000 --- a/src/data/examples/en/13_Motion/08_Moving_On_Curves.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @name Moving On Curves - * @frame 720,400 - * @description In this example, the circles moves along the curve y = x^4. - * Click the mouse to have it move to a new position. - */ - -let beginX = 20.0; // Initial x-coordinate -let beginY = 10.0; // Initial y-coordinate -let endX = 570.0; // Final x-coordinate -let endY = 320.0; // Final y-coordinate -let distX; // X-axis distance to move -let distY; // Y-axis distance to move -let exponent = 4; // Determines the curve -let x = 0.0; // Current x-coordinate -let y = 0.0; // Current y-coordinate -let step = 0.01; // Size of each step along the path -let pct = 0.0; // Percentage traveled (0.0 to 1.0) - -function setup() { - createCanvas(720, 400); - noStroke(); - distX = endX - beginX; - distY = endY - beginY; -} - -function draw() { - fill(0, 2); - rect(0, 0, width, height); - pct += step; - if (pct < 1.0) { - x = beginX + pct * distX; - y = beginY + pow(pct, exponent) * distY; - } - fill(255); - ellipse(x, y, 20, 20); -} - -function mousePressed() { - pct = 0.0; - beginX = x; - beginY = y; - endX = mouseX; - endY = mouseY; - distX = endX - beginX; - distY = endY - beginY; -} diff --git a/src/data/examples/en/15_Instance_Mode/01_Instantiating.js b/src/data/examples/en/15_Instance_Mode/01_Instantiating.js index 0c4bc70751..07163bdb99 100644 --- a/src/data/examples/en/15_Instance_Mode/01_Instantiating.js +++ b/src/data/examples/en/15_Instance_Mode/01_Instantiating.js @@ -1,5 +1,6 @@ /* * @name Instantiation + * @arialabel White square in the upper left quadrant on black background * @description Create a p5 instance, which keeps all variables * out of the global scope of your page. */ diff --git a/src/data/examples/en/16_Dom/03_Input_Button.js b/src/data/examples/en/16_Dom/03_Input_Button.js index d3aaf9cc42..f82a84d456 100644 --- a/src/data/examples/en/16_Dom/03_Input_Button.js +++ b/src/data/examples/en/16_Dom/03_Input_Button.js @@ -1,5 +1,6 @@ /* * @name Input and Button + * @arialabel “What is your name?” is written in the top left of the window with a text input box and a submit button under. After inputting text and submitting, the text submitted is generated multiple times to cover the background in a random formation in various shades of cyan. * @description Input text and click the button to see it affect the the canvas. */ let input, button, greeting; diff --git a/src/data/examples/en/16_Dom/04_Slider.js b/src/data/examples/en/16_Dom/04_Slider.js index 6cb48ced1c..1628b88653 100644 --- a/src/data/examples/en/16_Dom/04_Slider.js +++ b/src/data/examples/en/16_Dom/04_Slider.js @@ -1,5 +1,6 @@ /* * @name Slider + * @arialabel The background starts off in a vibrant shade of purple with three sliders in the upper left corner labeled red, green, and blue. The user can drag each slider and the color of the background will change accordingly with the increase or decrease of each of these three colors. * @description Move the sliders to control the R, G, B values of the background. */ let rSlider, gSlider, bSlider; diff --git a/src/data/examples/en/16_Dom/07_Modify_DOM.js b/src/data/examples/en/16_Dom/07_Modify_DOM.js index 9ac89b7595..40cd500b35 100644 --- a/src/data/examples/en/16_Dom/07_Modify_DOM.js +++ b/src/data/examples/en/16_Dom/07_Modify_DOM.js @@ -1,5 +1,6 @@ /* * @name Modifying the DOM + * @arialabel Words in black font jittering on a white background * @frame 710,300 * @description Create DOM elements and modify their properties every time * draw() is called. diff --git a/src/data/examples/en/16_Dom/08_Video.js b/src/data/examples/en/16_Dom/08_Video.js index 8786bb4cde..2b39aeadc8 100644 --- a/src/data/examples/en/16_Dom/08_Video.js +++ b/src/data/examples/en/16_Dom/08_Video.js @@ -1,5 +1,6 @@ /* * @name Video + * @arialabel Video of fingers walking * @frame 710,250 * @description Load a video with multiple formats and toggle between playing * and paused with a button press. @@ -9,6 +10,7 @@ let fingers; let button; function setup() { + noCanvas(); // specify multiple formats for different browsers fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); button = createButton('play'); diff --git a/src/data/examples/en/16_Dom/09_Video_Canvas.js b/src/data/examples/en/16_Dom/09_Video_Canvas.js index 2a59151e06..42f867fe31 100644 --- a/src/data/examples/en/16_Dom/09_Video_Canvas.js +++ b/src/data/examples/en/16_Dom/09_Video_Canvas.js @@ -1,5 +1,6 @@ /* * @name Video Canvas + * @arialabel grey background with two identical videos playing. One in color and one in black and white. * @description Load a video with multiple formats and draw it to the canvas. * To run this example locally, you will need a running * local server. diff --git a/src/data/examples/en/16_Dom/10_Video_Pixels.js b/src/data/examples/en/16_Dom/10_Video_Pixels.js index 9169e37a3d..2d3b4681cb 100644 --- a/src/data/examples/en/16_Dom/10_Video_Pixels.js +++ b/src/data/examples/en/16_Dom/10_Video_Pixels.js @@ -1,5 +1,6 @@ /* * @name Video Pixels + * @arialabel Video is turned into black circles to look like pixels. Pixel size increases as the user’s mouse is dragged to the right and decreases as the user’s mouse is dragged to the left * @frame 320,240 * @description Load a video, manipulate its pixels and draw to canvas. * To run this example locally, you will need a running diff --git a/src/data/examples/en/16_Dom/11_Capture.js b/src/data/examples/en/16_Dom/11_Capture.js index d11b28df6f..8368132b19 100644 --- a/src/data/examples/en/16_Dom/11_Capture.js +++ b/src/data/examples/en/16_Dom/11_Capture.js @@ -1,5 +1,6 @@ /* * @name Video Capture + * @arialabel Takes feed from the user’s computer camera and displays it in the window * @frame 710,240 * @description Capture video from the webcam and display * on the canvas as well with invert filter. Note that by diff --git a/src/data/examples/en/16_Dom/12_Drop.js b/src/data/examples/en/16_Dom/12_Drop.js index 826d325511..f2a515a333 100644 --- a/src/data/examples/en/16_Dom/12_Drop.js +++ b/src/data/examples/en/16_Dom/12_Drop.js @@ -1,5 +1,6 @@ /* * @name Drop + * @arialabel Empty grey canvas that displays an image if it is dragged from the user’s computer to the grey canvas * @description Drag an image file onto the canvas to see it displayed. */ diff --git a/src/data/examples/en/16_Dom/13_DOM_Form_Elements.js b/src/data/examples/en/16_Dom/13_DOM_Form_Elements.js index 0fc4a17c4a..a08ef5dc15 100644 --- a/src/data/examples/en/16_Dom/13_DOM_Form_Elements.js +++ b/src/data/examples/en/16_Dom/13_DOM_Form_Elements.js @@ -1,5 +1,6 @@ /* * @name DOM Form Elements + * @arialabel Light yellow box with “checked” written with form elements such as checking boxes, sliders, and empty text input below * @frame 600,400 * @description contributed by Prof WM Harris, How to use p5 DOM form elements to create a slider, diff --git a/src/data/examples/en/17_Drawing/00_Continuous_Lines.js b/src/data/examples/en/17_Drawing/00_Continuous_Lines.js index c06901439a..564c8cab35 100644 --- a/src/data/examples/en/17_Drawing/00_Continuous_Lines.js +++ b/src/data/examples/en/17_Drawing/00_Continuous_Lines.js @@ -1,5 +1,6 @@ /* - * @name Continous Lines + * @name Continuous Lines + * @arialabel Thin white line draws on a dark grey background as the user clicks and drags their mouse * @description Click and drag the mouse to draw a line. */ function setup() { diff --git a/src/data/examples/en/17_Drawing/01_Pattern.js b/src/data/examples/en/17_Drawing/01_Pattern.js index ab3ee36eb5..5f32d33ae2 100644 --- a/src/data/examples/en/17_Drawing/01_Pattern.js +++ b/src/data/examples/en/17_Drawing/01_Pattern.js @@ -1,5 +1,6 @@ /* * @name Patterns + * @arialabel Continuous circles draw on a dark grey background as you move your mouse. The circles get bigger as you move your mouse faster and smaller as you move your mouse slower * @description Move the cursor over the image to draw with a software tool * which responds to the speed of the mouse. */ diff --git a/src/data/examples/en/17_Drawing/02_Pulses.js b/src/data/examples/en/17_Drawing/02_Pulses.js index c256672539..2eec4a1736 100644 --- a/src/data/examples/en/17_Drawing/02_Pulses.js +++ b/src/data/examples/en/17_Drawing/02_Pulses.js @@ -1,5 +1,6 @@ /* * @name Pulses + * @arialabel Continuous black flowers with a white circle center draw on a dark grey background as you move your mouse. The circles get bigger as you move your mouse faster and smaller as you move your mouse slower. When you stop your mouse, the last flower rotates slightly. * @description Software drawing instruments can follow a rhythm or abide by * rules independent of drawn gestures. This is a form of collaborative drawing * in which the draftsperson controls some aspects of the image and the software diff --git a/src/data/examples/en/18_Transform/00_Translate.js b/src/data/examples/en/18_Transform/00_Translate.js index 1599f1cf4f..dede423e77 100644 --- a/src/data/examples/en/18_Transform/00_Translate.js +++ b/src/data/examples/en/18_Transform/00_Translate.js @@ -1,5 +1,6 @@ /* * @name Translate + * @arialabel Two squares one white one black travel horizontally across a grey background. The black square moves faster than the white * @description The translate() function allows objects to be * moved to any location within the window. The first parameter * sets the x-axis offset and the second parameter sets the diff --git a/src/data/examples/en/18_Transform/01_Scale.js b/src/data/examples/en/18_Transform/01_Scale.js index d176f25680..2ddafda414 100644 --- a/src/data/examples/en/18_Transform/01_Scale.js +++ b/src/data/examples/en/18_Transform/01_Scale.js @@ -1,5 +1,6 @@ /* * @name Scale + * @arialabel Two squares one white and one black grow and shrink on a grey background * @description Paramenters for the scale() function are values * specified as decimal percentages. For example, the method * call scale(2.0) will increase the dimension of the shape by diff --git a/src/data/examples/en/18_Transform/02_Rotate.js b/src/data/examples/en/18_Transform/02_Rotate.js index 928e557040..b6a465e67e 100644 --- a/src/data/examples/en/18_Transform/02_Rotate.js +++ b/src/data/examples/en/18_Transform/02_Rotate.js @@ -1,5 +1,6 @@ /* * @name Rotate + * @arialabel White square on a dark grey background rotates side to side * @description Rotating a square around the Z axis. * To get the results you expect, send the rotate function angle * parameters that are values between 0 and PI*2 (TWO_PI which is diff --git a/src/data/examples/en/18_Transform/03_Arm.js b/src/data/examples/en/18_Transform/03_Arm.js index 733fe30909..d6a282449d 100644 --- a/src/data/examples/en/18_Transform/03_Arm.js +++ b/src/data/examples/en/18_Transform/03_Arm.js @@ -1,5 +1,6 @@ /* * @name Arm + * @arialabel Two ovals connected at the end to form an arm shape. One end is fixed at the center of the black background. The arm shape moves in a circular motion as the mouse moves around the screen * @description This example uses transform matrices to create * an arm. The angle of each segment is controlled with the * mouseX and mouseY position. The transformations applied to diff --git a/src/data/examples/en/19_Typography/00_Letters.js b/src/data/examples/en/19_Typography/00_Letters.js index 2e16306ae3..acbfe5588f 100644 --- a/src/data/examples/en/19_Typography/00_Letters.js +++ b/src/data/examples/en/19_Typography/00_Letters.js @@ -1,5 +1,6 @@ /* * @name Letters + * @arialabel Letters and characters on a grey background. All are white except the vowels are pink. * @description Letters can be drawn to the screen by loading a font, setting * its characteristics and then drawing the letters. This example uses a for * loop and unicode reference numbers to automatically fill the canvas with diff --git a/src/data/examples/en/19_Typography/01_Words.js b/src/data/examples/en/19_Typography/01_Words.js index d76271f2b8..8304e785dd 100644 --- a/src/data/examples/en/19_Typography/01_Words.js +++ b/src/data/examples/en/19_Typography/01_Words.js @@ -1,5 +1,6 @@ /* * @name Words + * @arialabel Three columns of the words “ichi,” “ni,” “san,” and “shi” gradienting from black to white on a gray background. The first column is right aligned, the middle column is center aligned, and the left column is left aligned * @description The text() function is used for writing words to the screen. * The words can be aligned left, center, or right with the textAlign() * function, and like with shapes, words can be colored with fill(). diff --git a/src/data/examples/en/19_Typography/02_Text_Rotation.js b/src/data/examples/en/19_Typography/02_Text_Rotation.js index 07ec47321c..bfebf09fbf 100644 --- a/src/data/examples/en/19_Typography/02_Text_Rotation.js +++ b/src/data/examples/en/19_Typography/02_Text_Rotation.js @@ -1,62 +1,64 @@ /* - * @name Text Rotation + * @name Text Rotation + * @arialabel Three white lines on a black screen. One at 45 degrees, one at 270 degrees, and one line that turns clockwise and the degree label changes as the line turns. * @description Draws letters to the screen and rotates them at different angles. - * (ported from https://processing.org/examples/textrotation.html) + *

        This example is ported from the Text Rotation example + * on the Processing website */ let font, fontsize = 32; - let angleRotate = 0.0; - - function setup() { - createCanvas(710, 400); - background(0); - - // Ensure the .ttf or .otf font stored in the assets directory - // is loaded before setup() and draw() are called - font = loadFont('assets/SourceSansPro-Regular.otf'); - - // Set text characteristics - textFont(font); - } - - function draw() { - background(0); +let angleRotate = 0.0; + +function setup() { + createCanvas(710, 400); + background(0); - strokeWeight(1); - stroke(153); + // Ensure the .ttf or .otf font stored in the assets directory + // is loaded before setup() and draw() are called + font = loadFont('assets/SourceSansPro-Regular.otf'); - push(); - let angle1 = radians(45); - translate(100, 180); - rotate(angle1); - // Draw the letter to the screen - text("45 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); + // Set text characteristics + textFont(font); +} + +function draw() { + background(0); + + strokeWeight(1); + stroke(153); + + push(); + let angle1 = radians(45); + translate(100, 180); + rotate(angle1); + // Draw the letter to the screen + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); + + push(); + let angle2 = radians(270); + translate(200, 180); + rotate(angle2); + // Draw the letter to the screen + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); - push(); - let angle2 = radians(270); - translate(200, 180); - rotate(angle2); - // Draw the letter to the screen - text("270 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); - - push(); - translate(440, 180); - rotate(radians(angleRotate)); - text(int(angleRotate) % 360 + " DEGREES ", 0, 0); - line(0, 0, 150, 0); - pop(); - - angleRotate += 0.25; + push(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES ", 0, 0); + line(0, 0, 150, 0); + pop(); - stroke(255, 0, 0); - strokeWeight(4); - point(100, 180); - point(200, 180); - point(440, 180); - } \ No newline at end of file + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/src/data/examples/en/20_3D/00_geometries.js b/src/data/examples/en/20_3D/00_geometries.js index a58cce64e8..09afb9a92e 100644 --- a/src/data/examples/en/20_3D/00_geometries.js +++ b/src/data/examples/en/20_3D/00_geometries.js @@ -1,5 +1,6 @@ /* * @name Geometries + * @arialabel Six 3D shapes in neon gradient rotating on a white background. Shapes include cube, cylinder, ring, pyramid, sphere, and a plane. * @description There are six 3D primitives in p5 now. */ function setup() { diff --git a/src/data/examples/en/20_3D/01_sine_cosine_in_3D.js b/src/data/examples/en/20_3D/01_sine_cosine_in_3D.js index d9adf11963..3eb4293d6c 100644 --- a/src/data/examples/en/20_3D/01_sine_cosine_in_3D.js +++ b/src/data/examples/en/20_3D/01_sine_cosine_in_3D.js @@ -1,5 +1,6 @@ /* * @name Sine Cosine in 3D + * @arialabel Geometric spheres moving in different spiral shapes in a 3D space * @description Sine, cosine and push / pop could be applied in 3D as well. */ function setup() { diff --git a/src/data/examples/en/20_3D/02_multiple_lights.js b/src/data/examples/en/20_3D/02_multiple_lights.js index 7bed590f63..7a9689965e 100644 --- a/src/data/examples/en/20_3D/02_multiple_lights.js +++ b/src/data/examples/en/20_3D/02_multiple_lights.js @@ -1,5 +1,6 @@ /* * @name Multiple Lights + * @arialabel Rotating iridescent cube on the left of the screen and an iridescent sphere on the right. The user’s mouse acts as a light illuminating the shapes and can control the direction of the light * @description All types of lights could be used in one sketch. */ function setup() { diff --git a/src/data/examples/en/20_3D/03_materials.js b/src/data/examples/en/20_3D/03_materials.js index 4dd7e97e37..c2c6e0bfca 100644 --- a/src/data/examples/en/20_3D/03_materials.js +++ b/src/data/examples/en/20_3D/03_materials.js @@ -1,5 +1,6 @@ /* * @name Materials + * @arialabel Four rings and one cube of various materials rotate on a black background. As the user’s mouse moves across the window, the position of the light changes. * @description There are five types of materials supported. * They respond to light differently. * Move your mouse to change the light position. diff --git a/src/data/examples/en/20_3D/04_textures.js b/src/data/examples/en/20_3D/04_textures.js index 0a4df84872..87d08f2f57 100644 --- a/src/data/examples/en/20_3D/04_textures.js +++ b/src/data/examples/en/20_3D/04_textures.js @@ -1,5 +1,6 @@ /* * @name Textures + * @arialabel One sphere and one cube rotating on a white background. The sphere is covered with a video display and the cube is covered with an image. * @description Images and videos are supported for texture. */ // video source: https://vimeo.com/90312869 diff --git a/src/data/examples/en/20_3D/05_ray_casting.js b/src/data/examples/en/20_3D/05_ray_casting.js index 98906dcb28..e3a2515ca5 100644 --- a/src/data/examples/en/20_3D/05_ray_casting.js +++ b/src/data/examples/en/20_3D/05_ray_casting.js @@ -1,5 +1,6 @@ /* * @name Ray Casting + * @arialabel White square in the middle of a screen split diagonally between light pink and dark pink. The white square is a back wall and the pinks form 4 other walls. The user’s mouse controls a circle which turns into a 3D bump as it moves along the walls close to the front. * @description Original example by Jonathan Watson. *

        Detecting the position of the mouse in 3D space with ray casting. */ diff --git a/src/data/examples/en/20_3D/07_orbit_control.js b/src/data/examples/en/20_3D/07_orbit_control.js index 7d30f82cbd..7ae75b1650 100644 --- a/src/data/examples/en/20_3D/07_orbit_control.js +++ b/src/data/examples/en/20_3D/07_orbit_control.js @@ -1,5 +1,6 @@ /* * @name Orbit Control + * @arialabel Users can click on the screen and drag to move themselves around a 3D space. It consists of a white background with columns of purple cubes and green pyramids arched in curves. * @description Orbit control allows you to drag and move around the world. */ function setup() { diff --git a/src/data/examples/en/20_3D/08_basic_shader.js b/src/data/examples/en/20_3D/08_basic_shader.js index 32610c79e4..bf531490d2 100644 --- a/src/data/examples/en/20_3D/08_basic_shader.js +++ b/src/data/examples/en/20_3D/08_basic_shader.js @@ -1,5 +1,6 @@ /* * @name Basic Shader + * @arialabel Background with a cyan to purple gradient * @description This is a basic example showing how to load shaders in p5.js. *
        To learn more about using shaders in p5.js: p5.js Shaders */ diff --git a/src/data/examples/en/20_3D/09_shader_as_a_texture.js b/src/data/examples/en/20_3D/09_shader_as_a_texture.js index 7bffbab11b..ba67dd8e89 100644 --- a/src/data/examples/en/20_3D/09_shader_as_a_texture.js +++ b/src/data/examples/en/20_3D/09_shader_as_a_texture.js @@ -1,5 +1,6 @@ /* * @name Shader as a Texture + * @arialabel Sphere broken up into a square grid with a gradient in each grid. * @description Shaders can be applied to 2D/3D shapes as textures. *
        To learn more about using shaders in p5.js: p5.js Shaders */ diff --git a/src/data/examples/en/20_3D/10_passing_shader_uniforms.js b/src/data/examples/en/20_3D/10_passing_shader_uniforms.js index 3d6dc2ec1b..c01ea5da83 100644 --- a/src/data/examples/en/20_3D/10_passing_shader_uniforms.js +++ b/src/data/examples/en/20_3D/10_passing_shader_uniforms.js @@ -1,5 +1,6 @@ /* * @name Passing Shader Uniforms + * @arialabel Sage green shape in the middle of a dark purple background. As the user’s mouse moves left, the shape has less sides and as the user’s mouse moves right, the shape has more sides * @description Uniforms are the way in which information is passed from p5 to the shader. *
        To learn more about using shaders in p5.js: p5.js Shaders */ diff --git a/src/data/examples/en/20_3D/11_shader_using_webcam.js b/src/data/examples/en/20_3D/11_shader_using_webcam.js index a3ed382cff..b54a51c9a4 100644 --- a/src/data/examples/en/20_3D/11_shader_using_webcam.js +++ b/src/data/examples/en/20_3D/11_shader_using_webcam.js @@ -1,5 +1,6 @@ /* * @name Shader Using Webcam + * @arialabel Neon texture added to the scene displayed by the user’s built-in webcam * @description The webcam can be passed to shaders as a texture. *
        To learn more about using shaders in p5.js: p5.js Shaders */ diff --git a/src/data/examples/en/21_Input/00_Clock.js b/src/data/examples/en/21_Input/00_Clock.js index 5603db0f3e..c95fac761c 100644 --- a/src/data/examples/en/21_Input/00_Clock.js +++ b/src/data/examples/en/21_Input/00_Clock.js @@ -1,5 +1,6 @@ /* * @name Clock + * @arialabel Functioning pink clock on a grey background * @description The current time can be read with the second(), * minute(), and hour() functions. In this example, sin() and * cos() values are used to set the position of the hands. diff --git a/src/data/examples/en/21_Input/01_Constrain.js b/src/data/examples/en/21_Input/01_Constrain.js index 36a08abd31..f2e4ace449 100644 --- a/src/data/examples/en/21_Input/01_Constrain.js +++ b/src/data/examples/en/21_Input/01_Constrain.js @@ -1,5 +1,6 @@ /* * @name Constrain + * @arialabel Pink rectangle on a grey background. A user uses their mouse to move a white circle within the pink rectangle * @description Move the mouse across the screen to move * the circle. The program constrains the circle to its box. */ diff --git a/src/data/examples/en/21_Input/02_Easing.js b/src/data/examples/en/21_Input/02_Easing.js index 6fe01dc1b0..79d78921bc 100644 --- a/src/data/examples/en/21_Input/02_Easing.js +++ b/src/data/examples/en/21_Input/02_Easing.js @@ -1,5 +1,6 @@ /* * @name Easing + * @arialabel Pink background with a white circle that the user can move around by hovering over the circle * @description Move the mouse across the screen and the symbol * will follow. Between drawing each frame of the animation, the * program calculates the difference between the position of the diff --git a/src/data/examples/en/21_Input/03_Keyboard.js b/src/data/examples/en/21_Input/03_Keyboard.js index c7b50f99a3..450a7ffb44 100644 --- a/src/data/examples/en/21_Input/03_Keyboard.js +++ b/src/data/examples/en/21_Input/03_Keyboard.js @@ -1,5 +1,6 @@ /* * @name Keyboard + * @arialabel Each letter on the keyboard draws a different color rectangle on the grey screen when pressed * @description Click on the image to give it focus and * press the letter keys to create forms in time and space. * Each key has a unique identifying number. These numbers diff --git a/src/data/examples/en/21_Input/04_Milliseconds.js b/src/data/examples/en/21_Input/04_Milliseconds.js index 8bb1477434..63aa44fd82 100644 --- a/src/data/examples/en/21_Input/04_Milliseconds.js +++ b/src/data/examples/en/21_Input/04_Milliseconds.js @@ -1,7 +1,10 @@ /* * @name Milliseconds - * @description A millisecond is 1/1000 of a second. Processing keeps track of the number of milliseconds a - * program has run. By modifying this number with the modulo(%) operator, different patterns in time are created. (ported from https://processing.org/examples/milliseconds.html) + * @arialabel Background broken down in bars of various shades of grey. The fill of some of the bars randomly changes every millisecond to other shades of grey. + * @description A millisecond is 1/1000 of a second. Processing keeps track of the number of milliseconds a + * program has run. By modifying this number with the modulo(%) operator, different patterns in time are created. + *

        This example is ported from the Milliseconds example + * on the Processing website */ let scale; diff --git a/src/data/examples/en/21_Input/05_Mouse1D.js b/src/data/examples/en/21_Input/05_Mouse1D.js index eb613fbab9..412dc4c466 100644 --- a/src/data/examples/en/21_Input/05_Mouse1D.js +++ b/src/data/examples/en/21_Input/05_Mouse1D.js @@ -1,5 +1,6 @@ /* * @name Mouse 1D + * @arialabel Two fuschia squares on a grey background. As the user’s mouse moves to the left of the window, the fuschia square on the left increases to fill up the left half of the window as the right square disappears and vice versa as the user’s mouse moves right. * @description Move the mouse left and right to * shift the balance. The "mouseX" variable is used * to control both the size and color of the rectangles. diff --git a/src/data/examples/en/21_Input/06_Mouse2D.js b/src/data/examples/en/21_Input/06_Mouse2D.js index efc623adae..4998706a06 100644 --- a/src/data/examples/en/21_Input/06_Mouse2D.js +++ b/src/data/examples/en/21_Input/06_Mouse2D.js @@ -1,5 +1,6 @@ /* * @name Mouse 2D + * @arialabel Two fuschia squares on a grey background. As the user’s mouse moves left, the squares rotate around each other in the left direction and vice versa as the user’s mouse moves right * @description Moving the mouse changes the position and * size of each box. */ diff --git a/src/data/examples/en/21_Input/07_Mouse_Functions.js b/src/data/examples/en/21_Input/07_Mouse_Functions.js index ad1acdc7b2..c2c5c4d2fb 100644 --- a/src/data/examples/en/21_Input/07_Mouse_Functions.js +++ b/src/data/examples/en/21_Input/07_Mouse_Functions.js @@ -1,5 +1,6 @@ /* * @name Mouse Functions + * @arialabel Fuschia background with a slightly opaque white square. The user can click on the square, which turns it white, and drag it around the background. * @description Click on the box and drag it across the screen. */ let bx; diff --git a/src/data/examples/en/21_Input/08_Mouse_Signals.js b/src/data/examples/en/21_Input/08_Mouse_Signals.js index 8847fe8f1c..2b61304295 100644 --- a/src/data/examples/en/21_Input/08_Mouse_Signals.js +++ b/src/data/examples/en/21_Input/08_Mouse_Signals.js @@ -1,5 +1,6 @@ /* * @name Mouse Signals + * @arialabel Three rows: fuschia on the top and bottom rows and white in the middle row. The top row tracks the x-coordinates of the mouse, the middle row tracks the y-coordinates, and the bottom row tracks whether or not the mouse is pressed. * @description Move and click the mouse to generate signals. * The top row is the signal from "mouseX", the middle row is * the signal from "mouseY", and the bottom row is the signal diff --git a/src/data/examples/en/21_Input/09_MouseIsPressed.js b/src/data/examples/en/21_Input/09_MouseIsPressed.js index 27279e99b0..bc0a51a843 100644 --- a/src/data/examples/en/21_Input/09_MouseIsPressed.js +++ b/src/data/examples/en/21_Input/09_MouseIsPressed.js @@ -1,5 +1,6 @@ /* * @name Mouse Press + * @arialabel User draws pink crosses on a grey background and can change the cross color to white by clicking the mouse. * @description Move the mouse to position the shape. * Press the mouse button to invert the color. */ diff --git a/src/data/examples/en/21_Input/10_Rollover.js b/src/data/examples/en/21_Input/10_Rollover.js index 09ebd6648c..449bda1689 100644 --- a/src/data/examples/en/21_Input/10_Rollover.js +++ b/src/data/examples/en/21_Input/10_Rollover.js @@ -1,5 +1,6 @@ /* * @name Rollover + * @arialabel Black square and white circle on grey background. The background turns black as the user’s mouth hovers over the black square and the background turns white as the user’s mouth hovers over the white square. * @description Roll over the colored squares in the center of the image to change the color of the outside rectangle. *

        This example is ported from the Rollover example * on the Processing website diff --git a/src/data/examples/en/21_Input/11_Storing_Input.js b/src/data/examples/en/21_Input/11_Storing_Input.js index 563ff80759..4e76fded22 100644 --- a/src/data/examples/en/21_Input/11_Storing_Input.js +++ b/src/data/examples/en/21_Input/11_Storing_Input.js @@ -1,5 +1,6 @@ /* * @name Storing Input + * @arialabel User draws white circles on a fuschia background. Circles fade in color as the next circle is drawn. * @description Move the mouse across the screen to * change the position of the circles. The positions * of the mouse are recorded into an array and played diff --git a/src/data/examples/en/22_Advanced_Data/00_Load_Saved_JSON.js b/src/data/examples/en/22_Advanced_Data/00_Load_Saved_JSON.js index 7d3e8f4b66..7aab438794 100644 --- a/src/data/examples/en/22_Advanced_Data/00_Load_Saved_JSON.js +++ b/src/data/examples/en/22_Advanced_Data/00_Load_Saved_JSON.js @@ -1,5 +1,6 @@ /* * @name Load Saved JSON + * @arialabel When the user clicks on the screen, a small white circle appears with a label * @description Create a Bubble class, instantiate multiple bubbles using data from * a JSON file, and display results on the screen. * Because the web browsers differ in where they save files, we do not make use of diff --git a/src/data/examples/en/22_Advanced_Data/01_Load_Saved_Table.js b/src/data/examples/en/22_Advanced_Data/01_Load_Saved_Table.js index 8536abcccc..3cd098bd82 100644 --- a/src/data/examples/en/22_Advanced_Data/01_Load_Saved_Table.js +++ b/src/data/examples/en/22_Advanced_Data/01_Load_Saved_Table.js @@ -1,5 +1,6 @@ /* * @name Load Saved Table + * @arialabel Four white circles with labels * @description Create a Bubble class, instantiate multiple bubbles using data from * a csv file, and display results on the screen. * Because the web browsers differ in where they save files, we do not make use of diff --git a/src/data/examples/en/33_Sound/00_Load_and_Play_Sound.js b/src/data/examples/en/33_Sound/00_Load_and_Play_Sound.js index feffaffdc7..93b5855ec8 100644 --- a/src/data/examples/en/33_Sound/00_Load_and_Play_Sound.js +++ b/src/data/examples/en/33_Sound/00_Load_and_Play_Sound.js @@ -1,5 +1,6 @@ /* * @name Load and Play Sound + * @arialabel Red screen turns green when the user clicks on it and plays music * @description Load sound during preload(). Play a sound when canvas is clicked. *

        To run this example locally, you will need the * p5.sound library diff --git a/src/data/examples/en/33_Sound/01_Preload_Sound.js b/src/data/examples/en/33_Sound/01_Preload_Sound.js index 08c419179e..ff8034c009 100644 --- a/src/data/examples/en/33_Sound/01_Preload_Sound.js +++ b/src/data/examples/en/33_Sound/01_Preload_Sound.js @@ -1,5 +1,6 @@ /* * @name Preload SoundFile + * @arialabel On page load, a green screen plays music. When the user clicks on it, the screen turns red and stops playing music * @description Call loadSound() during preload() to ensure that the * sound is completely loaded before setup() is called. It's best to always * call loadSound() in preload(), otherwise sounds won't necessarily be loaded diff --git a/src/data/examples/en/33_Sound/02_soundFormats.js b/src/data/examples/en/33_Sound/02_soundFormats.js index ae7571fb01..536efe0506 100644 --- a/src/data/examples/en/33_Sound/02_soundFormats.js +++ b/src/data/examples/en/33_Sound/02_soundFormats.js @@ -1,5 +1,6 @@ /** * @name soundFormats + * @arialabel On page load, a green screen plays music. When the user clicks on it, the screen turns red and stops playing music * @description

        Technically, due to patent issues, there is no single * sound format that is supported by all web browsers. While * mp3 is supported across the diff --git a/src/data/examples/en/33_Sound/03_Play_Mode.js b/src/data/examples/en/33_Sound/03_Play_Mode.js index 3b89691dee..f011f6bec1 100644 --- a/src/data/examples/en/33_Sound/03_Play_Mode.js +++ b/src/data/examples/en/33_Sound/03_Play_Mode.js @@ -1,5 +1,6 @@ /* * @name Play Mode + * @arialabel Yellow screen plays music when user clicks on it * @description *

        In 'sustain' mode, the sound will overlap with itself. * In 'restart' mode it will stop and then start again. diff --git a/src/data/examples/en/33_Sound/04_Pan_SoundFile.js b/src/data/examples/en/33_Sound/04_Pan_SoundFile.js index b1d881db36..e35f75a29c 100644 --- a/src/data/examples/en/33_Sound/04_Pan_SoundFile.js +++ b/src/data/examples/en/33_Sound/04_Pan_SoundFile.js @@ -1,5 +1,6 @@ /* * @name Pan Sound + * @arialabel User moves a white ball on black screen, sound effect plays when the user clicks the screen and the sound comes out more of the speaker closer to the side the ball is on * @description

        Click mouse to play the sound. * Ball position follows mouse and correlates to panning of sound.

        *

        To run this example locally, you will need the diff --git a/src/data/examples/en/33_Sound/05_Sound_Effect.js b/src/data/examples/en/33_Sound/05_Sound_Effect.js index 0839b9d7fb..fd0cf56081 100644 --- a/src/data/examples/en/33_Sound/05_Sound_Effect.js +++ b/src/data/examples/en/33_Sound/05_Sound_Effect.js @@ -1,5 +1,6 @@ /* * @name Sound Effect + * @arialabel Grey circle on a white screen that plays a doorbell sound when pressed on * @description

        Play a sound effect when the mouse is clicked inside the circle.

        *

        To run this example locally, you will need the * p5.sound library diff --git a/src/data/examples/en/33_Sound/06_Manipulate_Sound.js b/src/data/examples/en/33_Sound/06_Manipulate_Sound.js index 60ad548038..9ad41eb08e 100644 --- a/src/data/examples/en/33_Sound/06_Manipulate_Sound.js +++ b/src/data/examples/en/33_Sound/06_Manipulate_Sound.js @@ -1,5 +1,6 @@ /* * @name Playback Rate + * @arialabel Two grey circles on a light grey background that move as the user moves their mouse and plays different noises based on their distance from each other * @description

        Load a SoundFile and map its playback rate to * mouseY, volume to mouseX. Playback rate is the speed with * which the web audio context processings the sound file information. diff --git a/src/data/examples/en/33_Sound/07_Amplitude_Analysis.js b/src/data/examples/en/33_Sound/07_Amplitude_Analysis.js index 7bf3446e4f..2b24248613 100644 --- a/src/data/examples/en/33_Sound/07_Amplitude_Analysis.js +++ b/src/data/examples/en/33_Sound/07_Amplitude_Analysis.js @@ -1,5 +1,6 @@ /** * @name Measuring Amplitude + * @arialabel Grey circle that increases and decreases in size based on the amplitude of the music playing * @description

        Analyze the amplitude of sound with * p5.Amplitude.

        * diff --git a/src/data/examples/en/33_Sound/08_Noise_Envelope.js b/src/data/examples/en/33_Sound/08_Noise_Envelope.js index b38e423c75..4c4d89905f 100644 --- a/src/data/examples/en/33_Sound/08_Noise_Envelope.js +++ b/src/data/examples/en/33_Sound/08_Noise_Envelope.js @@ -1,5 +1,6 @@ /** * @name Noise Drum Envelope + * @arialabel Lime green rectangle rises from the bottom of a black screen when the screen is clicked on and plays a sound effect * @description

        White Noise is a random audio signal with equal energy * at every part of the frequency spectrum

        * diff --git a/src/data/examples/en/33_Sound/09_Note_Envelope.js b/src/data/examples/en/33_Sound/09_Note_Envelope.js index 4b9122d244..844105a528 100644 --- a/src/data/examples/en/33_Sound/09_Note_Envelope.js +++ b/src/data/examples/en/33_Sound/09_Note_Envelope.js @@ -1,5 +1,6 @@ /** * @name Note Envelope + * @arialabel Red bars rise on the screen based on the amplitude and the note played * @description

        An Envelope is a series of fades, defined * as time / value pairs. In this example, the envelope * will be used to "play" a note by controlling the output diff --git a/src/data/examples/en/33_Sound/10_Oscillator_Waveform.js b/src/data/examples/en/33_Sound/10_Oscillator_Waveform.js index 4737680b81..ccc4e8086d 100644 --- a/src/data/examples/en/33_Sound/10_Oscillator_Waveform.js +++ b/src/data/examples/en/33_Sound/10_Oscillator_Waveform.js @@ -1,5 +1,6 @@ /* * @name Oscillator Frequency + * @arialabel The wavelength travels across the screen and as the user’s mouse moves left, the wavelength is longer and the frequency is slower and both increase as the mouse moves right * @description

        Control an Oscillator and view the waveform using FFT. * MouseX is mapped to frequency, mouseY is mapped to amplitude.

        *

        To run this example locally, you will need the diff --git a/src/data/examples/en/33_Sound/11_Live_Input.js b/src/data/examples/en/33_Sound/11_Live_Input.js index 30136d62a0..091302632a 100644 --- a/src/data/examples/en/33_Sound/11_Live_Input.js +++ b/src/data/examples/en/33_Sound/11_Live_Input.js @@ -1,5 +1,6 @@ /** * @name Mic Input + * @arialabel Grey circle rises from the bottom of the screen based on the amplitude of the user’s audio input into their mic * @description

        Get audio input from your computer's microphone. * Make noise to float the ellipse.

        *

        Note: p5.AudioIn contains its own p5.Amplitude object, diff --git a/src/data/examples/en/33_Sound/12_FFT_Spectrum.js b/src/data/examples/en/33_Sound/12_FFT_Spectrum.js index 9bc8dedfd7..46c7b05c6e 100644 --- a/src/data/examples/en/33_Sound/12_FFT_Spectrum.js +++ b/src/data/examples/en/33_Sound/12_FFT_Spectrum.js @@ -1,5 +1,6 @@ /** * @name Frequency Spectrum + * @arialabel Audio waves are graphed on a grey screen based on the user’s audio input into their mic * @description

        Visualize the frequency spectrum of live audio input.

        *

        To run this example locally, you will need the * p5.sound library diff --git a/src/data/examples/en/33_Sound/13_Mic_Threshold.js b/src/data/examples/en/33_Sound/13_Mic_Threshold.js index 4c765b059d..9cf48ef5f7 100644 --- a/src/data/examples/en/33_Sound/13_Mic_Threshold.js +++ b/src/data/examples/en/33_Sound/13_Mic_Threshold.js @@ -1,5 +1,6 @@ /** * @name Mic Threshold + * @arialabel Black rectangle is drawn on the bottom of a bar based on the amplitude of the user’s audio input. At a certain minimum amplitude, grey squares are randomly drawn on the right side of the screen * @description

        Trigger an event (draw a rectangle) when the Audio Input * volume surpasses a threshold.

        *

        To run this example locally, you will need the diff --git a/src/data/examples/en/33_Sound/14_Filter_LowPass.js b/src/data/examples/en/33_Sound/14_Filter_LowPass.js index d1337ed63e..4eaadf5a10 100644 --- a/src/data/examples/en/33_Sound/14_Filter_LowPass.js +++ b/src/data/examples/en/33_Sound/14_Filter_LowPass.js @@ -1,5 +1,6 @@ /** * @name Filter LowPass + * @arialabel The lowpass filter changes intensity as the user’s mouse moves left and right on the screen * @description Apply a p5.LowPass filter to a p5.SoundFile. * Visualize the sound with FFT. * Map mouseX to the the filter's cutoff frequency diff --git a/src/data/examples/en/33_Sound/15_Filter_BandPass.js b/src/data/examples/en/33_Sound/15_Filter_BandPass.js index 5e128fcec1..35d10b146a 100644 --- a/src/data/examples/en/33_Sound/15_Filter_BandPass.js +++ b/src/data/examples/en/33_Sound/15_Filter_BandPass.js @@ -1,5 +1,6 @@ /** * @name Filter BandPass + * @arialabel The bandpass filter changes intensity as the user’s mouse moves left and right on the screen * @description Apply a p5.BandPass filter to white noise. * Visualize the sound with FFT. * Map mouseX to the bandpass frequency diff --git a/src/data/examples/en/33_Sound/16_Delay.js b/src/data/examples/en/33_Sound/16_Delay.js index 0027b42f73..15e2336106 100644 --- a/src/data/examples/en/33_Sound/16_Delay.js +++ b/src/data/examples/en/33_Sound/16_Delay.js @@ -1,5 +1,6 @@ /** * @name Delay + * @arialabel When the user clicks their mouse on the black screen, music plays, and a lime green rectangle appears from the bottom at a height level correlating with the amplitude of the sound as it plays * @description * Click the mouse to hear the p5.Delay process a SoundFile. * MouseX controls the p5.Delay Filter Frequency. diff --git a/src/data/examples/en/33_Sound/17_Reverb.js b/src/data/examples/en/33_Sound/17_Reverb.js index db99aa3ed1..b8e297253f 100644 --- a/src/data/examples/en/33_Sound/17_Reverb.js +++ b/src/data/examples/en/33_Sound/17_Reverb.js @@ -1,5 +1,6 @@ /** * @name Reverb + * @arialabel When the user clicks on the black screen, sound with reverb is played * @description Reverb gives depth and perceived space to a sound. Here, * noise is processed with reverb. * diff --git a/src/data/examples/en/33_Sound/18_Convolution_Reverb.js b/src/data/examples/en/33_Sound/18_Convolution_Reverb.js index bfcfecb57e..2e40973ed2 100644 --- a/src/data/examples/en/33_Sound/18_Convolution_Reverb.js +++ b/src/data/examples/en/33_Sound/18_Convolution_Reverb.js @@ -1,5 +1,6 @@ /** * @name Convolution Reverb + * @arialabel Sound with reverb plays when the user clicks the screen and lime green bars appear based on the amplitude of the sound * @description

        The p5.Convolver can recreate the sound of actual * spaces using convolution. Convolution takes an Impulse Response, * (the sound of a room reverberating), and uses that to diff --git a/src/data/examples/en/33_Sound/19_Record_Save.js b/src/data/examples/en/33_Sound/19_Record_Save.js index b44b7379a8..a7d8af4a38 100644 --- a/src/data/examples/en/33_Sound/19_Record_Save.js +++ b/src/data/examples/en/33_Sound/19_Record_Save.js @@ -1,5 +1,6 @@ /** * @name Record Save Audio + * @arialabel The user clicks the grey screen to begin recording audio input through their mic. When recording the screen turns red. The user clicks their mouse again to end recording and the screen turns green. If the user clicks their mouse again the audio recording is saved to their downloads as a wav file * @description Record a sound, play it back and save * it as a .wav file to the client's computer. * We need three objects: a p5.AudioIn (mic / sound source), diff --git a/src/data/examples/en/33_Sound/21_FreqModulation.js b/src/data/examples/en/33_Sound/21_FreqModulation.js index ab51e8bc61..bd128b7fc7 100644 --- a/src/data/examples/en/33_Sound/21_FreqModulation.js +++ b/src/data/examples/en/33_Sound/21_FreqModulation.js @@ -1,5 +1,6 @@ /** * @name Frequency Modulation + * @arialabel White sound waves on black background change as the user moves their mouse. Labels of modulator frequency and amplitude change as the user moves their mouse too. There is also a label of carrier frequency at 220 Hz * @description

        Frequency Modulation is a powerful form of synthesis. * In its simplest form, FM involves two oscillators, referred * to as the carrier and the modulator. As the modulator's waveform oscillates diff --git a/src/data/examples/en/33_Sound/22_AmplitudeModulation.js b/src/data/examples/en/33_Sound/22_AmplitudeModulation.js index bc77cbd091..e66ae8aa70 100644 --- a/src/data/examples/en/33_Sound/22_AmplitudeModulation.js +++ b/src/data/examples/en/33_Sound/22_AmplitudeModulation.js @@ -1,5 +1,6 @@ /** * @name Amplitude Modulation + * @arialabel White sound waves on black background change as the user moves their mouse. Labels of modulator frequency and amplitude change as the user moves their mouse too * @description

        Amplitude Modulation involves two oscillators, referred * to as the carrier and the modulator, where the modulator controls * the carrier's amplitude.

        diff --git a/src/data/examples/en/90_Hello_P5/01_shapes.js b/src/data/examples/en/90_Hello_P5/01_shapes.js index 5196abef4a..122ac85697 100644 --- a/src/data/examples/en/90_Hello_P5/01_shapes.js +++ b/src/data/examples/en/90_Hello_P5/01_shapes.js @@ -1,5 +1,6 @@ /* * @name Simple Shapes + * @arialabel Grey canvas with 4 pink shapes: a circle, a rectangle, a triangle, and a flower * @description This examples includes a circle, square, triangle, and a flower. */ function setup() { diff --git a/src/data/examples/en/90_Hello_P5/02_interactivity.js b/src/data/examples/en/90_Hello_P5/02_interactivity.js index 5bc6687440..1b478af003 100644 --- a/src/data/examples/en/90_Hello_P5/02_interactivity.js +++ b/src/data/examples/en/90_Hello_P5/02_interactivity.js @@ -1,5 +1,6 @@ /* * @name Interactivity 1 + * @arialabel Dark grey background with a colored circle in the middle that changes color when clicked ons * @frame 720,425 * @description The circle changes color when you click on it. */ diff --git a/src/data/examples/en/90_Hello_P5/03_interactivity.js b/src/data/examples/en/90_Hello_P5/03_interactivity.js index 6ab965cbe9..86218e4b4d 100644 --- a/src/data/examples/en/90_Hello_P5/03_interactivity.js +++ b/src/data/examples/en/90_Hello_P5/03_interactivity.js @@ -1,5 +1,6 @@ /* * @name Interactivity 2 + * @arialabel Dark grey background with a colored circle in the middle that changes color as the user drags a slider on the bottom * @frame 720,425 * @description The circle changes color when you move the slider. */ diff --git a/src/data/examples/en/90_Hello_P5/04_animate.js b/src/data/examples/en/90_Hello_P5/04_animate.js index 7c87da3a24..75ec783002 100644 --- a/src/data/examples/en/90_Hello_P5/04_animate.js +++ b/src/data/examples/en/90_Hello_P5/04_animate.js @@ -1,5 +1,6 @@ /* * @name Animation + * @arialabel Light grey background with a dark grey circle that is traveling up from the middle of the bottom of the screen as it moves slightly side-to-side * @description The circle moves. */ // Where is the circle diff --git a/src/data/examples/en/90_Hello_P5/04_flocking.js b/src/data/examples/en/90_Hello_P5/04_flocking.js index 93c5cd6b2f..7e1ff4812f 100644 --- a/src/data/examples/en/90_Hello_P5/04_flocking.js +++ b/src/data/examples/en/90_Hello_P5/04_flocking.js @@ -1,5 +1,6 @@ /* * @name Flocking + * @arialabel Light grey circles on a dark grey background that travel across the screen in flocks or groups * @description Demonstration of Craig Reynolds' "Flocking" behavior.
        * (Rules: Cohesion, Separation, Alignment.)
        * From natureofcode.com. diff --git a/src/data/examples/en/90_Hello_P5/05_weather.js b/src/data/examples/en/90_Hello_P5/05_weather.js index 839381fdbc..429d25ac65 100644 --- a/src/data/examples/en/90_Hello_P5/05_weather.js +++ b/src/data/examples/en/90_Hello_P5/05_weather.js @@ -1,5 +1,6 @@ /* * @name Weather + * @arialabel Uses weather from Metweather website to control a blue arrow and grey circle on the screen. The blue arrow is in a white circle on the bottom left corner and points in the direction of the wind. The small dark grey circle is on a grey background and moves in the window’s direction * @frame 720,280 * @description This example grabs JSON weather data from www.metaweather.com. */ diff --git a/src/data/examples/en/90_Hello_P5/06_drawing.js b/src/data/examples/en/90_Hello_P5/06_drawing.js index 2450401328..6ca6c97e50 100644 --- a/src/data/examples/en/90_Hello_P5/06_drawing.js +++ b/src/data/examples/en/90_Hello_P5/06_drawing.js @@ -1,5 +1,6 @@ /* * @name Drawing +* @arialabel When the user clicks and drags on the light grey background, the user draws a pattern of dark grey circles connected by dark grey lines which also disappears after a bit. * @description Generative painting program. */ diff --git a/src/data/examples/en/90_Hello_P5/07_song.js b/src/data/examples/en/90_Hello_P5/07_song.js index 5e4337b7c9..a43e43363e 100644 --- a/src/data/examples/en/90_Hello_P5/07_song.js +++ b/src/data/examples/en/90_Hello_P5/07_song.js @@ -1,5 +1,6 @@ /* * @name Song + * @arialabel Grey background divided into 7 vertical rectangles. When the user hovers, the rectangle turns dark grey. When the user clicks, each rectangle turns cyan and plays a different note. * @frame 720, 430 * @description Play a song. * You will need to include the diff --git a/src/data/examples/es/00_Structure/00_Statements_and_Comments.js b/src/data/examples/es/00_Structure/00_Statements_and_Comments.js index 8469f369b7..709027c4d5 100644 --- a/src/data/examples/es/00_Structure/00_Statements_and_Comments.js +++ b/src/data/examples/es/00_Structure/00_Statements_and_Comments.js @@ -1,6 +1,9 @@ /* * @name Comments and Statements - * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. It is called the "statement * terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). (ported from https://processing.org/examples/statementscomments.html) + * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). + *

        This example is ported from the Statements and Comments example + * on the Processing website */ // The createCanvas function is a statement that tells the computer // how large to make the window. diff --git a/src/data/examples/es/05_Image/10_Copy_Method.js b/src/data/examples/es/05_Image/10_Copy_Method.js index 1c7a8efdfc..8d7db11f81 100644 --- a/src/data/examples/es/05_Image/10_Copy_Method.js +++ b/src/data/examples/es/05_Image/10_Copy_Method.js @@ -1,20 +1,20 @@ -/* - * @name Método copy() - * @frame 600,400 - * @description Un ejemplo de cómo simular colorear una imagen con el método copy(). - */ -let draft, ready; -function preload() { - ready = loadImage("assets/parrot-color.png"); - draft = loadImage("assets/parrot-bw.png"); -} -function setup() { - createCanvas(600, 400); - noCursor(); - cursor("assets/brush.png", 20, -10); - image(ready, 0, 0); - image(draft, 0, 0); -} -function mouseDragged() { - copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); -} +/* + * @name Método copy() + * @frame 600,400 + * @description Un ejemplo de cómo simular colorear una imagen con el método copy(). + */ +let draft, ready; +function preload() { + ready = loadImage("assets/parrot-color.png"); + draft = loadImage("assets/parrot-bw.png"); +} +function setup() { + createCanvas(600, 400); + noCursor(); + cursor("assets/brush.png", 20, -10); + image(ready, 0, 0); + image(draft, 0, 0); +} +function mouseDragged() { + copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); +} diff --git a/src/data/examples/en/15_Instance_Mode/03_Car_Instances.js b/src/data/examples/es/11_Objects/06_Car_Instances.js similarity index 100% rename from src/data/examples/en/15_Instance_Mode/03_Car_Instances.js rename to src/data/examples/es/11_Objects/06_Car_Instances.js diff --git a/src/data/examples/es/16_Dom/08_Video.js b/src/data/examples/es/16_Dom/08_Video.js index 59dd800156..155de71b40 100644 --- a/src/data/examples/es/16_Dom/08_Video.js +++ b/src/data/examples/es/16_Dom/08_Video.js @@ -8,6 +8,7 @@ let fingers; let button; function setup() { + noCanvas(); // especificar múltiples formatos para distintos navegadores fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); button = createButton('play'); diff --git a/src/data/examples/es/19_Typography/02_Text_Rotation.js b/src/data/examples/es/19_Typography/02_Text_Rotation.js index 07ec47321c..cbf12b41f4 100644 --- a/src/data/examples/es/19_Typography/02_Text_Rotation.js +++ b/src/data/examples/es/19_Typography/02_Text_Rotation.js @@ -1,62 +1,63 @@ /* - * @name Text Rotation + * @name Text Rotation * @description Draws letters to the screen and rotates them at different angles. - * (ported from https://processing.org/examples/textrotation.html) + *

        This example is ported from the Text Rotation example + * on the Processing website */ let font, fontsize = 32; - let angleRotate = 0.0; - - function setup() { - createCanvas(710, 400); - background(0); - - // Ensure the .ttf or .otf font stored in the assets directory - // is loaded before setup() and draw() are called - font = loadFont('assets/SourceSansPro-Regular.otf'); - - // Set text characteristics - textFont(font); - } - - function draw() { - background(0); +let angleRotate = 0.0; + +function setup() { + createCanvas(710, 400); + background(0); - strokeWeight(1); - stroke(153); + // Ensure the .ttf or .otf font stored in the assets directory + // is loaded before setup() and draw() are called + font = loadFont('assets/SourceSansPro-Regular.otf'); - push(); - let angle1 = radians(45); - translate(100, 180); - rotate(angle1); - // Draw the letter to the screen - text("45 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); + // Set text characteristics + textFont(font); +} + +function draw() { + background(0); + + strokeWeight(1); + stroke(153); + + push(); + let angle1 = radians(45); + translate(100, 180); + rotate(angle1); + // Draw the letter to the screen + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); + + push(); + let angle2 = radians(270); + translate(200, 180); + rotate(angle2); + // Draw the letter to the screen + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); - push(); - let angle2 = radians(270); - translate(200, 180); - rotate(angle2); - // Draw the letter to the screen - text("270 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); - - push(); - translate(440, 180); - rotate(radians(angleRotate)); - text(int(angleRotate) % 360 + " DEGREES ", 0, 0); - line(0, 0, 150, 0); - pop(); - - angleRotate += 0.25; + push(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES ", 0, 0); + line(0, 0, 150, 0); + pop(); - stroke(255, 0, 0); - strokeWeight(4); - point(100, 180); - point(200, 180); - point(440, 180); - } \ No newline at end of file + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/src/data/examples/hi/00_Structure/00_Statements_and_Comments.js b/src/data/examples/hi/00_Structure/00_Statements_and_Comments.js new file mode 100644 index 0000000000..cfa0fe0ec4 --- /dev/null +++ b/src/data/examples/hi/00_Structure/00_Statements_and_Comments.js @@ -0,0 +1,24 @@ +/* + * @name कथन और टिप्पणियाँ + * @arialabel पीला पृष्ठभूमि + * @description कथन वे तत्व हैं जो कार्यक्रम बनाते हैं। ";" (सेमी-कोलन) चिन्ह का प्रयोग कथनों को समाप्त करने के लिए किया जाता है। + * इसे "स्टेटमेंट टर्मिनेटर" कहा जाता है। टिप्पणियों का उपयोग लोगों को कार्यक्रमों को बेहतर ढंग से समझने में मदद करने के लिए नोट्स बनाने के लिए किया जाता है। एक टिप्पणी दो फॉरवर्ड स्लैश ("//") से शुरू होती है। + *

        यह उदाहरण बयानों और टिप्पणियों के उदाहरण से लिया गया है + * संसाधन वेबसाइट पर + */ +// The createCanvas function is a statement that tells the computer +// how large to make the window. +// Each function statement has zero or more parameters. +// Parameters are data passed into the function +// and are used as values for telling the computer what to do. +function setup() { + createCanvas(710, 400); + } + + // The background function is a statement that tells the computer + // which color (or gray value) to make the background of the display window + function draw() { + background(204, 153, 0); + } + + \ No newline at end of file diff --git a/src/data/examples/hi/00_Structure/01_Coordinates.js b/src/data/examples/hi/00_Structure/01_Coordinates.js new file mode 100644 index 0000000000..fe8eb5b4a8 --- /dev/null +++ b/src/data/examples/hi/00_Structure/01_Coordinates.js @@ -0,0 +1,39 @@ +/* + * @name निर्देशांक + * @description स्क्रीन पर खींची गई सभी आकृतियों में एक स्थिति होती है जो है + * एक समन्वय के रूप में निर्दिष्ट। सभी निर्देशांकों को से दूरी के रूप में मापा जाता है + * पिक्सेल की इकाइयों में उत्पत्ति। मूल [0, 0] में निर्देशांक है + * खिड़की के ऊपरी बाएँ और निचले दाएँ में निर्देशांक [चौड़ाई -1, + * ऊंचाई -1]। + */ +function setup() { + // Sets the screen to be 720 pixels wide and 400 pixels high + createCanvas(720, 400); +} + +function draw() { + // Set the background to black and turn off the fill color + background(0); + noFill(); + + // The two parameters of the point() method each specify + // coordinates. + // The first parameter is the x-coordinate and the second is the Y + stroke(255); + point(width * 0.5, height * 0.5); + point(width * 0.5, height * 0.25); + + // Coordinates are used for drawing all shapes, not just points. + // Parameters for different functions are used for different + // purposes. For example, the first two parameters to line() + // specify the coordinates of the first endpoint and the second + // two parameters specify the second endpoint + stroke(0, 153, 255); + line(0, height * 0.33, width, height * 0.33); + + // By default, the first two parameters to rect() are the + // coordinates of the upper-left corner and the second pair + // is the width and height + stroke(255, 153, 0); + rect(width * 0.25, height * 0.1, width * 0.5, height * 0.8); +} diff --git a/src/data/examples/hi/00_Structure/02_Width_and_Height.js b/src/data/examples/hi/00_Structure/02_Width_and_Height.js new file mode 100644 index 0000000000..550c70eb9c --- /dev/null +++ b/src/data/examples/hi/00_Structure/02_Width_and_Height.js @@ -0,0 +1,20 @@ +/* + * @name चौड़ाई और ऊंचाई + * @description 'चौड़ाई' और 'ऊंचाई' चर में शामिल हैं + * createCanvas () में परिभाषित डिस्प्ले विंडो की चौड़ाई और ऊंचाई + * समारोह। + */ +function setup() { + createCanvas(720, 400); +} + +function draw() { + background(127); + noStroke(); + for (let i = 0; i < height; i += 20) { + fill(129, 206, 15); + rect(0, i, width, 10); + fill(255); + rect(i, 0, 10, height); + } +} diff --git a/src/data/examples/hi/00_Structure/03_Setup_and_Draw.js b/src/data/examples/hi/00_Structure/03_Setup_and_Draw.js new file mode 100644 index 0000000000..5838e8aab9 --- /dev/null +++ b/src/data/examples/hi/00_Structure/03_Setup_and_Draw.js @@ -0,0 +1,27 @@ +/* + * @name सेटअप और ड्रा + * @description ड्रा () फ़ंक्शन के अंदर का कोड ऊपर से लगातार चलता है + * कार्यक्रम बंद होने तक नीचे तक। + */ +let y = 100; + +// The statements in the setup() function +// execute once when the program begins +function setup() { + // createCanvas must be the first statement + createCanvas(720, 400); + stroke(255); // Set line drawing color to white + frameRate(30); +} +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +function draw() { + background(0); // Set the background to black + y = y - 1; + if (y < 0) { + y = height; + } + line(0, y, width, y); +} diff --git a/src/data/examples/hi/00_Structure/04_No_Loop.js b/src/data/examples/hi/00_Structure/04_No_Loop.js new file mode 100644 index 0000000000..fd689f370c --- /dev/null +++ b/src/data/examples/hi/00_Structure/04_No_Loop.js @@ -0,0 +1,31 @@ +/* + * @name नो लूप + * @arialabel काली पृष्ठभूमि के बीच में क्षैतिज सफेद रेखा + * @description noLoop() फ़ंक्शन draw() फ़ंक्शन को केवल एक बार निष्पादित करने का कारण बनता है।. + * noLoop() को कॉल किए बिना, draw() के अंदर का कोड लगातार चलाया जाता है। + */ +let y; + +// The statements in the setup() function +// execute once when the program begins +function setup() { + // createCanvas should be the first statement + createCanvas(720, 400); + stroke(255); // Set line drawing color to white + noLoop(); + + y = height * 0.5; +} + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +function draw() { + background(0); // Set the background to black + y = y - 1; + if (y < 0) { + y = height; + } + line(0, y, width, y); +} diff --git a/src/data/examples/hi/00_Structure/05_Loop.js b/src/data/examples/hi/00_Structure/05_Loop.js new file mode 100644 index 0000000000..5edeb7c0bb --- /dev/null +++ b/src/data/examples/hi/00_Structure/05_Loop.js @@ -0,0 +1,26 @@ +/* + * @name लूप + * @description ड्रा () फ़ंक्शन के अंदर का कोड ऊपर से लगातार चलता है + * कार्यक्रम बंद होने तक नीचे तक। + */ +let y = 100; + +// The statements in the setup() function +// execute once when the program begins +function setup() { + createCanvas(720, 400); // Size must be the first statement + stroke(255); // Set line drawing color to white + frameRate(30); +} +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +function draw() { + background(0); // Set the background to black + y = y - 1; + if (y < 0) { + y = height; + } + line(0, y, width, y); +} diff --git a/src/data/examples/hi/00_Structure/06_Redraw.js b/src/data/examples/hi/00_Structure/06_Redraw.js new file mode 100644 index 0000000000..5ed2d392e6 --- /dev/null +++ b/src/data/examples/hi/00_Structure/06_Redraw.js @@ -0,0 +1,33 @@ +/* + * @name रेड्रा + * @description रेड्रा () फ़ंक्शन ड्रा () को एक बार निष्पादित करता है। इस उदाहरण में, + * ड्रा () को हर बार माउस क्लिक करने पर एक बार निष्पादित किया जाता है। + */ + +let y; + +// The statements in the setup() function +// execute once when the program begins +function setup() { + createCanvas(720, 400); + stroke(255); + noLoop(); + y = height * 0.5; +} + +// The statements in draw() are executed until the +// program is stopped. Each statement is executed in +// sequence and after the last line is read, the first +// line is executed again. +function draw() { + background(0); + y = y - 4; + if (y < 0) { + y = height; + } + line(0, y, width, y); +} + +function mousePressed() { + redraw(); +} diff --git a/src/data/examples/hi/00_Structure/07_Functions.js b/src/data/examples/hi/00_Structure/07_Functions.js new file mode 100644 index 0000000000..60f420429f --- /dev/null +++ b/src/data/examples/hi/00_Structure/07_Functions.js @@ -0,0 +1,28 @@ +/* + *@name कार्य + *@description DrawTarget () फ़ंक्शन कई अलग-अलग आकर्षित करना आसान बनाता है + *लक्ष्य। DrawTarget () के लिए प्रत्येक कॉल की स्थिति, आकार और संख्या निर्दिष्ट करता है + * प्रत्येक लक्ष्य के लिए बजता है। + */ + +function setup() { + createCanvas(720, 400); + background(51); + noStroke(); + noLoop(); +} + +function draw() { + drawTarget(width * 0.25, height * 0.4, 200, 4); + drawTarget(width * 0.5, height * 0.5, 300, 10); + drawTarget(width * 0.75, height * 0.3, 120, 6); +} + +function drawTarget(xloc, yloc, size, num) { + const grayvalues = 255 / num; + const steps = size / num; + for (let i = 0; i < num; i++) { + fill(i * grayvalues); + ellipse(xloc, yloc, size - i * steps, size - i * steps); + } +} diff --git a/src/data/examples/hi/00_Structure/08_Recursion.js b/src/data/examples/hi/00_Structure/08_Recursion.js new file mode 100644 index 0000000000..cc8ec10c88 --- /dev/null +++ b/src/data/examples/hi/00_Structure/08_Recursion.js @@ -0,0 +1,27 @@ +/* + *@name रिकर्सन + *@description रिकर्सन का एक प्रदर्शन, जिसका अर्थ है कि फ़ंक्शन स्वयं को कॉल करते हैं। + * ध्यान दें कि कैसे drawCircle () फ़ंक्शन अपने ब्लॉक के अंत में खुद को कॉल करता है। + * यह तब तक करना जारी रखता है जब तक कि चर "स्तर" 1 के बराबर न हो जाए। + */ + +function setup() { + createCanvas(720, 560); + noStroke(); + noLoop(); +} + +function draw() { + drawCircle(width / 2, 280, 6); +} + +function drawCircle(x, radius, level) { + const tt = (126 * level) / 4.0; + fill(tt); + ellipse(x, height / 2, radius * 2, radius * 2); + if (level > 1) { + level = level - 1; + drawCircle(x - radius / 2, radius / 2, level); + drawCircle(x + radius / 2, radius / 2, level); + } +} diff --git a/src/data/examples/hi/00_Structure/09_Create_Graphics.js b/src/data/examples/hi/00_Structure/09_Create_Graphics.js new file mode 100644 index 0000000000..883b19db79 --- /dev/null +++ b/src/data/examples/hi/00_Structure/09_Create_Graphics.js @@ -0,0 +1,29 @@ +/* + * @name ग्राफिक्स बनाएं + * @description एक नया p5.Renderer ऑब्जेक्ट बनाता और लौटाता है। इस का उपयोग करें + * वर्ग यदि आपको ऑफ-स्क्रीन ग्राफिक्स बफर में आकर्षित करने की आवश्यकता है। दो पैरामीटर + * पिक्सल में चौड़ाई और ऊंचाई को परिभाषित करें। + */ + +let pg; + +function setup() { + createCanvas(710, 400); + pg = createGraphics(400, 250); +} + +function draw() { + fill(0, 12); + rect(0, 0, width, height); + fill(255); + noStroke(); + ellipse(mouseX, mouseY, 60, 60); + + pg.background(51); + pg.noFill(); + pg.stroke(255); + pg.ellipse(mouseX - 150, mouseY - 75, 60, 60); + + //Draw the offscreen buffer to the screen with image() + image(pg, 150, 75); +} diff --git a/src/data/examples/hi/01_Form/00_Points_and_Lines.js b/src/data/examples/hi/01_Form/00_Points_and_Lines.js new file mode 100644 index 0000000000..c68ade9622 --- /dev/null +++ b/src/data/examples/hi/01_Form/00_Points_and_Lines.js @@ -0,0 +1,36 @@ +/* + * @name अंक और रेखाएं + * @description पॉइंट्स और लाइन्स का इस्तेमाल बेसिक ज्योमेट्री ड्रा करने के लिए किया जा सकता है। + * फॉर्म को स्केल करने के लिए वेरिएबल 'd' का मान बदलें। चार + * चर 'डी' के मान के आधार पर स्थिति निर्धारित करते हैं। + */ +function setup() { + let d = 70; + let p1 = d; + let p2 = p1 + d; + let p3 = p2 + d; + let p4 = p3 + d; + + // स्क्रीन को 720 पिक्सल चौड़ा और 400 पिक्सल ऊंचा सेट करता है + createCanvas(720, 400); + background(0); + noSmooth(); + + translate(140, 0); + + // ग्रे बॉक्स बनाएं + stroke(153); + line(p3, p3, p2, p3); + line(p2, p3, p2, p2); + line(p2, p2, p3, p2); + line(p3, p2, p3, p3); + + // सफेद बिंदु बनाएं + stroke(255); + point(p1, p1); + point(p1, p3); + point(p2, p4); + point(p3, p1); + point(p4, p2); + point(p4, p4); +} diff --git a/src/data/examples/hi/01_Form/01_Shape_Primitives.js b/src/data/examples/hi/01_Form/01_Shape_Primitives.js new file mode 100644 index 0000000000..b70f7e404c --- /dev/null +++ b/src/data/examples/hi/01_Form/01_Shape_Primitives.js @@ -0,0 +1,31 @@ +/* + * @name शेप प्रिमिटिव्स + * @description मूल आकार के आदिम कार्य triangle() हैं, + * rect(), quad(), ellipse(), और arc()। वर्ग रेक्ट के साथ बने होते हैं () + * और ellipse() से बनाए जाते हैं। इन कार्यों में से प्रत्येक की आवश्यकता है + * आकार की स्थिति और आकार निर्धारित करने के लिए कई पैरामीटर। + */ +function setup() { + // स्क्रीन को 720 पिक्सल चौड़ा और 400 पिक्सल ऊंचा सेट करता है + createCanvas(720, 400); + background(0); + noStroke(); + + fill(204); + triangle(18, 18, 18, 360, 81, 360); + + fill(102); + rect(81, 81, 63, 63); + + fill(204); + quad(189, 18, 216, 18, 216, 360, 144, 360); + + fill(255); + ellipse(252, 144, 72, 72); + + fill(204); + triangle(288, 18, 351, 360, 288, 360); + + fill(255); + arc(479, 300, 280, 280, PI, TWO_PI); +} diff --git a/src/data/examples/hi/01_Form/02_Pie_Chart.js b/src/data/examples/hi/01_Form/02_Pie_Chart.js new file mode 100644 index 0000000000..1240e9dda2 --- /dev/null +++ b/src/data/examples/hi/01_Form/02_Pie_Chart.js @@ -0,0 +1,34 @@ +/* + * @name पाई चार्ट + * @description डेटा से पाई चार्ट बनाने के लिए arc() फ़ंक्शन का उपयोग करता है + * एक सरणी में संग्रहीत। + */ +let angles = [30, 10, 45, 35, 60, 38, 75, 67]; + +function setup() { + createCanvas(720, 400); + noStroke(); + noLoop(); // एक बार दौड़ें और रुकें +} + +function draw() { + background(100); + pieChart(300, angles); +} + +function pieChart(diameter, data) { + let lastAngle = 0; + for (let i = 0; i < data.length; i++) { + let gray = map(i, 0, data.length, 0, 255); + fill(gray); + arc( + width / 2, + height / 2, + diameter, + diameter, + lastAngle, + lastAngle + radians(angles[i]) + ); + lastAngle += radians(angles[i]); + } +} diff --git a/src/data/examples/hi/01_Form/03_Regular_Polygon.js b/src/data/examples/hi/01_Form/03_Regular_Polygon.js new file mode 100644 index 0000000000..7409757cf7 --- /dev/null +++ b/src/data/examples/hi/01_Form/03_Regular_Polygon.js @@ -0,0 +1,43 @@ +/* + * @name नियमित बहुभुज + * @description आपका पसंदीदा क्या है? पेंटागन? षट्भुज? हेप्टागन? नहीं न? + *आइकोसैगन के बारे में क्या? इस उदाहरण के लिए बनाया गया polygon() फ़ंक्शन है + * किसी भी नियमित बहुभुज को खींचने में सक्षम। अलग-अलग नंबरों को रखने का प्रयास करें Try + * polygon() फ़ंक्शन कॉल के भीतर draw() का पता लगाने के लिए। + */ +function setup() { + createCanvas(720, 400); +} + +function draw() { + background(102); + + push(); + translate(width * 0.2, height * 0.5); + rotate(frameCount / 200.0); + polygon(0, 0, 82, 3); + pop(); + + push(); + translate(width * 0.5, height * 0.5); + rotate(frameCount / 50.0); + polygon(0, 0, 80, 20); + pop(); + + push(); + translate(width * 0.8, height * 0.5); + rotate(frameCount / -100.0); + polygon(0, 0, 70, 7); + pop(); +} + +function polygon(x, y, radius, npoints) { + let angle = TWO_PI / npoints; + beginShape(); + for (let a = 0; a < TWO_PI; a += angle) { + let sx = x + cos(a) * radius; + let sy = y + sin(a) * radius; + vertex(sx, sy); + } + endShape(CLOSE); +} diff --git a/src/data/examples/hi/01_Form/04_Star.js b/src/data/examples/hi/01_Form/04_Star.js new file mode 100644 index 0000000000..c07641104b --- /dev/null +++ b/src/data/examples/hi/01_Form/04_Star.js @@ -0,0 +1,46 @@ +/* + * @name स्टार + * @description इस उदाहरण के लिए बनाया गया star() फ़ंक्शन सक्षम है + * विभिन्न रूपों की एक विस्तृत श्रृंखला को चित्रित करना। अलग-अलग नंबर रखने की कोशिश करें + * star() फ़ंक्शन कॉल में draw() का पता लगाने के लिए +*/ +function setup() { + createCanvas(720, 400); +} + +function draw() { + background(102); + + push(); + translate(width * 0.2, height * 0.5); + rotate(frameCount / 200.0); + star(0, 0, 5, 70, 3); + pop(); + + push(); + translate(width * 0.5, height * 0.5); + rotate(frameCount / 50.0); + star(0, 0, 80, 100, 40); + pop(); + + push(); + translate(width * 0.8, height * 0.5); + rotate(frameCount / -100.0); + star(0, 0, 30, 70, 5); + pop(); +} + +function star(x, y, radius1, radius2, npoints) { + let angle = TWO_PI / npoints; + let halfAngle = angle / 2.0; + beginShape(); + for (let a = 0; a < TWO_PI; a += angle) { + let sx = x + cos(a) * radius2; + let sy = y + sin(a) * radius2; + vertex(sx, sy); + sx = x + cos(a + halfAngle) * radius1; + sy = y + sin(a + halfAngle) * radius1; + vertex(sx, sy); + } + endShape(CLOSE); +} diff --git a/src/data/examples/hi/01_Form/05_Triangle_Strip.js b/src/data/examples/hi/01_Form/05_Triangle_Strip.js new file mode 100644 index 0000000000..dc9c9009bc --- /dev/null +++ b/src/data/examples/hi/01_Form/05_Triangle_Strip.js @@ -0,0 +1,38 @@ +/* + *@name त्रिभुज पट्टी + * @description उदाहरण इरा ग्रीनबर्ग द्वारा। का उपयोग करके एक बंद रिंग उत्पन्न करें + * vertex() फ़ंक्शन और beginShape (TRIANGLE_STRIP) मोड। बाहरी त्रिज्या + * और इनसाइडरेडियस वेरिएबल्स क्रमशः रिंग की त्रिज्या को नियंत्रित करते हैं। + */ +let x; +let y; +let outsideRadius = 150; +let insideRadius = 100; + +function setup() { + createCanvas(720, 400); + background(204); + x = width / 2; + y = height / 2; +} + +function draw() { + background(204); + + let numPoints = int(map(mouseX, 0, width, 6, 60)); + let angle = 0; + let angleStep = 180.0 / numPoints; + + beginShape(TRIANGLE_STRIP); + for (let i = 0; i <= numPoints; i++) { + let px = x + cos(radians(angle)) * outsideRadius; + let py = y + sin(radians(angle)) * outsideRadius; + angle += angleStep; + vertex(px, py); + px = x + cos(radians(angle)) * insideRadius; + py = y + sin(radians(angle)) * insideRadius; + vertex(px, py); + angle += angleStep; + } + endShape(); +} diff --git a/src/data/examples/hi/01_Form/06_Bezier.js b/src/data/examples/hi/01_Form/06_Bezier.js new file mode 100644 index 0000000000..864c4c0021 --- /dev/null +++ b/src/data/examples/hi/01_Form/06_Bezier.js @@ -0,0 +1,28 @@ +/* + * @name बेज़ियर + * @description bezier() फ़ंक्शन के लिए पहले दो पैरामीटर निर्दिष्ट करते हैं + * वक्र में पहला बिंदु और अंतिम दो पैरामीटर अंतिम बिंदु निर्दिष्ट करते हैं। + * मध्य पैरामीटर नियंत्रण बिंदु निर्धारित करते हैं जो आकार को परिभाषित करते हैं + * वक्र। + */ +function setup() { + createCanvas(720, 400); + stroke(255); + noFill(); +} + +function draw() { + background(0); + for (let i = 0; i < 200; i += 20) { + bezier( + mouseX - i / 2.0, + 40 + i, + 410, + 20, + 440, + 300, + 240 - i / 16.0, + 300 + i / 8.0 + ); + } +} diff --git a/src/data/examples/hi/01_Form/07_3D_Primitives.js b/src/data/examples/hi/01_Form/07_3D_Primitives.js new file mode 100644 index 0000000000..d1d7735646 --- /dev/null +++ b/src/data/examples/hi/01_Form/07_3D_Primitives.js @@ -0,0 +1,30 @@ +/* + * @name ३डी प्रिमिटिव्स + * @frame 720,400 (वैकल्पिक) + * @description गणितीय रूप से 3D ऑब्जेक्ट को सिंथेटिक स्पेस में रखना। + * box() और sphere() फ़ंक्शन उनके निर्दिष्ट करने के लिए कम से कम एक पैरामीटर लेते हैं + * आकार। इन आकृतियों को translate() फ़ंक्शन का उपयोग करके स्थित किया जाता है। + */ +function setup() { + createCanvas(710, 400, WEBGL); +} + +function draw() { + background(100); + + noStroke(); + fill(50); + push(); + translate(-275, 175); + rotateY(1.25); + rotateX(-0.9); + box(100); + pop(); + + noFill(); + stroke(255); + push(); + translate(500, height * 0.35, -200); + sphere(300); + pop(); +} diff --git a/src/data/examples/hi/02_Data/00_Variables.js b/src/data/examples/hi/02_Data/00_Variables.js new file mode 100644 index 0000000000..97d0dd49a5 --- /dev/null +++ b/src/data/examples/hi/02_Data/00_Variables.js @@ -0,0 +1,37 @@ +/* + * @name चर + * @description वेरिएबल्स का उपयोग वैल्यू स्टोर करने के लिए किया जाता है। इस उदाहरण में, बदलें + * रचना को प्रभावित करने के लिए चर के मान। + */ +function setup() { + createCanvas(720, 400); + background(0); + stroke(153); + strokeWeight(4); + strokeCap(SQUARE); + + let a = 50; + let b = 120; + let c = 180; + + line(a, b, a + c, b); + line(a, b + 10, a + c, b + 10); + line(a, b + 20, a + c, b + 20); + line(a, b + 30, a + c, b + 30); + + a = a + c; + b = height - b; + + line(a, b, a + c, b); + line(a, b + 10, a + c, b + 10); + line(a, b + 20, a + c, b + 20); + line(a, b + 30, a + c, b + 30); + + a = a + c; + b = height - b; + + line(a, b, a + c, b); + line(a, b + 10, a + c, b + 10); + line(a, b + 20, a + c, b + 20); + line(a, b + 30, a + c, b + 30); +} diff --git a/src/data/examples/hi/02_Data/01_True_and_False.js b/src/data/examples/hi/02_Data/01_True_and_False.js new file mode 100644 index 0000000000..380d2f53e2 --- /dev/null +++ b/src/data/examples/hi/02_Data/01_True_and_False.js @@ -0,0 +1,31 @@ +/* + * @name सही और गलत + * @description एक बूलियन वैरिएबल के केवल दो संभावित मान हैं: सही या गलत। + * प्रवाह को निर्धारित करने के लिए नियंत्रण कथनों के साथ बूलियन का उपयोग करना आम है + * एक कार्यक्रम का। इस उदाहरण में, जब बूलियन मान "बी" सत्य है, लंबवत + * रेखाएँ खींची जाती हैं और जब बूलियन मान "बी" गलत होता है, क्षैतिज + *रेखाएँ खींची जाती हैं। + */ +function setup() { + createCanvas(720, 400); + background(0); + stroke(255); + + let b = false; + let d = 20; + let middle = width / 2; + + for (let i = d; i <= width; i += d) { + b = i < middle; + + if (b === true) { + // ऊर्ध्वाधर रेखा + line(i, d, i, height - d); + } + + if (b === false) { + // क्षैतिज रेखा + line(middle, i - middle + d, width - d, i - middle + d); + } + } +} diff --git a/src/data/examples/hi/02_Data/03_Variable_Scope.js b/src/data/examples/hi/02_Data/03_Variable_Scope.js new file mode 100644 index 0000000000..c365807ae2 --- /dev/null +++ b/src/data/examples/hi/02_Data/03_Variable_Scope.js @@ -0,0 +1,48 @@ +/* + * @name परिवर्तनीय दायरा + * @description वेरिएबल्स का एक ग्लोबल या फंक्शन "स्कोप" होता है। उदाहरण के लिए, + * या तो setup() या draw() फ़ंक्शन के भीतर घोषित चर हो सकते हैं + * केवल इन कार्यों में उपयोग किया जाता है। वैश्विक चर, बाहर घोषित चर + * setup() और draw(), कार्यक्रम के भीतर कहीं भी इस्तेमाल किया जा सकता है। यदि एक समारोह + * वैरिएबल को ग्लोबल वैरिएबल के समान नाम से घोषित किया जाता है, प्रोग्राम + * वर्तमान के भीतर अपनी गणना करने के लिए फ़ंक्शन चर का उपयोग करेगा + * गुंजाइश। + */ +let a = 80; // एक वैश्विक चर "ए" बनाएं + +function setup() { + createCanvas(720, 400); + background(0); + stroke(255); + noLoop(); +} + +function draw() { + // वैश्विक चर "ए" का उपयोग करके एक रेखा खींचें + line(a, 0, a, height); + + // लूप के लिए स्थानीय चर a का उपयोग करें + for (let a = 120; a < 200; a += 3) { + line(a, 0, a, height); + } + + // कस्टम फ़ंक्शन को कॉल करें drawAnotherLine () + drawAnotherLine(); + + // कस्टम फ़ंक्शन पर कॉल करें drawYetAnotherLine () + drawYetAnotherLine(); +} + +function drawAnotherLine() { + // इस फ़ंक्शन के लिए एक नया चर "ए" स्थानीय बनाएं + let a = 320; + // स्थानीय चर "ए" का उपयोग करके एक रेखा खींचें + line(a, 0, a, height); +} + +function drawYetAnotherLine() { + // क्योंकि कोई नया स्थानीय चर "ए" सेट नहीं है, + // यह रेखा मूल वैश्विक का उपयोग करके खींची गई है + // चर "ए" जो मान 20 पर सेट है। + line(a + 3, 0, a + 3, height); +} diff --git a/src/data/examples/hi/02_Data/04_Numbers.js b/src/data/examples/hi/02_Data/04_Numbers.js new file mode 100644 index 0000000000..1d91c2c94a --- /dev/null +++ b/src/data/examples/hi/02_Data/04_Numbers.js @@ -0,0 +1,31 @@ +/* + * @name नंबर + * @frame 720,400 + * @description नंबर को दशमलव के साथ या बिना लिखा जा सकता है। पूर्णांक + * (आमतौर पर एक इंट कहा जाता है) एक दशमलव बिंदु के बिना एक संख्या है। एक फ्लोट + * एक फ़्लोटिंग-पॉइंट नंबर है, जिसका अर्थ है कि यह एक संख्या है जिसमें दशमलव है + * जगह। + */ +let a = 0; // एक वैश्विक चर "ए" प्रकार की संख्या बनाएं +let b = 0; // संख्या प्रकार का एक वैश्विक चर "बी" बनाएं + +function setup() { + createCanvas(720, 400); + stroke(255); +} + +function draw() { + background(0); + + a = a + 1; // एक पूर्णांक के साथ वृद्धि करें + b = b + 0.2; // वृद्धि बी एक फ्लोट के साथ + line(a, 0, a, height / 2); + line(b, height / 2, b, height); + + if (a > width) { + a = 0; + } + if (b > width) { + b = 0; + } +} diff --git a/src/data/examples/hi/03_Arrays/00_Array.js b/src/data/examples/hi/03_Arrays/00_Array.js new file mode 100644 index 0000000000..31de72acce --- /dev/null +++ b/src/data/examples/hi/03_Arrays/00_Array.js @@ -0,0 +1,44 @@ +/* + * @name ऐरे + * @description एक सरणी डेटा की एक सूची है। एक सरणी में डेटा का प्रत्येक टुकड़ा + * को एक सूचकांक संख्या द्वारा पहचाना जाता है जो इसकी स्थिति का प्रतिनिधित्व करता है + * सरणी। Arrays शून्य आधारित हैं, जिसका अर्थ है कि पहला + * सरणी में तत्व [0] है, दूसरा तत्व [1] है, और इसी तरह। + * इस उदाहरण में, "coswave" नामक एक सरणी बनाई गई है और + * कोसाइन मूल्यों से भरा हुआ। यह डेटा तीन प्रदर्शित होता है + * स्क्रीन पर अलग तरीके। + */ +let coswave = []; + +function setup() { + createCanvas(720, 360); + for (let i = 0; i < width; i++) { + let amount = map(i, 0, width, 0, PI); + coswave[i] = abs(cos(amount)); + } + background(255); + noLoop(); +} + +function draw() { + let y1 = 0; + let y2 = height / 3; + for (let i = 0; i < width; i += 3) { + stroke(coswave[i] * 255); + line(i, y1, i, y2); + } + + y1 = y2; + y2 = y1 + y1; + for (let i = 0; i < width; i += 3) { + stroke((coswave[i] * 255) / 4); + line(i, y1, i, y2); + } + + y1 = y2; + y2 = height; + for (let i = 0; i < width; i += 3) { + stroke(255 - coswave[i] * 255); + line(i, y1, i, y2); + } +} diff --git a/src/data/examples/hi/03_Arrays/01_Array_2d.js b/src/data/examples/hi/03_Arrays/01_Array_2d.js new file mode 100644 index 0000000000..eb166bc468 --- /dev/null +++ b/src/data/examples/hi/03_Arrays/01_Array_2d.js @@ -0,0 +1,38 @@ +/* + * @name ऐरे 2D + * @description द्वि-आयामी (2D) बनाने के लिए सिंटैक्स प्रदर्शित करता है + * सरणी। 2D सरणी में मानों को दो अनुक्रमणिका मानों के माध्यम से एक्सेस किया जाता है। + * 2D सरणियाँ छवियों को संग्रहीत करने के लिए उपयोगी हैं। इस उदाहरण में, प्रत्येक बिंदु + * छवि के केंद्र से इसकी दूरी के संबंध में रंगीन है। + */ +let distances = []; +let maxDistance; +let spacer; + +function setup() { + createCanvas(720, 360); + maxDistance = dist(width / 2, height / 2, width, height); + for (let x = 0; x < width; x++) { + distances[x] = []; // create nested array + for (let y = 0; y < height; y++) { + let distance = dist(width / 2, height / 2, x, y); + distances[x][y] = (distance / maxDistance) * 255; + } + } + spacer = 10; + noLoop(); // Run once and stop +} + +function draw() { + background(0); + // यह एम्बेडेड लूप के आधार पर सरणियों में मूल्यों पर छोड़ देता है + // स्पेसर चर, इसलिए सरणी में अधिक मान हैं + // यहाँ से खींचे गए हैं। स्पेसर वैरिएबल का मान बदलें of + // बिंदुओं के घनत्व को बदलने के लिए + for (let x = 0; x < width; x += spacer) { + for (let y = 0; y < height; y += spacer) { + stroke(distances[x][y]); + point(x + spacer / 2, y + spacer / 2); + } + } +} diff --git a/src/data/examples/hi/03_Arrays/02_Array_Objects.js b/src/data/examples/hi/03_Arrays/02_Array_Objects.js new file mode 100644 index 0000000000..fda498ef6d --- /dev/null +++ b/src/data/examples/hi/03_Arrays/02_Array_Objects.js @@ -0,0 +1,71 @@ +/* + * @name ऐरे ऑब्जेक्ट्स + * @description कस्टम ऑब्जेक्ट्स की एक सरणी बनाने के लिए सिंटैक्स प्रदर्शित करता है। + */ + +class Module { + constructor(xOff, yOff, x, y, speed, unit) { + this.xOff = xOff; + this.yOff = yOff; + this.x = x; + this.y = y; + this.speed = speed; + this.unit = unit; + this.xDir = 1; + this.yDir = 1; + } + + // चर को अद्यतन करने के लिए कस्टम विधि + update() { + this.x = this.x + this.speed * this.xDir; + if (this.x >= this.unit || this.x <= 0) { + this.xDir *= -1; + this.x = this.x + 1 * this.xDir; + this.y = this.y + 1 * this.yDir; + } + if (this.y >= this.unit || this.y <= 0) { + this.yDir *= -1; + this.y = this.y + 1 * this.yDir; + } + } + + // वस्तु को खींचने के लिए कस्टम विधि + draw() { + fill(255); + ellipse(this.xOff + this.x, this.yOff + this.y, 6, 6); + } +} + +let unit = 40; +let count; +let mods = []; + +function setup() { + createCanvas(720, 360); + noStroke(); + let wideCount = width / unit; + let highCount = height / unit; + count = wideCount * highCount; + + let index = 0; + for (let y = 0; y < highCount; y++) { + for (let x = 0; x < wideCount; x++) { + mods[index++] = new Module( + x * unit, + y * unit, + unit / 2, + unit / 2, + random(0.05, 0.8), + unit + ); + } + } +} + +function draw() { + background(0); + for (let i = 0; i < count; i++) { + mods[i].update(); + mods[i].draw(); + } +} diff --git a/src/data/examples/hi/04_Control/00_Iteration.js b/src/data/examples/hi/04_Control/00_Iteration.js new file mode 100644 index 0000000000..4902a49afc --- /dev/null +++ b/src/data/examples/hi/04_Control/00_Iteration.js @@ -0,0 +1,41 @@ +/* + * @name पुनरावृत्ति + * @description पुनरावृत्ति रूपों के निर्माण के लिए "के लिए" संरचना के साथ पुनरावृत्ति। + */ +let y; +let num = 14; + +function setup() { + createCanvas(720, 360); + background(102); + noStroke(); + + // सफेद सलाखों को ड्रा करें + fill(255); + y = 60; + for (let i = 0; i < num / 3; i++) { + rect(50, y, 475, 10); + y += 20; + } + + // ग्रे बार + fill(51); + y = 40; + for (let i = 0; i < num; i++) { + rect(405, y, 30, 10); + y += 20; + } + y = 50; + for (let i = 0; i < num; i++) { + rect(425, y, 30, 10); + y += 20; + } + + // पतली रेखाएं + y = 45; + fill(0); + for (let i = 0; i < num - 1; i++) { + rect(120, y, 40, 1); + y += 20; + } +} diff --git a/src/data/examples/hi/04_Control/01_Embedded_Iteration.js b/src/data/examples/hi/04_Control/01_Embedded_Iteration.js new file mode 100644 index 0000000000..15183ca09d --- /dev/null +++ b/src/data/examples/hi/04_Control/01_Embedded_Iteration.js @@ -0,0 +1,21 @@ +/* +* @name एंबेडेड इटरेशन +* @description "के लिए" संरचनाओं को एम्बेड करना दो आयामों में पुनरावृत्ति की अनुमति देता है। +*/ +function setup() { + createCanvas(720, 360); + background(0); + noStroke(); + + let gridSize = 35; + + for (let x = gridSize; x <= width - gridSize; x += gridSize) { + for (let y = gridSize; y <= height - gridSize; y += gridSize) { + noStroke(); + fill(255); + rect(x - 1, y - 1, 3, 3); + stroke(255, 50); + line(x, y, width / 2, height / 2); + } + } +} diff --git a/src/data/examples/hi/04_Control/02_Conditionals_1.js b/src/data/examples/hi/04_Control/02_Conditionals_1.js new file mode 100644 index 0000000000..f4f2ba09af --- /dev/null +++ b/src/data/examples/hi/04_Control/02_Conditionals_1.js @@ -0,0 +1,26 @@ +/* + * @name सशर्त 1 + * @description शर्तें सवालों की तरह हैं। + * वे एक कार्यक्रम को एक कार्रवाई करने का निर्णय लेने की अनुमति देते हैं यदि + * किसी प्रश्न का उत्तर सत्य है या कोई अन्य क्रिया करना + * यदि प्रश्न का उत्तर गलत है। + * एक कार्यक्रम के भीतर पूछे जाने वाले प्रश्न हमेशा तार्किक होते हैं + * या संबंधपरक बयान। उदाहरण के लिए, यदि चर 'i' is + * शून्य के बराबर फिर एक रेखा खींचे। + */ +function setup() { + createCanvas(720, 360); + background(0); + + for (let i = 10; i < width; i += 10) { + // यदि 'i' को 20 से विभाजित किया जाता है और कोई शेष नहीं है तो पहली पंक्ति बनाएं + // अन्यथा दूसरी पंक्ति बनाएं + if (i % 20 === 0) { + stroke(255); + line(i, 80, i, height / 2); + } else { + stroke(153); + line(i, 20, i, 180); + } + } +} diff --git a/src/data/examples/hi/04_Control/03_Conditionals_2.js b/src/data/examples/hi/04_Control/03_Conditionals_2.js new file mode 100644 index 0000000000..2e8f855364 --- /dev/null +++ b/src/data/examples/hi/04_Control/03_Conditionals_2.js @@ -0,0 +1,28 @@ +/* + * @name सशर्त 2 + * @description हम पिछले से सशर्त की भाषा का विस्तार करते हैं + * उदाहरण "और" कीवर्ड जोड़कर। यह सशर्त अनुमति देता है + * दो या दो से अधिक क्रमिक प्रश्न पूछने के लिए, प्रत्येक एक अलग के साथ + * क्रिया। + */ +function setup() { + createCanvas(720, 360); + background(0); + + for (let i = 2; i < width - 2; i += 4) { + // यदि 'i' को 20 से विभाजित किया जाता है और कोई शेषफल नहीं है + if (i % 20 === 0) { + stroke(255); + line(i, 80, i, height / 2); + // यदि 'i' को 10 से विभाजित किया जाता है और कोई शेषफल नहीं है + } else if (i % 10 === 0) { + stroke(153); + line(i, 20, i, 180); + // यदि उपरोक्त दो शर्तों में से कोई भी पूरा नहीं हुआ है + // फिर इस लाइन को ड्रा करें + } else { + stroke(102); + line(i, height / 2, i, height - 20); + } + } +} diff --git a/src/data/examples/hi/04_Control/04_Logical_Operators.js b/src/data/examples/hi/04_Control/04_Logical_Operators.js new file mode 100644 index 0000000000..804c7fdcb8 --- /dev/null +++ b/src/data/examples/hi/04_Control/04_Logical_Operators.js @@ -0,0 +1,42 @@ +/* + * @name लॉजिकल ऑपरेटर्स + * @description AND (&&) और OR (||) के लिए तार्किक ऑपरेटरों का उपयोग किया जाता है + * सरल संबंधपरक कथनों को अधिक जटिल अभिव्यक्तियों में संयोजित करें। + * NOT (!) ऑपरेटर का उपयोग बूलियन स्टेटमेंट को नकारने के लिए किया जाता है। + */ +let test = false; + +function setup() { + createCanvas(720, 360); + background(126); + + for (let i = 5; i <= height; i += 5) { + // तार्किक और + stroke(0); + if (i > 35 && i < 100) { + line(width / 4, i, width / 2, i); + test = false; + } + + // तार्किक OR + stroke(76); + if (i <= 35 || i >= 100) { + line(width / 2, i, width, i); + test = true; + } + + // परीक्षण करें कि क्या बूलियन मान "सत्य" है + // अभिव्यक्ति "अगर (परीक्षण)" "अगर (परीक्षण == सत्य)" के बराबर है + if (test) { + stroke(0); + point(width / 3, i); + } + + // परीक्षण करें कि क्या बूलियन मान "गलत" है + // अभिव्यक्ति "if(!test)" बराबर है "if(test == false)" + if (!test) { + stroke(255); + point(width / 4, i); + } + } +} diff --git a/src/data/examples/hi/05_Image/00_Load_and_Display_Image.js b/src/data/examples/hi/05_Image/00_Load_and_Display_Image.js new file mode 100644 index 0000000000..e11491f400 --- /dev/null +++ b/src/data/examples/hi/05_Image/00_Load_and_Display_Image.js @@ -0,0 +1,21 @@ +/* + * @name लोड और डिस्प्ले इमेज + * @description छवियों को लोड किया जा सकता है और स्क्रीन पर प्रदर्शित किया जा सकता है + * वास्तविक आकार या कोई अन्य आकार। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको एक की आवश्यकता होगी + * छवि फ़ाइल, और चल रही + * स्थानीय सर्वर.

        + */ +let img; // वैरिएबल 'img' घोषित करें। + +function setup() { + createCanvas(720, 400); + img = loadImage('assets/moonwalk.jpg'); // छवि लोड करें +} + +function draw() { + // छवि को उसके वास्तविक आकार में बिंदु (0,0) पर प्रदर्शित करता है + image(img, 0, 0); + // आधे आकार में छवि को बिंदु (0, ऊंचाई / 2) पर प्रदर्शित करता है + image(img, 0, height / 2, img.width / 2, img.height / 2); +} diff --git a/src/data/examples/hi/05_Image/01_Background_Image.js b/src/data/examples/hi/05_Image/01_Background_Image.js new file mode 100644 index 0000000000..58b70942a2 --- /dev/null +++ b/src/data/examples/hi/05_Image/01_Background_Image.js @@ -0,0 +1,31 @@ +/* + * @name पृष्ठभूमि छवि + * @description यह उदाहरण लोड करने का सबसे तेज़ तरीका प्रस्तुत करता है a + * पृष्ठभूमि छवि। एक छवि को पृष्ठभूमि के रूप में लोड करने के लिए, + * यह कार्यक्रम के समान चौड़ाई और ऊंचाई का होना चाहिए। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको एक की आवश्यकता होगी + * छवि फ़ाइल, और चल रही + * स्थानीय सर्वर.

        + */ +let bg; +let y = 0; + +function setup() { + // पृष्ठभूमि की छवि मापदंडों के समान आकार की होनी चाहिए + // createCanvas () विधि में। इस कार्यक्रम में, का आकार + // इमेज 720x400 पिक्सल है। + bg = loadImage('assets/moonwalk.jpg'); + createCanvas(720, 400); +} + +function draw() { + background(bg); + + stroke(226, 204, 0); + line(0, y, width, y); + + y++; + if (y > height) { + y = 0; + } +} diff --git a/src/data/examples/hi/05_Image/02_Transparency.js b/src/data/examples/hi/05_Image/02_Transparency.js new file mode 100644 index 0000000000..a2befe2d72 --- /dev/null +++ b/src/data/examples/hi/05_Image/02_Transparency.js @@ -0,0 +1,25 @@ +/* + * @name पारदर्शिता + * @description चित्र पर पॉइंटर को बाएँ और दाएँ घुमाएँ ताकि वह बदल जाए + * पद। यह प्रोग्राम एक छवि को दूसरे के ऊपर संशोधित करके ओवरले करता है + * tint() फ़ंक्शन के साथ छवि का अल्फा मान। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको एक की आवश्यकता होगी + * छवि फ़ाइल, और चल रही + * स्थानीय सर्वर.

        + */ +let img; +let offset = 0; +let easing = 0.05; + +function setup() { + createCanvas(720, 400); + img = loadImage('assets/moonwalk.jpg'); // प्रोग्राम में एक छवि लोड करें +} + +function draw() { + image(img, 0, 0); // पूर्ण अस्पष्टता पर प्रदर्शित करें + let dx = mouseX - img.width / 2 - offset; + offset += dx * easing; + tint(255, 127); // आधी अस्पष्टता पर प्रदर्शित करें + image(img, offset, 0); +} diff --git a/src/data/examples/hi/05_Image/03_Alpha_Mask.js b/src/data/examples/hi/05_Image/03_Alpha_Mask.js new file mode 100644 index 0000000000..a15cf7e9a8 --- /dev/null +++ b/src/data/examples/hi/05_Image/03_Alpha_Mask.js @@ -0,0 +1,28 @@ +/* + * @name अल्फा मास्क + * @description में पारदर्शिता निर्दिष्ट करने के लिए एक छवि के लिए "मास्क" लोड करता है + * छवि के विभिन्न भाग। दो छवियों को एक साथ मिश्रित कर रहे हैं + * mask() p5.Image की विधि। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको दो की आवश्यकता होगी + * छवि फ़ाइलें, और चल रहे + * स्थानीय सर्वर.

        + */ +let img; +let imgMask; + +function preload() { + img = loadImage('assets/moonwalk.jpg'); + imgMask = loadImage('assets/mask.png'); +} + +function setup() { + createCanvas(720, 400); + img.mask(imgMask); + imageMode(CENTER); +} + +function draw() { + background(0, 102, 153); + image(img, width / 2, height / 2); + image(img, mouseX, mouseY); +} diff --git a/src/data/examples/hi/05_Image/04_Create_Image.js b/src/data/examples/hi/05_Image/04_Create_Image.js new file mode 100644 index 0000000000..f9a7e8afd5 --- /dev/null +++ b/src/data/examples/hi/05_Image/04_Create_Image.js @@ -0,0 +1,25 @@ +/* + * @name इमेज बनाएं + * @description createImage() फ़ंक्शन पिक्सेल का एक ताज़ा बफर प्रदान करता है + * सोचना। यह उदाहरण एक छवि ढाल बनाता है। + */ +let img; // वैरिएबल 'img' घोषित करें। + +function setup() { + createCanvas(720, 400); + img = createImage(230, 230); + img.loadPixels(); + for (let x = 0; x < img.width; x++) { + for (let y = 0; y < img.height; y++) { + let a = map(y, 0, img.height, 255, 0); + img.set(x, y, [0, 153, 204, a]); + } + } + img.updatePixels(); +} + +function draw() { + background(0); + image(img, 90, 80); + image(img, mouseX - img.width / 2, mouseY - img.height / 2); +} diff --git a/src/data/examples/hi/05_Image/05_Pointillism.js b/src/data/examples/hi/05_Image/05_Pointillism.js new file mode 100644 index 0000000000..0ba91bad34 --- /dev/null +++ b/src/data/examples/hi/05_Image/05_Pointillism.js @@ -0,0 +1,34 @@ +/* + * @name पॉइंटिलिज्म + * @description डैन शिफमैन द्वारा। माउस क्षैतिज स्थान का आकार नियंत्रित करता है + * डॉट्स। रंग के अनुसार दीर्घवृत्त का उपयोग करके एक साधारण पॉइंटिलिस्ट प्रभाव बनाता है + * एक छवि में पिक्सेल के लिए। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको एक की आवश्यकता होगी + * छवि फ़ाइल, और चल रही + * स्थानीय सर्वर.

        + */ +let img; +let smallPoint, largePoint; + +function preload() { + img = loadImage('assets/moonwalk.jpg'); +} + +function setup() { + createCanvas(720, 400); + smallPoint = 4; + largePoint = 40; + imageMode(CENTER); + noStroke(); + background(255); + img.loadPixels(); +} + +function draw() { + let pointillize = map(mouseX, 0, width, smallPoint, largePoint); + let x = floor(random(img.width)); + let y = floor(random(img.height)); + let pix = img.get(x, y); + fill(pix, 128); + ellipse(x, y, pointillize, pointillize); +} diff --git a/src/data/examples/hi/07_Color/00_Hue.js b/src/data/examples/hi/07_Color/00_Hue.js new file mode 100644 index 0000000000..773f2a48b6 --- /dev/null +++ b/src/data/examples/hi/07_Color/00_Hue.js @@ -0,0 +1,25 @@ +/* + * @name ह्यू + * @description Hue वह रंग है जो a . से परावर्तित या प्रसारित होता है + * वस्तु और आमतौर पर रंग के नाम के रूप में जाना जाता है (लाल, नीला, + * पीला, आदि।) रंग बदलने के लिए कर्सर को प्रत्येक बार पर लंबवत ले जाएं। + */ +const barWidth = 20; +let lastBar = -1; + +function setup() { + createCanvas(720, 400); + colorMode(HSB, height, height, height); + noStroke(); + background(0); +} + +function draw() { + let whichBar = mouseX / barWidth; + if (whichBar !== lastBar) { + let barX = whichBar * barWidth; + fill(mouseY, height, height); + rect(barX, 0, barWidth, height); + lastBar = whichBar; + } +} diff --git a/src/data/examples/hi/07_Color/01_Saturation.js b/src/data/examples/hi/07_Color/01_Saturation.js new file mode 100644 index 0000000000..7894327066 --- /dev/null +++ b/src/data/examples/hi/07_Color/01_Saturation.js @@ -0,0 +1,25 @@ +/* + * @name संतृप्ति + * @description संतृप्ति रंग की ताकत या शुद्धता है और + * रंग के अनुपात में ग्रे की मात्रा का प्रतिनिधित्व करता है। एक "संतृप्त" + * रंग शुद्ध होता है और "असंतृप्त" रंग में ग्रे का एक बड़ा प्रतिशत होता है। + * इसकी संतृप्ति को बदलने के लिए कर्सर को प्रत्येक पट्टी पर लंबवत ले जाएँ। + */ +const barWidth = 20; +let lastBar = -1; + +function setup() { + createCanvas(720, 400); + colorMode(HSB, width, height, 100); + noStroke(); +} + +function draw() { + let whichBar = mouseX / barWidth; + if (whichBar !== lastBar) { + let barX = whichBar * barWidth; + fill(barX, mouseY, 66); + rect(barX, 0, barWidth, height); + lastBar = whichBar; + } +} diff --git a/src/data/examples/hi/07_Color/02_Brightness.js b/src/data/examples/hi/07_Color/02_Brightness.js new file mode 100644 index 0000000000..de0e03ace6 --- /dev/null +++ b/src/data/examples/hi/07_Color/02_Brightness.js @@ -0,0 +1,46 @@ +/* + * @name चमक + * @description डैन शिफमैन द्वारा। यह प्रोग्राम एक हिस्से की चमक को समायोजित करता है + * माउस से प्रत्येक पिक्सेल की दूरी की गणना करके छवि का। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको आवश्यकता होगी + * कम से कम एक छवि फ़ाइल और चल रहे स्थानीय सर्वर

        + */ +let img; + +function preload() { + img = loadImage('assets/moonwalk.jpg'); +} + +function setup() { + createCanvas(720, 200); + pixelDensity(1); + img.loadPixels(); + loadPixels(); +} + +function draw() { + for (let x = 0; x < img.width; x++) { + for (let y = 0; y < img.height; y++) { + // Calculate the 1D location from a 2D grid + let loc = (x + y * img.width) * 4; + // Get the R,G,B values from image + let r, g, b; + r = img.pixels[loc]; + // Calculate an amount to change brightness based on proximity to the mouse + let maxdist = 50; + let d = dist(x, y, mouseX, mouseY); + let adjustbrightness = (255 * (maxdist - d)) / maxdist; + r += adjustbrightness; + // Constrain RGB to make sure they are within 0-255 color range + r = constrain(r, 0, 255); + // Make a new color and set pixel in the window + //color c = color(r, g, b); + let pixloc = (y * width + x) * 4; + pixels[pixloc] = r; + pixels[pixloc + 1] = r; + pixels[pixloc + 2] = r; + pixels[pixloc + 3] = 255; + } + } + updatePixels(); +} diff --git a/src/data/examples/hi/07_Color/03_Color_Variables.js b/src/data/examples/hi/07_Color/03_Color_Variables.js new file mode 100644 index 0000000000..2a58ef7125 --- /dev/null +++ b/src/data/examples/hi/07_Color/03_Color_Variables.js @@ -0,0 +1,39 @@ +/* + * @name रंग चर + * @description (अलबर्स को श्रद्धांजलि।) यह उदाहरण रंगों के लिए चर बनाता है + * जिसे कार्यक्रम में एक संख्या के बजाय एक नाम से संदर्भित किया जा सकता है। + */ +function setup() { + createCanvas(710, 400); + noStroke(); + background(51, 0, 0); + + let inside = color(204, 102, 0); + let middle = color(204, 153, 0); + let outside = color(153, 51, 0); + + // ये बयान ऊपर दिए गए बयानों के बराबर हैं। + // प्रोग्रामर अपने पसंदीदा प्रारूप का उपयोग कर सकते हैं। + // अंदर जाने दें = रंग ('# CC6600'); + // चलो मध्य = रंग ('# CC9900'); + // बाहर जाने दें = रंग ('#993300'); + push(); + translate(80, 80); + fill(outside); + rect(0, 0, 200, 200); + fill(middle); + rect(40, 60, 120, 120); + fill(inside); + rect(60, 90, 80, 80); + pop(); + + push(); + translate(360, 80); + fill(inside); + rect(0, 0, 200, 200); + fill(outside); + rect(40, 60, 120, 120); + fill(middle); + rect(60, 90, 80, 80); + pop(); +} diff --git a/src/data/examples/hi/07_Color/04_Relativity.js b/src/data/examples/hi/07_Color/04_Relativity.js new file mode 100644 index 0000000000..fb654bd192 --- /dev/null +++ b/src/data/examples/hi/07_Color/04_Relativity.js @@ -0,0 +1,34 @@ +/* + * @name सापेक्षता + * @description प्रत्येक रंग अन्य रंगों के संबंध में माना जाता है। चोटी + * और नीचे की सलाखों में प्रत्येक में समान घटक रंग होते हैं, लेकिन एक अलग + * डिस्प्ले ऑर्डर के कारण अलग-अलग रंग अलग-अलग दिखाई देते हैं। + */ +let a, b, c, d, e; + +function setup() { + createCanvas(710, 400); + noStroke(); + a = color(165, 167, 20); + b = color(77, 86, 59); + c = color(42, 106, 105); + d = color(165, 89, 20); + e = color(146, 150, 127); + noLoop(); // केवल एक बार ड्रा करें +} + +function draw() { + drawBand(a, b, c, d, e, 0, width / 128); + drawBand(c, a, d, b, e, height / 2, width / 128); +} + +function drawBand(v, w, x, y, z, ypos, barWidth) { + let num = 5; + let colorOrder = [v, w, x, y, z]; + for (let i = 0; i < width; i += barWidth * num) { + for (let j = 0; j < num; j++) { + fill(colorOrder[j]); + rect(i + j * barWidth, ypos, barWidth, height / 2); + } + } +} diff --git a/src/data/examples/hi/07_Color/05_Linear_Gradient.js b/src/data/examples/hi/07_Color/05_Linear_Gradient.js new file mode 100644 index 0000000000..16fc43adcc --- /dev/null +++ b/src/data/examples/hi/07_Color/05_Linear_Gradient.js @@ -0,0 +1,52 @@ +/* + * @name रैखिक ढाल + * @description lerpColor () फ़ंक्शन के बीच इंटरपोल करने के लिए उपयोगी है + * दो रंग। + */ +// स्थिरांक +const Y_AXIS = 1; +const X_AXIS = 2; +let b1, b2, c1, c2; + +function setup() { + createCanvas(710, 400); + + // रंगों को परिभाषित करें + b1 = color(255); + b2 = color(0); + c1 = color(204, 102, 0); + c2 = color(0, 102, 153); + + noLoop(); +} + +function draw() { + // पृष्ठभूमि + setGradient(0, 0, width / 2, height, b1, b2, X_AXIS); + setGradient(width / 2, 0, width / 2, height, b2, b1, X_AXIS); + // अग्रभूमि + setGradient(50, 90, 540, 80, c1, c2, Y_AXIS); + setGradient(50, 190, 540, 80, c2, c1, X_AXIS); +} + +function setGradient(x, y, w, h, c1, c2, axis) { + noFill(); + + if (axis === Y_AXIS) { + // ऊपर से नीचे की ओर ढाल + for (let i = y; i <= y + h; i++) { + let inter = map(i, y, y + h, 0, 1); + let c = lerpColor(c1, c2, inter); + stroke(c); + line(x, i, x + w, i); + } + } else if (axis === X_AXIS) { + // बाएं से दाएं ढाल + for (let i = x; i <= x + w; i++) { + let inter = map(i, x, x + w, 0, 1); + let c = lerpColor(c1, c2, inter); + stroke(c); + line(i, y, i, y + h); + } + } +} diff --git a/src/data/examples/hi/07_Color/06_Radial_Gradient.js b/src/data/examples/hi/07_Color/06_Radial_Gradient.js new file mode 100644 index 0000000000..a4bb1da4b6 --- /dev/null +++ b/src/data/examples/hi/07_Color/06_Radial_Gradient.js @@ -0,0 +1,33 @@ +/* + * @name रेडियल ग्रेडिएंट + * @description एक ढाल बनाने के लिए संकेंद्रित वृत्तों की एक श्रृंखला बनाता है + * एक रंग से दूसरे रंग में। + */ +let dim; + +function setup() { + createCanvas(710, 400); + dim = width / 2; + background(0); + colorMode(HSB, 360, 100, 100); + noStroke(); + ellipseMode(RADIUS); + frameRate(1); +} + +function draw() { + background(0); + for (let x = 0; x <= width; x += dim) { + drawGradient(x, height / 2); + } +} + +function drawGradient(x, y) { + let radius = dim / 2; + let h = random(0, 360); + for (let r = radius; r > 0; --r) { + fill(h, 90, 90); + ellipse(x, y, r, r); + h = (h + 1) % 360; + } +} diff --git a/src/data/examples/hi/07_Color/07_Lerp_Color.js b/src/data/examples/hi/07_Color/07_Lerp_Color.js new file mode 100644 index 0000000000..51338784c4 --- /dev/null +++ b/src/data/examples/hi/07_Color/07_Lerp_Color.js @@ -0,0 +1,49 @@ +/* + * @name Lerp Color + * @description लूप यादृच्छिक आकार, + * लाल से नीले रंग में लाल रंग का रंग। + */ +function setup() { + createCanvas(720, 400); + background(255); + noStroke(); +} + +function draw() { + background(255); + from = color(255, 0, 0, 0.2 * 255); + to = color(0, 0, 255, 0.2 * 255); + c1 = lerpColor(from, to, 0.33); + c2 = lerpColor(from, to, 0.66); + for (let i = 0; i < 15; i++) { + fill(from); + quad( + random(-40, 220), random(height), + random(-40, 220), random(height), + random(-40, 220), random(height), + random(-40, 220), random(height) + ); + fill(c1); + quad( + random(140, 380), random(height), + random(140, 380), random(height), + random(140, 380), random(height), + random(140, 380), random(height) + ); + fill(c2); + quad( + random(320, 580), random(height), + random(320, 580), random(height), + random(320, 580), random(height), + random(320, 580), random(height) + ); + fill(to); + quad( + random(500, 760), random(height), + random(500, 760), random(height), + random(500, 760), random(height), + random(500, 760), random(height) + ); + } + frameRate(5); +} diff --git a/src/data/examples/hi/08_Math/00_incrementdecrement.js b/src/data/examples/hi/08_Math/00_incrementdecrement.js new file mode 100644 index 0000000000..1f12b72a9e --- /dev/null +++ b/src/data/examples/hi/08_Math/00_incrementdecrement.js @@ -0,0 +1,42 @@ +/* + * @name वेतन वृद्धि + * @description "a++" लिखना "a = a + 1" के बराबर है। + * "ए--" लिखना "a = a -1" के बराबर है। + */ +let a; +let b; +let direction; + +function setup() { + createCanvas(710, 400); + colorMode(RGB, width); + a = 0; + b = width; + direction = true; + frameRate(30); +} + +function draw() { + a++; + if (a > width) { + a = 0; + direction = !direction; + } + if (direction === true) { + stroke(a); + } else { + stroke(width - a); + } + line(a, 0, a, height / 2); + + b--; + if (b < 0) { + b = width; + } + if (direction == true) { + stroke(width - b); + } else { + stroke(b); + } + line(b, height / 2 + 1, b, height); +} diff --git a/src/data/examples/hi/08_Math/01_operatorprecedence.js b/src/data/examples/hi/08_Math/01_operatorprecedence.js new file mode 100644 index 0000000000..3fd05af720 --- /dev/null +++ b/src/data/examples/hi/08_Math/01_operatorprecedence.js @@ -0,0 +1,54 @@ +/* + * @name ऑपरेटर वरीयता + * @description यदि आप स्पष्ट रूप से उस क्रम का उल्लेख नहीं करते हैं जिसमें a + * अभिव्यक्ति का मूल्यांकन किया जाता है, उनका मूल्यांकन ऑपरेटर के आधार पर किया जाता है + * वरीयता। उदाहरण के लिए, "4+2*8" कथन में, 2 होगा + * पहले 8 से गुणा करें और फिर परिणाम 4 में जोड़ दिया जाएगा। + * ऐसा इसलिए है क्योंकि "*" की "+" की तुलना में अधिक प्राथमिकता है। कन्नी काटना + * कार्यक्रम को पढ़ने में अस्पष्टता, यह अनुशंसा की जाती है कि कथन है + * को "4+(2*8)" लिखा जाता है। मूल्यांकन के क्रम को नियंत्रित किया जा सकता है + * कोड में कोष्ठक लगाने के माध्यम से। ऑपरेटर की एक तालिका + * वरीयता नीचे दी गई है। + */ +// सर्वोच्च प्राथमिकता सूची में सबसे ऊपर है और +// सबसे नीचे सबसे नीचे है। +// गुणक: * /% +// योजक: + - +// संबंधपरक: <> <= >= +// समानता: ==!= +// तार्किक और: && +// तार्किक या: || +// असाइनमेंट: = += -= *= /= %= +function setup() { + createCanvas(710, 400); + background(51); + noFill(); + stroke(51); + + stroke(204); + for (let i = 0; i < width - 20; i += 4) { + // 30 को 70 में जोड़ा जाता है और फिर मूल्यांकन किया जाता है + // यदि यह "i" के वर्तमान मान से अधिक है + // स्पष्टता के लिए, "if (i> (30 + 70)) {" के रूप में लिखें + if (i > 30 + 70) { + line(i, 0, i, 50); + } + } + + stroke(255); + // 2 को 8 से गुणा किया जाता है और परिणाम 4 . में जोड़ा जाता है + // स्पष्टता के लिए, "रेक्ट (5 + (2 * 8), 0, 90, 20);" के रूप में लिखें। + rect(4 + 2 * 8, 52, 290, 48); + rect((4 + 2) * 8, 100, 290, 49); + + stroke(153); + for (let i = 0; i < width; i += 2) { + // संबंधपरक बयानों का मूल्यांकन किया जाता है + // पहले, और फिर तार्किक और कथन और + // अंत में तार्किक OR. स्पष्टता के लिए, इस प्रकार लिखें: + // "अगर (((i> 20) && (i <50)) || ((i> 100) && (i <चौड़ाई-20))) {" + if ((i > 20 && i < 50) || (i > 100 && i < width - 20)) { + line(i, 151, i, height - 1); + } + } +} diff --git a/src/data/examples/hi/08_Math/02_distance1d.js b/src/data/examples/hi/08_Math/02_distance1d.js new file mode 100644 index 0000000000..29d8ff66c6 --- /dev/null +++ b/src/data/examples/hi/08_Math/02_distance1d.js @@ -0,0 +1,65 @@ +/* + * @name दूरी 1डी + * @description नियंत्रित करने के लिए माउस को बाएँ और दाएँ घुमाएँ + * चलती आकृतियों की गति और दिशा। + */ +let xpos1; +let xpos2; +let xpos3; +let xpos4; +let thin = 8; +let thick = 36; + +function setup() { + createCanvas(710, 400); + noStroke(); + xpos1 = width / 2; + xpos2 = width / 2; + xpos3 = width / 2; + xpos4 = width / 2; +} + +function draw() { + background(0); + + let mx = mouseX * 0.4 - width / 5.0; + + fill(102); + rect(xpos2, 0, thick, height / 2); + fill(204); + rect(xpos1, 0, thin, height / 2); + fill(102); + rect(xpos4, height / 2, thick, height / 2); + fill(204); + rect(xpos3, height / 2, thin, height / 2); + + xpos1 += mx / 16; + xpos2 += mx / 64; + xpos3 -= mx / 16; + xpos4 -= mx / 64; + + if (xpos1 < -thin) { + xpos1 = width; + } + if (xpos1 > width) { + xpos1 = -thin; + } + if (xpos2 < -thick) { + xpos2 = width; + } + if (xpos2 > width) { + xpos2 = -thick; + } + if (xpos3 < -thin) { + xpos3 = width; + } + if (xpos3 > width) { + xpos3 = -thin; + } + if (xpos4 < -thick) { + xpos4 = width; + } + if (xpos4 > width) { + xpos4 = -thick; + } +} diff --git a/src/data/examples/hi/08_Math/03_distance2d.js b/src/data/examples/hi/08_Math/03_distance2d.js new file mode 100644 index 0000000000..8d7c79aa76 --- /dev/null +++ b/src/data/examples/hi/08_Math/03_distance2d.js @@ -0,0 +1,25 @@ +/* + * @name दूरी 2डी + * @description छवि पर माउस को अस्पष्ट करने के लिए ले जाएं + * और मैट्रिक्स प्रकट करें। माउस से दूरी मापता है + * प्रत्येक सर्कल के लिए और आनुपातिक रूप से आकार निर्धारित करता है। + */ +let max_distance; + +function setup() { + createCanvas(710, 400); + noStroke(); + max_distance = dist(0, 0, width, height); +} + +function draw() { + background(0); + + for (let i = 0; i <= width; i += 20) { + for (let j = 0; j <= height; j += 20) { + let size = dist(mouseX, mouseY, i, j); + size = (size / max_distance) * 66; + ellipse(i, j, size, size); + } + } +} diff --git a/src/data/examples/hi/08_Math/04_sine.js b/src/data/examples/hi/08_Math/04_sine.js new file mode 100644 index 0000000000..f9ba5e1b2a --- /dev/null +++ b/src/data/examples/hi/08_Math/04_sine.js @@ -0,0 +1,27 @@ + /* + *@name साइन + * @description sin() फ़ंक्शन के साथ आसानी से स्केलिंग आकार। + */ +let diameter; +let angle = 0; + +function setup() { + createCanvas(710, 400); + diameter = height - 10; + noStroke(); + fill(255, 204, 0); +} + +function draw() { + background(0); + + let d1 = 10 + (sin(angle) * diameter) / 2 + diameter / 2; + let d2 = 10 + (sin(angle + PI / 2) * diameter) / 2 + diameter / 2; + let d3 = 10 + (sin(angle + PI) * diameter) / 2 + diameter / 2; + + ellipse(0, height / 2, d1, d1); + ellipse(width / 2, height / 2, d2, d2); + ellipse(width, height / 2, d3, d3); + + angle += 0.02; +} diff --git a/src/data/examples/hi/08_Math/05_sincosine.js b/src/data/examples/hi/08_Math/05_sincosine.js new file mode 100644 index 0000000000..91062f6520 --- /dev/null +++ b/src/data/examples/hi/08_Math/05_sincosine.js @@ -0,0 +1,43 @@ +/* + * @name साइन कोसाइन + * @description लीनियर मूवमेंट विथ sin() और cos()। + * 0 और PI*2 के बीच की संख्या (TWO_PI जिसका कोण लगभग 6.28 है) + * इन कार्यों में डाल दिया जाता है और -1 और 1 के बीच की संख्या वापस कर दी जाती है। + * इन मूल्यों को तब बड़े आंदोलनों का उत्पादन करने के लिए बढ़ाया जाता है। + */ +let angle1 = 0; +let angle2 = 0; +let scalar = 70; + +function setup() { + createCanvas(710, 400); + noStroke(); + rectMode(CENTER); +} + +function draw() { + background(0); + + let ang1 = radians(angle1); + let ang2 = radians(angle2); + + let x1 = width / 2 + scalar * cos(ang1); + let x2 = width / 2 + scalar * cos(ang2); + + let y1 = height / 2 + scalar * sin(ang1); + let y2 = height / 2 + scalar * sin(ang2); + + fill(255); + rect(width * 0.5, height * 0.5, 140, 140); + + fill(0, 102, 153); + ellipse(x1, height * 0.5 - 120, scalar, scalar); + ellipse(x2, height * 0.5 + 120, scalar, scalar); + + fill(255, 204, 0); + ellipse(width * 0.5 - 120, y1, scalar, scalar); + ellipse(width * 0.5 + 120, y2, scalar, scalar); + + angle1 += 2; + angle2 += 3; +} diff --git a/src/data/examples/hi/08_Math/06_sinewave.js b/src/data/examples/hi/08_Math/06_sinewave.js new file mode 100644 index 0000000000..0ec43a3c7e --- /dev/null +++ b/src/data/examples/hi/08_Math/06_sinewave.js @@ -0,0 +1,48 @@ +/* + * @name साइन वेव + * @description एक साधारण साइन वेव रेंडर करें। + * डैनियल शिफमैन द्वारा मूल। + */ + +let xspacing = 16; // प्रत्येक क्षैतिज स्थान के बीच की दूरी +let w; // पूरी लहर की चौड़ाई +let theta = 0.0; // 0 . पर कोण प्रारंभ करें +let amplitude = 75.0; // लहर की ऊंचाई +let period = 500.0; // वेव रिपीट होने से पहले कितने पिक्सेल होते हैं +let dx; // एक्स बढ़ाने के लिए मूल्य +let yvalues; // तरंग के लिए ऊंचाई मानों को संग्रहीत करने के लिए एक सरणी का उपयोग करना + +function setup() { + createCanvas(710, 400); + w = width + 16; + dx = (TWO_PI / period) * xspacing; + yvalues = new Array(floor(w / xspacing)); +} + +function draw() { + background(0); + calcWave(); + renderWave(); +} + +function calcWave() { + // वृद्धि थीटा (के लिए विभिन्न मूल्यों का प्रयास करें values + // 'कोणीय वेग' यहाँ) + theta += 0.02; + + // प्रत्येक x मान के लिए, साइन फ़ंक्शन के साथ y मान की गणना करें + let x = theta; + for (let i = 0; i < yvalues.length; i++) { + yvalues[i] = sin(x) * amplitude; + x += dx; + } +} + +function renderWave() { + noStroke(); + fill(255); + // प्रत्येक स्थान पर एक अंडाकार के साथ लहर खींचने का एक आसान तरीका simple + for (let x = 0; x < yvalues.length; x++) { + ellipse(x * xspacing, height / 2 + yvalues[x], 16, 16); + } +} diff --git a/src/data/examples/hi/08_Math/07_additivewave.js b/src/data/examples/hi/08_Math/07_additivewave.js new file mode 100644 index 0000000000..9ca17de600 --- /dev/null +++ b/src/data/examples/hi/08_Math/07_additivewave.js @@ -0,0 +1,70 @@ +/* + * @name Additive Wave + * @description दो तरंगों को एक साथ जोड़कर अधिक जटिल तरंग बनाएं। + * डैनियल शिफमैन द्वारा मूल + */ +let xspacing = 8; // प्रत्येक क्षैतिज स्थान के बीच की दूरी +let w; // पूरी लहर की चौड़ाई +let maxwaves = 4; // कुल # तरंगों को एक साथ जोड़ने के लिए + +let theta = 0.0; +let amplitude = new Array(maxwaves); // लहर की ऊंचाई +// एक्स बढ़ाने के लिए मूल्य, गणना की जानी है +// अवधि और xspacing के एक समारोह के रूप में +let dx = new Array(maxwaves); +// ऊंचाई मूल्यों को संग्रहीत करने के लिए एक सरणी का उपयोग करना +// लहर के लिए (पूरी तरह से आवश्यक नहीं) +let yvalues; + +function setup() { + createCanvas(710, 400); + frameRate(30); + colorMode(RGB, 255, 255, 255, 100); + w = width + 16; + + for (let i = 0; i < maxwaves; i++) { + amplitude[i] = random(10, 30); + let period = random(100, 300); // तरंग दोहराने से पहले पिक्सेल की संख्या before + dx[i] = (TWO_PI / period) * xspacing; + } + + yvalues = new Array(floor(w / xspacing)); +} + +function draw() { + background(0); + calcWave(); + renderWave(); +} + +function calcWave() { + // वृद्धि थीटा (विभिन्न मूल्यों का प्रयास करें + // यहां 'कोणीय वेग' के लिए + theta += 0.02; + + // सभी ऊंचाई मानों को शून्य पर सेट करें + for (let i = 0; i < yvalues.length; i++) { + yvalues[i] = 0; + } + + // तरंग ऊंचाई मान संचित करें + for (let j = 0; j < maxwaves; j++) { + let x = theta; + for (let i = 0; i < yvalues.length; i++) { + // हर दूसरी लहर साइन के बजाय कोसाइन है + if (j % 2 == 0) yvalues[i] += sin(x) * amplitude[j]; + else yvalues[i] += cos(x) * amplitude[j]; + x += dx[j]; + } + } +} + +function renderWave() { + // प्रत्येक स्थान पर एक अंडाकार के साथ लहर खींचने का एक आसान तरीका simple + noStroke(); + fill(255, 50); + ellipseMode(CENTER); + for (let x = 0; x < yvalues.length; x++) { + ellipse(x * xspacing, width / 2 + yvalues[x], 16, 16); + } +} diff --git a/src/data/examples/hi/08_Math/08_polartocartesian.js b/src/data/examples/hi/08_Math/08_polartocartesian.js new file mode 100644 index 0000000000..0939f7e3c6 --- /dev/null +++ b/src/data/examples/hi/08_Math/08_polartocartesian.js @@ -0,0 +1,44 @@ +/* + * @name PolarToCartesian + * @description एक ध्रुवीय निर्देशांक परिवर्तित करें (r, थीटा) + * कार्तीय (x, y) के लिए: x = rcos (थीटा) y = rsin (थीटा) + * डैनियल शिफमैन द्वारा मूल। + */ +let r; + +// कोण और कोणीय वेग, त्वरण +let theta; +let theta_vel; +let theta_acc; + +function setup() { + createCanvas(710, 400); + + // सभी मूल्यों को प्रारंभ करें + r = height * 0.45; + theta = 0; + theta_vel = 0; + theta_acc = 0.0001; +} + +function draw() { + background(0); + + // मूल बिंदु को स्क्रीन के केंद्र में अनुवाद करें + translate(width / 2, height / 2); + + // ध्रुवीय को कार्टेशियन में बदलें + let x = r * cos(theta); + let y = r * sin(theta); + + // कार्तीय निर्देशांक पर दीर्घवृत्त ड्रा करें + ellipseMode(CENTER); + noStroke(); + fill(200); + ellipse(x, y, 32, 32); + + // कोण पर त्वरण और वेग लागू करें + // (r इस उदाहरण में स्थिर रहता है) + theta_vel += theta_acc; + theta += theta_vel; +} diff --git a/src/data/examples/hi/08_Math/09_arctangent.js b/src/data/examples/hi/08_Math/09_arctangent.js new file mode 100644 index 0000000000..4d352779e7 --- /dev/null +++ b/src/data/examples/hi/08_Math/09_arctangent.js @@ -0,0 +1,45 @@ +/* + * @name आर्कटिक + * @description आंखों की दिशा बदलने के लिए माउस ले जाएं।
        atan2() फ़ंक्शन प्रत्येक आंख से कर्सर तक के कोण की गणना करता है। + */ +let e1, e2, e3; + +function setup() { + createCanvas(720, 400); + noStroke(); + e1 = new Eye(250, 16, 120); + e2 = new Eye(164, 185, 80); + e3 = new Eye(420, 230, 220); +} + +function draw() { + background(102); + e1.update(mouseX, mouseY); + e2.update(mouseX, mouseY); + e3.update(mouseX, mouseY); + e1.display(); + e2.display(); + e3.display(); +} + +function Eye(tx, ty, ts) { + this.x = tx; + this.y = ty; + this.size = ts; + this.angle = 0; + + this.update = function(mx, my) { + this.angle = atan2(my - this.y, mx - this.x); + }; + + this.display = function() { + push(); + translate(this.x, this.y); + fill(255); + ellipse(0, 0, this.size, this.size); + rotate(this.angle); + fill(153, 204, 0); + ellipse(this.size / 4, 0, this.size / 2, this.size / 2); + pop(); + }; +} diff --git a/src/data/examples/hi/08_Math/10_Interpolate.js b/src/data/examples/hi/08_Math/10_Interpolate.js new file mode 100644 index 0000000000..a52d1c30a3 --- /dev/null +++ b/src/data/examples/hi/08_Math/10_Interpolate.js @@ -0,0 +1,34 @@ +/* + * @name रैखिक इंटरपोलेशन + * @frame 720, 400 + * @description माउस को स्क्रीन पर ले जाएँ और सिंबल उसके पीछे आ जाएगा। + * एनीमेशन के प्रत्येक फ्रेम को खींचने के बीच, दीर्घवृत्त भाग जाता है + * दूरी (0.05) की वर्तमान स्थिति से कर्सर की ओर का उपयोग कर + * lerp () फ़ंक्शन। + * यह केवल lerp() के साथ इनपुट के तहत ईजिंग जैसा ही है .. + */ + +let x = 0; +let y = 0; + +function setup() { + createCanvas(720, 400); + noStroke(); +} + +function draw() { + background(51); + + // lerp () एक विशिष्ट वेतन वृद्धि पर दो संख्याओं के बीच की संख्या की गणना करता है। + // एएमटी पैरामीटर दो मानों के बीच प्रक्षेपित करने की राशि है + // जहां 0.0 पहले बिंदु के बराबर है, 0.1 पहले बिंदु के बहुत करीब है, 0.5 + // बीच में आधा रास्ता है, आदि। + + // यहां हम प्रत्येक फ्रेम में 5% रास्ते को माउस स्थान पर ले जा रहे हैं + x = lerp(x, mouseX, 0.05); + y = lerp(y, mouseY, 0.05); + + fill(255); + stroke(255); + ellipse(x, y, 66, 66); +} diff --git a/src/data/examples/hi/08_Math/11_doubleRandom.js b/src/data/examples/hi/08_Math/11_doubleRandom.js new file mode 100644 index 0000000000..e14d61e213 --- /dev/null +++ b/src/data/examples/hi/08_Math/11_doubleRandom.js @@ -0,0 +1,24 @@ +/* + * @name डबल रैंडम + * @frame 720,400 (वैकल्पिक) + * @description दो random() कॉल और point() का उपयोग करना + * अनियमित चूरा रेखा बनाने का कार्य। + * मूल ईरा ग्रीनबर्ग द्वारा। + */ +let totalPts = 300; +let steps = totalPts + 1; + +function setup() { + createCanvas(710, 400); + stroke(255); + frameRate(1); +} + +function draw() { + background(0); + let rand = 0; + for (let i = 1; i < steps; i++) { + point((width / steps) * i, height / 2 + random(-rand, rand)); + rand += random(-5, 5); + } +} diff --git a/src/data/examples/hi/08_Math/12_random.js b/src/data/examples/hi/08_Math/12_random.js new file mode 100644 index 0000000000..20262af6f4 --- /dev/null +++ b/src/data/examples/hi/08_Math/12_random.js @@ -0,0 +1,19 @@ +/* + * @name रैंडम + * @description रैंडम नंबर इस इमेज का आधार बनाते हैं। + * हर बार प्रोग्राम लोड होने पर परिणाम अलग होता है। + */ +function setup() { + createCanvas(710, 400); + background(0); + strokeWeight(20); + frameRate(2); +} + +function draw() { + for (let i = 0; i < width; i++) { + let r = random(255); + stroke(r); + line(i, 0, i, height); + } +} diff --git a/src/data/examples/hi/08_Math/13_noise1D.js b/src/data/examples/hi/08_Math/13_noise1D.js new file mode 100644 index 0000000000..6e42276175 --- /dev/null +++ b/src/data/examples/hi/08_Math/13_noise1D.js @@ -0,0 +1,31 @@ +/* + * @name Noise1D + * @description स्थान निर्दिष्ट करने के लिए 1D Perlin Noise का उपयोग करना। + */ +let xoff = 0.0; +let xincrement = 0.01; + +function setup() { + createCanvas(710, 400); + background(0); + noStroke(); +} + +function draw() { + // एक अल्फा ब्लेंडेड बैकग्राउंड बनाएं + fill(0, 10); + rect(0, 0, width, height); + + // चलो n = यादृच्छिक (0, चौड़ाई); // शोर के बजाय इस लाइन को आजमाएं + + // xoff और स्केल के आधार पर शोर मान प्राप्त करें + // यह खिड़की की चौड़ाई के अनुसार है + let n = noise(xoff) * width; + + // प्रत्येक चक्र के साथ, वृद्धि xoff + xoff += xincrement; + + // पर्लिन शोर द्वारा उत्पन्न मूल्य पर दीर्घवृत्त को ड्रा करें + fill(200); + ellipse(n, height / 2, 64, 64); +} diff --git a/src/data/examples/hi/08_Math/14_noisewave.js b/src/data/examples/hi/08_Math/14_noisewave.js new file mode 100644 index 0000000000..24402452a1 --- /dev/null +++ b/src/data/examples/hi/08_Math/14_noisewave.js @@ -0,0 +1,42 @@ +/* + * @name शोर लहर + * @description तरंग जैसा पैटर्न उत्पन्न करने के लिए पर्लिन शोर का उपयोग करना। + * डैनियल शिफमैन द्वारा मूल। + */ +let yoff = 0.0; // पर्लिन शोर का दूसरा आयाम + +function setup() { + createCanvas(710, 400); +} + +function draw() { + background(51); + + fill(255); + // हम तरंग बिंदुओं से एक बहुभुज बनाने जा रहे हैं + beginShape(); + + let xoff = 0; // विकल्प # 1: 2D शोर + // चलो xoff = yoff; // विकल्प # 2: 1D शोर + + // क्षैतिज पिक्सेल पर पुनरावृति + for (let x = 0; x <= width; x += 10) { + // शोर के अनुसार y मान की गणना करें, मानचित्र करें + + // विकल्प # 1: 2D शोर + let y = map(noise(xoff, yoff), 0, 1, 200, 300); + + // विकल्प # 2: 1D शोर + // चलो y = नक्शा (शोर (xoff), 0, 1, 200,300); + + // शीर्ष सेट करें + vertex(x, y); + // शोर के लिए वृद्धि x आयाम + xoff += 0.05; + } + // शोर के लिए वृद्धि y आयाम + yoff += 0.01; + vertex(width, height); + vertex(0, height); + endShape(CLOSE); +} diff --git a/src/data/examples/hi/08_Math/15_Noise2D.js b/src/data/examples/hi/08_Math/15_Noise2D.js new file mode 100644 index 0000000000..0c9dcf85ba --- /dev/null +++ b/src/data/examples/hi/08_Math/15_Noise2D.js @@ -0,0 +1,41 @@ +/* + * @name Noise2D + * @frame 710,400 (वैकल्पिक) + * @description विभिन्न मापदंडों के साथ एक 2D शोर बनाएँ। + * + */ +let noiseVal; +let noiseScale = 0.02; + +function setup() { + createCanvas(640, 360); +} + +function draw() { + background(0); + // छवि का बायां आधा भाग बनाएं + for (let y = 0; y < height - 30; y++) { + for (let x = 0; x < width / 2; x++) { + // पिक्सल ऑक्टेव काउंट और फॉलऑफ वैल्यू का noiceDetail + noiseDetail(2, 0.2); + noiseVal = noise((mouseX + x) * noiseScale, (mouseY + y) * noiseScale); + stroke(noiseVal * 255); + point(x, y); + } + } + // छवि का दाहिना आधा भाग बनाएं + for (let y = 0; y < height - 30; y++) { + for (let x = width / 2; x < width; x++) { + // पिक्सल ऑक्टेव काउंट और फॉलऑफ वैल्यू का noiceDetail + noiseDetail(5, 0.5); + noiseVal = noise((mouseX + x) * noiseScale, (mouseY + y) * noiseScale); + stroke(noiseVal * 255); + point(x, y); + } + } + // दो विभाजनों का विवरण दिखाएं + textSize(18); + fill(255, 255, 255); + text('Noice2D with 2 octaves and 0.2 falloff', 10, 350); + text('Noice2D with 1 octaves and 0.7 falloff', 330, 350); +} diff --git a/src/data/examples/hi/08_Math/16_Noise3D.js b/src/data/examples/hi/08_Math/16_Noise3D.js new file mode 100644 index 0000000000..beeb77b3f4 --- /dev/null +++ b/src/data/examples/hi/08_Math/16_Noise3D.js @@ -0,0 +1,48 @@ +/* + * @name Noise3D + * @frame 710,400 (वैकल्पिक) + * @description सरल एनिमेटेड बनावट बनाने के लिए 3D शोर का उपयोग करना। + */ + +let noiseVal; +// वृद्धि x 0.01 +let x_increment = 0.01; +// प्रत्येक draw() चक्र में ०.०२ से z बढ़ाएँ +let z_increment = 0.02; + +// ऑफसेट मान +let z_off, y_off, x_off; + +function setup() { + // कैनवास बनाएं + createCanvas(640, 360); + // फ्रेम दर को परिभाषित करें + frameRate(20); + // z_off का प्रारंभिक मान + z_off = 0; +} + +function draw() { + x_off = 0; + y_off = 0; + // बैकग्राउंड को काला करें + background(0); + // नोटिस विवरण समायोजित करें + noiseDetail(8, 0.65); + + // प्रत्येक x, y के लिए नोइस मान की गणना करें + for (let y = 0; y < height; y++) { + x_off += x_increment; + y_off = 0; + + for (let x = 0; x < width; x++) { + // प्रत्येक पिक्सेल की गणना और ड्रा करें + noiseVal = noise(x_off, y_off, z_off); + stroke(noiseVal * 255); + y_off += x_increment; + point(x, y); + } + } + + z_off += z_increment; +} diff --git a/src/data/examples/hi/08_Math/17_Randomchords.js b/src/data/examples/hi/08_Math/17_Randomchords.js new file mode 100644 index 0000000000..b3bc8184de --- /dev/null +++ b/src/data/examples/hi/08_Math/17_Randomchords.js @@ -0,0 +1,35 @@ +/* + * @name रैंडम कॉर्ड्स + * @description एक वृत्त की यादृच्छिक जीवाओं को संचित करता है। पारभासी में प्रत्येक राग + * इसलिए वे एक छायांकित गोले का भ्रम देने के लिए जमा होते हैं। + * आतिश भाटिया द्वारा योगदान, एंडर्स हॉफ से प्रेरित + */ + +function setup() { + createCanvas(400, 400); + background(255, 255, 255); + + // अल्फा मान का उपयोग करके पारभासी स्ट्रोक + stroke(0, 0, 0, 15); +} + +function draw() { + // प्रत्येक फ्रेम में दो यादृच्छिक तार बनाएं + randomChord(); + randomChord(); +} + +function randomChord() { + // एक सर्कल पर एक यादृच्छिक बिंदु खोजें + let angle1 = random(0, 2 * PI); + let xpos1 = 200 + 200 * cos(angle1); + let ypos1 = 200 + 200 * sin(angle1); + + // सर्कल पर एक और यादृच्छिक बिंदु खोजें + let angle2 = random(0, 2 * PI); + let xpos2 = 200 + 200 * cos(angle2); + let ypos2 = 200 + 200 * sin(angle2); + + // उनके बीच एक रेखा खींचें + line(xpos1, ypos1, xpos2, ypos2); +} diff --git a/src/data/examples/hi/08_Math/18_randomGaussian.js b/src/data/examples/hi/08_Math/18_randomGaussian.js new file mode 100644 index 0000000000..4df1c83ed9 --- /dev/null +++ b/src/data/examples/hi/08_Math/18_randomGaussian.js @@ -0,0 +1,28 @@ +/* + * @name रैंडम गुस्सियन + * @arialabel पारभासी सफेद वृत्त एक रेखा में कई बार बाएं और दाएं तब तक खींचे जाते हैं जब तक कि वे एक सफेद लकीर बनाने के लिए ओवरलैप नहीं हो जाते + * @frame 720,400 + * @description यह स्केच यादृच्छिक संख्याओं के गाऊसी वितरण से बंधे x और y स्थानों के साथ दीर्घवृत्त खींचता है। + *

        यह उदाहरण रैंडम गाऊसी उदाहरण से लिया गया है + * संसाधन वेबसाइट पर + */ + +function setup() { + createCanvas(720, 400); + background(0); + } + + function draw() { + + // Get a gaussian random number w/ mean of 0 and standard deviation of 1.0 + let val = randomGaussian(); + + let sd = 60; // Define a standard deviation + let mean = width/2; // Define a mean value (middle of the screen along the x-axis) + let x = ( val * sd ) + mean; // Scale the gaussian random number by standard deviation and mean + + noStroke(); + fill(255, 10); + ellipse(x, height/2, 32, 32); // Draw an ellipse at our "normal" random location + } + diff --git a/src/data/examples/hi/08_Math/19_Map.js b/src/data/examples/hi/08_Math/19_Map.js new file mode 100644 index 0000000000..c032d2ced6 --- /dev/null +++ b/src/data/examples/hi/08_Math/19_Map.js @@ -0,0 +1,22 @@ +/* + * @name नक्शा + * @description किसी भी संख्या को लेने के लिए map() फ़ंक्शन का उपयोग करें और इसे स्केल करें a + * नया नंबर जो उस प्रोजेक्ट के लिए अधिक उपयोगी है जिस पर आप काम कर रहे हैं। + * उदाहरण के लिए, किसी आकृति के आकार या रंग को नियंत्रित करने के लिए माउस की स्थिति से संख्याओं का उपयोग करें। + * इस उदाहरण में, माउस के x-निर्देशांक (0 और 360 के बीच की संख्या) को नए नंबरों तक बढ़ाया जाता है + * एक सर्कल के रंग और आकार को परिभाषित करने के लिए। + */ +function setup() { + createCanvas(640, 400); + noStroke(); +} + +function draw() { + background(0); + // माउसएक्स मान को 0 से 640 तक 0 और 175 . के बीच की सीमा तक स्केल करें + let c = map(mouseX, 0, width, 0, 175); + // माउसएक्स मान को 0 से 640 तक 40 और 300 के बीच की सीमा तक स्केल करें + let d = map(mouseX, 0, width, 40, 300); + fill(255, c, 0); + ellipse(width/2, height/2, d, d); +} diff --git a/src/data/examples/hi/08_Math/20_Graphing2DEquations.js b/src/data/examples/hi/08_Math/20_Graphing2DEquations.js new file mode 100644 index 0000000000..2bb6422db4 --- /dev/null +++ b/src/data/examples/hi/08_Math/20_Graphing2DEquations.js @@ -0,0 +1,54 @@ +/** + * @name Graphing 2D Equations + * @arialabel काले और सफेद पैटर्न में किरणें एक साथ घूमती हैं जैसे उपयोगकर्ता का माउस दाएं चलता है और जब उपयोगकर्ता का माउस बाईं ओर चलता है तो वह घूमता है + * @frame 710, 400 + * @description निम्नलिखित समीकरण को रेखांकन करें: sin(n cos(r) + 5θ) जहां n क्षैतिज माउस स्थान का एक कार्य है। डैनियल शिफमैन द्वारा मूल + */ + function setup() { + createCanvas(710, 400); + pixelDensity(1); + } + + function draw() { + loadPixels(); + let n = (mouseX * 10.0) / width; + const w = 16.0; // 2D space width + const h = 16.0; // 2D space height + const dx = w / width; // Increment x this amount per pixel + const dy = h / height; // Increment y this amount per pixel + let x = -w / 2; // Start x at -1 * width / 2 + let y; + + let r; + let theta; + let val; + + let bw; //variable to store grayscale + let i; + let j; + let cols = width; + let rows = height; + + for (i = 0; i < cols; i += 1) { + y = -h / 2; + for (j = 0; j < rows; j += 1) { + r = sqrt(x * x + y * y); // Convert cartesian to polar + theta = atan2(y, x); // Convert cartesian to polar + // Compute 2D polar coordinate function + val = sin(n * cos(r) + 5 * theta); // Results in a value between -1 and 1 + //var val = cos(r); // Another simple function + //var val = sin(theta); // Another simple function + bw = color(((val + 1) * 255) / 2); + index = 4 * (i + j * width); + pixels[index] = red(bw); + pixels[index + 1] = green(bw); + pixels[index + 2] = blue(bw); + pixels[index + 3] = alpha(bw); + + y += dy; + } + x += dx; + } + updatePixels(); + } + \ No newline at end of file diff --git a/src/data/examples/hi/08_Math/21_parametricEquation.js b/src/data/examples/hi/08_Math/21_parametricEquation.js new file mode 100644 index 0000000000..c4459068ef --- /dev/null +++ b/src/data/examples/hi/08_Math/21_parametricEquation.js @@ -0,0 +1,44 @@ +/* + * @name पैरामीट्रिक समीकरण + * @description एक पैरामीट्रिक समीकरण है जहाँ x और y + * निर्देशांक दोनों एक दूसरे अक्षर के रूप में लिखे गए हैं। यह है + * एक पैरामीटर कहा जाता है और आमतौर पर अक्षर t या में दिया जाता है। + * इसकी प्रेरणा एलेक्जेंडर मिलर के यूट्यूब चैनल से ली गई है। + */ + +function setup(){ + createCanvas(720,400); +} + +// वह पैरामीटर जिस पर x और y निर्भर करते हैं, आमतौर पर या तो t या थीटा के प्रतीक के रूप में लिया जाता है +let t = 0; +function draw(){ + background('#fff'); + translate(width/2,height/2); + stroke('#0f0f0f'); + strokeWeight(1.5); + //loop for adding 100 lines + for(let i = 0;i<100;i++){ + line(x1(t+i),y1(t+i),x2(t+i)+20,y2(t+i)+20); + } + t+=0.15; +} +// लाइन के प्रारंभिक x समन्वय को बदलने के लिए कार्य +function x1(t){ + return sin(t/10)*125+sin(t/20)*125+sin(t/30)*125; +} + +// लाइन के प्रारंभिक y समन्वय को बदलने के लिए कार्य change +function y1(t){ + return cos(t/10)*125+cos(t/20)*125+cos(t/30)*125; +} + +// लाइन के अंतिम x समन्वय को बदलने के लिए कार्य +function x2(t){ + return sin(t/15)*125+sin(t/25)*125+sin(t/35)*125; +} + +// लाइन के अंतिम y समन्वय को बदलने के लिए कार्य +function y2(t){ + return cos(t/15)*125+cos(t/25)*125+cos(t/35)*125; +} \ No newline at end of file diff --git a/src/data/examples/hi/09_Simulate/00_Forces.js b/src/data/examples/hi/09_Simulate/00_Forces.js new file mode 100644 index 0000000000..60d9de27a4 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/00_Forces.js @@ -0,0 +1,148 @@ +/* + * @name बल + * @description निकायों पर अभिनय करने वाले कई बल का प्रदर्शन + * (natureofcode.com) + */ +// कई बल अभिनय का प्रदर्शन +// निकायों (प्रस्तावक वर्ग) +// शरीर लगातार गुरुत्वाकर्षण का अनुभव करते हैं +// जब "पानी" में निकायों को द्रव प्रतिरोध का अनुभव होता है + +// पांच गतिमान पिंड +let movers = []; + +// तरल +let liquid; + +function setup() { + createCanvas(640, 360); + reset(); + // तरल वस्तु बनाएं + liquid = new Liquid(0, height / 2, width, height / 2, 0.1); +} + +function draw() { + background(127); + + // पानी खींचो + liquid.display(); + + for (let i = 0; i < movers.length; i++) { + + // क्या प्रस्तावक तरल में है? + if (liquid.contains(movers[i])) { + // ड्रैग फोर्स की गणना करें + let dragForce = liquid.calculateDrag(movers[i]); + // मूवर पर ड्रैग फोर्स लागू करें + movers[i].applyForce(dragForce); + } + + // यहाँ द्रव्यमान द्वारा गुरुत्वाकर्षण को बढ़ाया जाता है! + let gravity = createVector(0, 0.1 * movers[i].mass); + // गुरुत्वाकर्षण लागू करें + movers[i].applyForce(gravity); + + // अद्यतन और प्रदर्शित करें + movers[i].update(); + movers[i].display(); + movers[i].checkEdges(); + } + +} + + +function mousePressed() { + reset(); +} + +// सभी मूवर ऑब्जेक्ट को बेतरतीब ढंग से पुनरारंभ करें +function reset() { + for (let i = 0; i < 9; i++) { + movers[i] = new Mover(random(0.5, 3), 40 + i * 70, 0); + } +} + +let Liquid = function(x, y, w, h, c) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + this.c = c; +}; + +// तरल में प्रस्तावक है? +Liquid.prototype.contains = function(m) { + let l = m.position; + return l.x > this.x && l.x < this.x + this.w && + l.y > this.y && l.y < this.y + this.h; +}; + +// ड्रैग फोर्स की गणना करें +Liquid.prototype.calculateDrag = function(m) { + // परिमाण गुणांक है * गति चुकता + let speed = m.velocity.mag(); + let dragMagnitude = this.c * speed * speed; + + // दिशा वेग के विपरीत है + let dragForce = m.velocity.copy(); + dragForce.mult(-1); + + // परिमाण के अनुसार पैमाना + // ड्रैगफोर्स.सेटमैग (ड्रैगमैग्निट्यूड); + dragForce.normalize(); + dragForce.mult(dragMagnitude); + return dragForce; +}; + +Liquid.prototype.display = function() { + noStroke(); + fill(50); + rect(this.x, this.y, this.w, this.h); +}; + +function Mover(m, x, y) { + this.mass = m; + this.position = createVector(x, y); + this.velocity = createVector(0, 0); + this.acceleration = createVector(0, 0); +} + +// न्यूटन का दूसरा नियम: F = M * A +// या ए = एफ / एम +Mover.prototype.applyForce = function(force) { + let f = p5.Vector.div(force, this.mass); + this.acceleration.add(f); +}; + +Mover.prototype.update = function() { + // त्वरण के अनुसार वेग बदलता है + this.velocity.add(this.acceleration); + // स्थिति वेग से बदलती है + this.position.add(this.velocity); + // हमें प्रत्येक फ्रेम में त्वरण को साफ करना चाहिए + this.acceleration.mult(0); +}; + +Mover.prototype.display = function() { + stroke(0); + strokeWeight(2); + fill(255,127); + ellipse(this.position.x, this.position.y, this.mass * 16, this.mass * 16); +}; + +// विंडो के नीचे से बाउंस करें +Mover.prototype.checkEdges = function() { + if (this.position.y > (height - this.mass * 8)) { + // नीचे से टकराते समय थोड़ा भीगना + this.velocity.y *= -0.9; + this.position.y = (height - this.mass * 8); + } +}; + + + + + + + + diff --git a/src/data/examples/hi/09_Simulate/01_ParticleSystem.js b/src/data/examples/hi/09_Simulate/01_ParticleSystem.js new file mode 100644 index 0000000000..c271b73916 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/01_ParticleSystem.js @@ -0,0 +1,69 @@ +/* + * @name कण प्रणाली + * @description यह एक मूल कण प्रणाली है + * (natureofcode.com) + */ +let system; + +function setup() { + createCanvas(720, 400); + system = new ParticleSystem(createVector(width / 2, 50)); +} + +function draw() { + background(51); + system.addParticle(); + system.run(); +} + +// एक साधारण कण वर्ग +let Particle = function(position) { + this.acceleration = createVector(0, 0.05); + this.velocity = createVector(random(-1, 1), random(-1, 0)); + this.position = position.copy(); + this.lifespan = 255; +}; + +Particle.prototype.run = function() { + this.update(); + this.display(); +}; + +// स्थिति को अद्यतन करने की विधि +Particle.prototype.update = function(){ + this.velocity.add(this.acceleration); + this.position.add(this.velocity); + this.lifespan -= 2; +}; + +// प्रदर्शित करने की विधि +Particle.prototype.display = function() { + stroke(200, this.lifespan); + strokeWeight(2); + fill(127, this.lifespan); + ellipse(this.position.x, this.position.y, 12, 12); +}; + +// क्या कण अभी भी उपयोगी है? +Particle.prototype.isDead = function(){ + return this.lifespan < 0; +}; + +let ParticleSystem = function(position) { + this.origin = position.copy(); + this.particles = []; +}; + +ParticleSystem.prototype.addParticle = function() { + this.particles.push(new Particle(this.origin)); +}; + +ParticleSystem.prototype.run = function() { + for (let i = this.particles.length-1; i >= 0; i--) { + let p = this.particles[i]; + p.run(); + if (p.isDead()) { + this.particles.splice(i, 1); + } + } +}; diff --git a/src/data/examples/hi/09_Simulate/02_Flocking.js b/src/data/examples/hi/09_Simulate/02_Flocking.js new file mode 100644 index 0000000000..c40524fca7 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/02_Flocking.js @@ -0,0 +1,229 @@ +/* + * @name झुंड + * @description क्रेग रेनॉल्ड्स के "झुंड" व्यवहार का प्रदर्शन। + * देखें: http://www.red3d.com/cwr/ + * नियम: सामंजस्य, पृथक्करण, संरेखण + * (natureofcode.com से)। + * सिस्टम में बोड्स जोड़ने के लिए माउस को ड्रैग करें। + */ + + +let flock; + +function setup() { + createCanvas(640, 360); + createP("Drag the mouse to generate new boids."); + + flock = new Flock(); + // सिस्टम में बोलियों का एक प्रारंभिक सेट जोड़ें + for (let i = 0; i < 100; i++) { + let b = new Boid(width / 2,height / 2); + flock.addBoid(b); + } +} + +function draw() { + background(51); + flock.run(); +} + +// सिस्टम में एक नया बोड जोड़ें +function mouseDragged() { + flock.addBoid(new Boid(mouseX, mouseY)); +} + +// कोड की प्रकृति +// डैनियल शिफमैन +// http://natureofcode.com + +// झुंड वस्तु +// बहुत कम करता है, बस सभी बोलियों की सरणी का प्रबंधन करता है + +function Flock() { + // सभी बोलियों के लिए एक सरणी + this.boids = []; // सरणी को इनिशियलाइज़ करें +} + +Flock.prototype.run = function() { + for (let i = 0; i < this.boids.length; i++) { + this.boids[i].run(this.boids); // प्रत्येक बोली को व्यक्तिगत रूप से बोलियों की पूरी सूची पास करना + } +} + +Flock.prototype.addBoid = function(b) { + this.boids.push(b); +} + +// कोड की प्रकृति +// डैनियल शिफमैन +// http://natureofcode.com + +// बोएड क्लास +// पृथक्करण, सामंजस्य, संरेखण के तरीके जोड़े गए + +function Boid(x, y) { + this.acceleration = createVector(0, 0); + this.velocity = createVector(random(-1, 1), random(-1, 1)); + this.position = createVector(x, y); + this.r = 3.0; + this.maxspeed = 3; // अधिकतम गति + this.maxforce = 0.05; // अधिकतम स्टीयरिंग बल +} + +Boid.prototype.run = function(boids) { + this.flock(boids); + this.update(); + this.borders(); + this.render(); +} + +Boid.prototype.applyForce = function(force) { + // यदि हम A = F / M . चाहते हैं तो हम यहाँ द्रव्यमान जोड़ सकते हैं + this.acceleration.add(force); +} + +// हम हर बार तीन नियमों के आधार पर एक नया त्वरण जमा करते हैं +Boid.prototype.flock = function(boids) { + let sep = this.separate(boids); // पृथक्करण + let ali = this.align(boids); // संरेखण + let coh = this.cohesion(boids); // सामंजस्य + // मनमाने ढंग से इन ताकतों को तौलें + sep.mult(1.5); + ali.mult(1.0); + coh.mult(1.0); + // बल वैक्टर को त्वरण में जोड़ें + this.applyForce(sep); + this.applyForce(ali); + this.applyForce(coh); +} + +// स्थान अपडेट करने की विधि +Boid.prototype.update = function() { + // वेग अपडेट करें + this.velocity.add(this.acceleration); + // सीमा गति + this.velocity.limit(this.maxspeed); + this.position.add(this.velocity); + // त्वरण को प्रत्येक चक्र में 0 पर रीसेट करें + this.acceleration.mult(0); +} + +// एक विधि जो एक लक्ष्य की ओर एक स्टीयरिंग बल की गणना और लागू करती है +// स्टीयर = वांछित माइनस वेलोसिटी +Boid.prototype.seek = function(target) { + let desired = p5.Vector.sub(target,this.position); // स्थान से लक्ष्य की ओर इशारा करते हुए एक वेक्टर + // वांछित और स्केल को अधिकतम गति के लिए सामान्यीकृत करें + desired.normalize(); + desired.mult(this.maxspeed); + // संचालन = वांछित शून्य वेग + let steer = p5.Vector.sub(desired,this.velocity); + steer.limit(this.maxforce); // अधिकतम स्टीयरिंग बल तक सीमित करें + return steer; +} + +Boid.prototype.render = function() { + // वेग की दिशा में घुमाया गया एक त्रिभुज बनाएं + let theta = this.velocity.heading() + radians(90); + fill(127); + stroke(200); + push(); + translate(this.position.x, this.position.y); + rotate(theta); + beginShape(); + vertex(0, -this.r * 2); + vertex(-this.r, this.r * 2); + vertex(this.r, this.r * 2); + endShape(CLOSE); + pop(); +} + +// चारों ओर लपेट दो +Boid.prototype.borders = function() { + if (this.position.x < -this.r) this.position.x = width + this.r; + if (this.position.y < -this.r) this.position.y = height + this.r; + if (this.position.x > width + this.r) this.position.x = -this.r; + if (this.position.y > height + this.r) this.position.y = -this.r; +} + +// पृथक्करण +// विधि आस-पास के boids के लिए जाँच करता है और दूर चला जाता है +Boid.prototype.separate = function(boids) { + let desiredseparation = 25.0; + let steer = createVector(0, 0); + let count = 0; + // सिस्टम में प्रत्येक बोड के लिए, जांचें कि क्या यह बहुत करीब है + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position,boids[i].position); + // यदि दूरी 0 से अधिक है और मनमानी राशि से कम है (0 जब आप स्वयं हों) + if ((d > 0) && (d < desiredseparation)) { + // पड़ोसी से दूर की ओर इशारा करते हुए वेक्टर की गणना करें + let diff = p5.Vector.sub(this.position, boids[i].position); + diff.normalize(); + diff.div(d); // दूरी से वजन + steer.add(diff); + count++; // कितने का ट्रैक रखें + } + } + // औसत -- कितने से विभाजित करें + if (count > 0) { + steer.div(count); + } + + // जब तक वेक्टर 0 . से बड़ा है + if (steer.mag() > 0) { + // रेनॉल्ड्स को लागू करें: संचालन = वांछित - वेग + steer.normalize(); + steer.mult(this.maxspeed); + steer.sub(this.velocity); + steer.limit(this.maxforce); + } + return steer; +} + +// संरेखण +// सिस्टम में प्रत्येक पास के बोड के लिए, औसत वेग की गणना करें +Boid.prototype.align = function(boids) { + let neighbordist = 50; + let sum = createVector(0,0); + let count = 0; + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position,boids[i].position); + if ((d > 0) && (d < neighbordist)) { + sum.add(boids[i].velocity); + count++; + } + } + if (count > 0) { + sum.div(count); + sum.normalize(); + sum.mult(this.maxspeed); + let steer = p5.Vector.sub(sum, this.velocity); + steer.limit(this.maxforce); + return steer; + } else { + return createVector(0, 0); + } +} + +// सामंजस्य +// आस-पास के सभी बोड्स के औसत स्थान (अर्थात केंद्र) के लिए, उस स्थान की ओर स्टीयरिंग वेक्टर की गणना करें +Boid.prototype.cohesion = function(boids) { + let neighbordist = 50; + let sum = createVector(0, 0); // सभी स्थानों को जमा करने के लिए खाली वेक्टर से शुरू करें + let count = 0; + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position,boids[i].position); + if ((d > 0) && (d < neighbordist)) { + sum.add(boids[i].position); // स्थान जोड़ना + count++; + } + } + if (count > 0) { + sum.div(count); + return this.seek(sum); // स्थान की ओर बढ़ें + } else { + return createVector(0, 0); + } +} + + diff --git a/src/data/examples/hi/09_Simulate/03_WolframCA.js b/src/data/examples/hi/09_Simulate/03_WolframCA.js new file mode 100644 index 0000000000..fd36eb4880 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/03_WolframCA.js @@ -0,0 +1,73 @@ +/* + * @name वोल्फ्राम सीए + * @description वुल्फराम 1-आयामी सेलुलर ऑटोमेटा का सरल प्रदर्शन + * (natureofcode.com) + */ + +let w = 10; +// 0s और 1s की एक सरणी +let cells; + +// हम मनमाने ढंग से "1" की स्थिति वाले केवल मध्य सेल से शुरू करते हैं +let generation = 0; + +// नियम सेट को स्टोर करने के लिए एक सरणी, उदाहरण के लिए {0,1,1,0,1,1,0,1} +let ruleset = [0, 1, 0, 1, 1, 0, 1, 0]; + +function setup() { + createCanvas(640, 400); + cells = Array(floor(width / w)); + for (let i = 0; i < cells.length; i++) { + cells[i] = 0; + } + cells[cells.length/2] = 1; + +} + +function draw() { + for (let i = 0; i < cells.length; i++) { + if (cells[i] === 1) { + fill(200); + } else { + fill(51); + noStroke(); + rect(i * w, generation * w, w, w); + } + } + if (generation < height/w) { + generate(); + } +} + +// नई पीढ़ी बनाने की प्रक्रिया +function generate() { + // पहले हम नए मूल्यों के लिए एक खाली सरणी बनाते हैं + let nextgen = Array(cells.length); + // प्रत्येक स्थान के लिए, वर्तमान स्थिति और पड़ोसी राज्यों की जांच करके नए राज्य का निर्धारण करें + // किनारों को अनदेखा करें जिनमें केवल एक पड़ोसी हो + for (let i = 1; i < cells.length-1; i++) { + let left = cells[i-1]; // वाम पड़ोसी राज्य + let me = cells[i]; // वर्तमान स्थिति + let right = cells[i+1]; // सही पड़ोसी राज्य + nextgen[i] = rules(left, me, right); // नियमों के आधार पर अगली पीढ़ी की स्थिति की गणना करें + } + // वर्तमान पीढ़ी नई पीढ़ी है + cells = nextgen; + generation++; +} + + +// वोल्फ्राम नियमों को लागू करना +// सुधार किया जा सकता है और अधिक संक्षिप्त बनाया जा सकता है, लेकिन यहां हम स्पष्ट रूप से देख सकते हैं कि प्रत्येक मामले के लिए क्या चल रहा है +function rules(a, b, c) { + if (a == 1 && b == 1 && c == 1) return ruleset[0]; + if (a == 1 && b == 1 && c == 0) return ruleset[1]; + if (a == 1 && b == 0 && c == 1) return ruleset[2]; + if (a == 1 && b == 0 && c == 0) return ruleset[3]; + if (a == 0 && b == 1 && c == 1) return ruleset[4]; + if (a == 0 && b == 1 && c == 0) return ruleset[5]; + if (a == 0 && b == 0 && c == 1) return ruleset[6]; + if (a == 0 && b == 0 && c == 0) return ruleset[7]; + return 0; +} + diff --git a/src/data/examples/hi/09_Simulate/04_GameOfLife.js b/src/data/examples/hi/09_Simulate/04_GameOfLife.js new file mode 100644 index 0000000000..6da1a7670d --- /dev/null +++ b/src/data/examples/hi/09_Simulate/04_GameOfLife.js @@ -0,0 +1,93 @@ + /* + * @name Game of Life + * @description जॉन कॉनवे के गेम ऑफ लाइफ सीए का एक बुनियादी कार्यान्वयन + * (natureofcode.com) + */ +let w; +let columns; +let rows; +let board; +let next; + +function setup() { + createCanvas(720, 400); + w = 20; + // कॉलम और पंक्तियों की गणना करें + columns = floor(width / w); + rows = floor(height / w); + // 2D सरणी बनाने का निराला तरीका JS है + board = new Array(columns); + for (let i = 0; i < columns; i++) { + board[i] = new Array(rows); + } + // कई 2D सरणियों का उपयोग करने जा रहे हैं और उन्हें स्वैप करें + next = new Array(columns); + for (i = 0; i < columns; i++) { + next[i] = new Array(rows); + } + init(); +} + +function draw() { + background(255); + generate(); + for ( let i = 0; i < columns;i++) { + for ( let j = 0; j < rows;j++) { + if ((board[i][j] == 1)) fill(0); + else fill(255); + stroke(0); + rect(i * w, j * w, w-1, w-1); + } + } + +} + +// माउस दबाए जाने पर बोर्ड को रीसेट करें +function mousePressed() { + init(); +} + +// बेतरतीब ढंग से बोर्ड भरें +function init() { + for (let i = 0; i < columns; i++) { + for (let j = 0; j < rows; j++) { + // किनारों को 0s . के साथ पंक्तिबद्ध करना + if (i == 0 || j == 0 || i == columns-1 || j == rows-1) board[i][j] = 0; + // बाकी को बेतरतीब ढंग से भरना + else board[i][j] = floor(random(2)); + next[i][j] = 0; + } + } +} + +// नई पीढ़ी बनाने की प्रक्रिया +function generate() { + +// हमारे 2D सरणी में प्रत्येक स्थान के माध्यम से लूप करें और स्पॉट पड़ोसियों की जाँच करें + for (let x = 1; x < columns - 1; x++) { + for (let y = 1; y < rows - 1; y++) { + // सभी राज्यों को 3x3 आसपास के ग्रिड में जोड़ें + let neighbors = 0; + for (let i = -1; i <= 1; i++) { + for (let j = -1; j <= 1; j++) { + neighbors += board[x+i][y+j]; + } + } + + // वर्तमान सेल की स्थिति को घटाने के लिए एक छोटी सी चाल + // हमने इसे उपरोक्त लूप में जोड़ा है + neighbors -= board[x][y]; + // Rules of Life + if ((board[x][y] == 1) && (neighbors < 2)) next[x][y] = 0; // तनहाई + else if ((board[x][y] == 1) && (neighbors > 3)) next[x][y] = 0; // अधिक आबादी वाला + else if ((board[x][y] == 0) && (neighbors == 3)) next[x][y] = 1; //पुन: उत्पन्न करें + else next[x][y] = board[x][y]; // ठहराव + } + } + + // स्वैप करें! + let temp = board; + board = next; + next = temp; +} + diff --git a/src/data/examples/hi/09_Simulate/05_MultipleParticleSystems.js b/src/data/examples/hi/09_Simulate/05_MultipleParticleSystems.js new file mode 100644 index 0000000000..04456e7f3e --- /dev/null +++ b/src/data/examples/hi/09_Simulate/05_MultipleParticleSystems.js @@ -0,0 +1,138 @@ +/* + * @name मल्टीपल पार्टिकल सिस्टम + * @description माउस स्थान पर कणों का एक विस्फोट उत्पन्न करने के लिए माउस पर क्लिक करें।
        प्रत्येक फट कण और क्रेज़ीपार्टिकल्स (कण का एक उपवर्ग) के साथ एक कण प्रणाली का एक उदाहरण है।
        यहां वंशानुक्रम और बहुरूपता के उपयोग पर ध्यान दें।
        + * डैनियल शिफमैन द्वारा मूल। + */ +let systems; + +function setup() { + createCanvas(710, 400); + systems = []; +} + +function draw() { + background(51); + background(0); + for (i = 0; i < systems.length; i++) { + systems[i].run(); + systems[i].addParticle(); + } + if (systems.length == 0) { + fill(255); + textAlign(CENTER); + textSize(32); + text("click mouse to add particle systems", width / 2, height / 2); + } +} + +function mousePressed() { + this.p = new ParticleSystem(createVector(mouseX, mouseY)); + systems.push(p); +} + +// एक साधारण कण वर्ग +let Particle = function(position) { + this.acceleration = createVector(0, 0.05); + this.velocity = createVector(random(-1, 1), random(-1, 0)); + this.position = position.copy(); + this.lifespan = 255.0; +}; + +Particle.prototype.run = function() { + this.update(); + this.display(); +}; + +// स्थिति को अद्यतन करने की विधि +Particle.prototype.update = function(){ + this.velocity.add(this.acceleration); + this.position.add(this.velocity); + this.lifespan -= 2; +}; + +// प्रदर्शित करने की विधि +Particle.prototype.display = function () { + stroke(200, this.lifespan); + strokeWeight(2); + fill(127, this.lifespan); + ellipse(this.position.x, this.position.y, 12, 12); +}; + +// क्या कण अभी भी उपयोगी है? +Particle.prototype.isDead = function () { + if (this.lifespan < 0) { + return true; + } else { + return false; + } +}; + +let ParticleSystem = function (position) { + this.origin = position.copy(); + this.particles = []; +}; + +ParticleSystem.prototype.addParticle = function () { + // सिस्टम में या तो एक कण या क्रेजीपार्टिकल जोड़ें + if (int(random(0, 2)) == 0) { + p = new Particle(this.origin); + } + else { + p = new CrazyParticle(this.origin); + } + this.particles.push(p); +}; + +ParticleSystem.prototype.run = function () { + for (let i = this.particles.length - 1; i >= 0; i--) { + let p = this.particles[i]; + p.run(); + if (p.isDead()) { + this.particles.splice(i, 1); + } + } +}; + +// कण का एक उपवर्ग + +function CrazyParticle(origin) { + // सुनिश्चित करें कि पैरेंट कंस्ट्रक्टर को कॉल करें (फ़ंक्शन # कॉल का उपयोग करके) + // कि "यह" कॉल के दौरान सही ढंग से सेट है + Particle.call(this, origin); + + // हमारे जोड़े गए गुणों को प्रारंभ करें + this.theta = 0.0; +}; + +// एक क्रेजी.प्रोटोटाइप ऑब्जेक्ट बनाएं जो पार्टिकल.प्रोटोटाइप से विरासत में मिले। +// नोट: यहां एक सामान्य त्रुटि "नया कण ()" बनाने के लिए उपयोग करना है +// क्रेजी.प्रोटोटाइप। यह कई कारणों से गलत है, कम से कम +// कि हमारे पास "मूल" के लिए कण देने के लिए कुछ भी नहीं है +// बहस। पार्टिकल को कॉल करने का सही स्थान ऊपर है, जहां हम कॉल करते हैं +// यह पागल से। +CrazyParticle.prototype = Object.create(Particle.prototype); // नीचे दिए गए नोट देखें + +// क्रेजीपार्टिकल को संदर्भित करने के लिए "कन्स्ट्रक्टर" संपत्ति सेट करें +CrazyParticle.prototype.constructor = CrazyParticle; + +// ध्यान दें कि हमारे पास यहां रन () विधि नहीं है; यह कण से विरासत में मिला है + +// यह अद्यतन () विधि मूल वर्ग अद्यतन () विधि को ओवरराइड करती है +CrazyParticle.prototype.update=function() { + Particle.prototype.update.call(this); + // क्षैतिज वेग के आधार पर वृद्धि रोटेशन + this.theta += (this.velocity.x * this.velocity.mag()) / 10.0; +} + +// यह डिस्प्ले () मेथड पैरेंट क्लास डिस्प्ले () मेथड को ओवरराइड करता है +CrazyParticle.prototype.display=function() { + // एक नियमित कण की तरह ही दीर्घवृत्त को प्रस्तुत करें + Particle.prototype.display.call(this); + // फिर एक घूर्णन रेखा जोड़ें + push(); + translate(this.position.x, this.position.y); + rotate(this.theta); + stroke(255, this.lifespan); + line(0, 0, 25, 0); + pop(); +} diff --git a/src/data/examples/hi/09_Simulate/06_Spirograph.js b/src/data/examples/hi/09_Simulate/06_Spirograph.js new file mode 100644 index 0000000000..0401c344d4 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/06_Spirograph.js @@ -0,0 +1,73 @@ + +/* + * @name स्पाइरोग्राफ + * @description यह स्केच a . बनाने के लिए सरल परिवर्तनों का उपयोग करता है + * इंटरलॉकिंग सर्कल (साइन कहा जाता है) के साथ स्पाइरोग्राफ जैसा प्रभाव। + * ट्रेसिंग और अंतर्निहित ज्यामिति दिखाने के बीच स्विच करने के लिए स्पेसबार दबाएं।
        + * उदाहरण R द्वारा बनाया गया है। ल्यूक डुबोइस.
        + * http://en.wikipedia.org/wiki/Spirograph + */ +let NUMSINES = 20; // इनमें से कितनी चीजें हम एक साथ कर सकते हैं? +let sines = new Array(NUMSINES); // सभी मौजूदा कोणों को पकड़ने के लिए एक सरणी +let rad; // केंद्रीय साइन के लिए एक प्रारंभिक त्रिज्या मान +let i; // एक काउंटर चर + +// क्या हो रहा है इसका अंदाजा लगाने के लिए इनके साथ खेलें: +let fund = 0.005; // केंद्रीय साइन की गति +let ratio = 1; // गति के लिए कौन सा गुणक प्रत्येक अतिरिक्त ज्या है? +let alpha = 50; // ट्रेसिंग सिस्टम कितना अपारदर्शी है + +let trace = false; // क्या हम ट्रेस कर रहे हैं? + +function setup() { + createCanvas(710, 400); + + rad = height / 4; // केंद्रीय सर्कल के लिए त्रिज्या की गणना करें + background(204); // स्क्रीन साफ़ करें + + for (let i = 0; i + * उदाहरण R द्वारा बनाया गया है। ल्यूक डुबोइस.
        + * https://en.wikipedia.org/wiki/L-system + */ +// कछुआ सामान: +let x, y; // कछुए की वर्तमान स्थिति +let currentangle = 0; // कछुआ किस ओर इशारा कर रहा है +let step = 20; // प्रत्येक 'एफ' के साथ कछुआ कितना चलता है +let angle = 90; // कछुआ '-' या '+' से कितना मुड़ता है + +// लिंडेनमेयर स्टफ (एल-सिस्टम) +let thestring = 'A'; // "स्वयंसिद्ध" या स्ट्रिंग की शुरुआत +let numloops = 5; // पूर्व-गणना करने के लिए कितने पुनरावृत्तियों +let therules = []; // नियमों के लिए सरणी +therules[0] = ['A', '-BF+AFA+FB-']; // पहला नियम +therules[1] = ['B', '+AF-BFB-FA+']; // दूसरा नियम + +let whereinstring = 0; // एल-सिस्टम में हम कहां हैं? + +function setup() { + createCanvas(710, 400); + background(255); + stroke(0, 0, 0, 255); + + // निचले-बाएँ कोने पर x और y स्थिति शुरू करें + x = 0; + y = height-1; + + // एल-सिस्टम की गणना करें + for (let i = 0; i < numloops; i++) { + thestring = lindenmayer(thestring); + } +} + +function draw() { + + // स्ट्रिंग में वर्तमान वर्ण बनाएं: + drawIt(thestring[whereinstring]); + + // उस बिंदु को बढ़ाएं जहां हम स्ट्रिंग पढ़ रहे हैं। + // अंत में चारों ओर लपेटें। + whereinstring++; + if (whereinstring > thestring.length-1) whereinstring = 0; + +} + +// एल-सिस्टम की व्याख्या करें +function lindenmayer(s) { + let outputstring = ''; // एक खाली आउटपुट स्ट्रिंग शुरू करें + + // प्रतीक मिलान की तलाश में 'थेरुल्स' के माध्यम से पुनरावृति करें: + for (let i = 0; i < s.length; i++) { + let ismatch = 0; // डिफ़ॉल्ट रूप से, कोई मिलान नहीं + for (let j = 0; j < therules.length; j++) { + if (s[i] == therules[j][0]) { + outputstring += therules[j][1]; // प्रतिस्थापन लिखें + ismatch = 1; // हमारे पास एक मैच है, इसलिए प्रतीक पर कॉपी न करें + break; // इसके लिए () लूप से बाहर निकलें + } + } + // अगर कुछ भी मेल नहीं खाता है, तो बस प्रतीक को कॉपी करें। + if (ismatch == 0) outputstring+= s[i]; + } + + return outputstring; // संशोधित स्ट्रिंग भेजें +} + +// यह एक कस्टम फ़ंक्शन है जो टर्टल कमांड खींचता है +function drawIt(k) { + + if (k=='F') { // आगे बढ़ें + // स्टेप और करंट एंगल के आधार पर ध्रुवीय से कार्टेशियन: + let x1 = x + step*cos(radians(currentangle)); + let y1 = y + step*sin(radians(currentangle)); + line(x, y, x1, y1); // पुराने और नए को कनेक्ट करें + + // कछुए की स्थिति को अपडेट करें: + x = x1; + y = y1; + } else if (k == '+') { + currentangle += angle; // बांए मुड़िए + } else if (k == '-') { + currentangle -= angle; // दांए मुड़िए + } + + // मुझे कुछ यादृच्छिक रंग मान दें: + let r = random(128, 255); + let g = random(0, 192); + let b = random(0, 50); + let a = random(50, 100); + + // त्रिज्या के लिए एक गाऊसी (डी एंड डी) वितरण चुनें: + let radius = 0; + radius += random(0, 15); + radius += random(0, 15); + radius += random(0, 15); + radius = radius / 3; + + // सामान ड्रा करें: + fill(r, g, b, a); + ellipse(x, y, radius, radius); +} \ No newline at end of file diff --git a/src/data/examples/hi/09_Simulate/08_Spring.js b/src/data/examples/hi/09_Simulate/08_Spring.js new file mode 100644 index 0000000000..a88e27454a --- /dev/null +++ b/src/data/examples/hi/09_Simulate/08_Spring.js @@ -0,0 +1,92 @@ +/* + * @name वसंत + * @frame 710, 400 + * @description वसंत शुरू करने के लिए क्षैतिज पट्टी पर क्लिक करें, खींचें और छोड़ें। + */ +// शीर्ष बार के लिए स्प्रिंग ड्राइंग स्थिरांक +let springHeight = 32, + left, + right, + maxHeight = 200, + minHeight = 100, + over = false, + move = false; + +// स्प्रिंग सिमुलेशन स्थिरांक +let M = 0.8, // द्रव्यमान + K = 0.2, // वसंत निरंतर + D = 0.92, // भिगोना + R = 150; // स्थिति को विश्राम दें + +// स्प्रिंग सिमुलेशन चर +let ps = R, // पद + vs = 0.0, // वेग + as = 0, // त्वरण + f = 0; // बल + +function setup() { + createCanvas(710, 400); + rectMode(CORNERS); + noStroke(); + left = width / 2 - 100; + right = width / 2 + 100; +} + +function draw() { + background(102); + updateSpring(); + drawSpring(); +} + +function drawSpring() { + // ड्रा बेस + fill(0.2); + let baseWidth = 0.5 * ps + -8; + rect(width / 2 - baseWidth, ps + springHeight, width / 2 + baseWidth, height); + + // रंग सेट करें और शीर्ष पट्टी बनाएं + if (over || move) { + fill(255); + } else { + fill(204); + } + + rect(left, ps, right, ps + springHeight); +} + +function updateSpring() { + // वसंत की स्थिति को अपडेट करें + if ( !move ) { + f = -K * ( ps - R ); // f=-ky + as = f / M; // त्वरण सेट करें, f=ma == a=f/m + vs = D * (vs + as); // वेग सेट करें + ps = ps + vs; // अद्यतन स्थिति + } + + if (abs(vs) < 0.1) { + vs = 0.0; + } + + // परीक्षण करें कि क्या माउस शीर्ष बार पर है + if (mouseX > left && mouseX < right && mouseY > ps && mouseY < ps + springHeight) { + over = true; + } else { + over = false; + } + + // शीर्ष बार की स्थिति को सेट और विवश करें + if (move) { + ps = mouseY - springHeight / 2; + ps = constrain(ps, minHeight, maxHeight); + } +} + +function mousePressed() { + if (over) { + move = true; + } +} + +function mouseReleased() { + move = false; +} diff --git a/src/data/examples/hi/09_Simulate/09_Springs.js b/src/data/examples/hi/09_Simulate/09_Springs.js new file mode 100644 index 0000000000..94bbc8133b --- /dev/null +++ b/src/data/examples/hi/09_Simulate/09_Springs.js @@ -0,0 +1,147 @@ +/* + * @name स्प्रिंग्स + * @frame 710,400 + * @description माउस को किसी एक सर्कल के ऊपर ले जाएं और फिर से स्थिति में लाने के लिए क्लिक करें। + * जब आप माउस को छोड़ते हैं, तो यह वापस स्थिति में आ जाएगा। + * प्रत्येक मंडली का व्यवहार थोड़ा अलग होता है। + * (https://processing.org/examples/springs.html से पोर्ट किया गया) + */ +let num = 3; +let springs = []; + +function setup() { + createCanvas(710, 400); + noStroke(); + + springs[0] = new Spring(240, 260, 40, 0.98, 8.0, 0.1, springs, 0); + springs[1] = new Spring(320, 210, 120, 0.95, 9.0, 0.1, springs, 1); + springs[2] = new Spring(180, 170, 200, 0.90, 9.9, 0.1, springs, 2); +} + +function draw() { + background(51); + + for (let i = 0; i < num; i++) { + springs[i].update(); + springs[i].display(); + } +} + +function mousePressed() { + for (let i = 0; i < num; i++) { + springs[i].pressed(); + } +} + +function mouseReleased() { + for (let i = 0; i < num; i++) { + springs[i].released(); + } +} + +// स्प्रिंग क्लास +function Spring (_x, _y, _s, _d, _m, _k_in, _others, _id) { +// स्क्रीन मान + // यह। एक्सपोस = _x; + // this.ypos = _y; + + this.x_pos = _x; + this.y_pos= _y; + + this.size = 20; + this.size = _s; + + this.over = false; + this.move = false; + + // स्प्रिंग सिमुलेशन स्थिरांक + this.mass = _m; // द्रव्यमान + this.k = 0.2; // वसंत निरंतर + this.k = _k_in; + this.damp = _d; // भिगोना + this.rest_posx = _x; // आराम की स्थिति X + this.rest_posy = _y; // आराम की स्थिति Y + + // स्प्रिंग सिमुलेशन चर + // फ्लोट पॉज़ = 20.0; // पद + this.velx = 0.0; // एक्स वेग + this.vely = 0.0; // वाई वेग + this.accel = 0; // त्वरण + this.force = 0; // बल + + this.friends = _others; + this.id = _id; + + this.update = function() { + + if (this.move) { + this.rest_posy = mouseY; + this.rest_posx = mouseX; + } + + this.force = -this.k * (this.y_pos - this.rest_posy); // f=-ky + this.accel = this.force / this.mass; // त्वरण सेट करें, f=ma == a=f/m + this.vely = this.damp * (this.vely + this.accel); // वेग सेट करें + this.y_pos = this.y_pos + this.vely; // अद्यतन स्थिति + + + this.force = -this.k * (this.x_pos - this.rest_posx); // f=-ky + this.accel = this.force / this.mass; // त्वरण सेट करें, f=ma == a=f/m + this.velx = this.damp * (this.velx + this.accel); // वेग सेट करें + this.x_pos = this.x_pos + this.velx; // अद्यतन स्थिति + + + if ((this.overEvent() || this.move) && !(this.otherOver()) ) { + this.over = true; + } else { + this.over = false; + } + } + + // यह देखने के लिए परीक्षण करें कि क्या माउस इस वसंत के ऊपर है + this.overEvent = function() { + let disX = this.x_pos - mouseX; + let disY = this.y_pos - mouseY; + let dis = createVector(disX, disY); + if (dis.mag() < this.size / 2 ) { + return true; + } else { + return false; + } + } + + // सुनिश्चित करें कि कोई अन्य स्प्रिंग सक्रिय नहीं है + this.otherOver = function() { + for (let i = 0; i < num; i++) { + if (i != this.id) { + if (this.friends[i].over == true) { + return true; + } + } + } + return false; + } + + this.display = function() { + if (this.over) { + fill(153); + } else { + fill(255); + } + ellipse(this.x_pos, this.y_pos, this.size, this.size); + } + + this.pressed = function() { + if (this.over) { + this.move = true; + } else { + this.move = false; + } + } + + this.released = function() { + this.move = false; + this.rest_posx = this.y_pos; + this.rest_posy = this.y_pos; + } +}; \ No newline at end of file diff --git a/src/data/examples/hi/09_Simulate/10_SoftBody.js b/src/data/examples/hi/09_Simulate/10_SoftBody.js new file mode 100644 index 0000000000..fb69999bdd --- /dev/null +++ b/src/data/examples/hi/09_Simulate/10_SoftBody.js @@ -0,0 +1,110 @@ +/* + * @name शीतल शरीर + * @description इरा ग्रीनबर्ग द्वारा मूल उदाहरण। + *

        कर्ववर्टेक्स () और कर्वटाइटनेस () का उपयोग करके सॉफ्टबॉडी डायनेमिक्स सिमुलेशन। + */ +// केंद्र बिंदु +let centerX = 0.0, centerY = 0.0; + +let radius = 45, rotAngle = -90; +let accelX = 0.0, accelY = 0.0; +let deltaX = 0.0, deltaY = 0.0; +let springing = 0.0009, damping = 0.98; + +// कोने के नोड्स +let nodes = 5; + +// शून्य भरण सरणियाँ +let nodeStartX = []; +let nodeStartY = []; +let nodeX = []; +let nodeY = []; +let angle = []; +let frequency = []; + +// सॉफ्ट-बॉडी डायनामिक्स +let organicConstant = 1.0; + +function setup() { + createCanvas(710, 400); + + // विंडो में केंद्र का आकार + centerX = width / 2; + centerY = height / 2; + + // सरणियों को 0 . पर इनिशियलाइज़ करें + for (let i = 0; i < nodes; i++){ + nodeStartX[i] = 0; + nodeStartY[i] = 0; + nodeY[i] = 0; + nodeY[i] = 0; + angle[i] = 0; + } + + // कोने के नोड्स के लिए आवृत्तियों को प्रारंभ करें + for (let i = 0; i < nodes; i++){ + frequency[i] = random(5, 12); + } + + noStroke(); + frameRate(30); +} + +function draw() { + // फीका पृष्ठभूमि + fill(0, 100); + rect(0, 0, width, height); + drawShape(); + moveShape(); +} + +function drawShape() { + // नोड के शुरुआती स्थानों की गणना करें + for (let i = 0; i < nodes; i++){ + nodeStartX[i] = centerX + cos(radians(rotAngle)) * radius; + nodeStartY[i] = centerY + sin(radians(rotAngle)) * radius; + rotAngle += 360.0 / nodes; + } + + // बहुभुज बनाएं + curveTightness(organicConstant); + fill(255); + beginShape(); + for (let i = 0; i < nodes; i++){ + curveVertex(nodeX[i], nodeY[i]); + } + for (let i = 0; i < nodes-1; i++){ + curveVertex(nodeX[i], nodeY[i]); + } + endShape(CLOSE); +} + +function moveShape() { + // केंद्र बिंदु ले जाएँ + deltaX = mouseX - centerX; + deltaY = mouseY - centerY; + + // स्प्रिंग इफेक्ट बनाएं + deltaX *= springing; + deltaY *= springing; + accelX += deltaX; + accelY += deltaY; + + // शिकारी के केंद्र को स्थानांतरित करें + centerX += accelX; + centerY += accelY; + + // स्प्रिंगिंग को धीमा करें + accelX *= damping; + accelY *= damping; + + // वक्र की जकड़न बदलें + organicConstant = 1 - ((abs(accelX) + abs(accelY)) * 0.1); + + // नोड्स ले जाएँ + for (let i = 0; i < nodes; i++){ + nodeX[i] = nodeStartX[i] + sin(radians(angle[i])) * (accelX * 2); + nodeY[i] = nodeStartY[i] + sin(radians(angle[i])) * (accelY * 2); + angle[i] += frequency[i]; + } +} diff --git a/src/data/examples/hi/09_Simulate/11_SmokeParticleSystem.js b/src/data/examples/hi/09_Simulate/11_SmokeParticleSystem.js new file mode 100644 index 0000000000..259275ac0b --- /dev/null +++ b/src/data/examples/hi/09_Simulate/11_SmokeParticleSystem.js @@ -0,0 +1,178 @@ +/* + * @name स्मोकपार्टिकल्स + * @description डैन शिफमैन के स्मोकपार्टिकल सिस्टम उदाहरण का एक पोर्ट मूल रूप से वर्णन करें + * प्रसंस्करण के लिए। धुएँ के रंग के कण बनाता है :p + */ + +// कण के लिए बनावट +let particle_texture = null; + +// हमारे कण प्रणाली को धारण करने वाला चर +let ps = null; + +function preload() { + particle_texture = loadImage("assets/particle_texture.png"); +} + +function setup() { + + // कैनवास का आकार निर्धारित करें + createCanvas(640, 360); + + // हमारे कण प्रणाली को इनिशियलाइज़ करें + ps = new ParticleSystem(0, createVector(width / 2, height - 60), particle_texture); +} + +function draw() { + background(0); + + let dx = map(mouseX, 0, width, -0.2, 0.2); + let wind = createVector(dx, 0); + + ps.applyForce(wind); + ps.run(); + for (let i = 0; i < 2; i++) { + ps.addParticle(); + } + + // वायु शक्ति का प्रतिनिधित्व करने वाला एक तीर खींचें + drawVector(wind, createVector(width / 2, 50, 0), 500); +} + +/** + * यह फ़ंक्शन हमारी "हवा" की दिशा को दर्शाने वाला एक तीर खींचता है। + */ +function drawVector(v, loc, scale){ + push(); + let arrowsize = 4; + translate(loc.x, loc.y); + stroke(255); + rotate(v.heading()); + + let len = v.mag() * scale; + line(0, 0, len,0); + line(len, 0, len-arrowsize, +arrowsize / 2); + line(len, 0, len-arrowsize, -arrowsize / 2); + pop(); +} +//========= कण प्रणाली ========== + +/** + * एक बुनियादी कण प्रणाली वर्ग + * @param num कणों की संख्या + * @param v कण प्रणाली की उत्पत्ति + * @param img_ सिस्टम में प्रत्येक कण के लिए एक बनावट + * @constructor + */ +let ParticleSystem = function(num, v, img_) { + + this.particles = []; + this.origin = v.copy(); // यदि हम गलती से मूल को गलती से बदल देते हैं, तो हम वेक्टर मान की प्रतिलिपि बनाना सुनिश्चित करते हैं + this.img = img_ + for(let i = 0; i < num; ++i){ + this.particles.push(new Particle(this.origin, this.img)); + } +}; + +/** + * यह फ़ंक्शन पूरे कण प्रणाली को चलाता है। + */ +ParticleSystem.prototype.run = function() { + + // उस सरणी की कैश लंबाई जिसे हम एक चर में लूप करने जा रहे हैं + // आप समय-समय पर लूप के लिए .length देख सकते हैं लेकिन + // हम इसे यहां कैश करते हैं क्योंकि अन्यथा लूप के प्रत्येक पुनरावृत्ति के लिए लंबाई की फिर से गणना की जाती है + let len = this.particles.length; + + // लूप के माध्यम से और कणों को चलाएं + for (let i = len - 1; i >= 0; i--) { + let particle = this.particles[i]; + particle.run(); + + // यदि कण मर चुका है, तो हम इसे हटा देते हैं। + // जावास्क्रिप्ट सरणियों में "निकालें" फ़ंक्शन नहीं है, लेकिन "स्प्लिस" भी काम करता है। + // हम इसे शुरू करने के लिए एक सूचकांक खिलाते हैं, फिर उस बिंदु से कितनी संख्या को निकालना है। + if (particle.isDead()) { + this.particles.splice(i, 1); + } + } +} + +/** + * सिस्टम में वर्तमान में मौजूद सभी कणों में एक बल वेक्टर जोड़ने की विधि + * @param dir a p5.बल की दिशा का वर्णन करने वाला सदिश। + */ +ParticleSystem.prototype.applyForce = function(dir) { + let len = this.particles.length; + for(let i = 0; i < len; ++i){ + this.particles[i].applyForce(dir); + } +} + +/** + * सिस्टम के मूल में और साथ में सिस्टम में एक नया कण जोड़ता है + * मूल रूप से सेट बनावट। + */ +ParticleSystem.prototype.addParticle = function() { + this.particles.push(new Particle(this.origin, this.img)); +} + +//========= कण ========== +/** + * एक साधारण कण वर्ग, कण को एक छवि के रूप में प्रस्तुत करता है + */ +let Particle = function (pos, img_) { + this.loc = pos.copy(); + + let vx = randomGaussian() * 0.3; + let vy = randomGaussian() * 0.3 - 1.0; + + this.vel = createVector(vx, vy); + this.acc = createVector(); + this.lifespan = 100.0; + this.texture = img_; +} + +// साथ ही एक कण को अपडेट और प्रदर्शित करें। +Particle.prototype.run = function() { + this.update(); + this.render(); +} + +/** + * एक कण प्रदर्शित करने के लिए एक समारोह + */ +Particle.prototype.render = function() { + imageMode(CENTER); + tint(255, this.lifespan); + image(this.texture, this.loc.x, this.loc.y); +} + +/** + * किसी कण पर बल सदिश लगाने की एक विधि। + */ +Particle.prototype.applyForce = function(f) { + this.acc.add(f); +} + +/** + * यह विधि यह देखने के लिए जाँच करती है कि क्या कण अपने जीवन काल के अंत तक पहुँच गया है, + * यदि यह है, तो सत्य लौटाएँ, अन्यथा असत्य लौटाएँ। + */ +Particle.prototype.isDead = function () { + if (this.lifespan <= 0.0) { + return true; + } else { + return false; + } +} + +/** + * यह विधि कण की स्थिति को अद्यतन करती है। + */ +Particle.prototype.update = function() { + this.vel.add(this.acc); + this.loc.add(this.vel); + this.lifespan -= 2.5; + this.acc.mult(0); +} diff --git a/src/data/examples/hi/09_Simulate/12_BrownianMotion.js b/src/data/examples/hi/09_Simulate/12_BrownianMotion.js new file mode 100755 index 0000000000..307b816bf5 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/12_BrownianMotion.js @@ -0,0 +1,45 @@ +/* + * @name ब्राउनियन मोशन + * @description एक सतत लाइन के रूप में यादृच्छिक गति को रिकॉर्ड करना। + * प्रसंस्करण उदाहरण पृष्ठ से मूल उदाहरण का पोर्ट। + */ +let num = 2000; +let range = 6; + +let ax = []; +let ay = []; + + +function setup() { + createCanvas(710, 400); + for ( let i = 0; i < num; i++ ) { + ax[i] = width / 2; + ay[i] = height / 2; + } + frameRate(30); +} + +function draw() { + background(51); + + // सभी तत्वों को 1 स्थान पर बाईं ओर शिफ्ट करें + for ( let i = 1; i < num; i++ ) { + ax[i - 1] = ax[i]; + ay[i - 1] = ay[i]; + } + + // सरणी के अंत में एक नया मान डालें + ax[num - 1] += random(-range, range); + ay[num - 1] += random(-range, range); + + // स्क्रीन पर सभी बिंदुओं को रोकें + ax[num - 1] = constrain(ax[num - 1], 0, width); + ay[num - 1] = constrain(ay[num - 1], 0, height); + + // बिंदुओं को जोड़ने वाली एक रेखा खींचें + for ( let j = 1; j < num; j++ ) { + let val = j / num * 204.0 + 51; + stroke(val); + line(ax[j - 1], ay[j - 1], ax[j], ay[j]); + } +} \ No newline at end of file diff --git a/src/data/examples/hi/09_Simulate/13_Chain.js b/src/data/examples/hi/09_Simulate/13_Chain.js new file mode 100644 index 0000000000..63cfc80984 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/13_Chain.js @@ -0,0 +1,55 @@ +/* + * @name चैन + * @description एक द्रव्यमान माउस की स्थिति से जुड़ा होता है और दूसरा दूसरे द्रव्यमान की स्थिति से जुड़ा होता है। वातावरण में गुरुत्वाकर्षण दोनों को नीचे खींचता है। + * प्रसंस्करण उदाहरण पृष्ठ से पोर्ट किया गया। + */ +let s1, s2; +let gravity = 9.0; +let mass = 2.0; + +function setup() { + createCanvas(720, 400); + fill(255, 126); + // इनपुट: x, y, द्रव्यमान, गुरुत्वाकर्षण + s1 = new Spring2D(0.0, width / 2, mass, gravity); + s2 = new Spring2D(0.0, width / 2, mass, gravity); +} + +function draw() { + background(0); + s1.update(mouseX, mouseY); + s1.display(mouseX, mouseY); + s2.update(s1.x, s1.y); + s2.display(s1.x, s1.y); +} + +function Spring2D(xpos, ypos, m, g) { + this.x = xpos; // x- और y-निर्देशांक + this.y = ypos; + this.vx = 0; // x- और y-अक्ष वेग + this.vy = 0; + this.mass = m; + this.gravity = g; + this.radius = 30; + this.stiffness = 0.2; + this.damping = 0.7; + + this.update = function(targetX, targetY) { + let forceX = (targetX - this.x) * this.stiffness; + let ax = forceX / this.mass; + this.vx = this.damping * (this.vx + ax); + this.x += this.vx; + let forceY = (targetY - this.y) * this.stiffness; + forceY += this.gravity; + let ay = forceY / this.mass; + this.vy = this.damping * (this.vy + ay); + this.y += this.vy; + } + + this.display = function(nx, ny) { + noStroke(); + ellipse(this.x, this.y, this.radius * 2, this.radius * 2); + stroke(255); + line(this.x, this.y, nx, ny); + } +} \ No newline at end of file diff --git a/src/data/examples/hi/09_Simulate/14_SnowflakeParticleSystem.js b/src/data/examples/hi/09_Simulate/14_SnowflakeParticleSystem.js new file mode 100755 index 0000000000..192a7b72b0 --- /dev/null +++ b/src/data/examples/hi/09_Simulate/14_SnowflakeParticleSystem.js @@ -0,0 +1,63 @@ +/* + * @name स्नोफ्लेक्स + * @description पार्टिकल सिस्टम बर्फ के टुकड़े गिरने की गति का अनुकरण करता है। + * स्नोफ्लेक कणों को धारण करने के लिए वस्तुओं की एक सरणी का उपयोग करता है। + * आतिश भाटिया द्वारा योगदान दिया गया। + */ + +let snowflakes = []; // स्नोफ्लेक वस्तुओं को रखने के लिए सरणी + +function setup() { + createCanvas(400, 600); + fill(240); + noStroke(); +} + +function draw() { + background('brown'); + let t = frameCount / 60; // समय सुधारें + + // प्रत्येक फ्रेम में यादृच्छिक संख्या में स्नोफ्लेक्स बनाएं + for (let i = 0; i < random(5); i++) { + snowflakes.push(new snowflake()); // स्नोफ्लेक ऑब्जेक्ट संलग्न करें + } + + // लूप के लिए स्नोफ्लेक्स के माध्यम से लूप के लिए लूप + for (let flake of snowflakes) { + flake.update(t); // स्नोफ्लेक स्थिति अपडेट करें + flake.display(); // स्नोफ्लेक ड्रा करें + } +} + +// स्नोफ्लेक क्लास +function snowflake() { + // निर्देशांक आरंभ करें + this.posX = 0; + this.posY = random(-50, 0); + this.initialangle = random(0, 2 * PI); + this.size = random(2, 5); + + // स्नोफ्लेक सर्पिल की त्रिज्या + // चुना गया ताकि बर्फ के टुकड़े समान रूप से क्षेत्र में फैले हों + this.radius = sqrt(random(pow(width / 2, 2))); + + this.update = function(time) { + // x स्थिति एक सर्कल का अनुसरण करती है + let w = 0.6; // कोणीय गति + let angle = w * time + this.initialangle; + this.posX = width / 2 + this.radius * sin(angle); + + // अलग-अलग आकार के बर्फ के टुकड़े थोड़े अलग y गति से गिरते हैं + this.posY += pow(this.size, 0.5); + + // स्क्रीन के पिछले छोर पर बर्फ के टुकड़े को हटा दें + if (this.posY > height) { + let index = snowflakes.indexOf(this); + snowflakes.splice(index, 1); + } + }; + + this.display = function() { + ellipse(this.posX, this.posY, this.size); + }; +} diff --git a/src/data/examples/hi/09_Simulate/15_penrose_tiles.js b/src/data/examples/hi/09_Simulate/15_penrose_tiles.js new file mode 100644 index 0000000000..b911fea01a --- /dev/null +++ b/src/data/examples/hi/09_Simulate/15_penrose_tiles.js @@ -0,0 +1,125 @@ +/* + * @name पेनरोज़ टाइलें + * @frame 710,400 + * @description यह प्रोसेसिंग.org/examples से "पेनरोज़ टाइल" उदाहरण के डेविड ब्लिट्ज का एक पोर्ट है + */ + +let ds; + +function setup() { + createCanvas(710, 400); + ds = new PenroseLSystem(); + // कृपया, निम्न पंक्ति के साथ खेलें + ds.simulate(5); +} + +function draw() { + background(0); + ds.render(); +} + +function PenroseLSystem() { + this.steps = 0; + + // ये पेनरोज़ रोम्बस एल-सिस्टम के लिए स्वयंसिद्ध और नियम हैं + // एक संदर्भ अच्छा होगा, लेकिन मुझे एक अच्छा नहीं मिला + this.axiom = "[X]++[X]++[X]++[X]++[X]"; + this.ruleW = "YF++ZF----XF[-YF----WF]++"; + this.ruleX = "+YF--ZF[---WF--XF]+"; + this.ruleY = "-WF++XF[+++YF++ZF]-"; + this.ruleZ = "--YF++++WF[+ZF++++XF]--XF"; + + // कृपया निम्नलिखित दो पंक्तियों के साथ खेलें + this.startLength = 460.0; + this.theta = TWO_PI / 10.0; // 36 डिग्री, TWO_PI / 6.0 आज़माएं, ... + this.reset(); +} + +PenroseLSystem.prototype.simulate = function (gen) { + while (this.getAge() < gen) { + this.iterate(this.production); + } +} + +PenroseLSystem.prototype.reset = function () { + this.production = this.axiom; + this.drawLength = this.startLength; + this.generations = 0; + } + +PenroseLSystem.prototype.getAge = function () { + return this.generations; + } + +// उत्पादन स्ट्रिंग का नया पुनरावृत्ति बनाने के लिए प्रतिस्थापन नियम लागू करें +PenroseLSystem.prototype.iterate = function() { + let newProduction = ""; + + for(let i=0; i < this.production.length; ++i) { + let step = this.production.charAt(i); + // यदि वर्तमान वर्ण 'W' है, तो वर्तमान वर्ण को बदलें + // संबंधित नियम के अनुसार + if (step == 'W') { + newProduction = newProduction + this.ruleW; + } + else if (step == 'X') { + newProduction = newProduction + this.ruleX; + } + else if (step == 'Y') { + newProduction = newProduction + this.ruleY; + } + else if (step == 'Z') { + newProduction = newProduction + this.ruleZ; + } + else { + // सभी 'एफ' वर्णों को छोड़ दें, अन्य को स्पर्श न करें + // वर्ण (यानी '+', '-', '[', ']' + if (step != 'F') { + newProduction = newProduction + step; + } + } + } + + this.drawLength = this.drawLength * 0.5; + this.generations++; + this.production = newProduction; +} + +// प्रोडक्शन स्ट्रिंग को टर्टल ग्राफिक में बदलें +PenroseLSystem.prototype.render = function () { + translate(width / 2, height / 2); + + this.steps += 20; + if(this.steps > this.production.length) { + this.steps = this.production.length; + } + + for(let i=0; iरिकर्सिव ट्री उदाहरण पर आधारित। + */ +let theta; + +function setup() { + createCanvas(710, 400); +} + +function draw() { + background(0); + frameRate(30); + stroke(255); + // आइए माउस की स्थिति के आधार पर 0 से 90 डिग्री का कोण चुनें + let a = (mouseX / width) * 90; + // इसे रेडियन में बदलें + theta = radians(a); + // स्क्रीन के नीचे से पेड़ शुरू करें + translate(width/2,height); + // 120 पिक्सल की एक लाइन बनाएं + line(0,0,0,-120); + // उस लाइन के अंत में जाएँ + translate(0,-120); + // रिकर्सिव ब्रांचिंग शुरू करें! + branch(120); + +} + +function branch(h) { + // प्रत्येक शाखा पिछले एक के आकार का 2/3 होगा + h *= 0.66; + + // सभी पुनरावर्ती कार्यों में बाहर निकलने की स्थिति होनी चाहिए !!!! + // यहाँ, हमारा है जब शाखा की लंबाई 2 पिक्सेल या उससे कम है + if (h > 2) { + push(); // परिवर्तन की वर्तमान स्थिति को बचाएं (अर्थात अब हम कहां हैं) + rotate(theta); // थीटा द्वारा घुमाएं + line(0, 0, 0, -h); // शाखा ड्रा करें + translate(0, -h); // शाखा के अंत में ले जाएँ + branch(h); // ठीक है, अब दो नई शाखाएँ बनाने के लिए खुद को बुलाएँ !! + pop(); // जब भी हम यहां वापस आते हैं, तो हम पिछली मैट्रिक्स स्थिति को पुनर्स्थापित करने के लिए "पॉप" करते हैं + + // एक ही बात दोहराएं, इस बार केवल "बाईं ओर" शाखा बंद करें! + push(); + rotate(-theta); + line(0, 0, 0, -h); + translate(0, -h); + branch(h); + pop(); + } +} diff --git a/src/data/examples/hi/09_Simulate/17_Mandelbrot.js b/src/data/examples/hi/09_Simulate/17_Mandelbrot.js new file mode 100644 index 0000000000..b775652b5e --- /dev/null +++ b/src/data/examples/hi/09_Simulate/17_Mandelbrot.js @@ -0,0 +1,86 @@ +/* + * @name मंडेलब्रॉट सेत + * @description मैंडलब्रॉट सेट का सरल प्रतिपादन। + * प्रोसेसिंग के लिए डेनियल शिफमैन के Mandelbrot उदाहरण पर आधारित। + */ + +function setup() { + createCanvas(710, 400); + pixelDensity(1); + noLoop(); +} + +function draw() { + background(0); + + // जटिल तल पर मूल्यों की एक श्रृंखला स्थापित करें + // एक अलग रेंज हमें फ्रैक्टल पर "ज़ूम" करने की अनुमति देगा + + // यह सब चौड़ाई से शुरू होता है, उच्च या निम्न मानों का प्रयास करें + const w = 4; + const h = (w * height) / width; + + // चौड़ाई और ऊंचाई के नकारात्मक आधे से शुरू करें + const xmin = -w/2; + const ymin = -h/2; + + // सुनिश्चित करें कि हम पिक्सल [] सरणी में लिख सकते हैं। + // केवल एक बार ऐसा करने की आवश्यकता है क्योंकि हम कोई अन्य ड्राइंग नहीं करते हैं। + loadPixels(); + + // जटिल विमान पर प्रत्येक बिंदु के लिए पुनरावृत्तियों की अधिकतम संख्या + const maxiterations = 100; + + // x xmin से xmax तक जाता है + const xmax = xmin + w; + // y ymin से ymax . तक जाता है + const ymax = ymin + h; + + // गणना करें कि हम प्रत्येक पिक्सेल के लिए x, y में वृद्धि करते हैं + const dx = (xmax - xmin) / (width); + const dy = (ymax - ymin) / (height); + + // प्रारंभ करें + let y = ymin; + for (let j = 0; j < height; j++) { + // एक्स शुरू करें + let x = xmin; + for (let i = 0; i < width; i++) { + + // अब हम परीक्षण करते हैं, जैसा कि हम z = z^2 + cm को पुनरावृत्त करते हैं, क्या z अनंत की ओर जाता है? + let a = x; + let b = y; + let n = 0; + while (n < maxiterations) { + const aa = a * a; + const bb = b * b; + const twoab = 2.0 * a * b; + a = aa - bb + x; + b = twoab + y; + // हमारी सीमित दुनिया में अनंत सरल है, आइए इसे 16 . पर विचार करें + if (dist(aa, bb, 0, 0) > 16) { + break; // टूटना + } + n++; + } + + // हम प्रत्येक पिक्सेल को इस आधार पर रंगते हैं कि अनंत तक पहुंचने में कितना समय लगता है + // अगर हम वहां कभी नहीं पहुंचे, तो आइए काले रंग को चुनें + const pix = (i+j*width)*4; + const norm = map(n, 0, maxiterations, 0, 1); + let bright = map(sqrt(norm), 0, 1, 0, 255); + if (n == maxiterations) { + bright = 0; + } else { + // भगवान, अगर हम चाहते तो हम यहाँ फैंसी रंग बना सकते थे + pixels[pix + 0] = bright; + pixels[pix + 1] = bright; + pixels[pix + 2] = bright; + pixels[pix + 3] = 255; + } + x += dx; + } + y += dy; + } + updatePixels(); +} diff --git a/src/data/examples/hi/09_Simulate/18_Koch.js b/src/data/examples/hi/09_Simulate/18_Koch.js new file mode 100644 index 0000000000..a6dd65a99a --- /dev/null +++ b/src/data/examples/hi/09_Simulate/18_Koch.js @@ -0,0 +1,140 @@ +/* + * @name कोच कर्व + * @description एक साधारण फ्रैक्टल, कोच स्नोफ्लेक प्रस्तुत करता है। प्रत्येक पुनरावर्ती स्तर क्रम में तैयार किया गया है। + * डैनियल शिफमैन द्वारा + */ +let k; + +function setup() { + createCanvas(710, 400); + frameRate(1); // धीरे-धीरे चेतन करें + k = new KochFractal(); +} + +function draw() { + background(0); + // बर्फ के टुकड़े खींचता है! + k.render(); + // पुनरावृति + k.nextLevel(); + // आइए इसे 5 बार से अधिक न करें। . . + if (k.getCount() > 5) { + k.restart(); + } +} + +// भग्न में एक रेखा खंड का वर्णन करने के लिए एक वर्ग +// कोच एल्गोरिथ्म के अनुसार लाइन के साथ midp5.Vectors की गणना करने के तरीके शामिल हैं + +class KochLine { + constructor(a,b) { + // दो p5.Vectors, + // प्रारंभ "बाएं" p5 है। वेक्टर और + // अंत "सही p5.Vector" है + this.start = a.copy(); + this.end = b.copy(); + } + + display() { + stroke(255); + line(this.start.x, this.start.y, this.end.x, this.end.y); + } + + kochA() { + return this.start.copy(); + } + + // यह आसान है, रास्ते का सिर्फ 1/3 + kochB() { + let v = p5.Vector.sub(this.end, this.start); + v.div(3); + v.add(this.start); + return v; + } + + // अधिक जटिल, यह पता लगाने के लिए थोड़ा ट्रिगर का उपयोग करना होगा कि यह p5.Vector कहाँ है! + kochC() { + let a = this.start.copy(); // शुरुआत में शुरू करें + let v = p5.Vector.sub(this.end, this.start); + v.div(3); + a.add(v); // बिंदु बी पर ले जाएँ + v.rotate(-PI/3); // 60 डिग्री घुमाएँate + a.add(v); // बिंदु C . पर जाएँ + return a; + } + + // आसान, रास्ते का सिर्फ 2/3 + kochD() { + let v = p5.Vector.sub(this.end, this.start); + v.mult(2/3.0); + v.add(this.start); + return v; + } + + kochE() { + return this.end.copy(); + } +} + +// स्नोफ्लेक पैटर्न में लाइन सेगमेंट की सूची को प्रबंधित करने के लिए एक वर्ग + +class KochFractal { + constructor() { + this.start = createVector(0,height-20); // एक p5. शुरुआत के लिए वेक्टर + this.end = createVector(width,height-20); // एक p5। अंत के लिए वेक्टर + this.lines = []; // सभी लाइनों का ट्रैक रखने के लिए एक सरणी + this.count = 0; + this.restart(); + } + + nextLevel() { + // प्रत्येक पंक्ति के लिए जो सरणी सूची में है + // एक नई सरणी सूची में 4 और लाइनें बनाएं + this.lines = this.iterate(this.lines); + this.count++; + } + + restart() { + this.count = 0; // रीसेट गिनती + this.lines = []; // सरणी सूची खाली करें + this.lines.push(new KochLine(this.start,this.end)); // प्रारंभिक पंक्ति जोड़ें (एक छोर p5.Vector से दूसरे तक) + } + + getCount() { + return this.count; + } + + // यह आसान है, बस सभी रेखाएँ खींचें + render() { + for(let i = 0; i < this.lines.length; i++) { + this.lines[i].display(); + } + } + + // यहां जादू पैदा होता है + // चरण 1: एक खाली सरणी सूची बनाएं + // चरण 2: वर्तमान में सरणी सूची में प्रत्येक पंक्ति के लिए + // - कोच एल्गोरिथम के आधार पर 4 लाइन सेगमेंट की गणना करें + // - सभी 4 लाइन सेगमेंट को नई सरणी सूची में जोड़ें + // चरण 3: नई सरणी सूची लौटाएं और यह संरचना के लिए रेखा खंडों की सूची बन जाती है + + // जैसा कि हम इसे बार-बार करते हैं, प्रत्येक पंक्ति 4 पंक्तियों में टूट जाती है, जो 4 पंक्तियों में टूट जाती है, और इसी तरह। . . + iterate(before) { + let now = []; // खाली सूची बनाएं + for(let i = 0; i < this.lines.length; i++) { + let l = this.lines[i]; + // 5 koch p5.Vectors की गणना करें (लाइन ऑब्जेक्ट द्वारा हमारे लिए किया गया) + let a = l.kochA(); + let b = l.kochB(); + let c = l.kochC(); + let d = l.kochD(); + let e = l.kochE(); + // सभी p5.Vectors के बीच लाइन सेगमेंट बनाएं और उन्हें जोड़ें + now.push(new KochLine(a,b)); + now.push(new KochLine(b,c)); + now.push(new KochLine(c,d)); + now.push(new KochLine(d,e)); + } + return now; + } +} diff --git a/src/data/examples/hi/09_Simulate/19_Bubblesort.js b/src/data/examples/hi/09_Simulate/19_Bubblesort.js new file mode 100644 index 0000000000..a3ce18d07a --- /dev/null +++ b/src/data/examples/hi/09_Simulate/19_Bubblesort.js @@ -0,0 +1,67 @@ +/* + * @name बबल सॉर्ट + * @description बेतरतीब ढंग से वितरित बार को क्रमबद्ध करता है + *ऊंचाई के अनुसार आरोही क्रम में + * पूरी छँटाई प्रक्रिया का अनुकरण करते हुए। + * द कोडिंग ट्रेन द्वारा कोडिंग चैलेंज से संदर्भ लिया। + */ + +let values = []; +let i = 0; +let j = 0; + +// सेटअप () फ़ंक्शन में बयान +// प्रोग्राम शुरू होने पर एक बार निष्पादित करें +// सरणी सेटअप () फ़ंक्शन में यादृच्छिक मानों से भरी हुई है। +function setup() { + createCanvas(720, 400); + for(let i = 0;i values[j+1]){ + values[j] = values[j+1]; + values[j+1] = temp; + } + j++; + + if(j>=values.length-i-1){ + j = 0; + i++; + } + } + else{ + noLoop(); + } + } +} + +// सिम्युलेटसॉर्टिंग () फ़ंक्शन एनिमेट करने में मदद करता है +// पूरे बबल सॉर्ट एल्गोरिथ्म +// मानों का उपयोग करके आयतों को खींचकर +// सरणी में आयत की लंबाई के रूप में। +function simulateSorting(){ + for(let i = 0;i= width || this.xPos <= 0){ + this.xSpeed*=-1; + } + } +} + +function setup() { + createCanvas(720, 400); + createP("Keep the mouse clicked").style('color','#ffffff'); + createP("to check whether the bricks").style('color','#ffffff'); + createP("are moving at same speed or not").style('color','#ffffff'); +} + +// की दो ईंटें बनाना +// रंग सफेद और काला +let brick1 = new Brick("white",100); +let brick2 = new Brick("black",250); + +// +brick1.setSpeed(); +brick2.setSpeed(); + +function draw () { + background(0); + if(mouseIsPressed){ + background(50); + } + brick1.createBrick(); + brick1.moveBrick(); + if(!mouseIsPressed){ + createBars(); + } + brick2.createBrick(); + brick2.moveBrick(); +} + +// यह फ़ंक्शन काला बनाता है और +// स्क्रीन पर सफेद पट्टियां +function createBars() { + let len = 12; + for(let i = 0;i width) + this.xSpeed*=-1; + if(this.y < 0 || this.y > height) + this.ySpeed*=-1; + this.x+=this.xSpeed; + this.y+=this.ySpeed; + } + +// यह फ़ंक्शन कनेक्शन बनाता है (लाइनें) +// कणों के बीच जो एक निश्चित दूरी से कम दूरी पर हैं + joinParticles(paraticles) { + particles.forEach(element =>{ + let dis = dist(this.x,this.y,element.x,element.y); + if(dis<85) { + stroke('rgba(255,255,255,0.04)'); + line(this.x,this.y,element.x,element.y); + } + }); + } +} + +// कई कणों को जोड़ने के लिए एक सरणी +let particles = []; + +function setup() { + createCanvas(720, 400); + for(let i = 0;i= bounds.x && + mouseX <= bounds.x + bounds.w && + mouseY >= bounds.y && + mouseY <= bounds.y + bounds.h + ) { + x += random(-5, 5); + y += random(-5, 5); + } +} diff --git a/src/data/examples/hi/10_Interaction/20_Follow1.js b/src/data/examples/hi/10_Interaction/20_Follow1.js new file mode 100644 index 0000000000..3cead9f911 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/20_Follow1.js @@ -0,0 +1,37 @@ +/* + * @name फॉलो 1 + * @frame 710,400 + * @description एक रेखा खंड को कर्सर द्वारा धकेला और खींचा जाता है। + * कीथ पीटर्स के कोड के आधार पर। + */ +let x = 100, + y = 100, + angle1 = 0.0, + segLength = 50; + +function setup() { + createCanvas(710, 400); + strokeWeight(20.0); + stroke(255, 100); +} + +function draw() { + background(0); + + dx = mouseX - x; + dy = mouseY - y; + angle1 = atan2(dy, dx); + x = mouseX - cos(angle1) * segLength; + y = mouseY - sin(angle1) * segLength; + + segment(x, y, angle1); + ellipse(x, y, 20, 20); +} + +function segment(x, y, a) { + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/21_Follow2.js b/src/data/examples/hi/10_Interaction/21_Follow2.js new file mode 100644 index 0000000000..8d14e12aeb --- /dev/null +++ b/src/data/examples/hi/10_Interaction/21_Follow2.js @@ -0,0 +1,39 @@ +/* + * @name फॉलो 2 + * @frame 710,400 + * @description दो खंडों वाली भुजा कर्सर की स्थिति का अनुसरण करती है। संबंधी + * खंडों के बीच के कोण की गणना atan2 () और स्थिति के साथ की जाती है + * sin() और cos() के साथ गणना की गई। कीथ पीटर्स के कोड के आधार पर। + */ +let x = [0, 0], + y = [0, 0], + segLength = 50; + +function setup() { + createCanvas(710, 400); + strokeWeight(20.0); + stroke(255, 100); +} + +function draw() { + background(0); + dragSegment(0, mouseX, mouseY); + dragSegment(1, x[0], y[0]); +} + +function dragSegment(i, xin, yin) { + const dx = xin - x[i]; + const dy = yin - y[i]; + const angle = atan2(dy, dx); + x[i] = xin - cos(angle) * segLength; + y[i] = yin - sin(angle) * segLength; + segment(x[i], y[i], angle); +} + +function segment(x, y, a) { + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/22_Follow3.js b/src/data/examples/hi/10_Interaction/22_Follow3.js new file mode 100644 index 0000000000..f8f91dc665 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/22_Follow3.js @@ -0,0 +1,47 @@ +/* + * @name फॉलो 3 + * @frame 710,400 + * @description एक खंडित रेखा माउस का अनुसरण करती है। से आपेक्षिक कोण + * अगले से प्रत्येक खंड की गणना atan2 () और की स्थिति के साथ की जाती है + * अगले की गणना sin() और cos() के साथ की जाती है। कीथ पीटर्स के कोड के आधार पर। + */ +let x = [], + y = [], + segNum = 20, + segLength = 18; + +for (let i = 0; i < segNum; i++) { + x[i] = 0; + y[i] = 0; +} + +function setup() { + createCanvas(710, 400); + strokeWeight(9); + stroke(255, 100); +} + +function draw() { + background(0); + dragSegment(0, mouseX, mouseY); + for (let i = 0; i < x.length - 1; i++) { + dragSegment(i + 1, x[i], y[i]); + } +} + +function dragSegment(i, xin, yin) { + const dx = xin - x[i]; + const dy = yin - y[i]; + const angle = atan2(dy, dx); + x[i] = xin - cos(angle) * segLength; + y[i] = yin - sin(angle) * segLength; + segment(x[i], y[i], angle); +} + +function segment(x, y, a) { + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/23_snake.js b/src/data/examples/hi/10_Interaction/23_snake.js new file mode 100644 index 0000000000..ddaa719564 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/23_snake.js @@ -0,0 +1,172 @@ +/* + * @name सांप का खेल + * @description प्रसिद्ध सांप का खेल! रन पर क्लिक करने के बाद, कहीं भी क्लिक करें + * काले क्षेत्र के अंदर, और i j k और l का उपयोग करके सांप को नियंत्रित करें। मत जाने दो + *सांप खुद को या दीवार से टकराया!
        + * उदाहरण प्रशांत गुप्ता द्वारा बनाया गया + */ + +// सांप को छोटे-छोटे खंडों में विभाजित किया जाता है, जिन्हें प्रत्येक 'ड्रा' कॉल पर खींचा और संपादित किया जाता है +let numSegments = 10; +let direction = 'right'; + +const xStart = 0; // सांप के लिए x निर्देशांक शुरू करना +const yStart = 250; // सांप के लिए y समन्वय शुरू करना +const diff = 10; + +let xCor = []; +let yCor = []; + +let xFruit = 0; +let yFruit = 0; +let scoreElem; + +function setup() { + scoreElem = createDiv('Score = 0'); + scoreElem.position(20, 20); + scoreElem.id = 'score'; + scoreElem.style('color', 'white'); + + createCanvas(500, 500); + frameRate(15); + stroke(255); + strokeWeight(10); + updateFruitCoordinates(); + + for (let i = 0; i < numSegments; i++) { + xCor.push(xStart + i * diff); + yCor.push(yStart); + } +} + +function draw() { + background(0); + for (let i = 0; i < numSegments - 1; i++) { + line(xCor[i], yCor[i], xCor[i + 1], yCor[i + 1]); + } + updateSnakeCoordinates(); + checkGameStatus(); + checkForFruit(); +} + +/* + साँप की दिशा के आधार पर खंडों को अद्यतन किया जाता है। + 0 से n-1 तक के सभी खंडों को 1 से n तक कॉपी किया जाता है, अर्थात खंड 0 + खंड 1 का मान प्राप्त करता है, खंड 1 को खंड 2 का मान मिलता है, और इसी तरह, + और इसके परिणामस्वरूप सांप की गति होती है। + + सांप जिस दिशा में जा रहा है, उसके आधार पर अंतिम खंड जोड़ा जाता है, + यदि यह बाएँ या दाएँ जा रहा है, तो अंतिम खंड का x निर्देशांक a . से बढ़ जाता है + इसके दूसरे से अंतिम खंड की तुलना में पूर्वनिर्धारित मान 'diff'। और अगर यह ऊपर जा रहा है + या नीचे, खंड का y निर्देशांक प्रभावित होता है। +*/ +function updateSnakeCoordinates() { + for (let i = 0; i < numSegments - 1; i++) { + xCor[i] = xCor[i + 1]; + yCor[i] = yCor[i + 1]; + } + switch (direction) { + case 'right': + xCor[numSegments - 1] = xCor[numSegments - 2] + diff; + yCor[numSegments - 1] = yCor[numSegments - 2]; + break; + case 'up': + xCor[numSegments - 1] = xCor[numSegments - 2]; + yCor[numSegments - 1] = yCor[numSegments - 2] - diff; + break; + case 'left': + xCor[numSegments - 1] = xCor[numSegments - 2] - diff; + yCor[numSegments - 1] = yCor[numSegments - 2]; + break; + case 'down': + xCor[numSegments - 1] = xCor[numSegments - 2]; + yCor[numSegments - 1] = yCor[numSegments - 2] + diff; + break; + } +} + +/* + मैं हमेशा सांप के सिर की स्थिति की जांच करता हूं xCor[xCor.length - 1] और + yCor[yCor.length - 1] यह देखने के लिए कि क्या यह खेल की सीमाओं को छूता है + या अगर सांप खुद को मारता है। +*/ +function checkGameStatus() { + if ( + xCor[xCor.length - 1] > width || + xCor[xCor.length - 1] < 0 || + yCor[yCor.length - 1] > height || + yCor[yCor.length - 1] < 0 || + checkSnakeCollision() + ) { + noLoop(); + const scoreVal = parseInt(scoreElem.html().substring(8)); + scoreElem.html('Game ended! Your score was : ' + scoreVal); + } +} + +/* + यदि सांप खुद को मारता है, तो इसका मतलब है कि सांप का सिर (x,y) समन्वय करता है + अपने स्वयं के खंड (x, y) निर्देशांक में से एक के समान होना चाहिए। +*/ +function checkSnakeCollision() { + const snakeHeadX = xCor[xCor.length - 1]; + const snakeHeadY = yCor[yCor.length - 1]; + for (let i = 0; i < xCor.length - 1; i++) { + if (xCor[i] === snakeHeadX && yCor[i] === snakeHeadY) { + return true; + } + } +} + +/* + जब भी सांप फल खाता है, मैं खंडों की संख्या बढ़ा देता हूं, + और सरणी की शुरुआत में फिर से पूंछ खंड डालें (मूल रूप से + मैं अंतिम खंड को फिर से पूंछ में जोड़ता हूं, जिससे पूंछ का विस्तार होता है) +*/ +function checkForFruit() { + point(xFruit, yFruit); + if (xCor[xCor.length - 1] === xFruit && yCor[yCor.length - 1] === yFruit) { + const prevScore = parseInt(scoreElem.html().substring(8)); + scoreElem.html('Score = ' + (prevScore + 1)); + xCor.unshift(xCor[0]); + yCor.unshift(yCor[0]); + numSegments++; + updateFruitCoordinates(); + } +} + +function updateFruitCoordinates() { + /* + जटिल गणित तर्क इसलिए है क्योंकि मैं चाहता था कि बिंदु झूठ बोलें + १०० और चौड़ाई १०० के बीच में, और निकटतम तक पूर्णांकित किया जाए + संख्या १० से विभाज्य है, क्योंकि मैं साँप को १० के गुणकों में घुमाता हूँ। + */ + + xFruit = floor(random(10, (width - 100) / 10)) * 10; + yFruit = floor(random(10, (height - 100) / 10)) * 10; +} + +function keyPressed() { + switch (keyCode) { + case 74: + if (direction !== 'right') { + direction = 'left'; + } + break; + case 76: + if (direction !== 'left') { + direction = 'right'; + } + break; + case 73: + if (direction !== 'down') { + direction = 'up'; + } + break; + case 75: + if (direction !== 'up') { + direction = 'down'; + } + break; + } +} diff --git a/src/data/examples/hi/10_Interaction/24_Wavemaker.js b/src/data/examples/hi/10_Interaction/24_Wavemaker.js new file mode 100644 index 0000000000..2e1c847268 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/24_Wavemaker.js @@ -0,0 +1,37 @@ +/* + * @name वेवमेकर + * @description यह दर्शाता है कि कैसे लहरें (जैसे पानी की लहरें) उभरती हैं + * जगह-जगह दोलन करने वाले कणों से। तरंग को निर्देशित करने के लिए अपने माउस को ले जाएं। + * डेव व्हाईट के Orbiters से प्रेरित आतिश भाटिया द्वारा योगदान दिया गया। + */ + +let t = 0; // समय चर + +function setup() { + createCanvas(600, 600); + noStroke(); + fill(40, 200, 40); +} + +function draw() { + background(10, 10); // पारभासी पृष्ठभूमि (ट्रेल्स बनाता है) + + // दीर्घवृत्त का x और y ग्रिड बनाएं + for (let x = 0; x <= width; x = x + 30) { + for (let y = 0; y <= height; y = y + 30) { + // प्रत्येक सर्कल का प्रारंभिक बिंदु माउस की स्थिति पर निर्भर करता है + const xAngle = map(mouseX, 0, width, -4 * PI, 4 * PI, true); + const yAngle = map(mouseY, 0, height, -4 * PI, 4 * PI, true); + // और कण के स्थान के आधार पर भी बदलता रहता है + const angle = xAngle * (x / width) + yAngle * (y / height); + + // प्रत्येक कण एक वृत्त में चलता है + const myX = x + 20 * cos(2 * PI * t + angle); + const myY = y + 20 * sin(2 * PI * t + angle); + + ellipse(myX, myY, 10); // कण खींचे + } + } + + t = t + 0.01; // समय सुधारें +} diff --git a/src/data/examples/hi/10_Interaction/25_reach1.js b/src/data/examples/hi/10_Interaction/25_reach1.js new file mode 100644 index 0000000000..6aac76c662 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/25_reach1.js @@ -0,0 +1,57 @@ +/* + * @name रीच 1 + * @frame 710,400 + * @description हाथ की गणना करके माउस की स्थिति का अनुसरण करता है + * atan2 () के साथ कोण। कीथ पीटर्स के कोड के आधार पर। + */ +let segLength = 80, + x, + y, + x2, + y2; + +function setup() { + createCanvas(710, 400); + strokeWeight(20); + stroke(255, 100); + + x = width / 2; + y = height / 2; + x2 = x; + y2 = y; +} + +function draw() { + background(0); + dragSegment(0, mouseX, mouseY); + for (let i = 0; i < x.length - 1; i++) { + dragSegment(i + 1, x[i], y[i]); + } +} + +function dragSegment(i, xin, yin) { + background(0); + + dx = mouseX - x; + dy = mouseY - y; + angle1 = atan2(dy, dx); + + tx = mouseX - cos(angle1) * segLength; + ty = mouseY - sin(angle1) * segLength; + dx = tx - x2; + dy = ty - y2; + angle2 = atan2(dy, dx); + x = x2 + cos(angle2) * segLength; + y = y2 + sin(angle2) * segLength; + + segment(x, y, angle1); + segment(x2, y2, angle2); +} + +function segment(x, y, a) { + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/26_reach2.js b/src/data/examples/hi/10_Interaction/26_reach2.js new file mode 100644 index 0000000000..b821b66c42 --- /dev/null +++ b/src/data/examples/hi/10_Interaction/26_reach2.js @@ -0,0 +1,65 @@ +/* + * @name रीच 2 + * @frame 710,400 + * @description हाथ की गणना करके माउस की स्थिति का अनुसरण करता है + * atan2 () के साथ कोण। कीथ पीटर्स के कोड के आधार पर। + */ +let numSegments = 10, + x = [], + y = [], + angle = [], + segLength = 26, + targetX, + targetY; + +for (let i = 0; i < numSegments; i++) { + x[i] = 0; + y[i] = 0; + angle[i] = 0; +} + +function setup() { + createCanvas(710, 400); + strokeWeight(20); + stroke(255, 100); + + x[x.length - 1] = width / 2; // बेस एक्स-कोऑर्डिनेट सेट करें + y[x.length - 1] = height; // आधार y- निर्देशांक सेट करें +} + +function draw() { + background(0); + + reachSegment(0, mouseX, mouseY); + for (let i = 1; i < numSegments; i++) { + reachSegment(i, targetX, targetY); + } + for (let j = x.length - 1; j >= 1; j--) { + positionSegment(j, j - 1); + } + for (let k = 0; k < x.length; k++) { + segment(x[k], y[k], angle[k], (k + 1) * 2); + } +} + +function positionSegment(a, b) { + x[b] = x[a] + cos(angle[a]) * segLength; + y[b] = y[a] + sin(angle[a]) * segLength; +} + +function reachSegment(i, xin, yin) { + const dx = xin - x[i]; + const dy = yin - y[i]; + angle[i] = atan2(dy, dx); + targetX = xin - cos(angle[i]) * segLength; + targetY = yin - sin(angle[i]) * segLength; +} + +function segment(x, y, a, sw) { + strokeWeight(sw); + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/27_reach3.js b/src/data/examples/hi/10_Interaction/27_reach3.js new file mode 100644 index 0000000000..d5b58c9b3c --- /dev/null +++ b/src/data/examples/hi/10_Interaction/27_reach3.js @@ -0,0 +1,81 @@ +/* + * @name पहुंच ३ + * @frame 710,400 + * @description हाथ की गणना करके गेंद की स्थिति का अनुसरण करता है + * atan2 () के साथ कोण। कीथ पीटर्स के कोड के आधार पर। + */ +let numSegments = 8, + x = [], + y = [], + angle = [], + segLength = 26, + targetX, + targetY, + ballX = 50, + ballY = 50, + ballXDirection = 1, + ballYDirection = -1; + +for (let i = 0; i < numSegments; i++) { + x[i] = 0; + y[i] = 0; + angle[i] = 0; +} + +function setup() { + createCanvas(710, 400); + strokeWeight(20); + stroke(255, 100); + noFill(); + + x[x.length - 1] = width / 2; // बेस एक्स-कोऑर्डिनेट सेट करें + y[x.length - 1] = height; // आधार y- निर्देशांक सेट करें +} + +function draw() { + background(0); + + strokeWeight(20); + ballX = ballX + 1.0 * ballXDirection; + ballY = ballY + 0.8 * ballYDirection; + if (ballX > width - 25 || ballX < 25) { + ballXDirection *= -1; + } + if (ballY > height - 25 || ballY < 25) { + ballYDirection *= -1; + } + ellipse(ballX, ballY, 30, 30); + + reachSegment(0, ballX, ballY); + for (let i = 1; i < numSegments; i++) { + reachSegment(i, targetX, targetY); + } + for (let j = x.length - 1; j >= 1; j--) { + positionSegment(j, j - 1); + } + for (let k = 0; k < x.length; k++) { + segment(x[k], y[k], angle[k], (k + 1) * 2); + } +} + +function positionSegment(a, b) { + x[b] = x[a] + cos(angle[a]) * segLength; + y[b] = y[a] + sin(angle[a]) * segLength; +} + +function reachSegment(i, xin, yin) { + const dx = xin - x[i]; + const dy = yin - y[i]; + angle[i] = atan2(dy, dx); + targetX = xin - cos(angle[i]) * segLength; + targetY = yin - sin(angle[i]) * segLength; +} + +function segment(x, y, a, sw) { + strokeWeight(sw); + push(); + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); + pop(); +} diff --git a/src/data/examples/hi/10_Interaction/28_ArduinoSensor.js b/src/data/examples/hi/10_Interaction/28_ArduinoSensor.js new file mode 100644 index 0000000000..a9f42313ec --- /dev/null +++ b/src/data/examples/hi/10_Interaction/28_ArduinoSensor.js @@ -0,0 +1,37 @@ +/* + * @name Arduino सेंसर डेटा WebJack के माध्यम से + * @description WebJack एक Arduino (और अन्य स्रोतों) से डेटा पढ़ने का एक तरीका है + * ऑडियो का उपयोग करना - यह मूल रूप से आपके Arduino को एक ऑडियो मॉडेम में बदल देता है। + * + * https://github.com/publiclab/webjack + * + * नोट: WebJack और p5-webjack लाइब्रेरी को आपके index.html में निम्नानुसार जोड़ा जाना चाहिए: + *
        <script src="https://webjack.io/dist/webjack.js"></script>
        + *
        <script src="https://jywarren.github.io/p5-webjack/lib.js"></script>
        +  *
        +  * कार्य उदाहरण: https://editor.p5js.org/jywarren/sketches/rkztwSt8M
        +  *
        +  * परीक्षण ऑडियो: https://www.youtube.com/watch?v=GtJW1Dlt3cg
        +  * इस स्केच को एक Arduino पर लोड करें:
        +  * https://create.arduino.cc/editor/jywarren/023158d8-be51-4c78-99ff-36c63126b554/preview
        +  * Arduino पिन 3 + ग्राउंड से ऑडियो आउटपुट करेगा। माइक्रोफ़ोन या ऑडियो केबल का उपयोग करें।
        +  */
        +
        +function setup() { 
        +  createCanvas(400, 400);
        +  noStroke();
        +  fill('#ff00aa22');
        +  receiveSensorData(handleData);
        +}
        +
        +function handleData(data, connection) {
        +
        +  console.log(data); // output the values to log
        +  // data[0] is the 1st value, data[1] 2nd, etc.
        +
        +  // draw stuff! Browse http://p5js.org/reference/
        +  background('#ddd');
        +  ellipse(100, 200, data[0]+10, data[0]+10);
        +
        +  // connection.send('send data back to the Arduino if its listening');
        +}
        diff --git a/src/data/examples/hi/10_Interaction/29_kaleidoscope.js b/src/data/examples/hi/10_Interaction/29_kaleidoscope.js
        new file mode 100644
        index 0000000000..700f15c810
        --- /dev/null
        +++ b/src/data/examples/hi/10_Interaction/29_kaleidoscope.js
        @@ -0,0 +1,72 @@
        +/*
        +  * @name बहुरूपदर्शक
        +  * @description एक बहुरूपदर्शक एक ऑप्टिकल उपकरण है जिसमें दो या दो से अधिक परावर्तक सतहें एक कोण में एक दूसरे की ओर झुकी होती हैं। यह उदाहरण एक बहुरूपदर्शक के व्यवहार को दोहराने का प्रयास करता है। समरूपता चर पर प्रतिबिंबों की संख्या निर्धारित करें और स्क्रीन पर चित्र बनाना शुरू करें। स्लाइडर की सहायता से ब्रश का आकार समायोजित करें। स्पष्ट स्क्रीन, जैसा कि यह कहती है, स्क्रीन को साफ़ करती है। सेव बटन आपके द्वारा बनाई गई कला की एक .jpg फ़ाइल डाउनलोड करेगा।
        +  */
        +// प्रतिबिंबों की संख्या के अनुरूप समरूपता। विभिन्न संख्या में परावर्तनों के लिए संख्या बदलें
        +let symmetry = 6;   
        +
        +let angle = 360 / symmetry;
        +let saveButton, clearButton, mouseButton, keyboardButton;
        +let slider;
        +
        +function setup() { 
        +  createCanvas(710, 710);
        +  angleMode(DEGREES);
        +  background(127);
        +
        +  // फाइल के लिए सेव बटन बनाना
        +  saveButton = createButton('save');
        +  saveButton.mousePressed(saveFile);
        +
        +  // स्पष्ट स्क्रीन बटन बनाना
        +  clearButton = createButton('clear');
        +  clearButton.mousePressed(clearScreen);
        +
        +  // पूर्ण स्क्रीन के लिए बटन बनाना
        +  fullscreenButton = createButton('Full Screen');
        +  fullscreenButton.mousePressed(screenFull);
        +
        +  // ब्रश की मोटाई के लिए स्लाइडर सेट करना
        +  brushSizeSlider = createButton('Brush Size Slider');
        +  sizeSlider = createSlider(1, 32, 4, 0.1);
        +}
        +
        +// फ़ाइल फ़ंक्शन सहेजें
        +function saveFile() {
        +  save('design.jpg');
        +}
        +
        +// साफ़ स्क्रीन फ़ंक्शन
        +function clearScreen() {
        +  background(127);
        +}
        +
        +// फुल स्क्रीन फंक्शन
        +function screenFull() {
        +  let fs = fullscreen();
        +  fullscreen(!fs);
        +}
        +
        +function draw() {
        +  translate(width / 2, height / 2);
        +
        +  if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
        +    let mx = mouseX - width / 2;
        +    let my = mouseY - height / 2;
        +    let pmx = pmouseX - width / 2;
        +    let pmy = pmouseY - height / 2;
        +    
        +    if (mouseIsPressed) {
        +      for (let i = 0; i < symmetry; i++) {
        +        rotate(angle);
        +        let sw = sizeSlider.value();
        +        strokeWeight(sw);
        +        line(mx, my, pmx, pmy);
        +        push();
        +        scale(1, -1);
        +        line(mx, my, pmx, pmy);
        +        pop();
        +      }
        +    }
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/01_Objects.js b/src/data/examples/hi/11_Objects/01_Objects.js
        new file mode 100644
        index 0000000000..bed1f8973e
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/01_Objects.js
        @@ -0,0 +1,39 @@
        +/*
        +  * @name वस्तु
        +  * @description एक जिटर क्लास बनाएं, किसी ऑब्जेक्ट को इंस्टेंट करें,
        +  * और इसे स्क्रीन के चारों ओर ले जाएँ। के साथ आरंभ करने से अनुकूलित
        +  * केसी रियास और बेन फ्राई द्वारा प्रसंस्करण।
        +  */
        +
        +let bug; // ऑब्जेक्ट घोषित करें
        +
        +function setup() {
        +  createCanvas(710, 400);
        +  // ऑब्जेक्ट बनाएं
        +  bug = new Jitter();
        +}
        +
        +function draw() {
        +  background(50, 89, 100);
        +  bug.move();
        +  bug.display();
        +}
        +
        +// Jitter class
        +class Jitter {
        +  constructor() {
        +    this.x = random(width);
        +    this.y = random(height);
        +    this.diameter = random(10, 30);
        +    this.speed = 1;
        +  }
        +
        +  move() {
        +    this.x += random(-this.speed, this.speed);
        +    this.y += random(-this.speed, this.speed);
        +  }
        +
        +  display() {
        +    ellipse(this.x, this.y, this.diameter, this.diameter);
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/02_Multiple_Objects.js b/src/data/examples/hi/11_Objects/02_Multiple_Objects.js
        new file mode 100644
        index 0000000000..0f2e561ca3
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/02_Multiple_Objects.js
        @@ -0,0 +1,50 @@
        +/*
        +  * @name वस्तुओं का नाम दें
        +  * @description एक जिटर क्लास बनाएं, कई ऑब्जेक्ट्स को इंस्टेंट करें,
        +  * और इसे स्क्रीन के चारों ओर ले जाएँ।
        +  */
        +
        +let bug1; // वस्तुओं की घोषणा करें
        +let bug2;
        +let bug3;
        +let bug4;
        +
        +function setup() {
        +  createCanvas(710, 400);
        +  // ऑब्जेक्ट बनाएं
        +  bug1 = new Jitter();
        +  bug2 = new Jitter();
        +  bug3 = new Jitter();
        +  bug4 = new Jitter();
        +}
        +
        +function draw() {
        +  background(50, 89, 100);
        +  bug1.move();
        +  bug1.display();
        +  bug2.move();
        +  bug2.display();
        +  bug3.move();
        +  bug3.display();
        +  bug4.move();
        +  bug4.display();
        +}
        +
        +// जिटर क्लास
        +class Jitter {
        +  constructor() {
        +    this.x = random(width);
        +    this.y = random(height);
        +    this.diameter = random(10, 30);
        +    this.speed = 1;
        +  }
        +
        +  move() {
        +    this.x += random(-this.speed, this.speed);
        +    this.y += random(-this.speed, this.speed);
        +  }
        +
        +  display() {
        +    ellipse(this.x, this.y, this.diameter, this.diameter);
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/03_Objects_Array.js b/src/data/examples/hi/11_Objects/03_Objects_Array.js
        new file mode 100644
        index 0000000000..92a979d22e
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/03_Objects_Array.js
        @@ -0,0 +1,42 @@
        +/*
        +  * @name वस्तुओं की सरणी
        +  * @description एक जिटर क्लास बनाएं, वस्तुओं की एक सरणी को इंस्टेंट करें
        +  * और उन्हें स्क्रीन के चारों ओर ले जाएँ।
        +  */
        +
        +let bugs = []; // जिटर ऑब्जेक्ट्स की सरणी
        +
        +function setup() {
        +  createCanvas(710, 400);
        +  // ऑब्जेक्ट बनाएं
        +  for (let i = 0; i < 50; i++) {
        +    bugs.push(new Jitter());
        +  }
        +}
        +
        +function draw() {
        +  background(50, 89, 100);
        +  for (let i = 0; i < bugs.length; i++) {
        +    bugs[i].move();
        +    bugs[i].display();
        +  }
        +}
        +
        +// जिटर क्लास
        +class Jitter {
        +  constructor() {
        +    this.x = random(width);
        +    this.y = random(height);
        +    this.diameter = random(10, 30);
        +    this.speed = 1;
        +  }
        +
        +  move() {
        +    this.x += random(-this.speed, this.speed);
        +    this.y += random(-this.speed, this.speed);
        +  }
        +
        +  display() {
        +    ellipse(this.x, this.y, this.diameter, this.diameter);
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/03_Objects_Optional_Arguments.js b/src/data/examples/hi/11_Objects/03_Objects_Optional_Arguments.js
        new file mode 100644
        index 0000000000..79a2de8448
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/03_Objects_Optional_Arguments.js
        @@ -0,0 +1,65 @@
        +/*
        +  * @name वस्तु 2
        +  * @description उदाहरण के लिए hbarragan द्वारा पोर्ट किया गया। कर्सर को इसके पार ले जाएँ
        +  * छवि ज्यामिति की गति और स्थिति को बदलने के लिए। कक्षा MRect
        +  * लाइनों के समूह को परिभाषित करता है।
        +  */
        +
        +let r1, r2, r3, r4;
        +
        +function setup() {
        +  createCanvas(710, 400);
        +  fill(255, 204);
        +  noStroke();
        +  r1 = new MRect(1, 134.0, 0.532, 0.1 * height, 10.0, 60.0);
        +  r2 = new MRect(2, 44.0, 0.166, 0.3 * height, 5.0, 50.0);
        +  r3 = new MRect(2, 58.0, 0.332, 0.4 * height, 10.0, 35.0);
        +  r4 = new MRect(1, 120.0, 0.0498, 0.9 * height, 15.0, 60.0);
        +}
        +
        +function draw() {
        +  background(0);
        +
        +  r1.display();
        +  r2.display();
        +  r3.display();
        +  r4.display();
        +
        +  r1.move(mouseX - width / 2, mouseY + height * 0.1, 30);
        +  r2.move((mouseX + width * 0.05) % width, mouseY + height * 0.025, 20);
        +  r3.move(mouseX / 4, mouseY - height * 0.025, 40);
        +  r4.move(mouseX - width / 2, height - mouseY, 50);
        +}
        +
        +class MRect {
        +  constructor(iw, ixp, ih, iyp, id, it) {
        +    this.w = iw; // सिंगल बार चौड़ाई
        +    this.xpos = ixp; // रेक्ट एक्सपोजिशन
        +    this.h = ih; // रेक्ट ऊंचाई
        +    this.ypos = iyp; // रेक्ट योपोजिशन
        +    this.d = id; // सिंगल बार दूरी
        +    this.t = it; // बार की संख्या
        +  }
        +
        +  move(posX, posY, damping) {
        +    let dif = this.ypos - posY;
        +    if (abs(dif) > 1) {
        +      this.ypos -= dif / damping;
        +    }
        +    dif = this.xpos - posX;
        +    if (abs(dif) > 1) {
        +      this.xpos -= dif / damping;
        +    }
        +  }
        +
        +  display() {
        +    for (let i = 0; i < this.t; i++) {
        +      rect(
        +        this.xpos + i * (this.d + this.w),
        +        this.ypos,
        +        this.w,
        +        height * this.h
        +      );
        +    }
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/04_Inheritance.js b/src/data/examples/hi/11_Objects/04_Inheritance.js
        new file mode 100644
        index 0000000000..9fddbcd0e9
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/04_Inheritance.js
        @@ -0,0 +1,71 @@
        +/*  @name वंशानुक्रम
        +  * @description एक वर्ग को दूसरे वर्ग का उपयोग करके परिभाषित किया जा सकता है a
        +  * नींव। वस्तु-उन्मुख प्रोग्रामिंग शब्दावली में, एक वर्ग कर सकता है
        +  * फ़ील्ड और विधियों को दूसरे से प्राप्त करें। एक वस्तु जो विरासत में मिलती है
        +  * दूसरे को उपवर्ग कहा जाता है, और जिस वस्तु से इसे विरासत में मिला है उसे कहा जाता है
        +  * एक सुपरक्लास। एक उपवर्ग सुपरक्लास का विस्तार करता है।
        +  */
        +let spots, arm;
        +
        +function setup() {
        +  createCanvas(640, 360);
        +  arm = new SpinArm(width/2, height/2, 0.01);
        +  spots = new SpinSpots(width/2, height/2, -0.02, 90.0);
        +}
        +
        +function draw() {
        +  background(204);
        +  arm.update();
        +  arm.display();
        +  spots.update();
        +  spots.display();
        +}
        +
        +class SpinArm {
        +  constructor(x, y, s) {
        +    this.x = x;
        +    this.y = y;
        +    this.speed = s;
        +    this.angle = 0.0;
        +  }
        +
        +  update() {
        +    this.angle += this.speed;
        +  }
        +
        +  display() {
        +    strokeWeight(1);
        +    stroke(0);
        +    push();
        +    translate(this.x, this.y);
        +    this.angle += this.speed;
        +    rotate(this.angle);
        +    line(0, 0, 165, 0);
        +    pop();
        +  }
        +}
        +
        +class SpinSpots {
        +  constructor(x, y, s, d) {
        +    this.x = x;
        +    this.y = y;
        +    this.speed = s;
        +    this.dim = d;
        +    this.angle = 0.0;
        +  }
        +
        +  update() {
        +    this.angle += this.speed;
        +  }
        +
        +  display() {
        +    noStroke();
        +    push();
        +    translate(this.x, this.y);
        +    this.angle += this.speed;
        +    rotate(this.angle);
        +    ellipse(-this.dim/2, 0, this.dim, this.dim);
        +    ellipse(this.dim/2, 0, this.dim, this.dim);
        +    pop();
        +  }
        +}
        diff --git a/src/data/examples/hi/11_Objects/05_Composite_Objects.js b/src/data/examples/hi/11_Objects/05_Composite_Objects.js
        new file mode 100644
        index 0000000000..f13f7df52f
        --- /dev/null
        +++ b/src/data/examples/hi/11_Objects/05_Composite_Objects.js
        @@ -0,0 +1,99 @@
        +/*  @name समग्र वस्तु
        +  * @description एक ऑब्जेक्ट में कई अन्य ऑब्जेक्ट शामिल हो सकते हैं।
        +  * इस तरह की मिश्रित वस्तुओं का निर्माण सिद्धांतों का उपयोग करने का एक अच्छा तरीका है
        +  * प्रतिरूपकता और एक कार्यक्रम के भीतर अमूर्तता के उच्च स्तर का निर्माण।
        +  */
        +let er1, er2;
        +
        +function setup() {
        +  createCanvas(640, 360);
        +  er1 = new EggRing(width*0.45, height*0.5, 0.1, 120);
        +  er2 = new EggRing(width*0.65, height*0.8, 0.05, 180);
        +}
        +
        +function draw() {
        +  background(0);
        +  er1.transmit();
        +  er2.transmit();
        +}
        +
        +class Egg {
        +  constructor(xpos, ypos, t, s) {
        +    this.x = xpos;
        +    this.y = ypos;
        +    this.tilt = t;
        +    this.scalar = s / 100.0;
        +    this.angle = 0.0;
        +  }
        +
        +  wobble() {
        +    this.tilt = cos(this.angle) / 8;
        +    this.angle += 0.1;
        +  }
        +
        +  display() {
        +    noStroke();
        +    fill(255);
        +    push();
        +    translate(this.x, this.y);
        +    rotate(this.tilt);
        +    scale(this.scalar);
        +    beginShape();
        +    vertex(0, -100);
        +    bezierVertex(25, -100, 40, -65, 40, -40);
        +    bezierVertex(40, -15, 25, 0, 0, 0);
        +    bezierVertex(-25, 0, -40, -15, -40, -40);
        +    bezierVertex(-40, -65, -25, -100, 0, -100);
        +    endShape();
        +    pop();
        +  }
        +}
        +
        +class Ring {
        +  start(xpos, ypos) {
        +    this.x = xpos;
        +    this.y = ypos;
        +    this.on = true;
        +    this.diameter = 1;
        +  }
        +
        +  grow() {
        +    if (this.on == true) {
        +      this.diameter += 0.5;
        +      if (this.diameter > width*2) {
        +        this.diameter = 0.0;
        +      }
        +    }
        +  }
        +
        +  display() {
        +    if (this.on == true) {
        +      noFill();
        +      strokeWeight(4);
        +      stroke(155, 153);
        +      ellipse(this.x, this.y, this.diameter, this.diameter);
        +    }
        +  }
        +}
        +
        +class EggRing {
        +  constructor(x, y, t, sp) {
        +    this.x = x;
        +    this.y = y;
        +    this.t = t;
        +    this.sp = sp;
        +    this.circle = new Ring();
        +    this.ovoid = new Egg(this.x, this.y, this.t, this.sp);
        +    this.circle.start(this.x, this.y - this.sp/2);
        +  }
        +
        +  transmit() {
        +    this.ovoid.wobble();
        +    this.ovoid.display();
        +    this.circle.grow();
        +    this.circle.display();
        +    if (circle.on == false) {
        +      circle.on = true;
        +    }
        +  }
        +}
        diff --git a/src/data/examples/hi/12_Lights/02_Directional.js b/src/data/examples/hi/12_Lights/02_Directional.js
        new file mode 100755
        index 0000000000..d3c6242edc
        --- /dev/null
        +++ b/src/data/examples/hi/12_Lights/02_Directional.js
        @@ -0,0 +1,27 @@
        +/*
        +  * @name दिशात्मक
        +  * @frame 710,400
        +  * @description प्रकाश की दिशा बदलने के लिए माउस ले जाएँ।
        +  * दिशात्मक प्रकाश एक दिशा से आता है और हिट करने पर मजबूत होता है
        +  * सतह वर्गाकार और कमजोर अगर यह एक कोमल कोण से टकराती है। मारने के बाद
        +  * सतह, एक दिशात्मक प्रकाश सभी दिशाओं में बिखरता है।
        +  */
        +const radius = 200;
        +
        +function setup() {
        +  createCanvas(710, 400, WEBGL);
        +  noStroke();
        +  fill(200);
        +}
        +
        +function draw() {
        +  noStroke();
        +  background(0);
        +  const dirY = (mouseY / height - 0.5) * 4;
        +  const dirX = (mouseX / width - 0.5) * 4;
        +  directionalLight(204, 204, 204, dirX, dirY, 1);
        +  translate(-1.5 * radius, 0, 0);
        +  sphere(radius);
        +  translate(3 * radius, 0, 0);
        +  sphere(radius);
        +}
        diff --git a/src/data/examples/hi/12_Lights/05_Mixture.js b/src/data/examples/hi/12_Lights/05_Mixture.js
        new file mode 100644
        index 0000000000..2b99d66f1f
        --- /dev/null
        +++ b/src/data/examples/hi/12_Lights/05_Mixture.js
        @@ -0,0 +1,26 @@
        +/*
        +  * @name मिश्रण
        +  * @frame 710,400 (वैकल्पिक)
        +  * @description तीन अलग-अलग प्रकार की रोशनी वाला एक बॉक्स प्रदर्शित करें।
        +  */
        +function setup() {
        +  createCanvas(710, 400, WEBGL);
        +  noStroke();
        +}
        +
        +function draw() {
        +  background(0);
        +
        +  // दाईं ओर नारंगी बिंदु प्रकाश
        +  pointLight(150, 100, 0, 500, 0, 200);
        +
        +  // बाईं ओर से नीली दिशात्मक रोशनी
        +  directionalLight(0, 102, 255, -1, 0, 0);
        +
        +  // सामने से पीला स्पॉटलाइट
        +  pointLight(255, 255, 109, 0, 0, 300);
        +
        +  rotateY(map(mouseX, 0, width, 0, PI));
        +  rotateX(map(mouseY, 0, height, 0, PI));
        +  box(200);
        +}
        diff --git a/src/data/examples/hi/13_Motion/01_non_orthogonal_reflection.js b/src/data/examples/hi/13_Motion/01_non_orthogonal_reflection.js
        new file mode 100644
        index 0000000000..ac8f5cfc29
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/01_non_orthogonal_reflection.js
        @@ -0,0 +1,110 @@
        +/*
        +  * @name नॉन ऑर्थोगोनल रिफ्लेक्शन
        +  * @frame 710,400 (वैकल्पिक)
        +  * @description यह प्रोसेसिंग.org/examples से "प्रतिबिंब 1" उदाहरण के डेविड ब्लिट्ज का एक पोर्ट है
        +  */
        +
        +// फर्श के बाएं हाथ की स्थिति
        +let base1;
        +
        +// फर्श के दाहिने हाथ की स्थिति
        +let base2;
        +// फर्श की लंबाई
        +// बेसलेंथ दें;
        +
        +// चलती गेंद से संबंधित चर
        +let position;
        +let velocity;
        +let r = 6;
        +let speed = 3.5;
        +
        +function setup() {
        +  createCanvas(710, 400);
        +
        +  fill(128);
        +  base1 = createVector(0, height - 150);
        +  base2 = createVector(width, height);
        +   //createGround();
        +
        +   // स्क्रीन के मध्य शीर्ष पर अंडाकार प्रारंभ करें
        +  position = createVector(width / 2, 0);
        +
        +  // प्रारंभिक यादृच्छिक वेग की गणना करें
        +  velocity = p5.Vector.random2D();
        +  velocity.mult(speed);
        +}
        +
        +function draw() {
        +  // ड्रा बैकग्राउंड
        +  fill(0, 12);
        +  noStroke();
        +  rect(0, 0, width, height);
        +
        +  // ड्रा बेस
        +  fill(200);
        +  quad(base1.x, base1.y, base2.x, base2.y, base2.x, height, 0, height);
        +
        +  // बेस टॉप नॉर्मल की गणना करें
        +  let baseDelta = p5.Vector.sub(base2, base1);
        +  baseDelta.normalize();
        +  let normal = createVector(-baseDelta.y, baseDelta.x);
        +  let intercept = p5.Vector.dot(base1, normal);
        +
        +  // दीर्घवृत्त खींचें
        +  noStroke();
        +  fill(255);
        +  ellipse(position.x, position.y, r * 2, r * 2);
        +
        +  // दीर्घवृत्त ले जाएँ
        +  position.add(velocity);
        +
        +  // सामान्यीकृत घटना वेक्टर
        +  incidence = p5.Vector.mult(velocity, -1);
        +  incidence.normalize();
        +
        +  // बेस के साथ टकराव का पता लगाएं और संभालें
        +  if (p5.Vector.dot(normal, position) > intercept) {
        +    // घटना वेक्टर और बेस टॉप के डॉट उत्पाद की गणना करें
        +    let dot = incidence.dot(normal);
        +
        +    // प्रतिबिंब वेक्टर की गणना करें
        +    // दिशा वेक्टर को प्रतिबिंब वेक्टर असाइन करें
        +    velocity.set(
        +      2 * normal.x * dot - incidence.x,
        +      2 * normal.y * dot - incidence.y,
        +      0
        +    );
        +    velocity.mult(speed);
        +
        +    // टकराव बिंदु पर आधार शीर्ष सामान्य बनाएं
        +    stroke(255, 128, 0);
        +    line(
        +      position.x,
        +      position.y,
        +      position.x - normal.x * 100,
        +      position.y - normal.y * 100
        +    );
        +  }
        +  //}
        +
        +  // सीमा टकराव का पता लगाएं
        +  // सही
        +  if (position.x > width - r) {
        +    position.x = width - r;
        +    velocity.x *= -1;
        +  }
        +  // बाएं
        +  if (position.x < r) {
        +    position.x = r;
        +    velocity.x *= -1;
        +  }
        +  // ऊपर
        +  if (position.y < r) {
        +    position.y = r;
        +    velocity.y *= -1;
        +
        +    // बेस टॉप को रैंडमाइज करें
        +    base1.y = random(height - 100, height);
        +    base2.y = random(height - 100, height);
        +  }
        +}
        diff --git a/src/data/examples/hi/13_Motion/02_Linear_Motion.js b/src/data/examples/hi/13_Motion/02_Linear_Motion.js
        new file mode 100644
        index 0000000000..bd57d50460
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/02_Linear_Motion.js
        @@ -0,0 +1,24 @@
        +/*
        +  * @name रैखिक
        +  * @frame 720,400
        +  * @description मूविंग लाइन बनाने के लिए वेरिएबल को बदलना।
        +  * जब रेखा खिड़की के किनारे से हटती है,
        +  * वेरिएबल को 0 पर सेट किया जाता है, जो लाइन को स्क्रीन के निचले हिस्से में वापस रखता है।
        +  */
        +
        +let a;
        +
        +function setup() {
        +  createCanvas(720, 400);
        +  stroke(255);
        +  a = height / 2;
        +}
        +
        +function draw() {
        +  background(51);
        +  line(0, a, width, a);
        +  a = a - 0.5;
        +  if (a < 0) {
        +    a = height;
        +  }
        +}
        diff --git a/src/data/examples/hi/13_Motion/03_Bounce.js b/src/data/examples/hi/13_Motion/03_Bounce.js
        new file mode 100644
        index 0000000000..7b7f678f88
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/03_Bounce.js
        @@ -0,0 +1,44 @@
        +/*
        +  * @name उछाल
        +  * @frame 720,400
        +  * @description जब आकृति खिड़की के किनारे से टकराती है, तो वह अपनी दिशा उलट देती है।
        +  */
        +
        +let rad = 60; // आकार की चौड़ाई
        +let xpos, ypos; // आकार की प्रारंभिक स्थिति
        +
        +let xspeed = 2.8; // आकार की गति
        +let yspeed = 2.2; // आकार की गति
        +
        +let xdirection = 1; // बायें या दायें
        +let ydirection = 1; // ऊपर से नीचे
        +
        +function setup() {
        +  createCanvas(720, 400);
        +  noStroke();
        +  frameRate(30);
        +  ellipseMode(RADIUS);
        +  // आकृति की प्रारंभिक स्थिति निर्धारित करें
        +  xpos = width / 2;
        +  ypos = height / 2;
        +}
        +
        +function draw() {
        +  background(102);
        +
        +  // आकृति की स्थिति को अपडेट करें
        +  xpos = xpos + xspeed * xdirection;
        +  ypos = ypos + yspeed * ydirection;
        +
        +   // यह देखने के लिए परीक्षण करें कि क्या आकार स्क्रीन की सीमाओं से अधिक है
        +   // यदि ऐसा होता है, तो -1 . से गुणा करके इसकी दिशा उलट दें
        +  if (xpos > width - rad || xpos < rad) {
        +    xdirection *= -1;
        +  }
        +  if (ypos > height - rad || ypos < rad) {
        +    ydirection *= -1;
        +  }
        +
        +  // आकृति बनाएं
        +  ellipse(xpos, ypos, rad, rad);
        +}
        diff --git a/src/data/examples/hi/13_Motion/04_Bouncy_Bubbles.js b/src/data/examples/hi/13_Motion/04_Bouncy_Bubbles.js
        new file mode 100644
        index 0000000000..6fa76833fc
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/04_Bouncy_Bubbles.js
        @@ -0,0 +1,95 @@
        +/*
        +  * @name उछाल वाले बुलबुले
        +  * @frame 720,400
        +  * @description कीथ पीटर्स के कोड पर आधारित विवरण। एकाधिक-वस्तु टकराव ..
        +  */
        +
        +let numBalls = 13;
        +let spring = 0.05;
        +let gravity = 0.03;
        +let friction = -0.9;
        +let balls = [];
        +
        +function setup() {
        +  createCanvas(720, 400);
        +  for (let i = 0; i < numBalls; i++) {
        +    balls[i] = new Ball(
        +      random(width),
        +      random(height),
        +      random(30, 70),
        +      i,
        +      balls
        +    );
        +  }
        +  noStroke();
        +  fill(255, 204);
        +}
        +
        +function draw() {
        +  background(0);
        +  balls.forEach(ball => {
        +    ball.collide();
        +    ball.move();
        +    ball.display();
        +  });
        +}
        +
        +class Ball {
        +  constructor(xin, yin, din, idin, oin) {
        +    this.x = xin;
        +    this.y = yin;
        +    this.vx = 0;
        +    this.vy = 0;
        +    this.diameter = din;
        +    this.id = idin;
        +    this.others = oin;
        +  }
        +
        +  collide() {
        +    for (let i = this.id + 1; i < numBalls; i++) {
        +      // कंसोल.लॉग (अन्य [i]);
        +      let dx = this.others[i].x - this.x;
        +      let dy = this.others[i].y - this.y;
        +      let distance = sqrt(dx * dx + dy * dy);
        +      let minDist = this.others[i].diameter / 2 + this.diameter / 2;
        +       // कंसोल.लॉग (दूरी);
        +       // कंसोल.लॉग (मिनडिस्ट);
        +      if (distance < minDist) {
        +        // कंसोल.लॉग ("2");
        +        let angle = atan2(dy, dx);
        +        let targetX = this.x + cos(angle) * minDist;
        +        let targetY = this.y + sin(angle) * minDist;
        +        let ax = (targetX - this.others[i].x) * spring;
        +        let ay = (targetY - this.others[i].y) * spring;
        +        this.vx -= ax;
        +        this.vy -= ay;
        +        this.others[i].vx += ax;
        +        this.others[i].vy += ay;
        +      }
        +    }
        +  }
        +
        +  move() {
        +    this.vy += gravity;
        +    this.x += this.vx;
        +    this.y += this.vy;
        +    if (this.x + this.diameter / 2 > width) {
        +      this.x = width - this.diameter / 2;
        +      this.vx *= friction;
        +    } else if (this.x - this.diameter / 2 < 0) {
        +      this.x = this.diameter / 2;
        +      this.vx *= friction;
        +    }
        +    if (this.y + this.diameter / 2 > height) {
        +      this.y = height - this.diameter / 2;
        +      this.vy *= friction;
        +    } else if (this.y - this.diameter / 2 < 0) {
        +      this.y = this.diameter / 2;
        +      this.vy *= friction;
        +    }
        +  }
        +
        +  display() {
        +    ellipse(this.x, this.y, this.diameter, this.diameter);
        +  }
        +}
        diff --git a/src/data/examples/hi/13_Motion/05_Morph.js b/src/data/examples/hi/13_Motion/05_Morph.js
        new file mode 100644
        index 0000000000..cca26800e3
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/05_Morph.js
        @@ -0,0 +1,93 @@
        +/*
        +  * @name मॉर्फ
        +  * @frame 720,400
        +  * @description शीर्षों को एक से दूसरे में प्रक्षेपित करके एक आकृति को दूसरी आकृति में बदलना।
        +  */
        +
        +// दो ऐरेलिस्ट दो आकृतियों के लिए कोने को स्टोर करने के लिए
        +// यह उदाहरण मानता है कि प्रत्येक आकृति में समान होगा
        +// कोने की संख्या, यानी प्रत्येक ArrayList का आकार समान होगा
        +let circle = [];
        +let square = [];
        +
        +// एक तीसरे सेट के लिए एक ऐरेलिस्ट, जिसे हम चित्रित करेंगे
        +// खिड़की में
        +let morph = [];
        +
        +// यह बूलियन चर नियंत्रित करेगा यदि हम किसी वृत्त या वर्ग में रूपांतरित कर रहे हैं
        +let state = false;
        +
        +function setup() {
        +  createCanvas(720, 400);
        +
        +// केंद्र से इंगित करने वाले वैक्टर का उपयोग करके एक सर्कल बनाएं
        +  for (let angle = 0; angle < 360; angle += 9) {
        +    // ध्यान दें कि मिलान करने के लिए हम 0 से शुरू नहीं कर रहे हैं
        +     // एक सर्कल का पथ।
        +    let v = p5.Vector.fromAngle(radians(angle - 135));
        +    v.mult(100);
        +    circle.push(v);
        +    // जब हम इस पर होते हैं तो खाली PVectors के साथ morph ArrayList को भरते हैं
        +    morph.push(createVector());
        +  }
        +
        +   // एक वर्ग सीधी रेखाओं के साथ कोने का एक गुच्छा है
        +   // वर्ग के ऊपर
        +  for (let x = -50; x < 50; x += 10) {
        +    square.push(createVector(x, -50));
        +  }
        +  // दाईं ओर
        +  for (let y = -50; y < 50; y += 10) {
        +    square.push(createVector(50, y));
        +  }
        +  // तल
        +  for (let x = 50; x > -50; x -= 10) {
        +    square.push(createVector(x, 50));
        +  }
        +  // बाईं तरफ
        +  for (let y = 50; y > -50; y -= 10) {
        +    square.push(createVector(-50, y));
        +  }
        +}
        +
        +function draw() {
        +  background(51);
        +
        +  // हम रखेंगे कि उनके लक्ष्य से कोने कितनी दूर हैं
        +  let totalDistance = 0;
        +
        +  // प्रत्येक शीर्ष को देखें
        +  for (let i = 0; i < circle.length; i++) {
        +    let v1;
        +    // क्या हम वृत्त या वर्ग की ओर झुक रहे हैं?
        +    if (state) {
        +      v1 = circle[i];
        +    } else {
        +      v1 = square[i];
        +    }
        +    // वह शीर्ष प्राप्त करें जिसे हम खींचेंगे
        +    let v2 = morph[i];
        +    // लक्ष्य के लिए Lerp
        +    v2.lerp(v1, 0.1);
        +    // जांचें कि हम लक्ष्य से कितनी दूर हैं
        +    totalDistance += p5.Vector.dist(v1, v2);
        +  }
        +
        +  // यदि सभी कोने करीब हैं, तो आकार बदलें
        +  if (totalDistance < 0.1) {
        +    state = !state;
        +  }
        +
        +  // केंद्र के सापेक्ष ड्रा करें
        +  translate(width / 2, height / 2);
        +  strokeWeight(4);
        +  // एक बहुभुज बनाएं जो सभी शीर्षों को बनाता है
        +  beginShape();
        +  noFill();
        +  stroke(255);
        +
        +  morph.forEach(v => {
        +    vertex(v.x, v.y);
        +  });
        +  endShape(CLOSE);
        +}
        diff --git a/src/data/examples/hi/13_Motion/06_Moving_On_Curves.js b/src/data/examples/hi/13_Motion/06_Moving_On_Curves.js
        new file mode 100644
        index 0000000000..8d8c22bfd4
        --- /dev/null
        +++ b/src/data/examples/hi/13_Motion/06_Moving_On_Curves.js
        @@ -0,0 +1,47 @@
        +/*
        +  * @name मूविंग ऑन कर्व्स
        +  * @frame 720,400
        +  * @description इस उदाहरण में, वृत्त वक्र y = x^4 के अनुदिश चलते हैं।
        +  * माउस को नई स्थिति में ले जाने के लिए उस पर क्लिक करें।
        +  */
        +
        +let beginX = 20.0; // वर्तमान x-निर्देशांक
        +let beginY = 10.0; // प्रारंभिक y-निर्देशांक
        +let endX = 570.0; // वर्तमान x-निर्देशांक
        +let endY = 320.0; // अंतिम y-निर्देशांक
        +let distX; // एक्स-अक्ष दूरी को स्थानांतरित करने के लिए
        +let distY; // वाई-अक्ष दूरी को स्थानांतरित करने के लिए
        +let exponent = 4; // वक्र निर्धारित करता है
        +let x = 0.0; // वर्तमान x-निर्देशांक
        +let y = 0.0; // वर्तमान y-निर्देशांक
        +let step = 0.01; // पथ के साथ प्रत्येक चरण का आकार
        +let pct = 0.0; // यात्रा का प्रतिशत (0.0 से 1.0)
        +
        +function setup() {
        +  createCanvas(720, 400);
        +  noStroke();
        +  distX = endX - beginX;
        +  distY = endY - beginY;
        +}
        +
        +function draw() {
        +  fill(0, 2);
        +  rect(0, 0, width, height);
        +  pct += step;
        +  if (pct < 1.0) {
        +    x = beginX + pct * distX;
        +    y = beginY + pow(pct, exponent) * distY;
        +  }
        +  fill(255);
        +  ellipse(x, y, 20, 20);
        +}
        +
        +function mousePressed() {
        +  pct = 0.0;
        +  beginX = x;
        +  beginY = y;
        +  endX = mouseX;
        +  endY = mouseY;
        +  distX = endX - beginX;
        +  distY = endY - beginY;
        +}
        diff --git a/src/data/examples/hi/15_Instance_Mode/01_Instantiating.js b/src/data/examples/hi/15_Instance_Mode/01_Instantiating.js
        new file mode 100644
        index 0000000000..1b779c4742
        --- /dev/null
        +++ b/src/data/examples/hi/15_Instance_Mode/01_Instantiating.js
        @@ -0,0 +1,35 @@
        +/*
        +  * @name इंस्टेंटेशन
        +  * @description एक p5 इंस्टेंस बनाएं, जो सभी वेरिएबल को बनाए रखता है
        +  * आपके पेज के वैश्विक दायरे से बाहर।
        +  */
        +let sketch = function(p) {
        +  let x = 100;
        +  let y = 100;
        +
        +  p.setup = function() {
        +    p.createCanvas(700, 410);
        +  };
        +
        +  p.draw = function() {
        +    p.background(0);
        +    p.fill(255);
        +    p.rect(x, y, 50, 50);
        +  };
        +};
        +
        +let myp5 = new p5(sketch);
        +
        +// Compare to "global mode"
        +// let x = 100;
        +// let y = 100;
        +
        +// function setup() {
        +//   createCanvas(200,200);
        +// }
        +
        +// function draw() {
        +//   background(0);
        +//   fill(255);
        +//   ellipse(x,y,50,50);
        +// }
        diff --git a/src/data/examples/hi/15_Instance_Mode/02_Instance_Container.js b/src/data/examples/hi/15_Instance_Mode/02_Instance_Container.js
        new file mode 100644
        index 0000000000..a20622ef84
        --- /dev/null
        +++ b/src/data/examples/hi/15_Instance_Mode/02_Instance_Container.js
        @@ -0,0 +1,94 @@
        +/*
        +  * @norender
        +  * @name इंस्टेंस कंटेनर
        +  * @description वैकल्पिक रूप से, आप कैनवास के लिए एक डिफ़ॉल्ट कंटेनर निर्दिष्ट कर सकते हैं
        +  * और किसी अन्य तत्व को दूसरे तर्क के साथ जोड़ने के लिए। आप दे सकते हैं
        +  * आपके html में किसी तत्व की आईडी, या स्वयं एक html नोड।
        +  *
        +  * कंटेनर चुनने के लिए यहां तीन अलग-अलग विकल्प दिए गए हैं
        +  * डोम तत्व। p5 द्वारा बनाए गए सभी DOM तत्व (कैनवास, बटन, डिव, आदि)
        +  * को दूसरे तर्क के रूप में निर्दिष्ट DOM तत्व से जोड़ा जाएगा
        +  * p5 () कॉल।
        +  */
        +
        +
        +
        +  
        +
        +
        +  
        + + + + + + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/data/examples/hi/16_Dom/03_Input_Button.js b/src/data/examples/hi/16_Dom/03_Input_Button.js new file mode 100644 index 0000000000..0af112c0f5 --- /dev/null +++ b/src/data/examples/hi/16_Dom/03_Input_Button.js @@ -0,0 +1,41 @@ +/* + * @name इनपुट और बटन + * @description आपको शामिल करना होगा + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + * इनपुट टेक्स्ट और यह देखने के लिए बटन पर क्लिक करें कि यह कैनवास को प्रभावित करता है। + */ +let input, button, greeting; + +function setup() { + // कैनवास बनाएं + createCanvas(710, 400); + + input = createInput(); + input.position(20, 65); + + button = createButton('submit'); + button.position(input.x + input.width, 65); + button.mousePressed(greet); + + greeting = createElement('h2', 'what is your name?'); + greeting.position(20, 5); + + textAlign(CENTER); + textSize(50); +} + +function greet() { + const name = input.value(); + greeting.html('hello ' + name + '!'); + input.value(''); + + for (let i = 0; i < 200; i++) { + push(); + fill(random(255), 255, 255); + translate(random(width), random(height)); + rotate(random(2 * PI)); + text(name, 0, 0); + pop(); + } +} diff --git a/src/data/examples/hi/16_Dom/04_Slider.js b/src/data/examples/hi/16_Dom/04_Slider.js new file mode 100644 index 0000000000..a952164025 --- /dev/null +++ b/src/data/examples/hi/16_Dom/04_Slider.js @@ -0,0 +1,33 @@ +/* + * @name स्लाइडर + * @description आपको शामिल करना होगा + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + * पृष्ठभूमि के आर, जी, बी मूल्यों को नियंत्रित करने के लिए स्लाइडर्स को स्थानांतरित करें। + */ +let rSlider, gSlider, bSlider; + +function setup() { + // create canvas + createCanvas(710, 400); + textSize(15); + noStroke(); + + // create sliders + rSlider = createSlider(0, 255, 100); + rSlider.position(20, 20); + gSlider = createSlider(0, 255, 0); + gSlider.position(20, 50); + bSlider = createSlider(0, 255, 255); + bSlider.position(20, 80); +} + +function draw() { + const r = rSlider.value(); + const g = gSlider.value(); + const b = bSlider.value(); + background(r, g, b); + text('red', rSlider.x * 2 + rSlider.width, 35); + text('green', gSlider.x * 2 + gSlider.width, 65); + text('blue', bSlider.x * 2 + bSlider.width, 95); +} diff --git a/src/data/examples/hi/16_Dom/07_Modify_DOM.js b/src/data/examples/hi/16_Dom/07_Modify_DOM.js new file mode 100644 index 0000000000..8bbc81cabb --- /dev/null +++ b/src/data/examples/hi/16_Dom/07_Modify_DOM.js @@ -0,0 +1,56 @@ +/* + * @name डोम को संशोधित करना + * @frame 710,300 + * @description

        DOM एलिमेंट बनाएं और हर बार उनके गुणों को संशोधित करें + * draw() कहा जाता है। आपको शामिल करने की आवश्यकता होगी + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + */ +let dancingWords = []; + +class DanceSpan { + constructor(element, x, y) { + element.position(x, y); + this.element = element; + this.x = x; + this.y = y; + } + + brownian() { + this.x += random(-6, 6); + this.y += random(-6, 6); + this.element.position(this.x, this.y); + } +} + +function setup() { + // यह पैराग्राफ कोड के मुख्य ब्लॉक से अलग बनाया गया है। + // यह किसी तत्व के निर्माण को उसके . से अलग करना है + // चयन। चयनित तत्वों को बनाने की आवश्यकता नहीं है + // p5js, वे सिर्फ सादा HTML हो सकते हैं। + createP( + 'I learn in this Letter, that Don Peter of Aragon, ' + + ' comes this night to Messina' + ).addClass('text').hide(); + + // यह लाइन अभी बनाए गए पैराग्राफ को पकड़ लेती है, लेकिन यह but + // HTML में वर्ग 'पाठ' के साथ किसी अन्य तत्व को भी पकड़ें + // पृष्ठ। + const texts = selectAll('.text'); + + for (let i = 0; i < texts.length; i++) { + const paragraph = texts[i].html(); + const words = paragraph.split(' '); + for (let j = 0; j < words.length; j++) { + const spannedWord = createSpan(words[j]); + const dw = new DanceSpan(spannedWord, random(600), random(200)); + dancingWords.push(dw); + } + } +} + +function draw() { + for (let i = 0; i < dancingWords.length; i++) { + dancingWords[i].brownian(); + } +} diff --git a/src/data/examples/hi/16_Dom/08_Video.js b/src/data/examples/hi/16_Dom/08_Video.js new file mode 100644 index 0000000000..fb0c95966d --- /dev/null +++ b/src/data/examples/hi/16_Dom/08_Video.js @@ -0,0 +1,32 @@ +/* + * @name वीडियो + * @frame 710,250 + * @description

        एक वीडियो को कई फ़ॉर्मैट में लोड करें और खेलने के बीच टॉगल करें + * और एक बटन प्रेस के साथ रुक गया। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको कम से कम की आवश्यकता होगी + * एक वीडियो फ़ाइल, और + * p5.dom लाइब्रेरी

        + */ +let playing = false; +let fingers; +let button; + +function setup() { + noCanvas(); + // specify multiple formats for different browsers + fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); + button = createButton('play'); + button.mousePressed(toggleVid); // attach button listener +} + +// plays or pauses the video depending on current state +function toggleVid() { + if (playing) { + fingers.pause(); + button.html('play'); + } else { + fingers.loop(); + button.html('pause'); + } + playing = !playing; +} diff --git a/src/data/examples/hi/16_Dom/09_Video_Canvas.js b/src/data/examples/hi/16_Dom/09_Video_Canvas.js new file mode 100644 index 0000000000..a6e8a0854d --- /dev/null +++ b/src/data/examples/hi/16_Dom/09_Video_Canvas.js @@ -0,0 +1,28 @@ +/* + * @name वीडियो कैनवास + * @description

        एक वीडियो को कई फ़ॉर्मैट में लोड करें और उसे कैनवास पर ड्रा करें।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.dom लाइब्रेरी + * कम से कम एक वीडियो फ़ाइल, और एक चालू स्थानीय सर्वर + */ +let fingers; + +function setup() { + createCanvas(710, 400); + // विभिन्न ब्राउज़रों के लिए कई प्रारूप निर्दिष्ट करें + fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); + fingers.hide(); // डिफ़ॉल्ट रूप से वीडियो अलग डोम में दिखाई देता है + // तत्व। इसे छुपाएं और इसे कैनवास पर खींचें + // बजाय +} + +function draw() { + background(150); + image(fingers, 10, 10); // वीडियो फ्रेम को कैनवास पर ड्रा करें + filter(GRAY); + image(fingers, 150, 150); // कैनवास पर दूसरी कॉपी बनाएं +} + +function mousePressed() { + fingers.loop(); // वीडियो को लूप में सेट करें और खेलना शुरू करें +} diff --git a/src/data/examples/hi/16_Dom/10_Video_Pixels.js b/src/data/examples/hi/16_Dom/10_Video_Pixels.js new file mode 100644 index 0000000000..05d323e875 --- /dev/null +++ b/src/data/examples/hi/16_Dom/10_Video_Pixels.js @@ -0,0 +1,33 @@ +/* + * @name वीडियो पिक्सल + * @frame 320,240 + * @description

        वीडियो लोड करें, उसके पिक्सल में हेरफेर करें और कैनवास पर ड्रा करें। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.dom लाइब्रेरी + * कम से कम एक वीडियो फ़ाइल, और एक चालू स्थानीय सर्वर + */ +let fingers; + +function setup() { + createCanvas(320, 240); + // specify multiple formats for different browsers + fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); + fingers.loop(); + fingers.hide(); + noStroke(); + fill(0); +} + +function draw() { + background(255); + fingers.loadPixels(); + const stepSize = round(constrain(mouseX / 8, 6, 32)); + for (let y = 0; y < height; y += stepSize) { + for (let x = 0; x < width; x += stepSize) { + const i = y * width + x; + const darkness = (255 - fingers.pixels[i * 4]) / 255; + const radius = stepSize * darkness; + ellipse(x, y, radius, radius); + } + } +} diff --git a/src/data/examples/hi/16_Dom/11_Capture.js b/src/data/examples/hi/16_Dom/11_Capture.js new file mode 100644 index 0000000000..43d1a84590 --- /dev/null +++ b/src/data/examples/hi/16_Dom/11_Capture.js @@ -0,0 +1,25 @@ +/* + * @name वीडियो कैप्चर + * @frame 710,240 + * @description

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.dom लाइब्रेरी + * कम से कम एक वीडियो फ़ाइल, और एक चालू स्थानीय सर्वर

        + * वेबकैम से वीडियो कैप्चर करें और प्रदर्शित करें + * कैनवास पर और साथ ही इनवर्ट फिल्टर के साथ। ध्यान दें कि द्वारा + * डिफॉल्ट कैप्चर फीड भी दिखाई देता है। आप छुपा सकते हैं + * capture.hide() लाइन को अनकम्मेंट करके फीड करें। + */ +let capture; + +function setup() { + createCanvas(390, 240); + capture = createCapture(VIDEO); + capture.size(320, 240); + //capture.hide(); +} + +function draw() { + background(255); + image(capture, 0, 0, 320, 240); + filter(INVERT); +} diff --git a/src/data/examples/hi/16_Dom/12_Drop.js b/src/data/examples/hi/16_Dom/12_Drop.js new file mode 100644 index 0000000000..b60a3d4fa3 --- /dev/null +++ b/src/data/examples/hi/16_Dom/12_Drop.js @@ -0,0 +1,36 @@ +/* + * @name छोड़ देना + * @description आपको शामिल करना होगा + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + * एक छवि फ़ाइल को प्रदर्शित करने के लिए उसे कैनवास पर खींचें। + */ + +function setup() { + // कैनवास बनाएं + const c = createCanvas(710, 400); + background(100); + // जब कोई फ़ाइल कैनवास पर गिराई जाती है, तो उसके लिए एक ईवेंट जोड़ें + c.drop(gotFile); +} + +function draw() { + fill(255); + noStroke(); + textSize(24); + textAlign(CENTER); + text('Drag an image file onto the canvas.', width / 2, height / 2); + noLoop(); +} + +function gotFile(file) { + // यदि यह एक छवि फ़ाइल है + if (file.type === 'image') { + // एक छवि DOM तत्व बनाएं, लेकिन इसे न दिखाएं + const img = createImg(file.data).hide(); + // कैनवास पर चित्र बनाएं + image(img, 0, 0, width, height); + } else { + console.log('Not an image file!'); + } +} diff --git a/src/data/examples/hi/17_Drawing/00_Continuous_Lines.js b/src/data/examples/hi/17_Drawing/00_Continuous_Lines.js new file mode 100644 index 0000000000..242a7ccf9a --- /dev/null +++ b/src/data/examples/hi/17_Drawing/00_Continuous_Lines.js @@ -0,0 +1,15 @@ +/* +* @name सतत रेखा +* @description एक रेखा खींचने के लिए माउस को क्लिक करें और खींचें। +*/ +function setup() { + createCanvas(710, 400); + background(102); +} + +function draw() { + stroke(255); + if (mouseIsPressed === true) { + line(mouseX, mouseY, pmouseX, pmouseY); + } +} diff --git a/src/data/examples/hi/17_Drawing/01_Pattern.js b/src/data/examples/hi/17_Drawing/01_Pattern.js new file mode 100644 index 0000000000..baef5d6f14 --- /dev/null +++ b/src/data/examples/hi/17_Drawing/01_Pattern.js @@ -0,0 +1,27 @@ +/* + * @name पैटर्न + * @description सॉफ़्टवेयर टूल से चित्र बनाने के लिए कर्सर को छवि पर ले जाएं + * जो माउस की गति के प्रति प्रतिक्रिया करता है। + */ +function setup() { + createCanvas(710, 400); + background(102); +} + +function draw() { + // variableEllipse() विधि को कॉल करें और इसे भेजें + // वर्तमान माउस स्थिति के लिए पैरामीटर + // और पिछली माउस स्थिति + variableEllipse(mouseX, mouseY, pmouseX, pmouseY); +} + +// सरल विधि variableEllipse() विशेष रूप से बनाई गई थी +// इस कार्यक्रम के लिए। यह माउस की गति की गणना करता है +// और यदि माउस धीरे-धीरे आगे बढ़ रहा है तो एक छोटा दीर्घवृत्त खींचता है +// और यदि माउस तेजी से आगे बढ़ रहा है तो एक बड़ा दीर्घवृत्त खींचता है + +function variableEllipse(x, y, px, py) { + let speed = abs(x - px) + abs(y - py); + stroke(speed); + ellipse(x, y, speed, speed); +} diff --git a/src/data/examples/hi/17_Drawing/02_Pulses.js b/src/data/examples/hi/17_Drawing/02_Pulses.js new file mode 100644 index 0000000000..6ac965a816 --- /dev/null +++ b/src/data/examples/hi/17_Drawing/02_Pulses.js @@ -0,0 +1,31 @@ +/* + * @name दालें + * @description सॉफ्टवेयर ड्राइंग इंस्ट्रूमेंट्स एक लय का अनुसरण कर सकते हैं या इसका पालन कर सकते हैं + * खींचे गए इशारों से स्वतंत्र नियम। यह सहयोगी आरेखण का एक रूप है + * जिसमें ड्राफ्ट्सपर्सन इमेज और सॉफ्टवेयर के कुछ पहलुओं को नियंत्रित करता है + *दूसरों को नियंत्रित करता है। + */ +let angle = 0; + +function setup() { + createCanvas(710, 400); + background(102); + noStroke(); + fill(0, 102); +} + +function draw() { + // तभी ड्रा करें जब माउस दबाया जाए + if (mouseIsPressed === true) { + angle += 5; + let val = cos(radians(angle)) * 12.0; + for (let a = 0; a < 360; a += 75) { + let xoff = cos(radians(a)) * val; + let yoff = sin(radians(a)) * val; + fill(0); + ellipse(mouseX + xoff, mouseY + yoff, val, val); + } + fill(255); + ellipse(mouseX, mouseY, 2, 2); + } +} diff --git a/src/data/examples/hi/18_Transform/00_Translate.js b/src/data/examples/hi/18_Transform/00_Translate.js new file mode 100644 index 0000000000..4284790624 --- /dev/null +++ b/src/data/examples/hi/18_Transform/00_Translate.js @@ -0,0 +1,39 @@ +/* + * @name अनुवाद + * @description translate() फ़ंक्शन वस्तुओं को होने की अनुमति देता है + * खिड़की के भीतर किसी भी स्थान पर ले जाया गया। पहला पैरामीटर + * एक्स-अक्ष ऑफसेट सेट करता है और दूसरा पैरामीटर सेट करता है + * वाई-अक्ष ऑफसेट। यह उदाहरण दिखाता है कि परिवर्तन कैसे जमा होते हैं। + */ +let x = 0; +let y = 0; +let dim = 80.0; + +function setup() { + createCanvas(720, 400); + noStroke(); +} + +function draw() { + background(102); + // Animate by increasing our x value + x = x + 0.8; + // If the shape goes off the canvas, reset the position + if (x > width + dim) { + x = -dim; + } + + // Even though our rect command draws the shape with its + // center at the origin, translate moves it to the new + // x and y position + translate(x, height / 2 - dim / 2); + fill(255); + rect(-dim / 2, -dim / 2, dim, dim); + + // Transforms accumulate. Notice how this rect moves + // twice as fast as the other, but it has the same + // parameter for the x-axis value + translate(x, dim); + fill(0); + rect(-dim / 2, -dim / 2, dim, dim); +} diff --git a/src/data/examples/hi/18_Transform/01_Scale.js b/src/data/examples/hi/18_Transform/01_Scale.js new file mode 100644 index 0000000000..57c1cf140f --- /dev/null +++ b/src/data/examples/hi/18_Transform/01_Scale.js @@ -0,0 +1,46 @@ +/* + * @name स्केल + * @description scale() फ़ंक्शन के लिए पैरामीटर मान हैं + * दशमलव प्रतिशत के रूप में निर्दिष्ट। उदाहरण के लिए, विधि + * कॉल स्केल (2.0) आकार के आयाम को बढ़ा देगा + * 200 प्रतिशत। वस्तुएं हमेशा मूल से मापी जाती हैं। यह उदाहरण + * दिखाता है कि परिवर्तन कैसे जमा होते हैं और यह भी कि कैसे पैमाने और अनुवाद and + * उनके आदेश के आधार पर बातचीत करें। + */ + +let a = 0.0; +let s = 0.0; + +function setup() { + createCanvas(720, 400); + noStroke(); + //Draw all rectangles from their center as opposed to + // the default upper left corner + rectMode(CENTER); +} + +function draw() { + background(102); + + //Slowly increase 'a' and then animate 's' with + //a smooth cyclical motion by finding the cosine of 'a' + a = a + 0.04; + s = cos(a) * 2; + + //Translate our rectangle from the origin to the middle of + //the canvas, then scale it with 's' + translate(width / 2, height / 2); + scale(s); + fill(51); + rect(0, 0, 50, 50); + + //Translate and scale are accumulating, so this translate + //moves the second rectangle further right than the first + //and the scale is getting doubled. Note that cosine is + //making 's' both negative and positive, thus it cycles + //from left to right. + translate(75, 0); + fill(255); + scale(s); + rect(0, 0, 50, 50); +} diff --git a/src/data/examples/hi/18_Transform/02_Rotate.js b/src/data/examples/hi/18_Transform/02_Rotate.js new file mode 100644 index 0000000000..eb91de39aa --- /dev/null +++ b/src/data/examples/hi/18_Transform/02_Rotate.js @@ -0,0 +1,43 @@ +/* + * @name घुमाएँ + * @description Z अक्ष के चारों ओर एक वर्ग को घुमाते हुए। + * अपेक्षित परिणाम प्राप्त करने के लिए, रोटेट फंक्शन एंगल भेजें + * पैरामीटर जो 0 और PI*2 के बीच के मान हैं (TWO_PI जो है + * मोटे तौर पर 6.28)। यदि आप कोणों को डिग्री के रूप में सोचना पसंद करते हैं + * (0-360), आप अपने मूल्यों को परिवर्तित करने के लिए radians() विधि का उपयोग कर सकते हैं। + * उदाहरण के लिए: घुमाएं (radians(90)) कथन के समान है + * घुमाएँ (पीआई / 2)। इस उदाहरण में, प्रत्येक सम संख्या वाला दूसरा एक जिटर + * रोटेशन में जोड़ा जाता है। विषम सेकंड के दौरान, घुमाव CW को गति देता है और + * सीसीडब्ल्यू अंतिम जिटर मूल्य द्वारा निर्धारित गति पर। + */ + +let angle = 0.0; +let jitter = 0.0; + +function setup() { + createCanvas(720, 400); + noStroke(); + fill(255); + // केंद्र से आयत बनाएं और यह भी होगा + // उस केंद्र के चारों ओर घुमाएं + rectMode(CENTER); +} + +function draw() { + background(51); + + // सम-संख्या वाले सेकंड (0, 2, 4, 6...) के दौरान घबराना जोड़ें + // रोटेशन + if (second() % 2 === 0) { + jitter = random(-0.1, 0.1); + } + // सबसे हालिया जिटर वैल्यू का उपयोग करके कोण मान बढ़ाएं + angle = angle + jitter; + // घबराहट न होने पर एक सहज CW और CCW गति प्राप्त करने के लिए कोसाइन का उपयोग करें + let c = cos(angle); + // आकार को कैनवास के केंद्र में ले जाएं + translate(width / 2, height / 2); + // अंतिम रोटेशन लागू करें + rotate(c); + rect(0, 0, 180, 180); +} diff --git a/src/data/examples/hi/18_Transform/03_Arm.js b/src/data/examples/hi/18_Transform/03_Arm.js new file mode 100644 index 0000000000..85278c6dfe --- /dev/null +++ b/src/data/examples/hi/18_Transform/03_Arm.js @@ -0,0 +1,49 @@ +/* + * @name आर्म + * @description यह उदाहरण बनाने के लिए ट्रांसफ़ॉर्म मैट्रिसेस का उपयोग करता है + * एक हाथ। प्रत्येक खंड के कोण को द्वारा नियंत्रित किया जाता है + * माउसएक्स और माउसवाई स्थिति। पर लागू किए गए परिवर्तन + * पहला खंड दूसरे खंड पर भी लागू होता है + * क्योंकि वे एक ही push() और . के अंदर हैं + * pop() मैट्रिक्स समूह। + */ + +let x, y; +let angle1 = 0.0; +let angle2 = 0.0; +let segLength = 100; + +function setup() { + createCanvas(720, 400); + strokeWeight(30); + + // अर्ध-पारदर्शी सफेद के साथ स्ट्रोक + stroke(255, 160); + + // हाथ के "कंधे" को कैनवास के केंद्र में रखें + x = width * 0.5; + y = height * 0.5; +} + +function draw() { + background(0); + + // माउस की स्थिति के अनुसार खंडों के कोण को बदलें + angle1 = (mouseX / float(width) - 0.5) * -TWO_PI; + angle2 = (mouseY / float(height) - 0.5) * PI; + + // ट्रांसफ़ॉर्म को "शामिल" करने के लिए पुश और पॉप का उपयोग करें। ध्यान दें कि + // भले ही हम एक कस्टम फ़ंक्शन का उपयोग करके सेगमेंट बनाते हैं, + // परिवर्तन अभी भी जमा होते हैं + push(); + segment(x, y, angle1); + segment(segLength, 0, angle2); + pop(); +} + +// सेगमेंट ड्राइंग के लिए एक कस्टम फ़ंक्शन +function segment(x, y, a) { + translate(x, y); + rotate(a); + line(0, 0, segLength, 0); +} diff --git a/src/data/examples/hi/19_Typography/00_Letters.js b/src/data/examples/hi/19_Typography/00_Letters.js new file mode 100644 index 0000000000..4438894f30 --- /dev/null +++ b/src/data/examples/hi/19_Typography/00_Letters.js @@ -0,0 +1,64 @@ +/* + * @name पत्र + * @description पत्र एक फ़ॉन्ट लोड करके स्क्रीन पर खींचा जा सकता है, सेटिंग + * इसकी विशेषताएँ और फिर अक्षर खींचना। यह उदाहरण for . का उपयोग करता है + * कैनवास को स्वचालित रूप से भरने के लिए लूप और यूनिकोड संदर्भ संख्या + * एक ग्रिड में वर्ण। स्वरों का चयन किया जाता है और एक विशिष्ट भरण रंग दिया जाता है। + */ +let font, + fontsize = 32; + +function preload() { + // सुनिश्चित करें कि .ttf या .otf फ़ॉन्ट संपत्ति निर्देशिका में संग्रहीत है + // सेटअप से पहले लोड किया जाता है setup() और draw() कहा जाता है + font = loadFont('assets/SourceSansPro-Regular.otf'); +} + +function setup() { + createCanvas(710, 400); + + // टेक्स्ट विशेषताओं को सेट करें + textFont(font); + textSize(fontsize); + textAlign(CENTER, CENTER); +} + +function draw() { + background(160); + + // अक्षरों और बाएँ और शीर्ष हाशिये के बीच की खाई को सेट करें + let gap = 52; + let margin = 10; + translate(margin * 4, margin * 4); + + // अपने इच्छित चरित्र पर शुरू करने के लिए काउंटर सेट करें + // इस मामले में 35, जो # प्रतीक . है + let counter = 35; + + // जब तक कैनवास पर जगह है तब तक लूप करें + for (let y = 0; y < height - gap; y += gap) { + for (let x = 0; x < width - gap; x += gap) { + // उनके यूनिकोड नंबर द्वारा अलग-अलग अक्षरों को पुनः प्राप्त करने के लिए काउंटर का उपयोग करें + let letter = char(counter); + + // स्वरों और अन्य वर्णों में अलग-अलग रंग जोड़ें + if ( + letter === 'A' || + letter === 'E' || + letter === 'I' || + letter === 'O' || + letter === 'U' + ) { + fill('#ed225d'); + } else { + fill(255); + } + + // पत्र को स्क्रीन पर ड्रा करें + text(letter, x, y); + + // काउंटर बढ़ाएँ + counter++; + } + } +} diff --git a/src/data/examples/hi/19_Typography/01_Words.js b/src/data/examples/hi/19_Typography/01_Words.js new file mode 100644 index 0000000000..df116b4f7e --- /dev/null +++ b/src/data/examples/hi/19_Typography/01_Words.js @@ -0,0 +1,59 @@ +/* + * @name शब्द + * @description text() फ़ंक्शन का उपयोग स्क्रीन पर शब्द लिखने के लिए किया जाता है। + * शब्दों को textAlign() के साथ बाएं, केंद्र या दाएं संरेखित किया जा सकता है + * फ़ंक्शन, और आकृतियों की तरह, शब्दों को fill() के साथ रंगा जा सकता है। + */ +let font, + fontsize = 40; + +function preload() { + // सुनिश्चित करें कि .ttf या .otf फ़ॉन्ट संपत्ति निर्देशिका में संग्रहीत है + // सेटअप से पहले लोड किया जाता है setup() और draw() कहा जाता है + font = loadFont('assets/SourceSansPro-Regular.otf'); +} + +function setup() { + createCanvas(710, 400); + + // टेक्स्ट विशेषताओं को सेट करें + textFont(font); + textSize(fontsize); + textAlign(CENTER, CENTER); +} + +function draw() { + background(160); + + // टेक्स्ट को दाईं ओर संरेखित करें + // और कैनवास के बाएँ तीसरे भाग में drawWords () चलाएँ + textAlign(RIGHT); + drawWords(width * 0.25); + + // पाठ को केंद्र में संरेखित करें + // और कैनवास के बीच में drawWords() चलाएँ + textAlign(CENTER); + drawWords(width * 0.5); + + // टेक्स्ट को बाईं ओर संरेखित करें + // और कैनवास के दाहिने तीसरे भाग में drawWords () चलाएँ + textAlign(LEFT); + drawWords(width * 0.75); +} + +function drawWords(x) { + // text() फ़ंक्शन को तीन मापदंडों की आवश्यकता होती है: + // आकर्षित करने के लिए पाठ, क्षैतिज स्थिति, + // और ऊर्ध्वाधर स्थिति + fill(0); + text('ichi', x, 80); + + fill(65); + text('ni', x, 150); + + fill(190); + text('san', x, 220); + + fill(255); + text('shi', x, 290); +} diff --git a/src/data/examples/hi/20_3D/00_geometries.js b/src/data/examples/hi/20_3D/00_geometries.js new file mode 100644 index 0000000000..1bc949fbee --- /dev/null +++ b/src/data/examples/hi/20_3D/00_geometries.js @@ -0,0 +1,60 @@ +/* + * @name ज्यामिति + * @description अब p5 में छह 3D प्रिमिटिव हैं। + */ +function setup() { + createCanvas(710, 400, WEBGL); +} + +function draw() { + background(250); + + translate(-240, -100, 0); + normalMaterial(); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + plane(70); + pop(); + + translate(240, 0, 0); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + box(70, 70, 70); + pop(); + + translate(240, 0, 0); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + cylinder(70, 70); + pop(); + + translate(-240 * 2, 200, 0); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + cone(70, 70); + pop(); + + translate(240, 0, 0); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + torus(70, 20); + pop(); + + translate(240, 0, 0); + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + sphere(70); + pop(); +} diff --git a/src/data/examples/hi/20_3D/01_sine_cosine_in_3D.js b/src/data/examples/hi/20_3D/01_sine_cosine_in_3D.js new file mode 100644 index 0000000000..963c1f0040 --- /dev/null +++ b/src/data/examples/hi/20_3D/01_sine_cosine_in_3D.js @@ -0,0 +1,28 @@ +/* + * @name 3D में साइन कोसाइन + * @description साइन, कोसाइन और पुश/पॉप को 3D में भी लागू किया जा सकता है। + */ +function setup() { + createCanvas(710, 400, WEBGL); +} + +function draw() { + background(250); + rotateY(frameCount * 0.01); + + for (let j = 0; j < 5; j++) { + push(); + for (let i = 0; i < 80; i++) { + translate( + sin(frameCount * 0.001 + j) * 100, + sin(frameCount * 0.001 + j) * 100, + i * 0.1 + ); + rotateZ(frameCount * 0.002); + push(); + sphere(8, 6, 4); + pop(); + } + pop(); + } +} diff --git a/src/data/examples/hi/20_3D/02_multiple_lights.js b/src/data/examples/hi/20_3D/02_multiple_lights.js new file mode 100644 index 0000000000..66bf5d45c5 --- /dev/null +++ b/src/data/examples/hi/20_3D/02_multiple_lights.js @@ -0,0 +1,30 @@ +/* + * @name मल्टीपल लाइट्स + * @description एक स्केच में सभी प्रकार की रोशनी का उपयोग किया जा सकता है। + */ +function setup() { + createCanvas(710, 400, WEBGL); +} + +function draw() { + background(0); + + let locX = mouseX - height / 2; + let locY = mouseY - width / 2; + + ambientLight(50); + directionalLight(255, 0, 0, 0.25, 0.25, 0); + pointLight(0, 0, 255, locX, locY, 250); + + push(); + translate(-width / 4, 0, 0); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + specularMaterial(250); + box(100, 100, 100); + pop(); + + translate(width / 4, 0, 0); + ambientMaterial(250); + sphere(120, 64); +} diff --git a/src/data/examples/hi/20_3D/03_materials.js b/src/data/examples/hi/20_3D/03_materials.js new file mode 100644 index 0000000000..662d8d2cf2 --- /dev/null +++ b/src/data/examples/hi/20_3D/03_materials.js @@ -0,0 +1,65 @@ +/* + * @name सामग्री + * @description पांच प्रकार की सामग्री समर्थित हैं। + * वे प्रकाश के प्रति अलग तरह से प्रतिक्रिया करते हैं। + * प्रकाश की स्थिति बदलने के लिए अपने माउस को घुमाएँ। + */ +let img; +function setup() { + createCanvas(710, 400, WEBGL); + img = loadImage('assets/cat.jpg'); +} + +function draw() { + background(0); + + let locX = mouseX - height / 2; + let locY = mouseY - width / 2; + + ambientLight(60, 60, 60); + pointLight(255, 255, 255, locX, locY, 100); + + push(); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + texture(img); + box(80); + pop(); + + push(); + translate(-width / 4, -height / 4, 0); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + fill(250, 0, 0); + torus(80, 20, 64, 64); + pop(); + + push(); + translate(width / 4, -height / 4, 0); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + normalMaterial(); + torus(80, 20, 64, 64); + pop(); + + push(); + translate(-width / 4, height / 4, 0); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + ambientMaterial(250); + torus(80, 20, 64, 64); + pop(); + + push(); + translate(width / 4, height / 4, 0); + rotateZ(frameCount * 0.01); + rotateX(frameCount * 0.01); + rotateY(frameCount * 0.01); + specularMaterial(250); + torus(80, 20, 64, 64); + pop(); +} diff --git a/src/data/examples/hi/20_3D/04_textures.js b/src/data/examples/hi/20_3D/04_textures.js new file mode 100644 index 0000000000..ea6d50b791 --- /dev/null +++ b/src/data/examples/hi/20_3D/04_textures.js @@ -0,0 +1,40 @@ +/* + * @name बनावट + * @description चित्र और वीडियो बनावट के लिए समर्थित हैं। + */ +// वीडियो स्रोत: https://vimeo.com/90312869 +let img; +let vid; +let theta = 0; + +function setup() { + createCanvas(710, 400, WEBGL); + + img = loadImage('assets/cat.jpg'); + vid = createVideo(['assets/360video_256crop_v2.mp4']); + vid.elt.muted = true; + vid.loop(); + vid.hide(); +} + +function draw() { + background(250); + translate(-220, 0, 0); + push(); + rotateZ(theta * mouseX * 0.001); + rotateX(theta * mouseX * 0.001); + rotateY(theta * mouseX * 0.001); + //pass image as texture + texture(vid); + sphere(150); + pop(); + translate(440, 0, 0); + push(); + rotateZ(theta * 0.1); + rotateX(theta * 0.1); + rotateY(theta * 0.1); + texture(img); + box(100, 100, 100); + pop(); + theta += 0.05; +} diff --git a/src/data/examples/hi/20_3D/05_ray_casting.js b/src/data/examples/hi/20_3D/05_ray_casting.js new file mode 100644 index 0000000000..1d1e6e5c66 --- /dev/null +++ b/src/data/examples/hi/20_3D/05_ray_casting.js @@ -0,0 +1,100 @@ +/* + * @name रे कास्टिंग + * @description जोनाथन वाटसन द्वारा मूल उदाहरण। + *

        रे कास्टिंग के साथ 3डी स्पेस में माउस की स्थिति का पता लगाना। + */ +const objects = []; +let eyeZ; + +function setup() { + createCanvas(710, 400, WEBGL); + + eyeZ = height / 2 / tan((30 * PI) / 180); // डिफ़ॉल्ट दूरी कैमरा मूल से दूर है। + + objects.push(new IntersectPlane(1, 0, 0, -100, 0, 0)); // बाईं दीवार + objects.push(new IntersectPlane(1, 0, 0, 100, 0, 0)); // दाहिनी दीवार + objects.push(new IntersectPlane(0, 1, 0, 0, -100, 0)); // नीचे की दीवार + objects.push(new IntersectPlane(0, 1, 0, 0, 100, 0)); // शीर्ष दीवार + objects.push(new IntersectPlane(0, 0, 1, 0, 0, 0)); // पीछे की दीवार + + noStroke(); + ambientMaterial(250); +} + +function draw() { + background(0); + + // रोशनी + pointLight(255, 255, 255, 0, 0, 400); + ambientLight(244, 122, 158); + + // बाईं दीवार + push(); + translate(-100, 0, 200); + rotateY((90 * PI) / 180); + plane(400, 200); + pop(); + + // दाहिनी दीवार + push(); + translate(100, 0, 200); + rotateY((90 * PI) / 180); + plane(400, 200); + pop(); + + // नीचे की दीवार + push(); + translate(0, 100, 200); + rotateX((90 * PI) / 180); + plane(200, 400); + pop(); + + // शीर्ष दीवार + push(); + translate(0, -100, 200); + rotateX((90 * PI) / 180); + plane(200, 400); + pop(); + + plane(200, 200); // पीछे की दीवार + + const x = mouseX - width / 2; + const y = mouseY - height / 2; + + const Q = createVector(0, 0, eyeZ); // किरण पर एक बिंदु और कैमरे की डिफ़ॉल्ट स्थिति। + const v = createVector(x, y, -eyeZ); // किरण की दिशा वेक्टर। + + let intersect; // किरण और समतल के बीच का प्रतिच्छेदन बिंदु। + let closestLambda = eyeZ * 10; // ड्रा दूरी। + + for (let x = 0; x < objects.length; x += 1) { + let object = objects[x]; + let lambda = object.getLambda(Q, v); // लैम्ब्डा का मान जहां किरण वस्तु को काटती है + + if (lambda < closestLambda && lambda > 0) { + // किरण और वस्तु के प्रतिच्छेदन की स्थिति का पता लगाएं। + intersect = p5.Vector.add(Q, p5.Vector.mult(v, lambda)); + closestLambda = lambda; + } + } + + // कर्सर + push(); + translate(intersect); + fill(237, 34, 93); + sphere(10); + pop(); +} + +// एक विमान के लिए कक्षा जो अनंत तक फैली हुई है। +class IntersectPlane { + constructor(n1, n2, n3, p1, p2, p3) { + this.normal = createVector(n1, n2, n3); // विमान का सामान्य वेक्टर + this.point = createVector(p1, p2, p3); // विमान पर एक बिंदु + this.d = this.point.dot(this.normal); + } + + getLambda(Q, v) { + return (-this.d - this.normal.dot(Q)) / this.normal.dot(v); + } +} diff --git a/src/data/examples/hi/20_3D/07_orbit_control.js b/src/data/examples/hi/20_3D/07_orbit_control.js new file mode 100644 index 0000000000..e68b4b8efe --- /dev/null +++ b/src/data/examples/hi/20_3D/07_orbit_control.js @@ -0,0 +1,36 @@ +/* + * @name कक्षा नियंत्रण + * @description कक्षा नियंत्रण आपको दुनिया भर में खींचने और स्थानांतरित करने की अनुमति देता है। + */ +function setup() { + createCanvas(710, 400, WEBGL); +} + +function draw() { + background(250); + let radius = width * 1.5; + + // दुनिया को स्थानांतरित करने के लिए खींचें। + orbitControl(); + + normalMaterial(); + translate(0, 0, -600); + for (let i = 0; i <= 12; i++) { + for (let j = 0; j <= 12; j++) { + push(); + let a = (j / 12) * PI; + let b = (i / 12) * PI; + translate( + sin(2 * a) * radius * sin(b), + (cos(b) * radius) / 2, + cos(2 * a) * radius * sin(b) + ); + if (j % 2 === 0) { + cone(30, 30); + } else { + box(30, 30, 30); + } + pop(); + } + } +} diff --git a/src/data/examples/hi/20_3D/08_basic_shader.js b/src/data/examples/hi/20_3D/08_basic_shader.js new file mode 100644 index 0000000000..b9dbbb6d6f --- /dev/null +++ b/src/data/examples/hi/20_3D/08_basic_shader.js @@ -0,0 +1,27 @@ +/* + * @name बेसिक शेडर + * @description यह एक बुनियादी उदाहरण है जिसमें दिखाया गया है कि p5.js में शेडर्स को कैसे लोड किया जाए। + *
        p5.js में शेडर्स का उपयोग करने के बारे में अधिक जानने के लिए: p5.js Shaders + */ + +// यह वेरिएबल हमारे शेडर ऑब्जेक्ट को होल्ड करेगा +let theShader; + +function preload(){ + // शेडर लोड करें + theShader = loadShader('assets/basic.vert', 'assets/basic.frag'); +} + +function setup() { + // शेडर्स को काम करने के लिए WEBGL मोड की आवश्यकता होती है + createCanvas(710, 400, WEBGL); + noStroke(); +} + +function draw() { + // shader() हमारे शेडर के साथ सक्रिय शेडर सेट करता है + shader(theShader); + + // रेक्ट हमें स्क्रीन पर कुछ ज्योमेट्री देता है + rect(0,0,width, height); +} diff --git a/src/data/examples/hi/20_3D/09_shader_as_a_texture.js b/src/data/examples/hi/20_3D/09_shader_as_a_texture.js new file mode 100644 index 0000000000..0c10b5e341 --- /dev/null +++ b/src/data/examples/hi/20_3D/09_shader_as_a_texture.js @@ -0,0 +1,68 @@ +/* + * @name शेडर एक बनावट के रूप में + * @description Shaders को बनावट के रूप में 2D/3D आकृतियों पर लागू किया जा सकता है। + *
        p5.js में शेडर्स का उपयोग करने के बारे में अधिक जानने के लिए: p5.js Shaders + */ + + // यह वेरिएबल हमारे शेडर ऑब्जेक्ट को होल्ड करेगा + let theShader; + // यह वेरिएबल हमारी createGraphics लेयर को होल्ड करेगा + let shaderTexture; + + let theta = 0; + + let x; + let y; + let outsideRadius = 200; + let insideRadius = 100; + + function preload(){ + // शेडर लोड करें + theShader = loadShader('assets/texture.vert','assets/texture.frag'); + } + + function setup() { + // शेडर्स को काम करने के लिए WEBGL मोड की आवश्यकता होती है + createCanvas(710, 400, WEBGL); + noStroke(); + + // createGraphics लेयर्स को इनिशियलाइज़ करें + shaderTexture = createGraphics(710, 400, WEBGL); + + // createGraphics लेयर्स स्ट्रोक को बंद करें + shaderTexture.noStroke(); + + x = -50; + y = 0; + } + + function draw() { + + // केवल सक्रिय शेडर को सेट करने के बजाय हम इसे createGraphics लेयर में पास कर रहे हैं + shaderTexture.shader(theShader); + + // यहां हम अपने समान मूल्यों को शेडर में भेजने के लिए setUniform () का उपयोग कर रहे हैं + theShader.setUniform("resolution", [width, height]); + theShader.setUniform("time", millis() / 1000.0); + theShader.setUniform("mouse", [mouseX, map(mouseY, 0, height, height, 0)]); + + // रेंडर करने के लिए shaderTexture लेयर ज्योमेट्री पास करना + shaderTexture.rect(0,0,width,height); + + background(255); + + // शेडर को एक बनावट के रूप में पास करें + texture(shaderTexture); + + translate(-150, 0, 0); + push(); + rotateZ(theta * mouseX * 0.0001); + rotateX(theta * mouseX * 0.0001); + rotateY(theta * mouseX * 0.0001); + theta += 0.05; + sphere(125); + pop(); + + // 3D में चिकने किनारों के लिए दीर्घवृत्त के लिए पाँचवाँ पैरामीटर पास करना + ellipse(260,0,200,200,100); + } diff --git a/src/data/examples/hi/20_3D/10_passing_shader_uniforms.js b/src/data/examples/hi/20_3D/10_passing_shader_uniforms.js new file mode 100644 index 0000000000..24275c1322 --- /dev/null +++ b/src/data/examples/hi/20_3D/10_passing_shader_uniforms.js @@ -0,0 +1,33 @@ +/* + * @name पासिंग शेडर यूनिफॉर्म + * @description यूनिफ़ॉर्म वह तरीका है जिससे जानकारी को p5 से शेडर तक पहुँचाया जाता है। + *
        p5.js में शेडर्स का उपयोग करने के बारे में अधिक जानने के लिए: p5.js Shaders + */ + + // यह वेरिएबल हमारे शेडर ऑब्जेक्ट को होल्ड करेगा + let theShader; + + function preload(){ + // शेडर लोड करें + theShader = loadShader('assets/uniforms.vert', 'assets/uniforms.frag'); + } + + function setup() { + // शेडर्स को काम करने के लिए WEBGL मोड की आवश्यकता होती है + createCanvas(710, 400, WEBGL); + noStroke(); + } + + function draw() { + // शेडर () हमारे शेडर के साथ सक्रिय शेडर सेट करता है + shader(theShader); + + // हमारे शेडर को रिज़ॉल्यूशन, माउस और समय भेजें + // माउस + समय भेजने से पहले हम डेटा को संशोधित करते हैं ताकि यह शेडर द्वारा अधिक आसानी से उपयोग किया जा सके + theShader.setUniform('resolution', [width, height]); + theShader.setUniform('mouse', map(mouseX, 0, width, 0, 7)); + theShader.setUniform('time', frameCount * 0.01); + + // रेक्ट हमें स्क्रीन पर कुछ ज्योमेट्री देता है + rect(0,0,width, height); + } diff --git a/src/data/examples/hi/20_3D/11_shader_using_webcam.js b/src/data/examples/hi/20_3D/11_shader_using_webcam.js new file mode 100644 index 0000000000..09de5a744b --- /dev/null +++ b/src/data/examples/hi/20_3D/11_shader_using_webcam.js @@ -0,0 +1,37 @@ +/* + * @name Shader वेबकैम का उपयोग कर रहा है + * @description वेबकैम को टेक्सचर के रूप में शेडर्स को पास किया जा सकता है। + *
        p5.js में शेडर्स का उपयोग करने के बारे में अधिक जानने के लिए: p5.js Shaders + */ + + // यह वेरिएबल हमारे शेडर ऑब्जेक्ट को होल्ड करेगा + let theShader; + // यह वेरिएबल हमारे वेबकैम वीडियो को होल्ड करेगा + let cam; + + function preload(){ + // शेडर लोड करें + theShader = loadShader('assets/webcam.vert', 'assets/webcam.frag'); + } + + function setup() { + // शेडर्स को काम करने के लिए WEBGL मोड की आवश्यकता होती है + createCanvas(710, 400, WEBGL); + noStroke(); + + cam = createCapture(VIDEO); + cam.size(710, 400); + + cam.hide(); + } + + function draw() { + // shader() हमारे शेडर के साथ सक्रिय शेडर सेट करता है + shader(theShader); + + // एक बनावट के रूप में कैम पास करना + theShader.setUniform('tex0', cam); + + // रेक्ट हमें स्क्रीन पर कुछ ज्योमेट्री देता है + rect(0,0,width,height); + } diff --git a/src/data/examples/hi/21_Input/00_Clock.js b/src/data/examples/hi/21_Input/00_Clock.js new file mode 100644 index 0000000000..b5bbb269b0 --- /dev/null +++ b/src/data/examples/hi/21_Input/00_Clock.js @@ -0,0 +1,62 @@ +/* + * @name घड़ी + * @description वर्तमान समय को second() के साथ पढ़ा जा सकता है, + * minute(), और hour() फ़ंक्शन। इस उदाहरण में, sin() और + * cos () मानों का उपयोग हाथों की स्थिति निर्धारित करने के लिए किया जाता है। + */ +let cx, cy; +let secondsRadius; +let minutesRadius; +let hoursRadius; +let clockDiameter; + +function setup() { + createCanvas(720, 400); + stroke(255); + + let radius = min(width, height) / 2; + secondsRadius = radius * 0.71; + minutesRadius = radius * 0.6; + hoursRadius = radius * 0.5; + clockDiameter = radius * 1.7; + + cx = width / 2; + cy = height / 2; +} + +function draw() { + background(230); + + // घड़ी की पृष्ठभूमि बनाएं + noStroke(); + fill(244, 122, 158); + ellipse(cx, cy, clockDiameter + 25, clockDiameter + 25); + fill(237, 34, 93); + ellipse(cx, cy, clockDiameter, clockDiameter); + + // पाप के sin() और cos() 3 बजे शुरू होते हैं; + // शीर्ष पर प्रारंभ करने के लिए HALF_PI घटाएं + let s = map(second(), 0, 60, 0, TWO_PI) - HALF_PI; + let m = map(minute() + norm(second(), 0, 60), 0, 60, 0, TWO_PI) - HALF_PI; + let h = map(hour() + norm(minute(), 0, 60), 0, 24, 0, TWO_PI * 2) - HALF_PI; + + // घड़ी की सुई खींचे + stroke(255); + strokeWeight(1); + line(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius); + strokeWeight(2); + line(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius); + strokeWeight(4); + line(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius); + + // मिनट टिक ड्रा करें + strokeWeight(2); + beginShape(POINTS); + for (let a = 0; a < 360; a += 6) { + let angle = radians(a); + let x = cx + cos(angle) * secondsRadius; + let y = cy + sin(angle) * secondsRadius; + vertex(x, y); + } + endShape(); +} diff --git a/src/data/examples/hi/21_Input/01_Constrain.js b/src/data/examples/hi/21_Input/01_Constrain.js new file mode 100644 index 0000000000..1ce4a66b38 --- /dev/null +++ b/src/data/examples/hi/21_Input/01_Constrain.js @@ -0,0 +1,36 @@ +/* + * @name बाधा + * @description माउस को स्क्रीन पर घुमाने के लिए ले जाएँ + * वृत्त। कार्यक्रम सर्कल को उसके बॉक्स में सीमित करता है। + */ +let mx = 1; +let my = 1; +let easing = 0.05; +let radius = 24; +let edge = 100; +let inner = edge + radius; + +function setup() { + createCanvas(720, 400); + noStroke(); + ellipseMode(RADIUS); + rectMode(CORNERS); +} + +function draw() { + background(230); + + if (abs(mouseX - mx) > 0.1) { + mx = mx + (mouseX - mx) * easing; + } + if (abs(mouseY - my) > 0.1) { + my = my + (mouseY - my) * easing; + } + + mx = constrain(mx, inner, width - inner); + my = constrain(my, inner, height - inner); + fill(237, 34, 93); + rect(edge, edge, width - edge, height - edge); + fill(255); + ellipse(mx, my, radius, radius); +} diff --git a/src/data/examples/hi/21_Input/02_Easing.js b/src/data/examples/hi/21_Input/02_Easing.js new file mode 100644 index 0000000000..ca7ced8dd5 --- /dev/null +++ b/src/data/examples/hi/21_Input/02_Easing.js @@ -0,0 +1,30 @@ +/* + * @name आसान + * @description माउस को स्क्रीन और सिंबल पर ले जाएं + * का पालन करेंगे। एनीमेशन के प्रत्येक फ्रेम को खींचने के बीच, + * कार्यक्रम की स्थिति के बीच अंतर की गणना करता है + * प्रतीक और कर्सर। यदि दूरी 1 पिक्सेल से बड़ी है, + * प्रतीक अपनी धारा से कुछ दूरी (0.05) को आगे बढ़ाता है + * कर्सर की ओर स्थिति। + */ +let x = 1; +let y = 1; +let easing = 0.05; + +function setup() { + createCanvas(720, 400); + noStroke(); +} + +function draw() { + background(237, 34, 93); + let targetX = mouseX; + let dx = targetX - x; + x += dx * easing; + + let targetY = mouseY; + let dy = targetY - y; + y += dy * easing; + + ellipse(x, y, 66, 66); +} diff --git a/src/data/examples/hi/21_Input/03_Keyboard.js b/src/data/examples/hi/21_Input/03_Keyboard.js new file mode 100644 index 0000000000..5309d3e81e --- /dev/null +++ b/src/data/examples/hi/21_Input/03_Keyboard.js @@ -0,0 +1,38 @@ +/* + * @name कीबोर्ड + * @description इमेज को फोकस करने के लिए उस पर क्लिक करें और + * समय और स्थान में फ़ॉर्म बनाने के लिए अक्षर कुंजियाँ दबाएँ। + * प्रत्येक कुंजी की एक विशिष्ट पहचान संख्या होती है। ये नंबर + * अंतरिक्ष में आकृतियों की स्थिति के लिए इस्तेमाल किया जा सकता है। + */ +let rectWidth; + +function setup() { + createCanvas(720, 400); + noStroke(); + background(230); + rectWidth = width / 4; +} + +function draw() { + // चाबियों की प्रतीक्षा करते हुए लूपिंग जारी रखने के लिए यहां draw() रखें +} + +function keyPressed() { + let keyIndex = -1; + if (key >= 'a' && key <= 'z') { + keyIndex = key.charCodeAt(0) - 'a'.charCodeAt(0); + } + if (keyIndex === -1) { + // यदि यह एक अक्षर कुंजी नहीं है, तो स्क्रीन को साफ़ करें + background(230); + } else { + // यह एक अक्षर कुंजी है, एक आयत भरें + randFill_r = Math.floor(Math.random() * 255 + 1); + randFill_g = Math.floor(Math.random() * 255 + 1); + randFill_b = Math.floor(Math.random() * 255 + 1); + fill(randFill_r, randFill_g, randFill_b); + let x = map(keyIndex, 0, 25, 0, width - rectWidth); + rect(x, 0, rectWidth, height); + } +} diff --git a/src/data/examples/hi/21_Input/04_Mouse1D.js b/src/data/examples/hi/21_Input/04_Mouse1D.js new file mode 100644 index 0000000000..6471fcf6ec --- /dev/null +++ b/src/data/examples/hi/21_Input/04_Mouse1D.js @@ -0,0 +1,24 @@ +/* + * @name माउस 1D + * @description माउस को बाएँ और दाएँ ले जाएँ + * संतुलन शिफ्ट करें। "माउसएक्स" चर का उपयोग किया जाता है + * आयतों के आकार और रंग दोनों को नियंत्रित करने के लिए। + */ +function setup() { + createCanvas(720, 400); + noStroke(); + rectMode(CENTER); +} + +function draw() { + background(230); + + let r1 = map(mouseX, 0, width, 0, height); + let r2 = height - r1; + + fill(237, 34, 93, r1); + rect(width / 2 + r1 / 2, height / 2, r1, r1); + + fill(237, 34, 93, r2); + rect(width / 2 - r2 / 2, height / 2, r2, r2); +} diff --git a/src/data/examples/hi/21_Input/05_Mouse2D.js b/src/data/examples/hi/21_Input/05_Mouse2D.js new file mode 100644 index 0000000000..16d0eea4ec --- /dev/null +++ b/src/data/examples/hi/21_Input/05_Mouse2D.js @@ -0,0 +1,20 @@ +/* + * @name माउस 2D + * @description माउस को हिलाने से स्थिति बदल जाती है और + * प्रत्येक बॉक्स का आकार। + */ +function setup() { + createCanvas(720, 400); + noStroke(); + rectMode(CENTER); +} + +function draw() { + background(230); + fill(244, 122, 158); + rect(mouseX, height / 2, mouseY / 2 + 10, mouseY / 2 + 10); + fill(237, 34, 93); + let inverseX = width - mouseX; + let inverseY = height - mouseY; + rect(inverseX, height / 2, inverseY / 2 + 10, inverseY / 2 + 10); +} diff --git a/src/data/examples/hi/21_Input/06_MouseIsPressed.js b/src/data/examples/hi/21_Input/06_MouseIsPressed.js new file mode 100644 index 0000000000..0a780f3f2a --- /dev/null +++ b/src/data/examples/hi/21_Input/06_MouseIsPressed.js @@ -0,0 +1,20 @@ +/* + * @name माउस प्रेस + * @description माउस को शेप में लाने के लिए मूव करें। + * रंग बदलने के लिए माउस बटन दबाएं। + */ +function setup() { + createCanvas(720, 400); + background(230); + strokeWeight(2); +} + +function draw() { + if (mouseIsPressed) { + stroke(255); + } else { + stroke(237, 34, 93); + } + line(mouseX - 66, mouseY, mouseX + 66, mouseY); + line(mouseX, mouseY - 66, mouseX, mouseY + 66); +} diff --git a/src/data/examples/hi/21_Input/07_Mouse_Functions.js b/src/data/examples/hi/21_Input/07_Mouse_Functions.js new file mode 100644 index 0000000000..bb9a876331 --- /dev/null +++ b/src/data/examples/hi/21_Input/07_Mouse_Functions.js @@ -0,0 +1,66 @@ +/* + * @name माउस फंक्शन्स + * @description बॉक्स पर क्लिक करें और इसे स्क्रीन पर खींचें। + */ +let bx; +let by; +let boxSize = 75; +let overBox = false; +let locked = false; +let xOffset = 0.0; +let yOffset = 0.0; + +function setup() { + createCanvas(720, 400); + bx = width / 2.0; + by = height / 2.0; + rectMode(RADIUS); + strokeWeight(2); +} + +function draw() { + background(237, 34, 93); + + // परीक्षण करें कि क्या कर्सर बॉक्स के ऊपर है + if ( + mouseX > bx - boxSize && + mouseX < bx + boxSize && + mouseY > by - boxSize && + mouseY < by + boxSize + ) { + overBox = true; + if (!locked) { + stroke(255); + fill(244, 122, 158); + } + } else { + stroke(156, 39, 176); + fill(244, 122, 158); + overBox = false; + } + + // बॉक्स को ड्रा करें + rect(bx, by, boxSize, boxSize); +} + +function mousePressed() { + if (overBox) { + locked = true; + fill(255, 255, 255); + } else { + locked = false; + } + xOffset = mouseX - bx; + yOffset = mouseY - by; +} + +function mouseDragged() { + if (locked) { + bx = mouseX - xOffset; + by = mouseY - yOffset; + } +} + +function mouseReleased() { + locked = false; +} diff --git a/src/data/examples/hi/21_Input/08_Mouse_Signals.js b/src/data/examples/hi/21_Input/08_Mouse_Signals.js new file mode 100644 index 0000000000..858640b4ec --- /dev/null +++ b/src/data/examples/hi/21_Input/08_Mouse_Signals.js @@ -0,0 +1,52 @@ +/* + * @name माउस सिग्नल + * @description सिग्नल जेनरेट करने के लिए माउस को मूव करें और क्लिक करें। + * शीर्ष पंक्ति "माउसएक्स" से संकेत है, मध्य पंक्ति है + * "माउसवाई" से संकेत, और नीचे की पंक्ति संकेत है + * "mouseIsPressed" से। + */ +let xvals = []; +let yvals = []; +let bvals = []; + +function setup() { + createCanvas(720, 400); + strokeWeight(2); +} + +function draw() { + background(237, 34, 93); + + for (let i = 1; i < width; i++) { + xvals[i - 1] = xvals[i]; + yvals[i - 1] = yvals[i]; + bvals[i - 1] = bvals[i]; + } + // सरणी के अंत में नए मान जोड़ें + xvals[width - 1] = mouseX; + yvals[width - 1] = mouseY; + + if (mouseIsPressed) { + bvals[width - 1] = 0; + } else { + bvals[width - 1] = 255; + } + + fill(255); + noStroke(); + rect(0, height / 3, width, height / 3 + 1); + + for (let i = 1; i < width; i++) { + stroke(255); + point(i, xvals[i] / 3); + stroke(0); + point(i, height / 3 + yvals[i] / 3); + stroke(255); + line( + i, + (2 * height) / 3 + bvals[i] / 3, + i, + (2 * height) / 3 + bvals[i - 1] / 3 + ); + } +} diff --git a/src/data/examples/hi/21_Input/09_Storing_Input.js b/src/data/examples/hi/21_Input/09_Storing_Input.js new file mode 100644 index 0000000000..aca6bafec1 --- /dev/null +++ b/src/data/examples/hi/21_Input/09_Storing_Input.js @@ -0,0 +1,38 @@ +/* + * @name भंडारण इनपुट + * @description माउस को स्क्रीन पर ले जाएँ + * मंडलियों की स्थिति बदलें। पदों + * माउस को एक ऐरे में रिकॉर्ड किया जाता है और खेला जाता है + * हर फ्रेम वापस। प्रत्येक फ्रेम के बीच, नवीनतम + * मान प्रत्येक सरणी के अंत में जोड़ा जाता है और + * सबसे पुराना मान हटा दिया गया है। + */ +let num = 60; +let mx = []; +let my = []; + +function setup() { + createCanvas(720, 400); + noStroke(); + fill(255, 153); + for (let i = 0; i < num; i++) { + mx.push(i); + my.push(i); + } +} + +function draw() { + background(237, 34, 93); + + // प्रत्येक फ्रेम पर एक अलग प्रविष्टि का उपयोग करके, सरणी के माध्यम से साइकिल चलाएं। + // इस तरह से मोडुलो (%) का उपयोग करना सभी मूल्यों को खत्म करने की तुलना में तेज़ है। + let which = frameCount % num; + mx[which] = mouseX; + my[which] = mouseY; + + for (let i = 0; i < num; i++) { + // कौन सा+1 सबसे छोटा है (सरणी में सबसे पुराना) + let index = (which + 1 + i) % num; + ellipse(mx[index], my[index], i, i); + } +} diff --git a/src/data/examples/hi/22_Advanced_Data/00_Load_Saved_JSON.js b/src/data/examples/hi/22_Advanced_Data/00_Load_Saved_JSON.js new file mode 100644 index 0000000000..7a260da550 --- /dev/null +++ b/src/data/examples/hi/22_Advanced_Data/00_Load_Saved_JSON.js @@ -0,0 +1,104 @@ +/* + * @name लोड सेव किया गया JSON + * @description बबल क्लास बनाएं, डेटा का उपयोग करके कई बबल को इंस्टेंट करें + * एक JSON फ़ाइल, और स्क्रीन पर परिणाम प्रदर्शित करें। + * क्योंकि वेब ब्राउजर फाइलों को सेव करने में भिन्न होते हैं, हम इसका उपयोग नहीं करते हैं + * saveJSON, प्रोसेसिंग उदाहरण के विपरीत।

        + * प्रोसेसिंग के लिए डेनियल शिफमैन के LoadSaveJSON उदाहरण पर आधारित। + */ + +// बबल क्लास +class Bubble { + constructor(x, y, diameter, name) { + this.x = x; + this.y = y; + this.diameter = diameter; + this.radius = diameter / 2; + this.name = name; + + this.over = false; + } + + // जांचें कि क्या माउस बुलबुले के ऊपर है + rollover(px, py) { + let d = dist(px, py, this.x, this.y); + this.over = d < this.radius; + } + + // बबल प्रदर्शित करें + display() { + stroke(0); + strokeWeight(0.8); + noFill(); + ellipse(this.x, this.y, this.diameter, this.diameter); + if (this.over) { + fill(0); + textAlign(CENTER); + text(this.name, this.x, this.y + this.radius + 20); + } + } +} + +let data = {}; // loadJSON कॉल से परिणाम धारण करने के लिए वैश्विक वस्तु +let bubbles = []; // सभी बबल ऑब्जेक्ट्स को होल्ड करने के लिए ग्लोबल ऐरे + +// "सेटअप" चलाने से पहले किसी भी एसिंक्रोनस डेटा लोडिंग को प्रीलोड में रखें +function preload() { + data = loadJSON('assets/bubbles.json'); +} + +// सहेजे गए बबल डेटा को बबल ऑब्जेक्ट में बदलें +function loadData() { + let bubbleData = data['bubbles']; + for (let i = 0; i < bubbleData.length; i++) { + // प्रत्येक वस्तु को सरणी में प्राप्त करें + let bubble = bubbleData[i]; + // एक स्थिति वस्तु प्राप्त करें + let position = bubble['position']; + // स्थिति से x, y प्राप्त करें + let x = position['x']; + let y = position['y']; + + // व्यास और लेबल प्राप्त करें + let diameter = bubble['diameter']; + let label = bubble['label']; + + // ऑब्जेक्ट को सरणी में रखें + bubbles.push(new Bubble(x, y, diameter, label)); + } +} + +// हर बार माउस क्लिक करने पर एक नया बबल बनाएं। +function mousePressed() { + // बबल में व्यास और लेबल जोड़ें + let diameter = random(40, 80); + let label = 'New Label'; + + // नई JSON बबल ऑब्जेक्ट को सरणी में जोड़ें + bubbles.push(new Bubble(mouseX, mouseY, diameter, label)); + + // यदि बहुत अधिक हैं तो बबल काउंट प्रून करें + if (bubbles.length > 10) { + bubbles.shift(); // सरणी से पहले आइटम को हटा दें + } +} + +function setup() { + createCanvas(640, 360); + loadData(); +} + +function draw() { + background(255); + + // सभी बुलबुले प्रदर्शित करें + for (let i = 0; i < bubbles.length; i++) { + bubbles[i].display(); + bubbles[i].rollover(mouseX, mouseY); + } + + // नीचे की ओर लेबल निर्देश + textAlign(LEFT); + fill(0); + text('Click to add bubbles.', 10, height - 10); +} diff --git a/src/data/examples/hi/33_Sound/00_Load_and_Play_Sound.js b/src/data/examples/hi/33_Sound/00_Load_and_Play_Sound.js new file mode 100644 index 0000000000..28f63363dc --- /dev/null +++ b/src/data/examples/hi/33_Sound/00_Load_and_Play_Sound.js @@ -0,0 +1,25 @@ +/* + * @name लोड और प्ले साउंड + * @description प्रीलोड के दौरान ध्वनि लोड करें ()। कैनवास पर क्लिक करने पर ध्वनि बजाएं। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर + */ +let song; + +function setup() { + song = loadSound('assets/lucky_dragons_-_power_melody.mp3'); + createCanvas(720, 200); + background(255, 0, 0); +} + +function mousePressed() { + if (song.isPlaying()) { + // .isPlaying () एक बूलियन लौटाता है + song.stop(); + background(255, 0, 0); + } else { + song.play(); + background(0, 255, 0); + } +} diff --git a/src/data/examples/hi/33_Sound/01_Preload_Sound.js b/src/data/examples/hi/33_Sound/01_Preload_Sound.js new file mode 100644 index 0000000000..55e1af05c2 --- /dev/null +++ b/src/data/examples/hi/33_Sound/01_Preload_Sound.js @@ -0,0 +1,34 @@ +/* + * @name प्रीलोड साउंडफाइल + * @description loadsound() के दौरान preload() कॉल करें यह सुनिश्चित करने के लिए कि + * setup() कहे जाने से पहले ध्वनि पूरी तरह से भरी हुई है। यह हमेशा के लिए सबसे अच्छा है + * preload() में loadsound() को कॉल करें, अन्यथा ध्वनियों को लोड करने की आवश्यकता नहीं होगी + * जब तक आप उन्हें अपने स्केच में खेलना चाहें। + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर + */ + +let song; + +function preload() { + song = loadSound('assets/lucky_dragons_-_power_melody.mp3'); +} + +function setup() { + createCanvas(710, 200); + song.loop(); // गाना सेटअप के दौरान चलने के लिए तैयार है () क्योंकि यह प्रीलोड के दौरान लोड किया गया था + background(0, 255, 0); +} + +function mousePressed() { + if (song.isPlaying()) { + // .isPlaying () एक बूलियन लौटाता है + song.pause(); // .play() .pause() स्थिति से फिर से शुरू होगा + background(255, 0, 0); + } else { + song.play(); + background(0, 255, 0); + } +} diff --git a/src/data/examples/hi/33_Sound/02_soundFormats.js b/src/data/examples/hi/33_Sound/02_soundFormats.js new file mode 100644 index 0000000000..2af9a6bebe --- /dev/null +++ b/src/data/examples/hi/33_Sound/02_soundFormats.js @@ -0,0 +1,54 @@ +/** + * @name ध्वनि प्रारूप + * @description

        तकनीकी रूप से, पेटेंट मुद्दों के कारण, कोई एकल नहीं है + * ध्वनि प्रारूप जो सभी वेब ब्राउज़र द्वारा समर्थित है। जबकि + * mp3 समर्थित है पर + * OS X और Windows पर प्रमुख ब्राउज़रों के नवीनतम संस्करण, उदाहरण के लिए, + * यह कुछ कम मुख्यधारा के ऑपरेटिंग सिस्टम पर उपलब्ध नहीं हो सकता है और + * ब्राउज़र।

        + * + *

        पूर्ण संगतता सुनिश्चित करने के लिए, आप समान ध्वनि फ़ाइल शामिल कर सकते हैं + * कई स्वरूपों में, उदा। 'sound.mp3' और 'sound.ogg'। (ओग एक है + * एमपी3 का ओपन सोर्स विकल्प।) आप ऑडियो फाइलों को कन्वर्ट कर सकते हैं + * वेब अनुकूल प्रारूपों में media.io

        । + * + *

        soundformats() विधि लोडसाउंड को बताती है कि कौन से प्रारूप हैं + * हमने अपने स्केच के साथ शामिल किया है। फिर, लोडसाउंड होगा + * द्वारा समर्थित पहले प्रारूप को लोड करने का प्रयास + * क्लाइंट का वेब ब्राउज़र।

        + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर< /पी> + */ +let song; + +function preload() { + // we have included both an .ogg file and an .mp3 file + soundFormats('ogg', 'mp3'); + + // if mp3 is not supported by this browser, + // loadSound will load the ogg file + // we have included with our sketch + song = loadSound('assets/lucky_dragons_-_power_melody.mp3'); +} + +function setup() { + createCanvas(710, 200); + + // song loaded during preload(), ready to play in setup() + song.play(); + background(0, 255, 0); +} + +function mousePressed() { + if (song.isPlaying()) { + // .isPlaying() returns a boolean + song.pause(); + background(255, 0, 0); + } else { + song.play(); // playback will resume from the pause position + background(0, 255, 0); + } +} diff --git a/src/data/examples/hi/33_Sound/03_Play_Mode.js b/src/data/examples/hi/33_Sound/03_Play_Mode.js new file mode 100644 index 0000000000..443b324633 --- /dev/null +++ b/src/data/examples/hi/33_Sound/03_Play_Mode.js @@ -0,0 +1,42 @@ +/* + * @name प्ले मोड + * @description + *

        'सस्टेनेबल' मोड में, ध्वनि अपने आप ओवरलैप हो जाएगी। + * 'पुनरारंभ' मोड में यह रुक जाएगा और फिर से शुरू होगा। + * ध्वनि फ़ाइल चलाने के लिए माउस क्लिक करें। + * एक बार में बहुत सारी आवाज़ें ट्रिगर करें! प्लेमोड बदलने के लिए कोई भी कुंजी दबाएं।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर< /पी> + */ +let playMode = 'sustain'; +let sample; + +function setup() { + createCanvas(710, 50); + soundFormats('mp3', 'ogg'); + sample = loadSound('assets/Damscray_-_Dancing_Tiger_02.mp3'); +} + +function draw() { + background(255, 255, 0); + let str = 'Click here to play! Press key to toggle play mode.'; + str += ' Current Play Mode: ' + playMode + '.'; + text(str, 10, height / 2); +} + +function mouseClicked() { + sample.play(); +} +function keyPressed(k) { + togglePlayMode(); +} + +function togglePlayMode() { + if (playMode === 'sustain') { + playMode = 'restart'; + } else { + playMode = 'sustain'; + } + sample.playMode(playMode); +} diff --git a/src/data/examples/hi/33_Sound/04_Pan_SoundFile.js b/src/data/examples/hi/33_Sound/04_Pan_SoundFile.js new file mode 100644 index 0000000000..3751f0fd68 --- /dev/null +++ b/src/data/examples/hi/33_Sound/04_Pan_SoundFile.js @@ -0,0 +1,34 @@ +/* + * @name पैन साउंड + * @description

        ध्वनि चलाने के लिए माउस क्लिक करें। + * गेंद की स्थिति माउस का अनुसरण करती है और ध्वनि की पैनिंग से संबंधित होती है।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर< /पी> + * + */ +let ball = {}; +let soundFile; + +function preload() { + soundFormats('mp3', 'ogg'); + soundFile = loadSound('assets/beatbox.ogg'); +} + +function setup() { + createCanvas(710, 100); +} + +function draw() { + background(0); + ball.x = constrain(mouseX, 0, width); + ellipse(ball.x, height / 2, 100, 100); +} + +function mousePressed() { + // गेंद के x स्थान को पैनिंग डिग्री पर मैप करें + // -1.0 (बाएं) और 1.0 (दाएं) के बीच + let panning = map(ball.x, 0, width, -1.0, 1.0); + soundFile.pan(panning); + soundFile.play(); +} diff --git a/src/data/examples/hi/33_Sound/05_Sound_Effect.js b/src/data/examples/hi/33_Sound/05_Sound_Effect.js new file mode 100644 index 0000000000..70d99f136f --- /dev/null +++ b/src/data/examples/hi/33_Sound/05_Sound_Effect.js @@ -0,0 +1,69 @@ +/* + * @name ध्वनि प्रभाव + * @description

        माउस को सर्कल के अंदर क्लिक करने पर ध्वनि प्रभाव चलाएं।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +// डैनियल शिफमैन द्वारा लर्निंग प्रोसेसिंग से अनुकूलित from +// http://www.learningprocessing.com +// डोरबेल का नमूना Corsica_S द्वारा freesound.org के माध्यम से, +// क्रिएटिव कॉमन्स BY 3.0 + +// एक "डोरबेल" (वास्तव में एक बटन) का वर्णन करने के लिए एक वर्ग +class Doorbell { + constructor(x_, y_, r_) { + // स्थान और आकार + this.x = x_; + this.y = y_; + this.r = r_; + } + // दरवाजे की घंटी के अंदर एक बिंदु है? (माउस रोलओवर आदि के लिए प्रयुक्त) + contains(mx, my) { + return dist(mx, my, this.x, this.y) < this.r; + } + + // डोरबेल दिखाएं (हार्डकोडेड रंग, बेहतर किया जा सकता है) + display(mx, my) { + if (this.contains(mx, my)) { + fill(100); + } else { + fill(175); + } + stroke(0); + strokeWeight(4); + ellipseMode(RADIUS); + ellipse(this.x, this.y, this.r, this.r); + } +} + +// एक ध्वनि फ़ाइल वस्तु +let dingdong; + +// एक डोरबेल ऑब्जेक्ट (जो ध्वनि को ट्रिगर करेगा) +let doorbell; + +function setup() { + createCanvas(200, 200); + + // ध्वनि फ़ाइल लोड करें। + // हमने एक एमपी3 और एक ओजीजी संस्करण दोनों को शामिल किया है। + soundFormats('mp3', 'ogg'); + dingdong = loadSound('assets/doorbell.mp3'); + + // एक नया डोरबेल बनाएं + doorbell = new Doorbell(width / 2, height / 2, 32); +} + +function draw() { + background(255); + // दरवाजे की घंटी दिखाओ + doorbell.display(mouseX, mouseY); +} + +function mousePressed() { + // यदि उपयोगकर्ता दरवाजे की घंटी पर क्लिक करता है, तो ध्वनि बजाएं! + if (doorbell.contains(mouseX, mouseY)) { + dingdong.play(); + } +} diff --git a/src/data/examples/hi/33_Sound/06_Manipulate_Sound.js b/src/data/examples/hi/33_Sound/06_Manipulate_Sound.js new file mode 100644 index 0000000000..3a6f0e8677 --- /dev/null +++ b/src/data/examples/hi/33_Sound/06_Manipulate_Sound.js @@ -0,0 +1,49 @@ +/* + * @name प्लेबैक दर + * @description

        एक साउंडफाइल लोड करें और इसकी प्लेबैक दर को इस पर मैप करें + * माउसवाई, वॉल्यूम टू माउसएक्स। प्लेबैक दर गति के साथ है + * जो वेब ऑडियो संदर्भ ध्वनि फ़ाइल जानकारी को संसाधित करता है। + * धीमी दरें न केवल ध्वनि की अवधि को बढ़ाती हैं, बल्कि + * पिच को कम करें क्योंकि इसे धीमी आवृत्ति पर वापस खेला जा रहा है।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर< /p> + */ +// एक ध्वनि फ़ाइल वस्तु +let song; + +function preload() { + // एक ध्वनि फ़ाइल लोड करें + song = loadSound('assets/Damscray_DancingTiger.mp3'); +} + +function setup() { + createCanvas(710, 400); + + // ध्वनि को हमेशा के लिए लूप करें + // (ठीक है, कम से कम स्टॉप () कहा जाता है) + song.loop(); +} + +function draw() { + background(200); + + // वॉल्यूम को 0 और 1.0 . के बीच की सीमा पर सेट करें + let volume = map(mouseX, 0, width, 0, 1); + volume = constrain(volume, 0, 1); + song.amp(volume); + + // दर को 0.1 और 4 . के बीच की सीमा पर सेट करें + // दर बदलने से पिच बदल जाती है + let speed = map(mouseY, 0.1, height, 0, 2); + speed = constrain(speed, 0.01, 4); + song.rate(speed); + + // क्या हो रहा है यह दिखाने के लिए कुछ मंडल बनाएं + stroke(0); + fill(51, 100); + ellipse(mouseX, 100, 48, 48); + stroke(0); + fill(51, 100); + ellipse(100, mouseY, 48, 48); +} diff --git a/src/data/examples/hi/33_Sound/07_Amplitude_Analysis.js b/src/data/examples/hi/33_Sound/07_Amplitude_Analysis.js new file mode 100644 index 0000000000..01dec46bc8 --- /dev/null +++ b/src/data/examples/hi/33_Sound/07_Amplitude_Analysis.js @@ -0,0 +1,50 @@ +/** + * @name मापने वाला आयाम + * @description

        ध्वनि के आयाम का विश्लेषण करें + * p5.आयाम।

        + * + *

        आयाम कंपन का परिमाण है। ध्वनि कंपन है, + * इसलिए इसका आयाम आयतन / प्रबलता से निकटता से संबंधित है।

        + * + *

        getLevel() विधि एक सरणी लेती है + * एक छोटी अवधि (1024 नमूने) में एकत्र किए गए आयाम मानों का। + * फिर यह इन मानों का रूट मीन स्क्वायर (RMS) लौटाता है।

        + * + *

        डिजिटल ऑडियो के लिए मूल आयाम मान -1.0 और 1.0 के बीच हैं। + * लेकिन आरएमएस हमेशा सकारात्मक रहेगा, क्योंकि यह चुकता है। + * और, तात्कालिक आयाम रीडिंग का उपयोग करने के बजाय, जिन्हें एक दर पर नमूना लिया जाता है + * प्रति सेकंड ४४,१०० बार, आरएमएस समय के साथ औसत है (इस मामले में १०२४ नमूने), + * जो बेहतर ढंग से दर्शाता है कि हम आयाम कैसे सुनते हैं। + *

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +let song, analyzer; + +function preload() { + song = loadSound('assets/lucky_dragons_-_power_melody.mp3'); +} + +function setup() { + createCanvas(710, 200); + song.loop(); + + // create a new Amplitude analyzer + analyzer = new p5.Amplitude(); + + // Patch the input to an volume analyzer + analyzer.setInput(song); +} + +function draw() { + background(255); + + // Get the average (root mean square) amplitude + let rms = analyzer.getLevel(); + fill(127); + stroke(0); + + // Draw an ellipse with size based on volume + ellipse(width / 2, height / 2, 10 + rms * 200, 10 + rms * 200); +} diff --git a/src/data/examples/hi/33_Sound/08_Noise_Envelope.js b/src/data/examples/hi/33_Sound/08_Noise_Envelope.js new file mode 100644 index 0000000000..e92d67f842 --- /dev/null +++ b/src/data/examples/hi/33_Sound/08_Noise_Envelope.js @@ -0,0 +1,54 @@ +/** + * @name शोर ड्रम लिफाफा + * @description

        श्वेत शोर समान ऊर्जा वाला एक यादृच्छिक ऑडियो संकेत है + * फ़्रीक्वेंसी स्पेक्ट्रम के हर हिस्से पर

        + * + *

        एक लिफाफा फीका पड़ने की एक श्रृंखला है, परिभाषित + * समय / मान जोड़े के रूप में।

        + * + *

        इस उदाहरण में, p5.Env + * p5 को "प्ले" करने के लिए इस्तेमाल किया जाएगा। इसके आउटपुट को नियंत्रित करके ड्रम की तरह शोर + * आयाम। A p5. आयाम स्केच में सभी ध्वनि का स्तर प्राप्त करेगा, और + * हम इस मान का उपयोग एक हरे रंग का आयत बनाने के लिए करेंगे जो लिफाफा दिखाता है + * कार्रवाई में।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी और a + * ध्वनि फ़ाइल।

        + */ +let noise, env, analyzer; + +function setup() { + createCanvas(710, 200); + noise = new p5.Noise(); // अन्य प्रकारों में 'भूरा' और 'गुलाबी' शामिल हैं + noise.start(); + + // शोर की मात्रा को 0 . से गुणा करें + // (जब तक हम शोर करने के लिए तैयार न हों तब तक इसे शांत रखें!) + noise.amp(0); + + env = new p5.Env(); + // सेट अटैकटाइम, डिकेटाइम, सस्टेनरैटियो, रिलीजटाइम + env.setADSR(0.001, 0.1, 0.2, 0.1); + // अटैकलेवल सेट करें, रिलीजलेवल + env.setRange(1, 0); + + // p5. आयाम स्केच में सभी ध्वनि का विश्लेषण करेगा + // जब तक कि इनपुट निर्दिष्ट करने के लिए setInput () विधि का उपयोग नहीं किया जाता है। + analyzer = new p5.Amplitude(); +} + +function draw() { + background(0); + + // p5 से वॉल्यूम रीडिंग प्राप्त करें। आयाम विश्लेषक + let level = analyzer.getLevel(); + + // हरे रंग की आयत बनाने के लिए स्तर का उपयोग करें + let levelHeight = map(level, 0, 0.4, 0, height); + fill(100, 250, 100); + rect(0, height, width, -levelHeight); +} + +function mousePressed() { + env.play(noise); +} diff --git a/src/data/examples/hi/33_Sound/09_Note_Envelope.js b/src/data/examples/hi/33_Sound/09_Note_Envelope.js new file mode 100644 index 0000000000..1c2ba4bcf6 --- /dev/null +++ b/src/data/examples/hi/33_Sound/09_Note_Envelope.js @@ -0,0 +1,61 @@ +/** + * @name नोट लिफाफा + * @description

        एक लिफाफा फीका पड़ने की एक श्रृंखला है, परिभाषित + * समय / मूल्य जोड़े के रूप में। इस उदाहरण में, लिफाफा + * आउटपुट को नियंत्रित करके किसी नोट को "प्ले" करने के लिए उपयोग किया जाएगा + * एक थरथरानवाला का आयाम।

        + * p5.Oscillator इसके माध्यम से अपना आउटपुट भेजता है + * एक आंतरिक वेब ऑडियो GainNode (p5.Oscillator.output)। + * डिफ़ॉल्ट रूप से, उस नोड का निरंतर मान 0.5 होता है। यह + * osc.amp() विधि से रीसेट करें। या, इस उदाहरण में, an + * लिफाफा आयाम को मोड़ते हुए उस नोड को नियंत्रित करता है + * वॉल्यूम नॉब की तरह ऊपर और नीचे।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी और a + * ध्वनि फ़ाइल।

        + */ +let osc, envelope, fft; + +let scaleArray = [60, 62, 64, 65, 67, 69, 71, 72]; +let note = 0; + +function setup() { + createCanvas(710, 200); + osc = new p5.SinOsc(); + + // लिफाफे को तुरंत चालू करें + envelope = new p5.Env(); + + // सेट अटैकटाइम, डिकेटाइम, सस्टेनरैटियो, रिलीजटाइम + envelope.setADSR(0.001, 0.5, 0.1, 0.5); + + // अटैकलेवल सेट करें, रिलीजलेवल + envelope.setRange(1, 0); + + osc.start(); + + fft = new p5.FFT(); + noStroke(); +} + +function draw() { + background(20); + + if (frameCount % 60 === 0 || frameCount === 1) { + let midiValue = scaleArray[note]; + let freqValue = midiToFreq(midiValue); + osc.freq(freqValue); + + envelope.play(osc, 0, 0.1); + note = (note + 1) % scaleArray.length; + } + + // प्लॉट FFT.analyze () कैनवास पर आवृत्ति विश्लेषण + let spectrum = fft.analyze(); + for (let i = 0; i < spectrum.length / 20; i++) { + fill(spectrum[i], spectrum[i] / 10, 0); + let x = map(i, 0, spectrum.length / 20, 0, width); + let h = map(spectrum[i], 0, 255, 0, height); + rect(x, height, spectrum.length / 20, -h); + } +} diff --git a/src/data/examples/hi/33_Sound/10_Oscillator_Waveform.js b/src/data/examples/hi/33_Sound/10_Oscillator_Waveform.js new file mode 100644 index 0000000000..6b49a56e49 --- /dev/null +++ b/src/data/examples/hi/33_Sound/10_Oscillator_Waveform.js @@ -0,0 +1,40 @@ +/* + * @name थरथरानवाला आवृत्ति + * @description

        ऑसिलेटर को नियंत्रित करें और FFT का उपयोग करके तरंग देखें। + * माउसएक्स को फ़्रीक्वेंसी से मैप किया जाता है, माउसवाई को एम्पलीट्यूड में मैप किया जाता है।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी और a + * ध्वनि फ़ाइल।

        + */ +let osc, fft; + +function setup() { + createCanvas(720, 256); + + osc = new p5.TriOsc(); // आवृत्ति और प्रकार सेट करें + osc.amp(0.5); + + fft = new p5.FFT(); + osc.start(); +} + +function draw() { + background(255); + + let waveform = fft.waveform(); // तरंग का विश्लेषण करें + beginShape(); + strokeWeight(5); + for (let i = 0; i < waveform.length; i++) { + let x = map(i, 0, waveform.length, 0, width); + let y = map(waveform[i], -1, 1, height, 0); + vertex(x, y); + } + endShape(); + + // माउसएक्स के आधार पर थरथरानवाला आवृत्ति बदलें + let freq = map(mouseX, 0, width, 40, 880); + osc.freq(freq); + + let amp = map(mouseY, 0, height, 1, 0.01); + osc.amp(amp); +} diff --git a/src/data/examples/hi/33_Sound/11_Live_Input.js b/src/data/examples/hi/33_Sound/11_Live_Input.js new file mode 100644 index 0000000000..b8cb836bb8 --- /dev/null +++ b/src/data/examples/hi/33_Sound/11_Live_Input.js @@ -0,0 +1,36 @@ +/** + * @name Mic Input + * @description

        Get audio input from your computer's microphone. + * Make noise to float the ellipse.

        + *

        Note: p5.AudioIn contains its own p5.Amplitude object, + * so you can call getLevel on p5.AudioIn without + * creating a p5.Amplitude.

        + *

        To run this example locally, you will need the + * p5.sound library + * and a running local server.

        + */ +let mic; + +function setup() { + createCanvas(710, 200); + + // एक ऑडियो इनपुट बनाएं + mic = new p5.AudioIn(); + + // ऑडियो इनपुट शुरू करें। + // डिफ़ॉल्ट रूप से, यह .connect() (कंप्यूटर स्पीकर के लिए) नहीं करता है + mic.start(); +} + +function draw() { + background(200); + + // कुल मात्रा प्राप्त करें (0 और 1.0 के बीच) + let vol = mic.getLevel(); + fill(127); + stroke(0); + + // आयतन के आधार पर ऊंचाई के साथ एक दीर्घवृत्त बनाएं + let h = map(vol, 0, 1, height, 0); + ellipse(width / 2, h - 25, 50, 50); +} diff --git a/src/data/examples/hi/33_Sound/12_FFT_Spectrum.js b/src/data/examples/hi/33_Sound/12_FFT_Spectrum.js new file mode 100644 index 0000000000..098e1247c8 --- /dev/null +++ b/src/data/examples/hi/33_Sound/12_FFT_Spectrum.js @@ -0,0 +1,30 @@ +/** + * @name फ्रीक्वेंसी स्पेक्ट्रम Spec + * @description

        लाइव ऑडियो इनपुट के फ़्रीक्वेंसी स्पेक्ट्रम की कल्पना करें।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * और एक चालू स्थानीय सर्वर

        + */ +let mic, fft; + +function setup() { + createCanvas(710, 400); + noFill(); + + mic = new p5.AudioIn(); + mic.start(); + fft = new p5.FFT(); + fft.setInput(mic); +} + +function draw() { + background(200); + + let spectrum = fft.analyze(); + + beginShape(); + for (i = 0; i < spectrum.length; i++) { + vertex(i, map(spectrum[i], 0, 255, height, 0)); + } + endShape(); +} diff --git a/src/data/examples/hi/33_Sound/13_Mic_Threshold.js b/src/data/examples/hi/33_Sound/13_Mic_Threshold.js new file mode 100644 index 0000000000..341215ba1b --- /dev/null +++ b/src/data/examples/hi/33_Sound/13_Mic_Threshold.js @@ -0,0 +1,49 @@ +/** + * @name माइक थ्रेशोल्ड + * @description

        ऑडियो इनपुट होने पर एक ईवेंट ट्रिगर करें (एक आयत बनाएं)) + * वॉल्यूम एक सीमा से अधिक है।

        + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * और एक चालू स्थानीय सर्वर

        + */ +// लर्निंग प्रोसेसिंग से अनुकूलित, डैनियल शिफमैन +// Learningprocessing.com +let input; +let analyzer; + +function setup() { + createCanvas(710, 200); + background(255); + + // एक ऑडियो इनपुट बनाएं + input = new p5.AudioIn(); + + input.start(); +} + +function draw() { + // कुल मात्रा प्राप्त करें (0 और 1.0 के बीच) + let volume = input.getLevel(); + + // यदि वॉल्यूम> 0.1, एक यादृच्छिक स्थान पर एक रेक्ट खींचा जाता है। + // वॉल्यूम जितना बड़ा होगा, आयत उतना ही बड़ा होगा। + let threshold = 0.1; + if (volume > threshold) { + stroke(0); + fill(0, 100); + rect(random(40, width), random(height), volume * 50, volume * 50); + } + + // थ्रेशोल्ड पर समग्र संभावित आयतन, w / एक रेखा का ग्राफ़ + let y = map(volume, 0, 1, height, 0); + let ythreshold = map(threshold, 0, 1, height, 0); + + noStroke(); + fill(175); + rect(0, 0, 20, height); + // फिर ग्राफ़ पर एक आयत बनाएं, जिसका आकार आयतन के अनुसार हो + fill(0); + rect(0, y, 20, y); + stroke(0); + line(0, ythreshold, 19, ythreshold); +} diff --git a/src/data/examples/hi/33_Sound/14_Filter_LowPass.js b/src/data/examples/hi/33_Sound/14_Filter_LowPass.js new file mode 100644 index 0000000000..0480b4b3ea --- /dev/null +++ b/src/data/examples/hi/33_Sound/14_Filter_LowPass.js @@ -0,0 +1,62 @@ +/** + * @name फ़िल्टर लोपास + * @description p5.LowPass फ़िल्टर को p5.SoundFile पर लागू करें। + * एफएफटी के साथ ध्वनि की कल्पना करें। + * फ़िल्टर की कटऑफ आवृत्ति के लिए माउसX को मैप करें + * और माउसवाई बैंडपास फिल्टर की प्रतिध्वनि/चौड़ाई के लिएY + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +let soundFile; +let fft; + +let filter, filterFreq, filterRes; + +function preload() { + soundFormats('mp3', 'ogg'); + soundFile = loadSound('assets/beat'); +} + +function setup() { + createCanvas(710, 256); + fill(255, 40, 255); + + // loop the sound file + soundFile.loop(); + + filter = new p5.LowPass(); + + // मास्टर आउटपुट से साउंडफाइल को डिस्कनेक्ट करें। + // फिर, इसे फ़िल्टर से कनेक्ट करें, ताकि हम केवल फ़िल्टर की गई ध्वनि सुन सकें + soundFile.disconnect(); + soundFile.connect(filter); + + fft = new p5.FFT(); +} + +function draw() { + background(30); + + // माउसX को न्यूनतम से कटऑफ आवृत्ति पर मैप करें + // आवृत्ति (10 हर्ट्ज) से उच्चतम (22050 हर्ट्ज) जो मनुष्य सुन सकते हैं + filterFreq = map(mouseX, 0, width, 10, 22050); + + // मानचित्र माउसY कटऑफ आवृत्ति पर प्रतिध्वनि (वॉल्यूम बूस्ट) के लिए + filterRes = map(mouseY, 0, height, 15, 5); + + // set filter parameters + filter.set(filterFreq, filterRes); + + // एफएफटी स्पेक्ट्रम विश्लेषण में हर मूल्य ड्रा करें जहां + // x = निम्नतम (10 हर्ट्ज) से उच्चतम (22050 हर्ट्ज) आवृत्तियों, + // h = उस आवृत्ति पर ऊर्जा (आयाम / आयतन) + let spectrum = fft.analyze(); + noStroke(); + for (let i = 0; i < spectrum.length; i++) { + let x = map(i, 0, spectrum.length, 0, width); + let h = -height + map(spectrum[i], 0, 255, height, 0); + rect(x, height, width / spectrum.length, h); + } +} diff --git a/src/data/examples/hi/33_Sound/15_Filter_BandPass.js b/src/data/examples/hi/33_Sound/15_Filter_BandPass.js new file mode 100644 index 0000000000..7285e2d040 --- /dev/null +++ b/src/data/examples/hi/33_Sound/15_Filter_BandPass.js @@ -0,0 +1,51 @@ +/** + * @name फ़िल्टर बैंडपास + * @description सफेद शोर के लिए p5.BandPass फ़िल्टर लागू करें। + * एफएफटी के साथ ध्वनि की कल्पना करें। + * मैप माउसX को बैंडपास फ़्रीक्वेंसी के लिए + * और माउसवाई बैंडपास फिल्टर की प्रतिध्वनि/चौड़ाई के लिएY + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +let noise; +let fft; +let filter, filterFreq, filterWidth; + +function setup() { + createCanvas(710, 256); + fill(255, 40, 255); + + filter = new p5.BandPass(); + + noise = new p5.Noise(); + + noise.disconnect(); // मास्टर आउटपुट से साउंडफाइल को डिस्कनेक्ट करें ... + filter.process(noise); // ... और फ़िल्टर से कनेक्ट करें ताकि हम केवल बैंडपास सुन सकें। + noise.start(); + + fft = new p5.FFT(); +} + +function draw() { + background(30); + + // FFT स्पेक्ट्रम रेंज से एक बैंडपास फ्रीक के लिए माउसX को मैप करें: 10Hz - 22050Hz + filterFreq = map(mouseX, 0, width, 10, 22050); + // मानचित्र माउसY प्रतिध्वनि/चौड़ाई के लिए + filterWidth = map(mouseY, 0, height, 0, 90); + // फ़िल्टर पैरामीटर सेट करें + filter.set(filterFreq, filterWidth); + + // एफएफटी स्पेक्ट्रम विश्लेषण में हर मूल्य ड्रा करें जहां + // x = निम्नतम (10 हर्ट्ज) से उच्चतम (22050 हर्ट्ज) आवृत्तियों, + // एच = उस आवृत्ति पर ऊर्जा / आयाम + let spectrum = fft.analyze(); + noStroke(); + for (let i = 0; i < spectrum.length; i++) { + let x = map(i, 0, spectrum.length, 0, width); + let h = -height + map(spectrum[i], 0, 255, height, 0); + rect(x, height, width / spectrum.length, h); + } +} diff --git a/src/data/examples/hi/33_Sound/16_Delay.js b/src/data/examples/hi/33_Sound/16_Delay.js new file mode 100644 index 0000000000..fd24f0cbe4 --- /dev/null +++ b/src/data/examples/hi/33_Sound/16_Delay.js @@ -0,0 +1,56 @@ +/** + * @name देरी + * @description + * p5 सुनने के लिए माउस क्लिक करें। साउंडफाइल को प्रोसेस करने में देरी करें। + * MouseX p5.Delay फ़िल्टर फ़्रीक्वेंसी को नियंत्रित करता है। + * MouseY p5.Delay Time और Resonance दोनों को नियंत्रित करता है। + * एक आयाम वस्तु के साथ परिणामी ध्वनि की मात्रा की कल्पना करें। + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ + +let soundFile, analyzer, delay; + +function preload() { + soundFormats('ogg', 'mp3'); + soundFile = loadSound('assets/beatbox.mp3'); +} + +function setup() { + createCanvas(710, 400); + + soundFile.disconnect(); // तो हम केवल देरी सुनेंगे + + delay = new p5.Delay(); + delay.process(soundFile, 0.12, 0.7, 2300); + delay.setType('pingPong'); // एक स्टीरियो प्रभाव + + analyzer = new p5.Amplitude(); +} + +function draw() { + background(0); + + // p5 से वॉल्यूम रीडिंग प्राप्त करें। आयाम विश्लेषक + let level = analyzer.getLevel(); + + // हरे रंग की आयत बनाने के लिए स्तर का उपयोग करें + let levelHeight = map(level, 0, 0.1, 0, height); + fill(100, 250, 100); + rect(0, height, width, -levelHeight); + + let filterFreq = map(mouseX, 0, width, 60, 15000); + filterFreq = constrain(filterFreq, 60, 15000); + let filterRes = map(mouseY, 0, height, 3, 0.01); + filterRes = constrain(filterRes, 0.01, 3); + delay.filter(filterFreq, filterRes); + let delTime = map(mouseY, 0, width, 0.2, 0.01); + delTime = constrain(delTime, 0.01, 0.2); + delay.delayTime(delTime); +} + +function mousePressed() { + soundFile.play(); +} diff --git a/src/data/examples/hi/33_Sound/17_Reverb.js b/src/data/examples/hi/33_Sound/17_Reverb.js new file mode 100644 index 0000000000..26e7713d4c --- /dev/null +++ b/src/data/examples/hi/33_Sound/17_Reverb.js @@ -0,0 +1,36 @@ +/** + * @name रेवरब + * @description Reverb ध्वनि को गहराई और कथित स्थान देता है। यहाँ, + * शोर reverb के साथ संसाधित किया जाता है। + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +let sound, reverb; + +function preload() { + soundFormats('mp3', 'ogg'); + soundFile = loadSound('assets/Damscray_DancingTiger'); + + // डिफ़ॉल्ट कनेक्शन को डिस्कनेक्ट करें + // ताकि हम केवल ध्वनि को reverb.process के माध्यम से सुनें + soundFile.disconnect(); +} + +function setup() { + createCanvas(720, 100); + background(0); + + reverb = new p5.Reverb(); + + // सोननेक्ट्स साउंडफाइल a with के साथ रीवरब करने के लिए + // reverb 6 सेकंड का समय, 0.2% की क्षय दर + reverb.process(soundFile, 6, 0.2); + + reverb.amp(4); // और बढ़ाओ! +} + +function mousePressed() { + soundFile.play(); +} diff --git a/src/data/examples/hi/33_Sound/18_Convolution_Reverb.js b/src/data/examples/hi/33_Sound/18_Convolution_Reverb.js new file mode 100644 index 0000000000..43390c4ac5 --- /dev/null +++ b/src/data/examples/hi/33_Sound/18_Convolution_Reverb.js @@ -0,0 +1,87 @@ +/** + * @name कनवल्शन रेवरब + * @description

        p5.Convolver वास्तविक ध्वनि को फिर से बना सकता है + * कनवल्शन का उपयोग करके रिक्त स्थान। कनवल्शन एक आवेग प्रतिक्रिया लेता है, + * (एक कमरे की आवाज़ गूंजती है), और इसका उपयोग करता है + * उस स्थान की ध्वनि को फिर से बनाएं।

        किसी ध्वनि को चलाने के लिए क्लिक करें + * संकल्प। हर बार जब आप क्लिक करते हैं, तो ध्वनि संकुचित हो जाती है + * एक अलग आवेग प्रतिक्रिया। इंपल्स रिस्पांस को ही सुनने के लिए, + * कोई भी कुंजी दबाएं।

        + * + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर। + * ये कनवल्शन नमूने Creative Commons BY . हैं + * + * रिकॉर्डिंगहॉपकिंस

        + */ +let sound, env, cVerb, fft; +let currentIR = 0; +let rawImpulse; + +function preload() { + // हमने सभी आवेगों / ध्वनियों के एमपी 3 और ओजीजी दोनों संस्करणों को शामिल किया है + soundFormats('ogg', 'mp3'); + + // एक p5.Convolver बनाएं + cVerb = createConvolver('assets/bx-spring'); + + // bx-spring के अलावा cVerb.impulses ऐरे में इंपल्स रिस्पॉन्स जोड़ें + cVerb.addImpulse('assets/small-plate'); + cVerb.addImpulse('assets/drum'); + cVerb.addImpulse('assets/beatbox'); + cVerb.addImpulse('assets/concrete-tunnel'); + + // एक ध्वनि लोड करें जिसे p5.ConvultionReverb द्वारा संसाधित किया जाएगा + sound = loadSound('assets/Damscray_DancingTiger'); +} + +function setup() { + createCanvas(710, 400); + rawImpulse = loadSound('assets/' + cVerb.impulses[currentIR].name); + + // मास्टर आउटपुट से डिस्कनेक्ट करें ... + sound.disconnect(); + // ... और cVerb . के साथ प्रक्रिया करें + // ताकि हम केवल reverb सुनें + cVerb.process(sound); + + fft = new p5.FFT(); +} + +function draw() { + background(30); + fill(0, 255, 40); + + let spectrum = fft.analyze(); + + // फ़्रीक्वेंसीस्पेक्ट्रम सरणी में प्रत्येक मान को आयत के रूप में ड्रा करें + noStroke(); + for (let i = 0; i < spectrum.length; i++) { + let x = map(i, 0, spectrum.length, 0, width); + let h = -height + map(spectrum[i], 0, 255, height, 0); + rect(x, height, width / spectrum.length, h); + } +} + +function mousePressed() { + // cVerb.impulses की सरणी के माध्यम से चक्र + currentIR++; + if (currentIR >= cVerb.impulses.length) { + currentIR = 0; + } + cVerb.toggleImpulse(currentIR); + + // आवेग के माध्यम से ध्वनि बजाएं + sound.play(); + + // वर्तमान आवेग प्रतिक्रिया नाम प्रदर्शित करें (फ़ाइलपथ) + println('Convolution Impulse Response: ' + cVerb.impulses[currentIR].name); + + rawImpulse.setPath('assets/' + cVerb.impulses[currentIR].name); +} + +// आवेग खेलें (बिना दृढ़ संकल्प के) +function keyPressed() { + rawImpulse.play(); +} diff --git a/src/data/examples/hi/33_Sound/19_Record_Save.js b/src/data/examples/hi/33_Sound/19_Record_Save.js new file mode 100644 index 0000000000..9cee1ee715 --- /dev/null +++ b/src/data/examples/hi/33_Sound/19_Record_Save.js @@ -0,0 +1,58 @@ +/** + * @name रिकॉर्ड ऑडियो सहेजें + * @description एक ध्वनि रिकॉर्ड करें, इसे वापस चलाएं और सहेजें + * यह क्लाइंट के कंप्यूटर पर .wav फ़ाइल के रूप में। + * हमें तीन वस्तुओं की आवश्यकता है: एक p5.ऑडियोइन (माइक / ध्वनि स्रोत), + * p5.SoundRecorder (ध्वनि रिकॉर्ड करता है), और a + * p5.SoundFile (प्ले बैक / सेव)। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.sound लाइब्रेरी + * एक ध्वनि फ़ाइल, और एक चल रहा स्थानीय सर्वर

        + */ +let mic, recorder, soundFile; + +let state = 0; // माउसप्रेस रिकॉर्ड, स्टॉप, प्ले से बढ़ेगा + +function setup() { + createCanvas(400, 400); + background(200); + fill(0); + text('Enable mic and click the mouse to begin recording', 20, 20); + + // में एक ऑडियो बनाएं + mic = new p5.AudioIn(); + + // उपयोगकर्ताओं को ठीक से काम करने के लिए रिकॉर्डिंग के लिए अपने ब्राउज़र माइक्रोफ़ोन को मैन्युअल रूप से सक्षम करना होगा! + mic.start(); + + // एक साउंड रिकॉर्डर बनाएं + recorder = new p5.SoundRecorder(); + + // माइक को रिकॉर्डर से कनेक्ट करें + recorder.setInput(mic); + + // एक खाली ध्वनि फ़ाइल बनाएं जिसका उपयोग हम रिकॉर्डिंग को प्लेबैक करने के लिए करेंगे + soundFile = new p5.SoundFile(); +} + +function mousePressed() { + // यह सुनिश्चित करने के लिए '.सक्षम' बूलियन का उपयोग करें कि उपयोगकर्ता ने माइक को सक्षम किया है (अन्यथा हम मौन रिकॉर्ड करेंगे) + if (state === 0 && mic.enabled) { + // रिकॉर्डर को p5.SoundFile पर रिकॉर्ड करने के लिए कहें, जिसका उपयोग हम प्लेबैक के लिए करेंगे + recorder.record(soundFile); + + background(255, 0, 0); + text('Recording now! Click to stop.', 20, 20); + state++; + } else if (state === 1) { + recorder.stop(); // रिकॉर्डर को रोकें, और परिणाम को साउंडफाइल पर भेजें + + background(0, 255, 0); + text('Recording stopped. Click to play & save', 20, 20); + state++; + } else if (state === 2) { + soundFile.play(); // परिणाम खेलें! + saveSound(soundFile, 'mySound.wav'); // फाइल सुरक्षित करें + state++; + } +} diff --git a/src/data/examples/hi/33_Sound/21_FreqModulation.js b/src/data/examples/hi/33_Sound/21_FreqModulation.js new file mode 100644 index 0000000000..1fb84a8ea0 --- /dev/null +++ b/src/data/examples/hi/33_Sound/21_FreqModulation.js @@ -0,0 +1,148 @@ +/** + * @name फ़्रीक्वेंसी मॉडुलन + * @description

        फ़्रीक्वेंसी मॉडुलन संश्लेषण का एक शक्तिशाली रूप है। + * अपने सरलतम रूप में, FM में दो ऑसिलेटर शामिल होते हैं, जिन्हें संदर्भित किया जाता है + * वाहक और न्यूनाधिक के रूप में। जैसा कि न्यूनाधिक का तरंग दोलन करता है + * कुछ न्यूनतम और अधिकतम आयाम मान के बीच, वह क्षणिक मान + * वाहक की आवृत्ति ("मॉड्यूलेट") में जोड़ा जाता है।

        + *

        वाहक को आमतौर पर श्रव्य आवृत्ति पर दोलन करने के लिए सेट किया जाता है + * जिसे हम एक पिच के रूप में देखते हैं - इस मामले में, यह 220Hz पर एक साइन वेव थरथरानवाला है, + * "A3" नोट के बराबर। वाहक डिफ़ॉल्ट रूप से मास्टर आउटपुट से जुड़ा होता है + * (यह सभी p5.Oscillators के लिए मामला है)।

        + *

        हम मास्टर आउटपुट से मॉड्यूलेटर को डिस्कनेक्ट करेंगे, + * और इसके बजाय वाहक की आवृत्ति से कनेक्ट करें: + * carrier.freq(modulator). यह के आउटपुट आयाम को जोड़ता है + * वाहक की आवृत्ति के लिए न्यूनाधिक।

        + *

        + * मॉड्यूलेशन गहराई बताती है कि वाहक आवृत्ति कितनी संशोधित करेगी। + * यह न्यूनाधिक के आयाम पर आधारित है। + * न्यूनाधिक आयाम मानों की एक सतत धारा उत्पन्न करता है जिसे हम जोड़ेंगे + * वाहक आवृत्ति के लिए। शून्य के आयाम का अर्थ है मौन, इसलिए मॉडुलन होगा + *कोई प्रभाव नहीं पड़ता। 1.0 का एक आयाम आउटपुट मानों की सीमा को मापता है + * +1.0 और -1.0 के बीच। ध्वनि के लिए यह मानक श्रेणी है जिसे भेजा जाता है + * आपके स्पीकर, लेकिन FM में हम इसके बजाय मॉड्यूलेटर के आउटपुट को कैरियर फ़्रीक्वेंसी पर भेज रहे हैं, + * जहां हम मुश्किल से +1Hz / -1Hz मॉडुलन को नोटिस करेंगे। + * तो हम आम तौर पर न्यूनाधिक के आयाम ("गहराई") को बढ़ाकर संख्याओं की तुलना में बहुत अधिक करेंगे + * हम अपने वक्ताओं को भेज सकते हैं।

        + *

        मॉड्यूलेशन फ़्रीक्वेंसी मॉडुलन की गति है। जब मॉडुलन आवृत्ति कम होती है + * 20 हर्ट्ज से अधिक, हम इसकी आवृत्ति को पिच के रूप में सुनना बंद कर देते हैं, और इसे धड़कन की लय के रूप में सुनना शुरू कर देते हैं। + * उदाहरण के लिए, एक ऑपरेटिव गायक के "वाइब्रेटो" प्रभाव की नकल करने के लिए 20 की गहराई पर 7.5 हर्ट्ज़ आज़माएं। + * इसके लिए शब्द लो फ़्रीक्वेंसी ऑसिलेटर या एलएफओ है। उच्च आवृत्तियों पर सेट किए गए मॉड्यूलेटर कर सकते हैं + * दिलचस्प प्रभाव भी पैदा करते हैं, खासकर जब आवृत्ति का हार्मोनिक संबंध होता है + * वाहक संकेत के लिए। उदाहरण के लिए, सुनें कि क्या होता है जब न्यूनाधिक की आवृत्ति होती है + * वाहक का आधा या दोगुना। यह जॉन चाउनिंग द्वारा विकसित एफएम सिंथेसिस का आधार है + * 1960 के दशक में, जो 1980 के दशक में संश्लेषण में क्रांति लाने के लिए आया था और अक्सर इसका उपयोग संश्लेषण के लिए किया जाता है + * पीतल और घंटी जैसी आवाजें। + * + *

        इस उदाहरण में,

        + * - माउसएक्स -150 से 150 तक मॉड्यूलेशन गहराई (मॉड्यूलेटर का आयाम) को नियंत्रित करता है। + * जब मॉड्यूलेटर का आयाम 0 (बीच में) पर सेट होता है, तो ध्यान दें कि मॉड्यूलेशन कैसे होता है + *कोई प्रभाव नहीं पड़ता। संख्या जितनी अधिक (पूर्ण मान) होगी, प्रभाव उतना ही अधिक होगा। + * यदि मॉड्यूलेटर तरंग एक वर्ग [] की तरह सममित है, तो साइन ~ + * या त्रिभुज /\, ऋणात्मक आयाम धनात्मक आयाम के समान होगा। + * लेकिन इस उदाहरण में, न्यूनाधिक एक विषम चूरा तरंग है, जिसका आकार इस प्रकार है /। + * जब हम इसे किसी ऋणात्मक संख्या से गुणा करते हैं, तो यह इस प्रकार पीछे की ओर जाती है। सबसे अच्छा के लिए + * अंतर देखें, आवृत्ति कम करने का प्रयास करें। + *

        + *

        - MouseY न्यूनाधिक की आवृत्ति को 0 से 112 Hz तक नियंत्रित करता है। + * श्रव्य सीमा के नीचे मॉड्यूलेशन आवृत्तियों की तुलना करने का प्रयास करें (जो लगभग 20 हर्ट्ज से शुरू होता है), + * और इसके ऊपर, विशेष रूप से वाहक आवृत्ति के लिए एक हार्मोनिक संबंध में (जो कि 220hz है, इसलिए + * आधा प्रयास करें, 1/3, 1/4 आदि...)। + * + *

        आपको इसमें शामिल करना होगा + * p5.sound लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + */ + +let carrier; // यह थरथरानवाला है जिसे हम सुनेंगे +let modulator; // यह थरथरानवाला वाहक की आवृत्ति को नियंत्रित करेगा + +let analyzer; // हम इसका उपयोग तरंग की कल्पना करेंगे + +// वाहक आवृत्ति पूर्व-मॉड्यूलेशन +let carrierBaseFreq = 220; + +// न्यूनाधिक के लिए न्यूनतम/अधिकतम रेंजmax +let modMaxFreq = 112; +let modMinFreq = 0; +let modMaxDepth = 150; +let modMinDepth = -150; + +function setup() { + let cnv = createCanvas(800, 400); + noFill(); + + carrier = new p5.Oscillator('sine'); + carrier.amp(0); // आयाम सेट करें + carrier.freq(carrierBaseFreq); // आवृत्ति सेट करें + carrier.start(); // हिलना शुरू करें + + // प्रकार को 'वर्ग', 'साइन' या 'त्रिकोण' में बदलने का प्रयास करें + modulator = new p5.Oscillator('sawtooth'); + modulator.start(); + + // वाहक की आवृत्ति को संशोधित करने के लिए मॉड्यूलेटर का आउटपुट जोड़ें + modulator.disconnect(); + carrier.freq(modulator); + + // ऑडियो का विश्लेषण करने के लिए एक FFT बनाएं + analyzer = new p5.FFT(); + + // माउसओवर / टच स्टार्ट पर वाहक को अंदर / बाहर फीका करें + toggleAudio(cnv); +} + +function draw() { + background(30); + + // मैप माउसY अधिकतम और न्यूनतम आवृत्ति के बीच न्यूनाधिक आवृत्ति के लिए + let modFreq = map(mouseY, height, 0, modMinFreq, modMaxFreq); + modulator.freq(modFreq); + + // न्यूनाधिक के आयाम को बदलें + // नकारात्मक amp चूरा तरंग को उलट देता है, और टक्कर लगता है + // + let modDepth = map(mouseX, 0, width, modMinDepth, modMaxDepth); + modulator.amp(modDepth); + + // तरंग का विश्लेषण करें + waveform = analyzer.waveform(); + + // तरंग का आकार बनाएं + stroke(255); + strokeWeight(10); + beginShape(); + for (let i = 0; i < waveform.length; i++) { + let x = map(i, 0, waveform.length, 0, width); + let y = map(waveform[i], -1, 1, -height / 2, height / 2); + vertex(x, y + height / 2); + } + endShape(); + + strokeWeight(1); + // क्या हो रहा है इसके बारे में एक नोट जोड़ें + text('Modulator Frequency: ' + modFreq.toFixed(3) + ' Hz', 20, 20); + text( + 'Modulator Amplitude (Modulation Depth): ' + modDepth.toFixed(3), + 20, + 40 + ); + text( + 'Carrier Frequency (pre-modulation): ' + carrierBaseFreq + ' Hz', + width / 2, + 20 + ); +} + +// ध्वनि को टॉगल करने के लिए सहायक कार्य +function toggleAudio(cnv) { + cnv.mouseOver(function() { + carrier.amp(1.0, 0.01); + }); + cnv.touchStarted(function() { + carrier.amp(1.0, 0.01); + }); + cnv.mouseOut(function() { + carrier.amp(0.0, 1.0); + }); +} diff --git a/src/data/examples/hi/33_Sound/22_AmplitudeModulation.js b/src/data/examples/hi/33_Sound/22_AmplitudeModulation.js new file mode 100644 index 0000000000..c9b15f7003 --- /dev/null +++ b/src/data/examples/hi/33_Sound/22_AmplitudeModulation.js @@ -0,0 +1,95 @@ +/** + * @name आयाम मॉडुलन + * @description

        एम्पलीट्यूड मॉड्यूलेशन में दो ऑसिलेटर शामिल होते हैं, जिन्हें संदर्भित किया जाता है + * वाहक और न्यूनाधिक के रूप में, जहाँ न्यूनाधिक नियंत्रित करता है + * वाहक का आयाम।

        + * + *

        वाहक आमतौर पर एक श्रव्य आवृत्ति (यानी 440 हर्ट्ज) पर सेट होता है + * और डिफ़ॉल्ट रूप से मास्टर आउटपुट से जुड़ा है। वाहक.amp है + * शून्य पर सेट करें क्योंकि हमारे पास मॉड्यूलेटर इसके आयाम को नियंत्रित करेगा।

        + * + *

        मॉड्यूलेटर मास्टर आउटपुट से डिस्कनेक्ट हो गया है। इसके बजाय, यह जुड़ा हुआ है + * कैरियर के आयाम तक, इस तरह:वाहक.amp(मॉड्यूलेटर)।

        + * + *

        इस उदाहरण में...

        + *

        - MouseX न्यूनाधिक के आयाम को नियंत्रित करता है + * 0 से 1 तक। जब न्यूनाधिक का आयाम 0 पर सेट होता है, तो + * आयाम मॉडुलन का कोई प्रभाव नहीं पड़ता है।

        + * + *

        - MouseY न्यूनाधिक की आवृत्ति को 0 से 20hz तक नियंत्रित करता है। + * यह रेंज मनुष्यों की तुलना में कम आवृत्तियों की है, और हम अनुभव करते हैं + * एक लय के रूप में मॉडुलन। यह श्रेणी ट्रेमोलो जैसे प्रभावों का अनुकरण कर सकती है। + * रिंग मॉड्यूलेशन एक प्रकार का एम्प्लीट्यूड मॉड्यूलेशन है जहां मूल + * वाहक संकेत मौजूद नहीं है, और अक्सर तेजी से मॉडुलन शामिल होता है + * आवृत्ति।

        + * + *

        आपको इसमें शामिल करना होगा + * p5.sound लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए।

        + */ +let carrier; // यह थरथरानवाला है जिसे हम सुनेंगे +let modulator; // यह थरथरानवाला वाहक के आयाम को संशोधित करेगा +let fft; // हम तरंग की कल्पना करेंगे + +function setup() { + createCanvas(800, 400); + noFill(); + background(30); // अल्फा + + carrier = new p5.Oscillator(); // डिफ़ॉल्ट रूप से मास्टर आउटपुट से जुड़ता है + carrier.freq(340); + carrier.amp(0); + // वाहक का amp डिफ़ॉल्ट रूप से 0 है, हमारे न्यूनाधिक को कुल नियंत्रण देता है + + carrier.start(); + + modulator = new p5.Oscillator('triangle'); + modulator.disconnect(); // मास्टर आउटपुट से मॉड्यूलेटर को डिस्कनेक्ट करें + modulator.freq(5); + modulator.amp(1); + modulator.start(); + + // न्यूनाधिक के साथ वाहक के आयाम को संशोधित करें + // वैकल्पिक रूप से, हम सिग्नल को स्केल कर सकते हैं। + carrier.amp(modulator.scale(-1, 1, 1, -1)); + + // ऑडियो का विश्लेषण करने के लिए एक fft बनाएं + fft = new p5.FFT(); +} + +function draw() { + background(30, 30, 30, 100); // अल्फा + + // माउसY को 0 और 20hz के बीच मूड्यूलेटर फ़्रीक में मैप करें + let modFreq = map(mouseY, 0, height, 20, 0); + modulator.freq(modFreq); + + let modAmp = map(mouseX, 0, width, 0, 1); + modulator.amp(modAmp, 0.01); // चिकनी लुप्त होती के लिए 0.1 का फीका समय fade + + // तरंग का विश्लेषण करें + waveform = fft.waveform(); + + // तरंग का आकार बनाएं + drawWaveform(); + + drawText(modFreq, modAmp); +} + +function drawWaveform() { + stroke(240); + strokeWeight(4); + beginShape(); + for (let i = 0; i < waveform.length; i++) { + let x = map(i, 0, waveform.length, 0, width); + let y = map(waveform[i], -1, 1, -height / 2, height / 2); + vertex(x, y + height / 2); + } + endShape(); +} + +function drawText(modFreq, modAmp) { + strokeWeight(1); + text('Modulator Frequency: ' + modFreq.toFixed(3) + ' Hz', 20, 20); + text('Modulator Amplitude: ' + modAmp.toFixed(3), 20, 40); +} diff --git a/src/data/examples/hi/35_Mobile/00_Acceleration_Ball_Bounce.js b/src/data/examples/hi/35_Mobile/00_Acceleration_Ball_Bounce.js new file mode 100644 index 0000000000..1f5c186208 --- /dev/null +++ b/src/data/examples/hi/35_Mobile/00_Acceleration_Ball_Bounce.js @@ -0,0 +1,58 @@ +/* + * @name एक्सेलेरेशन बॉल बाउंस + * @description त्वरणX और त्वरणY मानों के आधार पर एक दीर्घवृत्त को इधर-उधर घुमाएँ, और कैनवास के किनारे को छूने पर उछलता है। + */ + +// स्थिति चर +let x = 0; +let y = 0; + +// गति वेग +let vx = 0; +let vy = 0; + +// त्वरण +let ax = 0; +let ay = 0; + +let vMultiplier = 0.007; +let bMultiplier = 0.6; + +function setup() { + createCanvas(displayWidth, displayHeight); + fill(0); +} + +function draw() { + background(255); + ballMove(); + ellipse(x, y, 30, 30); +} + +function ballMove() { + ax = accelerationX; + ay = accelerationY; + + vx = vx + ay; + vy = vy + ax; + y = y + vy * vMultiplier; + x = x + vx * vMultiplier; + + // कैनवास के किनारे को छूने पर उछलें + if (x < 0) { + x = 0; + vx = -vx * bMultiplier; + } + if (y < 0) { + y = 0; + vy = -vy * bMultiplier; + } + if (x > width - 20) { + x = width - 20; + vx = -vx * bMultiplier; + } + if (y > height - 20) { + y = height - 20; + vy = -vy * bMultiplier; + } +} diff --git a/src/data/examples/hi/35_Mobile/01_Simple_Draw.js b/src/data/examples/hi/35_Mobile/01_Simple_Draw.js new file mode 100644 index 0000000000..b558da7f27 --- /dev/null +++ b/src/data/examples/hi/35_Mobile/01_Simple_Draw.js @@ -0,0 +1,15 @@ +/* + * @name सिंपल ड्रा + * @description mouseX, mouseY, pmouseX, और pmouseY मानों का उपयोग करके स्क्रीन पर ड्रा करने के लिए स्पर्श करें। + */ + +function setup() { + createCanvas(displayWidth, displayHeight); + strokeWeight(10); + stroke(0); +} + +function touchMoved() { + line(mouseX, mouseY, pmouseX, pmouseY); + return false; +} diff --git a/src/data/examples/hi/35_Mobile/02_Acceleration_Color.js b/src/data/examples/hi/35_Mobile/02_Acceleration_Color.js new file mode 100644 index 0000000000..25ce60604f --- /dev/null +++ b/src/data/examples/hi/35_Mobile/02_Acceleration_Color.js @@ -0,0 +1,24 @@ +/* + * @name त्वरण रंग + * @description डिवाइस को घुमाए जाने का पता लगाने के लिए deviceMoved() का उपयोग करें। पृष्ठभूमि आरजीबी रंग मान एक्सेलेरेशन एक्स, एक्सेलेरेशन वाई, और एक्सेलेरेशन जेड मानों पर मैप किए जाते हैं। + */ + +let r, g, b; + +function setup() { + createCanvas(displayWidth, displayHeight); + r = random(50, 255); + g = random(0, 200); + b = random(50, 255); +} + +function draw() { + background(r, g, b); + console.log('draw'); +} + +function deviceMoved() { + r = map(accelerationX, -90, 90, 100, 175); + g = map(accelerationY, -90, 90, 100, 200); + b = map(accelerationZ, -90, 90, 100, 200); +} diff --git a/src/data/examples/hi/35_Mobile/03_Shake_Ball_Bounce.js b/src/data/examples/hi/35_Mobile/03_Shake_Ball_Bounce.js new file mode 100644 index 0000000000..a2ccf26b51 --- /dev/null +++ b/src/data/examples/hi/35_Mobile/03_Shake_Ball_Bounce.js @@ -0,0 +1,114 @@ +/* + * @name शेक बॉल बाउंस + * @description एक बॉल क्लास बनाएं, कई ऑब्जेक्ट्स को इंस्टेंट करें, इसे स्क्रीन के चारों ओर घुमाएं, और कैनवास के किनारे को छूने पर बाउंस करें। + * त्वरणX और त्वरण में कुल परिवर्तन के आधार पर शेक घटना का पता लगाएं और पता लगाने के आधार पर वस्तुओं को गति दें या धीमा करें। + */ + +let balls = []; + +let threshold = 30; +let accChangeX = 0; +let accChangeY = 0; +let accChangeT = 0; + +function setup() { + createCanvas(displayWidth, displayHeight); + + for (let i = 0; i < 20; i++) { + balls.push(new Ball()); + } +} + +function draw() { + background(0); + + for (let i = 0; i < balls.length; i++) { + balls[i].move(); + balls[i].display(); + } + + checkForShake(); +} + +function checkForShake() { + // Calculate total change in accelerationX and accelerationY + accChangeX = abs(accelerationX - pAccelerationX); + accChangeY = abs(accelerationY - pAccelerationY); + accChangeT = accChangeX + accChangeY; + // If shake + if (accChangeT >= threshold) { + for (let i = 0; i < balls.length; i++) { + balls[i].shake(); + balls[i].turn(); + } + } + // If not shake + else { + for (let i = 0; i < balls.length; i++) { + balls[i].stopShake(); + balls[i].turn(); + balls[i].move(); + } + } +} + +// Ball class +class Ball { + constructor() { + this.x = random(width); + this.y = random(height); + this.diameter = random(10, 30); + this.xspeed = random(-2, 2); + this.yspeed = random(-2, 2); + this.oxspeed = this.xspeed; + this.oyspeed = this.yspeed; + this.direction = 0.7; + } + + move() { + this.x += this.xspeed * this.direction; + this.y += this.yspeed * this.direction; + } + + // Bounce when touch the edge of the canvas + turn() { + if (this.x < 0) { + this.x = 0; + this.direction = -this.direction; + } else if (this.y < 0) { + this.y = 0; + this.direction = -this.direction; + } else if (this.x > width - 20) { + this.x = width - 20; + this.direction = -this.direction; + } else if (this.y > height - 20) { + this.y = height - 20; + this.direction = -this.direction; + } + } + + // Add to xspeed and yspeed based on + // the change in accelerationX value + shake() { + this.xspeed += random(5, accChangeX / 3); + this.yspeed += random(5, accChangeX / 3); + } + + // Gradually slows down + stopShake() { + if (this.xspeed > this.oxspeed) { + this.xspeed -= 0.6; + } else { + this.xspeed = this.oxspeed; + } + if (this.yspeed > this.oyspeed) { + this.yspeed -= 0.6; + } else { + this.yspeed = this.oyspeed; + } + } + + display() { + ellipse(this.x, this.y, this.diameter, this.diameter); + } +} diff --git a/src/data/examples/hi/35_Mobile/04_Tilted_3D_Box.js b/src/data/examples/hi/35_Mobile/04_Tilted_3D_Box.js new file mode 100644 index 0000000000..45e5b29d63 --- /dev/null +++ b/src/data/examples/hi/35_Mobile/04_Tilted_3D_Box.js @@ -0,0 +1,15 @@ +/* + * @name झुका हुआ 3D बॉक्स + * @description बॉक्स को झुकाने के लिए मोबाइल का इस्तेमाल करें + */ +function setup() { + createCanvas(displayWidth, displayHeight, WEBGL); +} + +function draw() { + background(250); + normalMaterial(); + rotateX(accelerationX * 0.01); + rotateY(accelerationY * 0.01); + box(100, 100, 100); +} diff --git a/src/data/examples/hi/90_Hello_P5/01_shapes.js b/src/data/examples/hi/90_Hello_P5/01_shapes.js new file mode 100644 index 0000000000..7b7702c953 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/01_shapes.js @@ -0,0 +1,28 @@ +/* + * @name सरल आकार + * @description इस उदाहरण में एक वृत्त, वर्ग, त्रिभुज और एक फूल शामिल है। + */ +function setup() { + // कैनवास बनाएं + createCanvas(720, 400); + background(200); + + // रंग सेट करें + fill(204, 101, 192, 127); + stroke(127, 63, 120); + + // एक चतुर्भुज + rect(40, 120, 120, 40); + // एक दीर्घवृत्त + ellipse(240, 240, 80, 80); + // एक त्रिभुज + triangle(300, 100, 320, 100, 310, 80); + + // एक साधारण फूल के लिए एक डिजाइन + translate(580, 200); + noStroke(); + for (let i = 0; i < 10; i ++) { + ellipse(0, 30, 20, 80); + rotate(PI/5); + } +} diff --git a/src/data/examples/hi/90_Hello_P5/02_interactivity.js b/src/data/examples/hi/90_Hello_P5/02_interactivity.js new file mode 100644 index 0000000000..9d2c07f1f3 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/02_interactivity.js @@ -0,0 +1,40 @@ +/* + * @name अन्तरक्रियाशीलता 1 + * @frame 720,425 + * @description जब आप इस पर क्लिक करते हैं तो सर्कल का रंग बदल जाता है। + *

        इस उदाहरण को स्थानीय रूप से चलाने के लिए, आपको इसकी आवश्यकता होगी + * p5.dom लाइब्रेरी। + *

        + */ + +// लाल, और रंग के रंग के लिए +let r, g, b; + +function setup() { + createCanvas(720, 400); + // बेतरतीब ढंग से रंग चुनें + r = random(255); + g = random(255); + b = random(255); +} + +function draw() { + background(127); + // एक चक्र बनाएं + strokeWeight(2); + stroke(r, g, b); + fill(r, g, b, 127); + ellipse(360, 200, 200, 200); +} + +// जब उपयोगकर्ता माउस पर क्लिक करता है +function mousePressed() { + // जांचें कि क्या माउस सर्कल के अंदर है + let d = dist(mouseX, mouseY, 360, 200); + if (d < 100) { + // नए यादृच्छिक रंग मान चुनें + r = random(255); + g = random(255); + b = random(255); + } +} diff --git a/src/data/examples/hi/90_Hello_P5/03_interactivity.js b/src/data/examples/hi/90_Hello_P5/03_interactivity.js new file mode 100644 index 0000000000..ffed52fa11 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/03_interactivity.js @@ -0,0 +1,29 @@ +/* + * @name अन्तरक्रियाशीलता 2 + * @frame 720,425 + * @description जब आप स्लाइडर को घुमाते हैं तो वृत्त का रंग बदल जाता है। + * आपको शामिल करने की आवश्यकता होगी + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए। + */ + +// एक HTML रेंज स्लाइडर +let slider; + +function setup() { + createCanvas(720, 400); + // रंग, संतृप्ति और चमक + colorMode(HSB, 255); + // स्लाइडर में 0 और 255 के बीच की सीमा होती है, जिसका शुरुआती मान 127 . होता है + slider = createSlider(0, 255, 127); +} + +function draw() { + background(127); + strokeWeight(2); + + // स्लाइडर के अनुसार रंग सेट करें + stroke(slider.value(), 255, 255); + fill(slider.value(), 255, 255, 127); + ellipse(360, 200, 200, 200); +} \ No newline at end of file diff --git a/src/data/examples/hi/90_Hello_P5/04_animate.js b/src/data/examples/hi/90_Hello_P5/04_animate.js new file mode 100644 index 0000000000..0657f9e729 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/04_animate.js @@ -0,0 +1,33 @@ +/* + * @name एनिमेशन + * @description सर्कल चलता है। + */ +// सर्कल कहां है +let x, y; + +function setup() { + createCanvas(720, 400); + // बीच में शुरू होता है + x = width / 2; + y = height; +} + +function draw() { + background(200); + + // एक चक्र बनाएं + stroke(50); + fill(100); + ellipse(x, y, 24, 24); + + // क्षैतिज अक्ष पर बेतरतीब ढंग से झूलना + x = x + random(-1, 1); + // निरंतर गति से ऊपर जा रहा है + y = y - 1; + + // नीचे की ओर रीसेट करें + if (y < 0) { + y = height; + } +} + diff --git a/src/data/examples/hi/90_Hello_P5/04_flocking.js b/src/data/examples/hi/90_Hello_P5/04_flocking.js new file mode 100644 index 0000000000..8b3b5a9dfd --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/04_flocking.js @@ -0,0 +1,185 @@ +/* + * @name झुंड + * @description क्रेग रेनॉल्ड्स के "फ्लॉकिंग" व्यवहार का प्रदर्शन।
        + * (नियम: सामंजस्य, पृथक्करण, संरेखण।)
        + * natureofcode.com से। + */ +let boids = []; + +function setup() { + createCanvas(720, 400); + + // सिस्टम में बोलियों का एक प्रारंभिक सेट जोड़ें + for (let i = 0; i < 100; i++) { + boids[i] = new Boid(random(width), random(height)); + } +} + +function draw() { + background(51); + // सभी बोड्स चलाएं + for (let i = 0; i < boids.length; i++) { + boids[i].run(boids); + } +} + +// बोईड क्लास +// पृथक्करण, सामंजस्य, संरेखण के तरीके जोड़े गए +class Boid { + constructor(x, y) { + this.acceleration = createVector(0, 0); + this.velocity = p5.Vector.random2D(); + this.position = createVector(x, y); + this.r = 3.0; + this.maxspeed = 3; // अधिकतम गति + this.maxforce = 0.05; // अधिकतम स्टीयरिंग बल + } + + run(boids) { + this.flock(boids); + this.update(); + this.borders(); + this.render(); + } + + // बल त्वरण में जाते हैं + applyForce(force) { + this.acceleration.add(force); + } + + // हम हर बार तीन नियमों के आधार पर एक नया त्वरण जमा करते हैं + flock(boids) { + let sep = this.separate(boids); // पृथक्करण + let ali = this.align(boids); // संरेखण + let coh = this.cohesion(boids); // सामंजस्य + // मनमाने ढंग से इन ताकतों को तौलें + sep.mult(2.5); + ali.mult(1.0); + coh.mult(1.0); + // बल वैक्टर को त्वरण में जोड़ें + this.applyForce(sep); + this.applyForce(ali); + this.applyForce(coh); + } + + // स्थान अपडेट करने की विधि + update() { + // वेग अपडेट करें + this.velocity.add(this.acceleration); + // सीमा गति + this.velocity.limit(this.maxspeed); + this.position.add(this.velocity); + // प्रत्येक चक्र में त्वरण को 0 पर रीसेट करें + this.acceleration.mult(0); + } + + // एक विधि जो एक लक्ष्य की ओर एक स्टीयरिंग बल की गणना और लागू करती है + // स्टीयर = वांछित माइनस वेलोसिटी + seek(target) { + let desired = p5.Vector.sub(target, this.position); // स्थान से लक्ष्य की ओर इशारा करते हुए एक वेक्टर + // वांछित और स्केल को अधिकतम गति के लिए सामान्यीकृत करें + desired.normalize(); + desired.mult(this.maxspeed); + // संचालन = वांछित शून्य वेग + let steer = p5.Vector.sub(desired, this.velocity); + steer.limit(this.maxforce); // अधिकतम स्टीयरिंग बल तक सीमित करें + return steer; + } + + // एक सर्कल के रूप में बोइड ड्रा करें + render() { + fill(127, 127); + stroke(200); + ellipse(this.position.x, this.position.y, 16, 16); + } + + // चारों ओर लपेट दो + borders() { + if (this.position.x < -this.r) this.position.x = width + this.r; + if (this.position.y < -this.r) this.position.y = height + this.r; + if (this.position.x > width + this.r) this.position.x = -this.r; + if (this.position.y > height + this.r) this.position.y = -this.r; + } + + // पृथक्करण + // विधि आस-पास के boids के लिए जाँच करता है और दूर चला जाता है + separate(boids) { + let desiredseparation = 25.0; + let steer = createVector(0, 0); + let count = 0; + // सिस्टम में प्रत्येक बोड के लिए, जांचें कि क्या यह बहुत करीब है + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position, boids[i].position); + // यदि दूरी 0 से अधिक है और मनमानी राशि से कम है (0 जब आप स्वयं हों) + if ((d > 0) && (d < desiredseparation)) { + // पड़ोसी से दूर की ओर इशारा करते हुए वेक्टर की गणना करें + let diff = p5.Vector.sub(this.position, boids[i].position); + diff.normalize(); + diff.div(d); // दूरी से वजन + steer.add(diff); + count++; // कितने का ट्रैक रखें + } + } + // औसत -- कितने से विभाजित करें + if (count > 0) { + steer.div(count); + } + + // जब तक वेक्टर 0 . से बड़ा है + if (steer.mag() > 0) { + // रेनॉल्ड्स को लागू करें: संचालन = वांछित - वेग + steer.normalize(); + steer.mult(this.maxspeed); + steer.sub(this.velocity); + steer.limit(this.maxforce); + } + return steer; + } + + // संरेखण + // सिस्टम में प्रत्येक आस-पास के बोड के लिए, औसत वेग की गणना करें + align(boids) { + let neighbordist = 50; + let sum = createVector(0, 0); + let count = 0; + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position, boids[i].position); + if ((d > 0) && (d < neighbordist)) { + sum.add(boids[i].velocity); + count++; + } + } + if (count > 0) { + sum.div(count); + sum.normalize(); + sum.mult(this.maxspeed); + let steer = p5.Vector.sub(sum, this.velocity); + steer.limit(this.maxforce); + return steer; + } else { + return createVector(0, 0); + } + } + + // सामंजस्य + // आस-पास के सभी बोड्स के औसत स्थान (अर्थात केंद्र) के लिए, उस स्थान की ओर स्टीयरिंग वेक्टर की गणना करें + cohesion(boids) { + let neighbordist = 50; + let sum = createVector(0, 0); // सभी स्थानों को जमा करने के लिए खाली वेक्टर से शुरू करें + let count = 0; + for (let i = 0; i < boids.length; i++) { + let d = p5.Vector.dist(this.position, boids[i].position); + if ((d > 0) && (d < neighbordist)) { + sum.add(boids[i].position); // स्थान जोड़ना + count++; + } + } + if (count > 0) { + sum.div(count); + return this.seek(sum); // स्थान की ओर बढ़ें + } else { + return createVector(0, 0); + } + } +} + diff --git a/src/data/examples/hi/90_Hello_P5/05_weather.js b/src/data/examples/hi/90_Hello_P5/05_weather.js new file mode 100644 index 0000000000..24f5f25472 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/05_weather.js @@ -0,0 +1,73 @@ +/* + * @name मौसम + * @frame 720,280 + * @description यह उदाहरण apixu.com से JSON मौसम डेटा प्राप्त करता है। + * आपको शामिल करने की आवश्यकता होगी + * p5.dom लाइब्रेरी + * इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए। +*/ + +// एक हवा की दिशा वेक्टर +let wind; +// सर्कल की स्थिति +let position; + +function setup() { + createCanvas(720, 200); + // apixu.com से डेटा का अनुरोध करें + let url = 'https://api.apixu.com/v1/current.json?key=513d8003c8b348f1a2461629162106&q=NYC'; + loadJSON(url, gotWeather); + // सर्कल बीच में शुरू होता है + position = createVector(width/2, height/2); + // हवा शुरू होती है (0,0) + wind = createVector(); +} + +function draw() { + background(200); + + // यह खंड हवा की दिशा की ओर इशारा करते हुए एक तीर खींचता है + push(); + translate(32, height - 32); + // हवा के कोण से घुमाएं + rotate(wind.heading() + PI/2); + noStroke(); + fill(255); + ellipse(0, 0, 48, 48); + + stroke(45, 123, 182); + strokeWeight(3); + line(0, -16, 0, 16); + + noStroke(); + fill(45, 123, 182); + triangle(0, -18, -6, -10, 6, -10); + pop(); + + // हवा की दिशा में आगे बढ़ें + position.add(wind); + + stroke(0); + fill(51); + ellipse(position.x, position.y, 16, 16); + + if (position.x > width) position.x = 0; + if (position.x < 0) position.x = width; + if (position.y > height) position.y = 0; + if (position.y < 0) position.y = height; +} + +function gotWeather(weather) { + + // कोण प्राप्त करें (रेडियन में कनवर्ट करें) + let angle = radians(Number(weather.current.wind_degree)); + // हवा की गति प्राप्त करें + let windmag = Number(weather.current.wind_mph); + + // HTML तत्वों के रूप में प्रदर्शित करें + let temperatureDiv = createDiv(floor(weather.current.temp_f) + '°'); + let windDiv = createDiv("WIND " + windmag + " MPH"); + + // एक वेक्टर बनाएं + wind = p5.Vector.fromAngle(angle); +} diff --git a/src/data/examples/hi/90_Hello_P5/06_drawing.js b/src/data/examples/hi/90_Hello_P5/06_drawing.js new file mode 100644 index 0000000000..336fcde85a --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/06_drawing.js @@ -0,0 +1,132 @@ +/* +* @name ड्राइंग +* @description जनरेटिव पेंटिंग प्रोग्राम। +*/ + +// सभी पथ +let paths = []; +// क्या हम पेंटिंग कर रहे हैं? +let painting = false; +// अगले सर्कल तक कब तक +let next = 0; +// अब हम कहाँ हैं और हम कहाँ थे? +let current; +let previous; + +function setup() { + createCanvas(720, 400); + current = createVector(0,0); + previous = createVector(0,0); +}; + +function draw() { + background(200); + + // यदि यह एक नए बिंदु के लिए समय है + if (millis() > next && painting) { + + // माउस की स्थिति को पकड़ो + current.x = mouseX; + current.y = mouseY; + + // नए कण का बल माउस की गति पर आधारित होता है + let force = p5.Vector.sub(current, previous); + force.mult(0.05); + + // नया कण जोड़ें + paths[paths.length - 1].add(current, force); + + // अगले सर्कल को शेड्यूल करें + next = millis() + random(100); + + // माउस मूल्यों को स्टोर करें + previous.x = current.x; + previous.y = current.y; + } + + // सभी पथ बनाएं + for( let i = 0; i < paths.length; i++) { + paths[i].update(); + paths[i].display(); + } +} + +// इसे शुरू करो +function mousePressed() { + next = 0; + painting = true; + previous.x = mouseX; + previous.y = mouseY; + paths.push(new Path()); +} + +// रुकें +function mouseReleased() { + painting = false; +} + +// पथ कणों की एक सूची है +class Path { + constructor() { + this.particles = []; + this.hue = random(100); + } + + add(position, force) { + // स्थिति, बल और रंग के साथ एक नया कण जोड़ें + this.particles.push(new Particle(position, force, this.hue)); + } + + // डिस्प्ले प्लाथ + update() { + for (let i = 0; i < this.particles.length; i++) { + this.particles[i].update(); + } + } + + // डिस्प्ले प्लाथ + display() { + // पीछे की ओर से लूप करें + for (let i = this.particles.length - 1; i >= 0; i--) { + // अगर हम इसे हटा देते हैं + if (this.particles[i].lifespan <= 0) { + this.particles.splice(i, 1); + // अन्यथा, इसे प्रदर्शित करें + } else { + this.particles[i].display(this.particles[i+1]); + } + } + + } +} + +// पथ के साथ कण +class Particle { + constructor(position, force, hue) { + this.position = createVector(position.x, position.y); + this.velocity = createVector(force.x, force.y); + this.drag = 0.95; + this.lifespan = 255; + } + + update() { + // इसे हटाएं + this.position.add(this.velocity); + // इसे धीमा करें + this.velocity.mult(this.drag); + // इसे फीका करें + this.lifespan--; + } + + // कण ड्रा करें और इसे एक लाइन से कनेक्ट करें + // दूसरे के लिए एक रेखा खींचें + display(other) { + stroke(0, this.lifespan); + fill(0, this.lifespan/2); + ellipse(this.position.x,this.position.y, 8, 8); + // यदि हमें एक रेखा खींचने की आवश्यकता है + if (other) { + line(this.position.x, this.position.y, other.position.x, other.position.y); + } + } +} diff --git a/src/data/examples/hi/90_Hello_P5/07_song.js b/src/data/examples/hi/90_Hello_P5/07_song.js new file mode 100644 index 0000000000..6f4a741a26 --- /dev/null +++ b/src/data/examples/hi/90_Hello_P5/07_song.js @@ -0,0 +1,119 @@ +/* + * @name गीत + * @frame 720, 430 + * @description एक गाना बजाएं। + * आपको शामिल करने की आवश्यकता होगी + * p5.sound + * पुस्तकालय इस उदाहरण के लिए अपने स्वयं के प्रोजेक्ट में काम करने के लिए। + */ +// एक पैमाने के मिडी नोट +let notes = [ 60, 62, 64, 65, 67, 69, 71]; + +// स्वचालित रूप से गाना बजाने के लिए +let index = 0; +let song = [ + { note: 4, duration: 400, display: "D" }, + { note: 0, duration: 200, display: "G" }, + { note: 1, duration: 200, display: "A" }, + { note: 2, duration: 200, display: "B" }, + { note: 3, duration: 200, display: "C" }, + { note: 4, duration: 400, display: "D" }, + { note: 0, duration: 400, display: "G" }, + { note: 0, duration: 400, display: "G" } +]; +let trigger = 0; +let autoplay = false; +let osc; + +function setup() { + createCanvas(720, 400); + let div = createDiv("Click to play notes or ") + div.id("instructions"); + let button = createButton("play song automatically."); + button.parent("instructions"); + // ट्रिगर स्वचालित रूप से खेल रहा है + button.mousePressed(function() { + if (!autoplay) { + index = 0; + autoplay = true; + } + }); + + // एक त्रिकोण थरथरानवाला + osc = new p5.TriOsc(); + // शुरू करें + osc.start(); + osc.amp(0); +} + +// एक नोट खेलने के लिए एक समारोह +function playNote(note, duration) { + osc.freq(midiToFreq(note)); + // इसे फीका करें + osc.fade(0.5,0.2); + + // यदि हम एक अवधि निर्धारित करते हैं, तो इसे फीका कर दें + if (duration) { + setTimeout(function() { + osc.fade(0,0.2); + }, duration-50); + } +} + +function draw() { + + // यदि हम ऑटोप्ले कर रहे हैं और यह अगले नोट के लिए समय है + if (autoplay && millis() > trigger){ + playNote(notes[song[index].note], song[index].duration); + trigger = millis() + song[index].duration; + // अगले नोट पर जाएं + index ++; + // हम अंत में हैं, ऑटोप्ले करना बंद करें। + } else if (index >= song.length) { + autoplay = false; + } + + + // एक कीबोर्ड बनाएं + + // प्रत्येक कुंजी की चौड़ाई + let w = width / notes.length; + for (let i = 0; i < notes.length; i++) { + let x = i * w; + // यदि माउस कुंजी के ऊपर है + if (mouseX > x && mouseX < x + w && mouseY < height) { + // अगर हम क्लिक कर रहे हैं + if (mouseIsPressed) { + fill(100,255,200); + // या बस लुढ़कना + } else { + fill(127); + } + } else { + fill(200); + } + + // या अगर हम गाना बजा रहे हैं, तो इसे भी हाइलाइट करें + if (autoplay && i === song[index-1].note) { + fill(100,255,200); + } + + // कुंजी ड्रा करें + rect(x, 0, w-1, height-1); + } + +} + +// जब हम क्लिक करते हैं +function mousePressed(event) { + if(event.button == 0 && event.clientX < width && event.clientY < height) { + // माउस को प्रमुख इंडेक्स पर मैप करें + let key = floor(map(mouseX, 0, width, 0, notes.length)); + playNote(notes[key]); + } +} + +// जब हम रिलीज करते हैं तो इसे फीका कर दें +function mouseReleased() { + osc.fade(0,0.5); +} diff --git a/src/data/examples/ko/00_Structure/00_Statements_and_Comments.js b/src/data/examples/ko/00_Structure/00_Statements_and_Comments.js new file mode 100644 index 0000000000..36a4d268b6 --- /dev/null +++ b/src/data/examples/ko/00_Structure/00_Statements_and_Comments.js @@ -0,0 +1,22 @@ +/* + * @name 스테이트멘트와 코멘트 + * @description 스테이트멘트는 프로그램을 형성하는 작은 단위의 문장입니다. 스테이트멘트의 끝은 ";" (세미콜론)를 사용합니다. + * 이 것을 "스테이트멘트 종결 기호" ("statement * terminator")이라고 합니다. 반면에 코멘트는 + * 더욱 편리한 이해를 위해 사용하는 일종의 메모입니다. 코멘트는 두 개의 슬래시 ("//")로 시작합니다. + * (https://processing.org/examples/statementscomments.html에서 옮김) + */ + +// createCanvas 함수는 컴퓨터에게 만들 윈도의 크기를 지정하는 함수 스테이트멘트입니다. +// 함수 스테이트멘트는 0개 이상의 인자 (parameter)가 있읍니다. +// 인자들는 함수에 사용되는 데이터며, 인자들의 값으로 컴퓨터의 행동을 지정합니다. + +function setup() { + createCanvas(710, 400); +} + +// background 함수는 컴퓨터에게 만들 위토의 배경색 (또는 회색도)를 +// 지정하는 함수 스테이트멘트입니다. +function draw() { + background(204, 153, 0); +} + diff --git a/src/data/examples/ko/00_Structure/00_Coordinates.js b/src/data/examples/ko/00_Structure/01_Coordinates.js similarity index 99% rename from src/data/examples/ko/00_Structure/00_Coordinates.js rename to src/data/examples/ko/00_Structure/01_Coordinates.js index b701b0c7cc..a356a75f66 100644 --- a/src/data/examples/ko/00_Structure/00_Coordinates.js +++ b/src/data/examples/ko/00_Structure/01_Coordinates.js @@ -4,6 +4,7 @@ * 모든 좌표값은 원점으로부터의 거리를 픽셀 단위로 측정합니다. * 원점 [0,0]는 화면 좌측 상단의 좌표이며, 우측 하단의 좌표는 [너비-1, 높이-1]에 해당합니다. */ + function setup() { // 캔버스 크기를 너비 720픽셀, 높이 720픽셀로 설정 createCanvas(720, 400); diff --git a/src/data/examples/ko/00_Structure/01_Statements_and_Comments.js b/src/data/examples/ko/00_Structure/01_Statements_and_Comments.js deleted file mode 100644 index 8469f369b7..0000000000 --- a/src/data/examples/ko/00_Structure/01_Statements_and_Comments.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * @name Comments and Statements - * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. It is called the "statement * terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). (ported from https://processing.org/examples/statementscomments.html) - */ -// The createCanvas function is a statement that tells the computer -// how large to make the window. -// Each function statement has zero or more parameters. -// Parameters are data passed into the function -// and are used as values for telling the computer what to do. -function setup() { - createCanvas(710, 400); -} - -// The background function is a statement that tells the computer -// which color (or gray value) to make the background of the display window -function draw() { - background(204, 153, 0); -} - diff --git a/src/data/examples/ko/01_Form/08_Trig_Wheels_and_Pie_Chart.js b/src/data/examples/ko/01_Form/08_Trig_Wheels_and_Pie_Chart.js index 20597a112e..0f0b07a2fa 100644 --- a/src/data/examples/ko/01_Form/08_Trig_Wheels_and_Pie_Chart.js +++ b/src/data/examples/ko/01_Form/08_Trig_Wheels_and_Pie_Chart.js @@ -1,16 +1,13 @@ /* - * @name Trig Wheels and Pie Chart + * @name 단위원과 파이 차트 * @frame 400,400 - * @description contributed by - Prof WM Harris, How to create -a trig color wheel and a visualization of a population age data as a -pie chart.
        - Functions are -created for the canvas setup, trig color wheel, drawslice, and pie -chart. The size of the slices are determined as well as their color -range. The pie chart is separated by definitive color per value -whereas the trig color wheel has a fixed slice amount with a range -color fill. + * @description 해리스 교수 ( + Prof WM Harris,)의 기고 예시, '삼각함수 컬러 휠 만드는 법과 인구 연령 데이터로 파이차트 그리기' + (How to create a trig color wheel and a visualization of a population age data as a pie chart). +
        + 켄바스 설정, 삼각함수 컬러 휠, 휠 조각 그리기와 파이차트를 위한 함수르 만듭니다. 컬러 휠 조각들의 크기와 + 색상범위 (color range)를 정합니다. 파이차트는 값에 따라 색깔로 나누어지는 반면, 삼각함수 컬러 휠은 조각의 수가 + 고정되어있고 색상 범위로 나누어집니다. */ function setup() { @@ -18,7 +15,7 @@ function setup() { colorMode(HSB); angleMode(DEGREES); - //vars for color wheel center point + //색깔 컬러 휠 중점을 위한 let x = width / 2; let y = height / 2 + 100; colorWheel(x, y, 100); //slide 11 diff --git a/src/data/examples/ko/05_Image/10_Copy_Method.js b/src/data/examples/ko/05_Image/10_Copy_Method.js index 8fc5ba179d..2002d34dfe 100644 --- a/src/data/examples/ko/05_Image/10_Copy_Method.js +++ b/src/data/examples/ko/05_Image/10_Copy_Method.js @@ -1,20 +1,20 @@ -/* - * @name Copy() method - * @frame 600,400 - * @description An example of how to simulate coloring image with the copy() method. - */ -let draft, ready; -function preload() { - ready = loadImage("assets/parrot-color.png"); - draft = loadImage("assets/parrot-bw.png"); -} -function setup() { - createCanvas(600, 400); - noCursor(); - cursor("assets/brush.png", 20, -10); - image(ready, 0, 0); - image(draft, 0, 0); -} -function mouseDragged() { - copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); -} +/* + * @name Copy() method + * @frame 600,400 + * @description An example of how to simulate coloring image with the copy() method. + */ +let draft, ready; +function preload() { + ready = loadImage("assets/parrot-color.png"); + draft = loadImage("assets/parrot-bw.png"); +} +function setup() { + createCanvas(600, 400); + noCursor(); + cursor("assets/brush.png", 20, -10); + image(ready, 0, 0); + image(draft, 0, 0); +} +function mouseDragged() { + copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); +} diff --git a/src/data/examples/ko/08_Math/01_operatorprecedence.js b/src/data/examples/ko/08_Math/01_operatorprecedence.js index 86c72bb344..0f7e3a8028 100644 --- a/src/data/examples/ko/08_Math/01_operatorprecedence.js +++ b/src/data/examples/ko/08_Math/01_operatorprecedence.js @@ -39,7 +39,7 @@ function setup() { rect((4 + 2) * 8, 100, 290, 49); stroke(153); - for (let i = 0; i < width; i += 2) + for (let i = 0; i < width; i += 2) { // 비교 선언문을 가장 먼저 처리한 뒤, // 다음으로 논리 연산자 AND, 마지막으로 논리 연산자 OR 순으로 처리. // 처리 순서를 명확히하고자 다음과 같이 작성: diff --git a/src/data/examples/ko/09_Simulate/05_MultipleParticleSystems.js b/src/data/examples/ko/09_Simulate/05_MultipleParticleSystems.js index 6a13290f41..2c7cb25c9d 100644 --- a/src/data/examples/ko/09_Simulate/05_MultipleParticleSystems.js +++ b/src/data/examples/ko/09_Simulate/05_MultipleParticleSystems.js @@ -60,7 +60,6 @@ Particle.prototype.display = function () { }; // 파티클이 여전히 쓸만한가요? ->>>>>>> cf3314557fcd084720a3cbca0fa45ce5ce151753 Particle.prototype.isDead = function () { if (this.lifespan < 0) { return true; diff --git a/src/data/examples/es/15_Instance_Mode/03_Car_Instances.js b/src/data/examples/ko/11_Objects/06_Car_Instances.js similarity index 100% rename from src/data/examples/es/15_Instance_Mode/03_Car_Instances.js rename to src/data/examples/ko/11_Objects/06_Car_Instances.js diff --git a/src/data/examples/ko/13_Motion/08_Moving_On_Curves.js b/src/data/examples/ko/13_Motion/08_Moving_On_Curves.js deleted file mode 100644 index 4c347c7e00..0000000000 --- a/src/data/examples/ko/13_Motion/08_Moving_On_Curves.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @name Moving On Curves - * @frame 720,400 - * @description In this example, the circles moves along the curve y = x^4. - * Click the mouse to have it move to a new position. - */ - -let beginX = 20.0; // Initial x-coordinate -let beginY = 10.0; // Initial y-coordinate -let endX = 570.0; // Final x-coordinate -let endY = 320.0; // Final y-coordinate -let distX; // X-axis distance to move -let distY; // Y-axis distance to move -let exponent = 4; // Determines the curve -let x = 0.0; // Current x-coordinate -let y = 0.0; // Current y-coordinate -let step = 0.01; // Size of each step along the path -let pct = 0.0; // Percentage traveled (0.0 to 1.0) - -function setup() { - createCanvas(720, 400); - noStroke(); - distX = endX - beginX; - distY = endY - beginY; -} - -function draw() { - fill(0, 2); - rect(0, 0, width, height); - pct += step; - if (pct < 1.0) { - x = beginX + pct * distX; - y = beginY + pow(pct, exponent) * distY; - } - fill(255); - ellipse(x, y, 20, 20); -} - -function mousePressed() { - pct = 0.0; - beginX = x; - beginY = y; - endX = mouseX; - endY = mouseY; - distX = endX - beginX; - distY = endY - beginY; -} diff --git a/src/data/examples/ko/16_Dom/08_Video.js b/src/data/examples/ko/16_Dom/08_Video.js index 9389e5ff65..76996c8430 100644 --- a/src/data/examples/ko/16_Dom/08_Video.js +++ b/src/data/examples/ko/16_Dom/08_Video.js @@ -10,6 +10,7 @@ let fingers; let button; function setup() { + noCanvas(); // 여러 브라우저 지원을 위해 다양한 비디오 형식 지정 fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); button = createButton('play'); diff --git a/src/data/examples/ko/17_Drawing/00_Continuous_Lines.js b/src/data/examples/ko/17_Drawing/00_Continuous_Lines.js index aa89265d1d..0619ea9056 100644 --- a/src/data/examples/ko/17_Drawing/00_Continuous_Lines.js +++ b/src/data/examples/ko/17_Drawing/00_Continuous_Lines.js @@ -4,7 +4,7 @@ */ function setup() { createCanvas(710, 400); - background(102);ㅌ + background(102); } function draw() { diff --git a/src/data/examples/ko/19_Typography/02_Text_Rotation.js b/src/data/examples/ko/19_Typography/02_Text_Rotation.js index 07ec47321c..5d6904eafe 100644 --- a/src/data/examples/ko/19_Typography/02_Text_Rotation.js +++ b/src/data/examples/ko/19_Typography/02_Text_Rotation.js @@ -1,62 +1,62 @@ /* - * @name Text Rotation - * @description Draws letters to the screen and rotates them at different angles. - * (ported from https://processing.org/examples/textrotation.html) + * @name 텍스트 회전 + * @description 스크린에 글자를 그린 후, 다양한 각도로 회전시킵니다. + * (https://processing.org/examples/textrotation.html에서 옮김) */ let font, - fontsize = 32; - - let angleRotate = 0.0; - - function setup() { - createCanvas(710, 400); - background(0); - - // Ensure the .ttf or .otf font stored in the assets directory - // is loaded before setup() and draw() are called - font = loadFont('assets/SourceSansPro-Regular.otf'); - - // Set text characteristics - textFont(font); - } - - function draw() { - background(0); - - strokeWeight(1); - stroke(153); - - push(); - let angle1 = radians(45); - translate(100, 180); - rotate(angle1); - // Draw the letter to the screen - text("45 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); - - push(); - let angle2 = radians(270); - translate(200, 180); - rotate(angle2); - // Draw the letter to the screen - text("270 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); - - push(); - translate(440, 180); - rotate(radians(angleRotate)); - text(int(angleRotate) % 360 + " DEGREES ", 0, 0); - line(0, 0, 150, 0); - pop(); - - angleRotate += 0.25; - - stroke(255, 0, 0); - strokeWeight(4); - point(100, 180); - point(200, 180); - point(440, 180); - } \ No newline at end of file +fontsize = 32; + +let angleRotate = 0.0; + +function setup() { + createCanvas(710, 400); + background(0); + + // setup()함수와 draw()함수를 부르기 전에 .ttf 또는 .otf 파일이 'assets' 주소에 + // 있을 것을 확안합니다 + font = loadFont('assets/SourceSansPro-Regular.otf'); + + // 텍스트의 특징을 정합니다 + textFont(font); +} + +function draw() { + background(0); + + strokeWeight(1); + stroke(153); + + push(); + let angle1 = radians(45); + translate(100, 180); + rotate(angle1); + // 스크린에 글짜를 그립니다 + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); + + push(); + let angle2 = radians(270); + translate(200, 180); + rotate(angle2); + // 스크린에 글짜를 그립니다 + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); + + push(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES ", 0, 0); + line(0, 0, 150, 0); + pop(); + + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/src/data/examples/ko/20_3D/02_multiple_lights.js b/src/data/examples/ko/20_3D/02_multiple_lights.js index 9e560dfa0a..1491c79a43 100644 --- a/src/data/examples/ko/20_3D/02_multiple_lights.js +++ b/src/data/examples/ko/20_3D/02_multiple_lights.js @@ -1,8 +1,6 @@ /* * @name 복수의 조명들 * @description 한 스케치 위에 여러 종류의 조명을 사용할 수 있습니다. - * @name Multiple Lights - * @description All types of lights could be used in one sketch. */ function setup() { createCanvas(710, 400, WEBGL); diff --git a/src/data/examples/ko/21_Input/10_Rollover.js b/src/data/examples/ko/21_Input/10_Rollover.js index 09ebd6648c..b5a6cf50c9 100644 --- a/src/data/examples/ko/21_Input/10_Rollover.js +++ b/src/data/examples/ko/21_Input/10_Rollover.js @@ -1,13 +1,13 @@ /* - * @name Rollover + * @name 롤오버 (Rollover) * @description Roll over the colored squares in the center of the image to change the color of the outside rectangle. *

        This example is ported from the Rollover example * on the Processing website */ -let squareX, squareY; // Position of square button -let circleX, circleY; // Position of circle button -let squareSize = 90; // Width/height of square -let circleSize = 93; // Diameter of circle +let squareX, squareY; // 정사각형 버튼의 위치 +let circleX, circleY; // 원형 버튼의 위치 +let squareSize = 90; // 정사각형의 너비와 높이 +let circleSize = 93; // 원의 지름 let squareColor; let circleColor; diff --git a/src/data/examples/zh-Hans/00_Structure/00_Statements_and_Comments.js b/src/data/examples/zh-Hans/00_Structure/00_Statements_and_Comments.js index 8469f369b7..709027c4d5 100644 --- a/src/data/examples/zh-Hans/00_Structure/00_Statements_and_Comments.js +++ b/src/data/examples/zh-Hans/00_Structure/00_Statements_and_Comments.js @@ -1,6 +1,9 @@ /* * @name Comments and Statements - * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. It is called the "statement * terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). (ported from https://processing.org/examples/statementscomments.html) + * @description Statements are the elements that make up programs. The ";" (semi-colon) symbol is used to end statements. + * It is called the "statement terminator". Comments are used for making notes to help people better understand programs. A comment begins with two forward slashes ("//"). + *

        This example is ported from the Statements and Comments example + * on the Processing website */ // The createCanvas function is a statement that tells the computer // how large to make the window. diff --git a/src/data/examples/zh-Hans/05_Image/10_Copy_Method.js b/src/data/examples/zh-Hans/05_Image/10_Copy_Method.js index 77916f2549..0e7f9431e5 100644 --- a/src/data/examples/zh-Hans/05_Image/10_Copy_Method.js +++ b/src/data/examples/zh-Hans/05_Image/10_Copy_Method.js @@ -1,20 +1,20 @@ -/* - * @name Copy() 函数 - * @frame 600,400 - * @description 一个如何使用 copy() 函数模拟为图像着色的范例。 - */ -let draft, ready; -function preload() { - ready = loadImage("assets/parrot-color.png"); - draft = loadImage("assets/parrot-bw.png"); -} -function setup() { - createCanvas(600, 400); - noCursor(); - cursor("assets/brush.png", 20, -10); - image(ready, 0, 0); - image(draft, 0, 0); -} -function mouseDragged() { - copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); -} +/* + * @name Copy() 函数 + * @frame 600,400 + * @description 一个如何使用 copy() 函数模拟为图像着色的范例。 + */ +let draft, ready; +function preload() { + ready = loadImage("assets/parrot-color.png"); + draft = loadImage("assets/parrot-bw.png"); +} +function setup() { + createCanvas(600, 400); + noCursor(); + cursor("assets/brush.png", 20, -10); + image(ready, 0, 0); + image(draft, 0, 0); +} +function mouseDragged() { + copy(ready, mouseX, mouseY, 20, 20, mouseX, mouseY, 20, 20); +} diff --git a/src/data/examples/zh-Hans/09_Simulate/09_Springs.js b/src/data/examples/zh-Hans/09_Simulate/09_Springs.js index ed0a185a65..bb2dd44d0b 100644 --- a/src/data/examples/zh-Hans/09_Simulate/09_Springs.js +++ b/src/data/examples/zh-Hans/09_Simulate/09_Springs.js @@ -4,7 +4,7 @@ * @description Move the mouse over one of the circles and click to re-position. * When you release the mouse, it will snap back into position. * Each circle has a slightly different behavior. - * (ported from https://processing.org/examples/springs.html) + *

        This example is ported from the Processing website */ let num = 3; let springs = []; diff --git a/src/data/examples/zh-Hans/09_Simulate/13_Chain.js b/src/data/examples/zh-Hans/09_Simulate/13_Chain.js index ba52c54587..33d197e461 100644 --- a/src/data/examples/zh-Hans/09_Simulate/13_Chain.js +++ b/src/data/examples/zh-Hans/09_Simulate/13_Chain.js @@ -1,7 +1,7 @@ /* * @name Chain * @description One mass is attached to the mouse position and the other is attached the position of the other mass. The gravity in the environment pulls down on both. - * Ported from the Processing Examples page. + *

        This example is ported from the Processing website */ let s1, s2; let gravity = 9.0; diff --git a/src/data/examples/ko/15_Instance_Mode/03_Car_Instances.js b/src/data/examples/zh-Hans/11_Objects/06_Car_Instances.js similarity index 100% rename from src/data/examples/ko/15_Instance_Mode/03_Car_Instances.js rename to src/data/examples/zh-Hans/11_Objects/06_Car_Instances.js diff --git a/src/data/examples/zh-Hans/13_Motion/08_Moving_On_Curves.js b/src/data/examples/zh-Hans/13_Motion/08_Moving_On_Curves.js deleted file mode 100644 index 4c347c7e00..0000000000 --- a/src/data/examples/zh-Hans/13_Motion/08_Moving_On_Curves.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @name Moving On Curves - * @frame 720,400 - * @description In this example, the circles moves along the curve y = x^4. - * Click the mouse to have it move to a new position. - */ - -let beginX = 20.0; // Initial x-coordinate -let beginY = 10.0; // Initial y-coordinate -let endX = 570.0; // Final x-coordinate -let endY = 320.0; // Final y-coordinate -let distX; // X-axis distance to move -let distY; // Y-axis distance to move -let exponent = 4; // Determines the curve -let x = 0.0; // Current x-coordinate -let y = 0.0; // Current y-coordinate -let step = 0.01; // Size of each step along the path -let pct = 0.0; // Percentage traveled (0.0 to 1.0) - -function setup() { - createCanvas(720, 400); - noStroke(); - distX = endX - beginX; - distY = endY - beginY; -} - -function draw() { - fill(0, 2); - rect(0, 0, width, height); - pct += step; - if (pct < 1.0) { - x = beginX + pct * distX; - y = beginY + pow(pct, exponent) * distY; - } - fill(255); - ellipse(x, y, 20, 20); -} - -function mousePressed() { - pct = 0.0; - beginX = x; - beginY = y; - endX = mouseX; - endY = mouseY; - distX = endX - beginX; - distY = endY - beginY; -} diff --git a/src/data/examples/zh-Hans/16_Dom/08_Video.js b/src/data/examples/zh-Hans/16_Dom/08_Video.js index 8786bb4cde..0078d2d793 100644 --- a/src/data/examples/zh-Hans/16_Dom/08_Video.js +++ b/src/data/examples/zh-Hans/16_Dom/08_Video.js @@ -9,6 +9,7 @@ let fingers; let button; function setup() { + noCanvas(); // specify multiple formats for different browsers fingers = createVideo(['assets/fingers.mov', 'assets/fingers.webm']); button = createButton('play'); diff --git a/src/data/examples/zh-Hans/19_Typography/02_Text_Rotation.js b/src/data/examples/zh-Hans/19_Typography/02_Text_Rotation.js index 07ec47321c..cbf12b41f4 100644 --- a/src/data/examples/zh-Hans/19_Typography/02_Text_Rotation.js +++ b/src/data/examples/zh-Hans/19_Typography/02_Text_Rotation.js @@ -1,62 +1,63 @@ /* - * @name Text Rotation + * @name Text Rotation * @description Draws letters to the screen and rotates them at different angles. - * (ported from https://processing.org/examples/textrotation.html) + *

        This example is ported from the Text Rotation example + * on the Processing website */ let font, fontsize = 32; - let angleRotate = 0.0; - - function setup() { - createCanvas(710, 400); - background(0); - - // Ensure the .ttf or .otf font stored in the assets directory - // is loaded before setup() and draw() are called - font = loadFont('assets/SourceSansPro-Regular.otf'); - - // Set text characteristics - textFont(font); - } - - function draw() { - background(0); +let angleRotate = 0.0; + +function setup() { + createCanvas(710, 400); + background(0); - strokeWeight(1); - stroke(153); + // Ensure the .ttf or .otf font stored in the assets directory + // is loaded before setup() and draw() are called + font = loadFont('assets/SourceSansPro-Regular.otf'); - push(); - let angle1 = radians(45); - translate(100, 180); - rotate(angle1); - // Draw the letter to the screen - text("45 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); + // Set text characteristics + textFont(font); +} + +function draw() { + background(0); + + strokeWeight(1); + stroke(153); + + push(); + let angle1 = radians(45); + translate(100, 180); + rotate(angle1); + // Draw the letter to the screen + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); + + push(); + let angle2 = radians(270); + translate(200, 180); + rotate(angle2); + // Draw the letter to the screen + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + pop(); - push(); - let angle2 = radians(270); - translate(200, 180); - rotate(angle2); - // Draw the letter to the screen - text("270 DEGREES", 0, 0); - line(0, 0, 150, 0); - pop(); - - push(); - translate(440, 180); - rotate(radians(angleRotate)); - text(int(angleRotate) % 360 + " DEGREES ", 0, 0); - line(0, 0, 150, 0); - pop(); - - angleRotate += 0.25; + push(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES ", 0, 0); + line(0, 0, 150, 0); + pop(); - stroke(255, 0, 0); - strokeWeight(4); - point(100, 180); - point(200, 180); - point(440, 180); - } \ No newline at end of file + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/src/data/hi.yml b/src/data/hi.yml new file mode 100644 index 0000000000..dc8642b3c8 --- /dev/null +++ b/src/data/hi.yml @@ -0,0 +1,1823 @@ +Skip-To-Content: Skip to content +Language-Settings: Language Settings +Sidebar-Title: Site Navigation +Home: सभी +Editor: एडीटर +Download: डाउनलोड +Donate: दान दिजिये +Start: आरंभ करें +Reference: संदर्भ +Libraries: लाइब्रिरी +Learn: सीखिए +Teach: सिखाना +Examples: उदाहरण +Books: पुस्तकें +Community: समुदाय +Contribute: योगदान कीजिये +Forum: फोरम +Showcase: प्रदर्शन +footerxh1: आभार सूची +footer1: ' वर्तमान में p5.js का नेतृत्व करने वाले ' +footer3: ' हैं| इसकी खोज करने वाले थे ' +footer4: ' p5.js सहयोगियों के एक समुदाय द्वारा विकसित किया गया है और समर्थन करने वाले थे ' +footer5: ' और ' +footer6: ' पहचान और ग्राफिक डिजाइन करने वाले थे ' +footer7: '. ' +footer8: Info +footer9: . +tagline1: प्रोसेसिंग का आनंद गुणा जावास्क्रिप्ट का क्विर्किनेस्स +tagline2: प्रोसेसिंग की सादगी गुणा जावास्क्रिप्ट का लचीलापन +tagline3: प्रोसेसिंग का सहज बोध गुणा जावास्क्रिप्ट की शक्ति +tagline4: प्रोसेसिंग की रचनात्मकता गुणा जावास्क्रिप्ट की गतिशीलता +tagline5: प्रोसेसिंग का समुदाय गुणा जावास्क्रिप्ट का समुदाय +tagline6: प्रोसेसिंग की शक्ति गुणा जावास्क्रिप्ट की पहुंच +tagline7: The p5.js community stands in solidarity with Black Lives Matter. +home: + start-creating: P5 संपादक के साथ बनाना शुरू करें! + p1xh1: नमस्ते! + p1x1: >- + p5.js रचनात्मक कोडिंग के लिए एक जावास्क्रिप्ट लाइब्रेरी है, जिसमें कलाकारों, + डिजाइनरों, शिक्षकों, शुरुआती लोगों के लिए कोडिंग को सुलभ और समावेशी बनाने पर + ध्यान केंद्रित किया गया है। p5.js स्वतंत्र और खुला-स्रोत है क्योंकि हम + सॉफ्टवेयर पर विश्वास करते हैं, और इसे सीखने के उपकरण सभी के लिए सुलभ होने + चाहिए। + p1x2: >- + एक स्केच के रूपक का उपयोग करते हुए, p5.js में ड्राइंग कार्यक्षमता का एक पूरा + सेट है। हालाँकि, आप अपने ड्राइंग कैनवास तक सीमित नहीं हैं। आप अपने पूरे + ब्राउज़र पृष्ठ को अपने स्केच के रूप में सोच सकते हैं, जिसमें टेक्स्ट, इनपुट, + वीडियो, वेब कैमरा और ध्वनि के लिए HTML5 ऑब्जेक्ट शामिल हैं। + p2xh2: समुदाय + p2x1: >- + हम हर लिंग पहचान और अभिव्यक्ति, यौन अभिविन्यास, जाति, जातीयता, भाषा, + न्यूरो-प्रकार, आकार, क्षमता, वर्ग, धर्म, संस्कृति, उपसंस्कृति, राजनीतिक राय, + आयु, कौशल, स्तर, व्यवसाय और पृष्ठभूमि के साथ और एकजुटता का एक समुदाय हैं। हम + स्वीकार करते हैं कि सभी के पास सक्रिय रूप से भाग लेने के लिए समय, वित्तीय + साधन या क्षमता नहीं है, लेकिन हम सभी प्रकार की भागीदारी को समझते हैं और + प्रोत्साहित करते हैं। हम सुविधा और सशक्तिकरण को बढ़ावा देते हैं। हम सभी + शिक्षार्थी हैं। + p2x2: 'p5.js आज के वेब के लिए ' + p2x3: ' की व्याख्या है। हम ईवेंट का संचालन करते हैं और हमारे कार्य का समर्थन करता है ' + p2x4: । + p2x5: 'हमारे ' + p2x6: 'समुदाय ' + p2x7: के बारे में अधिक जानें। + p3xh2: शुरू करें + p3xp1: ' ' + p3xp2: ' में अपना पहला स्केच बनाएं। ' + p3xp3: आरंभ पृष्ठ + p3xp4: ' पर p5.js के साथ स्केचिंग के बारे में अधिक जानें और ' + p3xp5: संदर्भ + p3xp6: ' में जाने आप जो कुछ भी कर सकते हैं।' + p4xh2: शामिल होइए + p4xp1: 'P5.js में योगदान करने के कई तरीके हैं:' + p4xp2: भागीदारी के विकल्प + p4xp3: आपके द्वारा बनाई गई कुछ साझा करें! + p4xp4: एक कार्यशाला या कक्षा पढ़ाएं करें। + p4xp5: सम्मलेन का आयोजन करें। + p4xp6: कोडबेस में योगदान करें। + sketch_credits: Sketch Credits + sketch_info: होमपेज स्केच 9 वें ग्रेडर ग्रेस ओबर्गफेल द्वारा काम से अनुकूलित किया गया है +copyright: + copyright-title: कॉपीराइट संबंधी जानकारी + copyright1: >- + p5.js लाइब्रेरी मुफ्त सॉफ्टवेयर है; आप नि: शुल्क सॉफ्टवेयर फाउंडेशन, संस्करण + 2.1 द्वारा प्रकाशित + copyright2: ' के तहत इसे पुनर्वितरित कर सकते हैं और / या संशोधित कर सकते हैं। भाषा के लिए संदर्भ एक लाइसेंस के तहत है' + copyright3: ' जो गैर-वाणिज्यिक उद्देश्यों के लिए इस सामग्री का पुन: उपयोग करना ' + copyright4: ' संभव बनाता है यदि इसे श्रेय दिया जाता है।' +get started: + get-started-title: आरंभ करे + get-started1: >- + यह पृष्ठ आपको एक p5.js प्रोजेक्ट सेट करने और आपका पहला स्केच बनाने के बारे + में बताता है। + get-started2: शुरू करने का सबसे आसान तरीका + get-started3: p5.js editor + get-started4: ', का उपयोग करना है आप वेब संपादक खोल सकते हैं और अपने' + get-started5: 'आपका पहला स्केच ' + get-started6: >- + तक नीचे स्क्रॉल कर सकते हैं। यदि आप p5.js के डेस्कटॉप संस्करण पर काम करना + चाहते हैं तो आप नीचे स्क्रॉल कर सकते हैं + get-started7: निर्देश डाउनलोड + get-started-button: Copy + settingUp-title: अपने कंप्यूटर पर एक संपादक के साथ p5.js सेट करना + download-title: p5.js पुस्तकालय की एक प्रति डाउनलोड करना + hosted-title: p5.js लाइब्रेरी के होस्ट किए गए संस्करण का उपयोग करना + download1: >- + 'शुरू करने का सबसे आसान तरीका खाली उदाहरण का उपयोग करना है जो' के साथ आता + है। + download2: p5.js पूर्ण + download3: ' download.' + download8: ' डाउनलोड करने के बाद, आपको एक स्थानीय सर्वर सेट करना होगा। निर्देश देखें ' + download9: यहां + download10: >- + '। अपने स्थानीय सर्वर को डाउनलोड किए गए फ़ोल्डर में चलाएँ और अपने ब्राउज़र + पर, 'पर जाएँ + download11: 'http://localhost:{your-port-num}/empty-example' + download4: >- + यदि आप index.html में देखते हैं, तो आप देखेंगे कि यह फ़ाइल p5.js से लिंक है। + यदि आप छोटे संस्करण का उपयोग करना चाहते हैं (तेज़ पृष्ठ लोड करने के लिए + संपीड़ित), तो लिंक को p5.min.js में बदलें। + download5: >- + वैकल्पिक रूप से, आप ऑनलाइन होस्ट की गई p5.js फ़ाइल से लिंक कर सकते हैं। + p5.js के सभी संस्करण एक सीडीएन (सामग्री वितरण नेटवर्क) में संग्रहीत हैं। आप + इन संस्करणों का इतिहास में पा सकते हैं + download6: '। इस मामले में आप लिंक को इसमें बदल सकते हैं:' + download7: 'एक नमूना HTML पृष्ठ इस तरह दिख सकता है:' + environment-title: वातावरण + environment1: >- + अपने कंप्यूटर में p5.js चलाने के लिए आपको एक टेक्स्ट एडिटर की आवश्यकता होगी। + आप अपनी पसंद के + environmentlink: 'http://en.wikipedia.org/wiki/Source_code_editor' + environment2: कोड एडिटर + environment3: 'का उपयोग कर सकते हैं। Sublime Text 2 के साथ ' + environment4: ' सेटअप करने के निर्देश नीचे दिए गए हैं, अन्य अच्छे संपादक विकल्पों में ' + environment5: ' तथा ' + environment6: >- + शामिल हैं। यदि आप एक स्क्रीन रीडर उपयोगकर्ता हैं और p5 वेब संपादक का उपयोग + नहीं कर रहे हैं, तो आप इसका उपयोग करना चाह सकते हैं + environment7: ' या ' + environment8: >- + Sublime खोलें। फ़ाइल मेनू पर जाएँ और Open चुनें... और उस फ़ोल्डर को चुनें + जिसमें आपकी html और js फ़ाइलें स्थित हैं। बाईं साइडबार पर, आपको फ़ोल्डर में + निहित फ़ाइलों की सूची के साथ शीर्ष पर फ़ोल्डर का नाम मिलना चाहिए। + environment9: >- + अपनी sketch.js फ़ाइल पर क्लिक करें और यह दाईं ओर खुलेगी जहाँ आप इसे संपादित + कर सकते हैं। + environment10: p5 स्टार्टर कोड उदात्त संपादक में खुला। + environment11: >- + अपने ब्राउज़र में index.html फ़ाइल को अपने फ़ाइल प्रबंधक में डबल क्लिक करके + खोलें या टाइप करें: + environment12: 'file:///the/file/path/to/your/html' + environment14: ' (or ' + environment15: 'http://localhost:{your-port-num}/empty-example' + environment16: यदि आप स्थानीय सर्वर का उपयोग कर रहे हैं) + environment13: ' अपना स्केच देखने के लिए एड्रेस बार में।' + your-first-sketch-title: आपका पहला स्केच + your-first-sketch-intro1: ' ' + your-first-sketch-intro2: 'https://editor.p5js.org/' + your-first-sketch-intro3: p5.js वेब संपादक + your-first-sketch-intro4: 'में आपको निम्न कोड मिलना चाहिए:' + your-first-sketch1: उपरांत + your-first-sketch2: 'कोड की इस पंक्ति को शामिल करें: ' + your-first-sketch3: 'अब आपका कोड इस तरह होना चाहिए:' + your-first-sketch4: >- + आपके द्वारा अभी जोड़ी गई रेखा एक दीर्घवृत्त खींचती है, जिसका केंद्र बाईं ओर + से 50 पिक्सेल ऊपर और ऊपर से 50 पिक्सेल नीचे है, जिसकी चौड़ाई और ऊँचाई 80 + पिक्सेल है। + your-first-sketch5: अपने कोड को क्रिया में प्रदर्शित करने के लिए संपादक पर प्ले दबाएं! + your-first-sketch6: >- + यदि आप एक स्क्रीन रीडर का उपयोग कर रहे हैं, तो आपको p5 ऑनलाइन संपादक में + पहुंच योग्य आउटपुट को चालू करना होगा, संपादक के बाहर आपको अपने एचटीएमएल में + एक्सेसिबिलिटी लाइब्रेरी को जोड़ना होगा। अधिक जानने के लिए + your-first-sketch7: स्क्रीन रीडर ट्यूटोरियल के साथ p5 का उपयोग करना + your-first-sketch8: 'यदि आपने सब कुछ सही टाइप किया है, तो यह डिस्प्ले विंडो में दिखाई देगा:' + your-first-sketch9: 80 x और 80 y of की स्थिति में कैनवास की चौड़ाई और ऊंचाई 50 का एक वृत्त है + your-first-sketch10: >- + यदि कुछ दिखाई नहीं देता है, तो संपादक को यह समझने में समस्या हो सकती है कि + आपने क्या लिखा है। यदि ऐसा होता है, तो सुनिश्चित करें कि आपने उदाहरण कोड को + ठीक से कॉपी किया है: संख्याएं कोष्ठक के भीतर होनी चाहिए और उनमें से प्रत्येक + के बीच अल्पविराम होना चाहिए, रेखा अर्धविराम के साथ समाप्त होनी चाहिए, और + दीर्घवृत्त की वर्तनी सही होनी चाहिए। + your-first-sketch11: >- + प्रोग्रामिंग के साथ आरंभ करने के बारे में सबसे कठिन चीजों में से एक यह है कि + आपको सिंटैक्स के बारे में बहुत विशिष्ट होना चाहिए। आपका मतलब जानने के लिए + ब्राउज़र हमेशा पर्याप्त स्मार्ट नहीं होता है और विराम चिह्नों की नियुक्ति के + बारे में काफी उधम मचा सकता है। थोड़े से अभ्यास से आपको इसकी आदत हो जाएगी। + संपादक के नीचे बाईं ओर, आपको कंसोल अनुभाग मिलेगा। यहां, आप संपादक से प्राप्त + होने वाली किसी भी त्रुटि के विवरण के साथ संदेश पा सकते हैं। + your-first-sketch12: >- + इसके बाद, हम एक स्केच पर आगे बढ़ेंगे जो थोड़ा अधिक रोमांचक है। इसे आज़माने + के लिए अंतिम उदाहरण को संशोधित करें: + your-first-sketch13: >- + यह प्रोग्राम एक कैनवास बनाता है जो 400 पिक्सेल चौड़ा और 400 पिक्सेल ऊँचा + होता है, और फिर माउस की स्थिति में सफेद घेरे बनाना शुरू करता है। जब माउस बटन + दबाया जाता है, तो वृत्त का रंग बदलकर काला हो जाता है। कोड चलाएँ, माउस ले + जाएँ, और इसका अनुभव करने के लिए क्लिक करें। + your-first-sketch14: कैनवास पर माउस के पथ का अनुसरण करते हुए कई वृत्त खींचे जाते हैं + first-sketch-heading1: अंडाकार के साथ कोड स्निपेट + first-sketch-heading2: स्क्रीनरीडर उपयोगकर्ताओं के लिए नोट + first-sketch-heading3: इंटरैक्शन के साथ कोड स्निपेट + what-next-title: आगे क्या? + learn1: 'अधिक जनने के लिए ' + learn2: learn page + learn3: ' तथा ' + learn4: examples page + learn5: देखें। + learn6: 'देखें ' + learn7: The Coding Train + learn8: ' तथा ' + learn9: Kadenze + learn10: ' अनके वीडियो शिक्षण।' + reference1: पूर्ण दस्तावेज़ीकरण के लिए + reference2: ' reference' + reference3: ' देखें। ' + learn11: 'यदि आप स्क्रीन रीडर के साथ p5 का उपयोग करना चाहते हैं, तो देखें ' + learn12: p5 with a screenreader tutorial + processing-transition1: 'यदि आपने पूर्व में प्रसंस्करण का उपयोग किया है, तो पढ़ें ' + processing-transition2: 'https://github.com/processing/p5.js/wiki/Processing-transition' + processing-transition3: Processing transition tutorial + processing-transition4: ' प्रोसेसिंग से p5.js में कनवर्ट करने का तरीका, और उनके बीच मुख्य अंतर जानने के लिए।' + book1: >- + इस ट्यूटोरियल के कुछ हिस्सों को लॉरेन मैकार्थी, केसी रियास, और बेन फ्राई, + ओ'रेली / मेक 2015 द्वारा पुस्तक, गेटिंग स्टार्टिंग विद p5.js से अनुकूलित + किया गया था। कॉपीराइट © 2015। सभी अधिकार सुरक्षित। अंतिम बार p5.js 2019 + योगदानकर्ता सम्मेलन में संशोधित किया गया। +download: + Download: डाउनलोड + download-intro: >- + स्वागत हे! इस पृष्ठ पर "डाउनलोड" शीर्षक से, वास्तव में इस पृष्ठ पर लाइब्रेरी + को डाउनलोड करने या इसके साथ ऑनलाइन काम शुरू करने के लिए लिंक का एक संग्रह + है। हमने उन चीजों को ऑर्डर करने की कोशिश की है जो यह बता सकती हैं कि एक + शुरुआत करने वाला पहले क्या चाहता है, से लेकर एक अनुभवी प्रोग्रामर किन + संसाधनों की तलाश में हो सकता है। + editor-title: संपादक + p5.js-editor: p5.js वेब एडिटर + p5.js-editor-intro: >- + यह लिंक आपको ऑनलाइन p5.js संपादक पर पुनर्निर्देशित करता है ताकि आप तुरंत + p5.js का उपयोग शुरू कर सकें। + editor-includes: 'P5.js वेब एडिटर का उपयोग करके कोडिंग शुरू करें, कोई सेटअप आवश्यक नहीं है!' + complete-library-title: पूरी लाइब्रेरी + complete-library-intro1: >- + यह p5.js लाइब्रेरी फ़ाइल, p5.sound एडऑन और एक उदाहरण प्रोजेक्ट वाली एक + डाउनलोड है। इसमें संपादक नहीं है। P5.js प्रोजेक्ट को सेटअप करने का तरीका + जानने के लिए + complete-library-intro2: आरंभ करें + complete-library-intro3: ' देखें।' + p5.js-complete: ' पूर्ण p5.js' + includes-1: 'शामिल हैं:' + includes-2: 'p5.js, p5.dom.js, p5.sound.js और एक उदाहरण परियोजना है' + includes-3: ' संस्करण ' + single-files-title: 'एक दस्तावेज ' + single-files-intro: >- + ये p5.js लाइब्रेरी फ़ाइल के डाउनलोड या लिंक हैं। कोई अतिरिक्त सामग्री शामिल + नहीं है। + single-file: 'एक दस्तावेज: ' + p5.js-uncompressed: पूर्ण असम्बद्ध संस्करण + compressed: संकुचित संस्करण + link: 'लिंक: ' + statically-hosted-file: स्टेटिकली होस्ट की गई फ़ाइल + etc-title: आदि + older-releases: 'पुराने रिलीज / चैंज ' + github-repository: कोड भंडार (GitHub) + report-bugs: 'समस्याओं, बग और त्रुटियों की रिपोर्ट करें ' + supported-browsers: 'समर्थित ब्राउज़र ' + support-title: समर्थन p5.js! + support-options: समर्थन विकल्प + support-1: >- + p5.js फ्री, ओपन-सोर्स सॉफ्टवेयर है। हम अपने समुदाय को यथासंभव खुला और + समावेशी बनाना चाहते हैं। आप एक व्यक्ति, एक स्टूडियो या एक शैक्षिक संस्थान के + रूप में + support-2: के सदस्य बनकर + support-3: ' इस काम का समर्थन कर सकते हैं। ' + support-4: ' आप सदस्यता खरीदे बिना' + support-5: ' भी दान कर सकते हैं। ' + support-17: >- + पिट्सबर्ग में क्रिएटिव इंक्वायरी के लिए CMU स्टूडियो में p5.js योगदानकर्ताओं + का सम्मेलन (छवि क्रेडिट: तायून चोई) + support-18: >- + प्रोसेसिंग फेलो सास्किया फ्रीके लंदन में कोड लिबरेशन एक्स प्रोसेसिंग वर्कशॉप + आयोजित कर रहा है (इमेज क्रेडिट: कोड लिबरेशन फाउंडेशन) + support-19: >- + एसएफपीसी के साथ सम्मेलन में सीखना, सिखाना सीखना (छवि क्रेडिट: कीरा + साइमन-कैनेडी) + support-20: >- + कोड आर्ट मियामी में प्रोसेसिंग फाउंडेशन फेलो कैसी तारकाजियान की कार्यशाला + (छवि क्रेडिट: क्रिश्चियन एरेवलो फोटोग्राफी) + support-21: >- + साइनिंग कोडर्स p5.js कार्यशाला में टैयून चोई और एएसएल दुभाषिया (छवि क्रेडिट: + टायून चोई) + support-22: 'कोड किकऑफ़ की Google समर (छवि क्रेडिट: ताइओन चोई)' + support-23: >- + कोड आर्ट मियामी में प्रोसेसिंग फाउंडेशन फेलो कैसी तारकाजियान की कार्यशाला + (छवि क्रेडिट: क्रिश्चियन एरेवलो फोटोग्राफी) + support-24: >- + लुइसा परेरा और येसेउल सांग टायून चोई की अगुवाई में एक सांकेतिक भाषा आधारित + p5.js कार्यशाला को सुविधाजनक बनाने में मदद करते हैं (छवि क्रेडिट: तायून चोई) + support-25: >- + पिट्सबर्ग में क्रिएटिव इंक्वायरी के लिए CMU स्टूडियो में p5.js योगदानकर्ताओं + का सम्मेलन (छवि क्रेडिट: तायून चोई) + support-26: >- + प्रोसेसिंग फ़ेलो डिजिटल सिटिज़ंस लैब इंटरनेशनल सेंटर ऑफ़ फ़ोटोग्राफ़ी में + STEM शिक्षण पर एक पैनल होस्ट करता है (छवि क्रेडिट: इंटरनेशनल सेंटर ऑफ़ + फ़ोटोग्राफ़ी) + support-27: >- + सैंटियागो, मोरागा के नेतृत्व में सैंटियागो, चिली में p5.js कार्यशाला में + प्रतिभागी (छवि क्रेडिट: आरोन मोंटोया-मोरागा।) + support-28: >- + क्लेयर केर्नी-वोल्पे ने एक साइन लैंग्वेज आधारित p5.js वर्कशॉप की सुविधा दी, + जिसका नेतृत्व ताइओन चोई (छवि क्रेडिट: तायून चोई) ने किया + support-29: >- + प्रोसेसिंग फाउंडेशन फेलो DIY गर्ल्स लॉस एंजेल्स में एक क्रिएटिव कोडिंग + प्रोग्राम चलाती हैं (इमेज क्रेडिट: DIY गर्ल्स) + support-30: प्रोसेसिंग डिजिटल डिजिटल लैब प्रयोगशाला + support-31: UCLA DMA और NYU ITP में Bicoastal p5.js मीटअप + support-32: प्रोसेसिंग फाउंडेशन + support-33: ' मूल प्रोसेसिंग सॉफ्टवेयर के साथ एक दशक से अधिक काम करने के बाद 2012 में स्थापित किया गया था। फाउंडेशन का मिशन दृश्य कला के भीतर सॉफ्टवेयर साक्षरता को बढ़ावा देना है, और प्रौद्योगिकी से संबंधित क्षेत्रों के भीतर दृश्य साक्षरता - और इन क्षेत्रों को विविध समुदायों के लिए सुलभ बनाना है। हमारा लक्ष्य सभी हितों और पृष्ठभूमि के लोगों को सशक्त बनाना है कि कैसे कोड के साथ रचनात्मक कार्य करना सीखें और विशेष रूप से उन लोगों के लिए, जिनके पास अन्यथा इन उपकरणों और संसाधनों तक पहुंच नहीं है।' + support-17-alt: '' + support-18-alt: '' + support-19-alt: '' + support-20-alt: '' + support-21-alt: '' + support-22-alt: '' + support-23-alt: '' + support-24-alt: '' + support-25-alt: '' + support-26-alt: '' + support-27-alt: '' + support-28-alt: '' + support-29-alt: '' + support-30-alt: '' + support-31-alt: '' +learn: + learn-title: सीखना + teach-title2: Teach + learn1: >- + ये शिक्षण विशेष विषयों के अधिक गहराई या चरण-दर-चरण साक्षात्कार प्रदान करते + हैं + learn2: उदाहरण पृष्ठ देखें + learn3: विभिन्न p5.js विषयों के छोटे प्रदर्शनों को देखने के लिए। + introduction-to-p5js-title: P5.js का परिचय + hello-p5js-title: नमस्कार p5.js + hello-p5js: >- + यह लघु वीडियो आपको लाइब्रेरी से परिचित कराएगा और आप इसके साथ क्या कर सकते + हैं। + getting-started-title: शुरू करना + getting-started: >- + P5.js में आपका स्वागत है!
        इस परिचय में p5.js प्रोजेक्ट स्थापित करने की + मूल बातें शामिल हैं। + p5js-overview-title: p5.js अवलोकन + p5js-overview: p5.js की मुख्य विशेषताओं का अवलोकन। + p5js-processing-title: p5.js और प्रोसेसिंग + p5js-processing: 'दोनों के बीच मुख्य अंतर, और एक से दूसरे में कैसे परिवर्तित किया जाए।' + p5-screen-reader-title: स्क्रीन रीडर के साथ p5 + p5-screen-reader: P5 सेट करना ताकि इसे स्क्रीन रीडर के साथ आसानी से उपयोग किया जा सके। + using-local-server-title: स्थानीय सर्वर का उपयोग करना + using-local-server: 'Mac OSX, Windows, या Linux पर स्थानीय सर्वर कैसे सेट करें।' + p5js-wiki-title: p5.js विकी + p5js-wiki: समुदाय द्वारा योगदान किए गए अतिरिक्त दस्तावेज़ीकरण और शिक्षण + connecting-p5js-title: कनेक्टिंग p5.js + creating-libraries-title: 'लाइब्रेरी बनाना ' + creating-libraries: P5.js एडोन लाइब्रेरीज़ बनाना। + nodejs-and-socketio-title: node.js और socket.io + nodejs-and-socketio: 'p5.js के साथ node.js सर्वर का उपयोग करना, socket.io के माध्यम से संचार करना।' + programming-topics-title: प्रोग्रामिंग विषय + beyond-the-canvas-title: कैनवास से परे + beyond-the-canvas: कैनवास से परे पृष्ठ पर तत्वों को बनाना और उनमें परिवर्तन करना। + 3d-webgl-title: 3D / WebGL + 3d-webgl: WebGL मोड का उपयोग करके p5.js में उन्नत ग्राफ़िक्स एप्लिकेशन विकसित करना। + color-title: रंग + color: डिजिटल रंग के लिए एक परिचय। + coordinate-system-and-shapes-title: समन्वय प्रणाली और आकृतियाँ + coordinate-system-and-shapes: सरल आकृतियों को आकर्षित करना और समन्वय प्रणाली का उपयोग करना। + interactivity-title: अन्तरक्रियाशीलता + interactivity: माउस और कीबोर्ड के साथ अन्तरक्रियाशीलता का परिचय। + program-flow-title: रोग्राम का प्रवाह + program-flow: p5.js में प्रोग्राम प्रवाह को नियंत्रित करने का परिचय। + curves-title: कर्व + curves: >- + p5.js में तीन प्रकार के कर्व्स का परिचय: आर्क्स, स्पलाइन कर्व्स और बेज़ियर + कर्व्स। + becoming-a-better-programmer-title: एक बेहतर प्रोग्रामर बनना + debugging-title: डिबगिंग + debugging: सभी के लिए डिबगिंग के लिए फील्ड गाइड। + optimizing-title: प्रदर्शन के लिए p5.js कोड का अनुकूलन + optimizing: >- + अपने कोड को अनुकूलित करने के लिए युक्तियों और युक्तियों का एक शिक्षण इसे तेज + और सुचारू रूप से चलाने के लिए। + test-driven-development-title: इकाई परीक्षण और परीक्षण संचालित विकास + test-driven-development: >- + इंस्टालेशन के समय पर खुद को पीड़ा से बचाएं। यूनिट परीक्षण क्या है और इसका + उपयोग कैसे करें? एंडी टिम्मन्स द्वारा। + contributing-to-the-community-title: समुदाय में योगदान + development-title: विकास + development: शुरुआत करना और विकास में योगदान के लिए अवलोकन। + looking-inside-title: p5 के अंदर + looking-inside: >- + लुईसाा परेरा द्वारा p5.js विकास के लिए फ़ाइल संरचना और उपकरणों के लिए एक + अनुकूल परिचय। + writing-tutorial-title: एक शिक्षण लेखन + writing-tutorial: एक गाइड p5.js प्रोग्रामिंग शिक्षण लिखने के लिए। + writing-a-tutorial-title: P5.js शिक्षण के योगदान के लिए गाइड + writing-a-tutorial-author: यह शिक्षण टेगा ब्रेन द्वारा लिखा गया था। + writing-a-tutorial-1: >- + हम शिक्षकों, योगदानकर्ताओं और सामान्य उत्साही लोगों को p5js शिक्षण में + योगदान करने के लिए आमंत्रित करते हैं। P5js परियोजना रचनात्मक कोडिंग और खुले + स्रोत के विकास को विविध समुदाय के लिए अधिक सुलभ बनाती है और हम विकास + प्रक्रिया के सभी पहलुओं पर शिक्षण प्रकाशित करने के लिए उत्साहित हैं। अब तक + की हमारी शिक्षण सामग्री में सीखने की पी 5, प्रोग्रामिंग तकनीक और एक ओपन + सोर्स प्रोजेक्ट में योगदान करने के तरीके शामिल हैं। + writing-a-tutorial-2: >- + हम नए लिखित शिक्षण योगदानों का स्वागत करते हैं और यह गाइड प्रस्ताव, तैयारी + और योगदान करने के तरीके की रूपरेखा प्रस्तुत करता है। + writing-a-tutorial-how-start-title: 'शुरुआत कैसे करें:' + writing-a-tutorial-how-start-1: 'जांचें कि आपका प्रस्तावित विषय पहले से ही कवर नहीं किया गया है। ' + writing-a-tutorial-how-start-2: 'यहां एक वर्किंग स्प्रेडशीट है ' + writing-a-tutorial-how-start-3: >- + जो प्रगति शिक्षण में रूपरेखा है। यदि आपके विषय को प्रगति के रूप में सूचीबद्ध + किया गया है, तो शायद आप काम करने के लिए जोड़ सकते हैं और प्रकाशन के लिए + मौजूदा काम को तैयार करने में योगदान कर सकते हैं ताकि कृपया हमारे पास + पहुंचें। + writing-a-tutorial-how-start-4: >- + यदि आपका विषय पहले से ही कवर नहीं है और प्रगति के रूप में सूचीबद्ध नहीं है, + तो कृपया कुछ वाक्यों को लिखें, जो आप हमें इस विवरण को education@p5js.org पर + कवर करने और ईमेल करने का प्रस्ताव देते हैं। + writing-a-tutorial-how-prepare-title: 'ऑनलाइन प्रकाशन के लिए एक p5js शिक्षण कैसे तैयार करें:' + writing-a-tutorial-how-prepare-1: >- + जब आपका शिक्षण प्रकाशन के लिए तैयार हो जाता है, तो कृपया p5js वेबसाइट के लिए + अपनी सामग्री तैयार करने के लिए इन चरणों का पालन करें। + writing-a-tutorial-how-prepare-2: 'Prepare the content of your tutorial as a tutorial-name.hbs file with ' + writing-a-tutorial-how-prepare-3: इस मूल संरचना के साथ + writing-a-tutorial-how-prepare-4: ' एक शिक्षण-name.hbs फ़ाइल के रूप में अपने शिक्षण की सामग्री तैयार करें। जैसा कि इस फ़ाइल में दिखाया गया है, इसमें एक हैडर होना चाहिए जैसा कि नीचे दिखाया गया है:' + writing-a-tutorial-how-prepare-5: >- + आपके शिक्षण वाले फ़ोल्डर को p5js साइट के 'शिक्षण' फ़ोल्डर में रखा जाएगा। + index.hbs नामक फ़ाइल + writing-a-tutorial-how-prepare-6: 'p5.js शिक्षण लैंडिंग पेज ,' + writing-a-tutorial-how-prepare-7: ' है, और परीक्षण-शिक्षण.एचबीएस फ़ाइल परीक्षण शिक्षण है।' + writing-a-tutorial-how-prepare-8: 'सभी सामग्री में जाना चाहिए:' + writing-a-tutorial-how-prepare-9: >- + पृष्ठ पर टैग <h1 > और <h2 > टैग द्वारा परिभाषित स्वरूपण के साथ, + <p > पैराग्राफ टैग के रूप में दिखाया गया है + writing-a-tutorial-how-prepare-10: शिक्षण पृष्ठ का परीक्षण करें। + writing-a-tutorial-how-prepare-11: >- + यदि आपके शिक्षण में छवियां हैं, तो उन्हें नीचे दिए गए स्थान के अनुसार, स्थान + src/assets/learn/test-tutorial/images में, P5 साइट के asset फ़ोल्डर में रखा + जाना है। + writing-a-tutorial-how-prepare-12: 'पृष्ठ के HTML में कोड को सही ढंग से प्रारूपित करने के लिए टैग का उपयोग करें:' + writing-a-tutorial-embedding-title: P5.js स्केच एम्बेड करना + writing-a-tutorial-embedding-1: >- + P5js का उपयोग करने का मतलब है कि आप अपने शिक्षण को प्रोग्रामिंग अवधारणाओं को + प्रदर्शित करने के लिए एनिमेटेड, इंटरैक्टिव या संपादन योग्य कोड उदाहरणों के + साथ चित्रित कर सकते हैं। आपके उदाहरणों को p5.js स्केच के रूप में तैयार किया + जाना चाहिए और इसे दो तरीकों से शिक्षण में एम्बेड किया जा सकता है। + writing-a-tutorial-embedding-2: 'यदि उदाहरण p5js साइट के ' + writing-a-tutorial-embedding-3: संदर्भ पृष्ठों + writing-a-tutorial-embedding-4: ' की तरह संपादन योग्य होना है, तो p5js विजेट का उपयोग करके HTML पृष्ठ में p5 स्केच को एम्बेड किया जाना चाहिए। टूल द्वारा लिखित विजेट का उपयोग करके p5js स्केच को एम्बेड करने के तरीके पर ' + writing-a-tutorial-embedding-5: 'इस गाइड ' + writing-a-tutorial-embedding-6: 'का पालन करें। ' + writing-a-tutorial-embedding-7: 'आप इसे ' + writing-a-tutorial-embedding-8: ' परीक्षण शिक्षण पृष्ठ ' + writing-a-tutorial-embedding-9: ' पर कार्रवाई में भी देख सकते हैं।' + writing-a-tutorial-embedding-10: ' यदि उदाहरण एनिमेटेड और / या इंटरैक्टिव होना है, लेकिन संपादन योग्य नहीं है। P5.js स्केच को नीचे वर्णित अनुसार iframe के रूप में पृष्ठ में एम्बेड किया जाना चाहिए।' + writing-a-tutorial-iframe-title: एक iframe का उपयोग करके एक p5 स्केच एम्बेड करें + writing-a-tutorial-iframe-1: >- + एक iframe एक विंडो बनाने जैसा है, जिसके माध्यम से आप अपने पेज के बाकी + हिस्सों से सैंडबॉक्स कर सकते हैं। इस स्थिति में यह आपके p5.js स्केच वाले + index.html की एक विंडो होगी। + writing-a-tutorial-iframe-2: ' स्क्रीनशॉट में दिखाए अनुसार आपके स्केच के नाम के साथ लेबल वाले फ़ोल्डर में, साइट के / src / आस्तियों / सीखने के फ़ोल्डर में अपने p5 स्केच डालें। यह वह जगह है जहाँ iframe से जुड़े सभी चित्र और p5 स्केच संग्रहीत किए जाने चाहिए।' + writing-a-tutorial-iframe-3: >- + आपके p5 उदाहरण वाले सबफ़ोल्डर्स में एक स्केच.जेएस फ़ाइल और स्केच के लिए + embed.html फ़ाइल होनी चाहिए। + writing-a-tutorial-iframe-4: >- + सुनिश्चित करें कि आपकी embed.html फ़ाइल में साइट के p5 लाइब्रेरीज के लिए + सही रास्ते हैं। यदि आपकी फ़ाइल संरचना ऊपर के समान है, तो p5.js लाइब्रेरी का + पथ ".. ..///..s/ js / p5.min.js " होना चाहिए। + writing-a-tutorial-iframe-5: >- + इसके बाद आप .hbs फ़ाइल के रूप में p5js इंडेक्स फाइल को अपने शिक्षण सामग्री + में एम्बेड कर सकते हैं। Iframe के लिए एम्बेड कोड तब होगा: + writing-a-tutorial-iframe-6: 'आइफ्रेम के लिए स्टाइलिंग (यह सीधे पोस्ट या स्टाइलशीट में हो सकता है): ' + writing-a-tutorial-iframe-7: 'यहाँ आप नग्न स्केच को चलते हुए देख सकते हैं: ' + writing-a-tutorial-iframe-8: 'और यहाँ नीचे कोड का उपयोग करके इसे p5 साइट में एम्बेड किया गया है: ' + writing-a-tutorial-iframe-9: >- + ध्यान देने वाली एक बात यह है कि आपको मैन्युअल रूप से iframe का आकार + निर्धारित करने की आवश्यकता है, इसलिए यह सबसे अच्छा काम करता है यदि चीजें एक + मानक आकार हैं। + writing-a-tutorial-iframe-10: >- + यह भी ध्यान दें कि p5.js लाइब्रेरी फ़ाइलों के लिंक सभी शिक्षण सामग्री के साथ + .eps पेज से नहीं होते हैं। इसके बजाय वे html पृष्ठ में स्थित होंगे जो आपके + स्केच का प्रतिपादन कर रहा है (इस मामले में, जिसे embed.html कहा जाता है)। + writing-a-tutorial-iframe-11: 'एम्बेडिंग p5.js स्केच के बारे में अधिक जानकारी ' + writing-a-tutorial-embed-iframe-12: यहाँ पाई जा सकती है। + writing-a-tutorial-finishing-title: पूरी तरह खत्म करना + writing-a-tutorial-finishing-1: >- + एक बार जब आप अपना शिक्षण लिखना समाप्त कर लेते हैं और आपकी सामग्री को अंगूठा + दे दिया जाता है। वेबसाइट के भंडार के लिए p5.js को फोर्क करें, ऊपर वर्णित + अनुसार अपनी सामग्री तैयार करें और फिर p5.js वेबसाइट रिपॉजिटरी के लिए एक पुल + अनुरोध जारी करें ताकि हम आपके योगदान को प्रकाशित कर सकें! + writing-a-tutorial-finishing-2: धन्यवाद! + color-description1: >- + यह शिक्षण डैनियल शिफमैन की पुस्तक लर्निंग प्रोसेसिंग से है, जिसे मॉर्गन + कॉफमैन द्वारा प्रकाशित किया गया था, © 2008 एल्सेवियर इंक। सभी अधिकार + सुरक्षित। इसे केली चांग ने P5 में रखा था। यदि आप कोई त्रुटि देखते हैं या + टिप्पणी करते हैं, + color-description2: ' तो कृपया हमें बताएं।' + color-p1x1: >- + डिजिटल दुनिया में, जब हम किसी रंग के बारे में बात करना चाहते हैं, तो सटीकता + की आवश्यकता होती है। "अरे, क्या आप उस सर्कल को हरा-हरा बना सकते हैं?" नहीं + करूँगा। रंग, बल्कि, संख्याओं की एक सीमा के रूप में परिभाषित किया गया है। चलो + सबसे सरल मामले से शुरू करते हैं: काले और सफेद या ग्रेस्केल। 0 का मतलब है + काला, 255 का मतलब है सफेद। बीच में, हर दूसरे नंबर- 50, 87, 162, 209, और इसी + तरह से ग्रे की एक छाया है जो काले से सफेद तक होती है। + color-p2x1: 'कुछ खींचने से पहले ' + color-p2x2: ' और ' + color-p2x3: ' कार्य करने से पहले, हम किसी भी दिए गए आकार का रंग निर्धारित कर सकते हैं. ़ ंक्शन ' + color-p2x4: ' भी है , ो खिड़की के लिए एक पृष्ठभूमि रंग सेट करता है। यहाँ एक उदाहरण है ' + color-code1: |- + background(255); // सफेद करने के लिए पृष्ठभूमि की स्थापना + stroke(0); // काला करने के लिए रूपरेखा (स्ट्रोक) की स्थापना + fill(150); // एक आकृति के इंटीरियर को सेट करना (भरना) ग्रे करने के लिए + rect(50,50,75,100); // आयत खींचना + color-p3x1: 'स्ट्रोक या भरण को कार्यों के साथ समाप्त किया जा सकता है: ' + color-p3x2: ' और ' + color-p3x3: ' हमारी प्रवृत्ति को बिना किसी रूपरेखा के "स्ट्रोक (0)" कहना हो सकता है, हालांकि, यह याद रखना महत्वपूर्ण है कि 0 "कुछ भी नहीं" है, बल्कि रंग काले को दर्शाता है। इसके अलावा, दोनों को खत्म करने के लिए याद रखें - ' + color-p3x4: ' और ' + color-p3x5: ' ,कुछ भी नहीं दिखाई देगा!' + color-p4x1: >- + इसके अलावा, अगर हम दो आकृतियाँ बनाते हैं, तो p5.js हमेशा सबसे हाल ही में + निर्दिष्ट स्ट्रोक का उपयोग करेगा और ऊपर से नीचे तक कोड को पढ़ेगा। + color-rgb-title: RGB रंग + color-rgb-p1x1: >- + फिंगर पेंटिंग याद है? तीन " प्राथमिक " रंगों को मिलाकर, किसी भी रंग को + उत्पन्न किया जा सकता है। सभी रंगों को एक साथ घूमने से मैला भूरा हुआ। जितना + अधिक पेंट आपने जोड़ा, उतना ही गहरा। डिजिटल रंगों का निर्माण भी तीन प्राथमिक + रंगों को मिलाकर किया जाता है, लेकिन यह पेंट से अलग तरह से काम करता है। सबसे + पहले, प्राइमरी अलग हैं: लाल, हरा और नीला (यानी, " RGB " रंग)। और स्क्रीन पर + रंग के साथ, आप प्रकाश मिश्रण कर रहे हैं, पेंट नहीं कर रहे हैं, इसलिए मिश्रण + के नियम भी अलग हैं। + color-rgb-li1: लाल + हरा = पीला + color-rgb-li2: लाल + नीला = बैंगनी + color-rgb-li3: हरा + नीला = सियान (नीला-हरा) + color-rgb-li4: लाल + हरा + नीला = सफेद + color-rgb-li5: कोई रंग नहीं = काला + color-rgb-p2x1: >- + यह मानता है कि रंग सभी के रूप में संभव के रूप में उज्ज्वल हैं, लेकिन निश्चित + रूप से, आपके पास उपलब्ध रंग की एक सीमा है, इसलिए कुछ लाल प्लस कुछ हरे रंग के + साथ कुछ नीले बराबर ग्रे, और लाल रंग का एक सा नीला नीला बैंगनी के बराबर है। + हालांकि यह कुछ करने के लिए इस्तेमाल किया जा सकता है, जितना अधिक आप आरजीबी + रंग के साथ कार्यक्रम और प्रयोग करते हैं, उतना ही यह सहज हो जाएगा, बहुत कुछ + अपनी उंगलियों के साथ घूमता रंगों की तरह। और निश्चित रूप से आप कुछ नीले रंग + के साथ कुछ लाल मिश्रण नहीं कर सकते, आपको एक सटीक राशि प्रदान करनी होगी। + ग्रेस्केल के साथ, व्यक्तिगत रंग तत्वों को 0 (उस रंग में से कोई भी) से लेकर + 255 तक (जितना संभव हो) के रूप में व्यक्त किया जाता है, और वे आर, जी और बी + क्रम में सूचीबद्ध होते हैं। प्रयोग के माध्यम से रंग मिश्रण, लेकिन अगले हम + कुछ सामान्य रंगों का उपयोग करके कुछ कोड को कवर करेंगे। + color-transparency-title: रंग पारदर्शिता + color-transparency-p1x1: >- + प्रत्येक रंग के लाल, हरे और नीले रंग के घटकों के अलावा, एक अतिरिक्त वैकल्पिक + चौथा घटक है, जिसे रंग के " अल्फा " के रूप में जाना जाता है। अल्फा का अर्थ + पारदर्शिता है और विशेष रूप से उपयोगी है जब आप उन तत्वों को आकर्षित करना + चाहते हैं जो आंशिक रूप से एक-दूसरे के ऊपर से देखते हैं। किसी छवि के लिए + अल्फा मान कभी-कभी सामूहिक रूप से एक छवि के " अल्फा चैनल " के रूप में + संदर्भित होते हैं। + color-transparency-p2x1: >- + यह महसूस करना महत्वपूर्ण है कि पिक्सेल सचमुच पारदर्शी नहीं हैं, यह बस एक + सुविधाजनक भ्रम है जो रंगों को सम्मिश्रण करने से पूरा होता है। पर्दे के पीछे, + p5.js रंग संख्या लेता है और सम्मिश्रण की ऑप्टिकल धारणा बनाते हुए एक प्रतिशत + को दूसरे के प्रतिशत में जोड़ता है। (यदि आप प्रोग्रामिंग में रुचि रखते हैं " + गुलाब के रंग का " चश्मा, तो यह वह जगह है जहाँ आप शुरू करेंगे।) + color-transparency-p3x1: >- + अल्फा मान भी 0 से 255 तक होता है, जिसमें 0 पूरी तरह से पारदर्शी होता है + (यानी, 0% अपारदर्शी) और 255 पूरी तरह से अपारदर्शी (यानी, 100% अपारदर्शी). + color-custom-ranges-title: कस्टम रंग रेंज + color-custom-ranges-p1x1: ' 0 से 255 के बीच आरजीबी रंग एकमात्र तरीका नहीं है जो आप पी 5.js में रंग संभाल सकते हैं, वास्तव में, यह हमें किसी भी तरह से रंग के बारे में सोचने की अनुमति देता है। उदाहरण के लिए, आप रंग के बारे में सोचना पसंद कर सकते हैं जो 0 से लेकर 100 (प्रतिशत की तरह) तक हो सकता है। आप एक कस्टम colorMode () निर्दिष्ट करके ऐसा कर सकते हैं। ' + color-custom-ranges-p2x1: >- + उपरोक्त फ़ंक्शन कहता है: " ठीक है, हम लाल, हरे और नीले रंग के संदर्भ में रंग + के बारे में सोचना चाहते हैं। RGB मूल्यों की सीमा 0 से 100 तक होगी। " + color-custom-ranges-p3x1: >- + हालाँकि ऐसा करने के लिए यह शायद ही सुविधाजनक है, आप प्रत्येक रंग घटक के लिए + अलग-अलग रेंज भी रख सकते हैं: + color-custom-ranges-p4x1: >- + अब हम कह रहे हैं कि "लाल मान 0 से 100 तक जाते हैं, 0 से 500 तक हरा, 0 से 10 + तक नीला और 0 से 255 तक अल्फा। " + color-custom-ranges-p5x1: >- + अंत में, जबकि आपको अपनी सभी प्रोग्रामिंग जरूरतों के लिए केवल RGB रंग की + आवश्यकता होगी, आप HSB (ह्यू, संतृप्ति और चमक) मोड में भी रंग निर्दिष्ट कर + सकते हैं। बहुत अधिक विस्तार में आए बिना, एचएसबी रंग निम्नानुसार काम करता है: + color-custom-ranges-li1x1: रंग + color-custom-ranges-li1x2: '- रंग प्रकार, डिफ़ॉल्ट रूप से 0 से 255 तक होता है।' + color-custom-ranges-li2x1: परिपूर्णता + color-custom-ranges-li2x2: '- रंग की जीवंतता, डिफ़ॉल्ट रूप से 0 से 255।' + color-custom-ranges-li3x1: चमक + color-custom-ranges-li3x2: ', रंग की चमक, डिफ़ॉल्ट रूप से 0 से 255।' + color-custom-ranges-p6x1: 'साथ में ' + color-custom-ranges-p6x2: ' आप इन मूल्यों के लिए अपनी सीमाएं निर्धारित कर सकते हैं। कुछ लोग ह्यू के लिए 0-360 (रंग व्हील पर 360 डिग्री सोचते हैं) और संतृप्ति और चमक के लिए 0-100 (0-100% के बारे में सोचें) की एक सीमा पसंद करते हैं।' + coordinate-system-description1: 'यह शिक्षण डैनियल शिफमैन की पुस्तक ' + coordinate-system-description2: लर्निंग प्रोसेसिंग + coordinate-system-description3: ' से है, जिसे मॉर्गन कॉफमैन द्वारा प्रकाशित किया गया था, © 2008 एल्सेवियर इंक। सभी अधिकार सुरक्षित इसे एलेक्स Yixuan Xu द्वारा p5.js पर पोर्ट किया गया था। यदि आप कोई त्रुटि देखते हैं या टिप्पणी करते हैं ' + coordinate-system-description4: कृपया हमें बताएं + coordinate-system-description5: । + coordinate-system-description-title: समन्वय प्रणाली और आकृतियाँ + coordinate-system-description-p1x1: >- + पी 5 के साथ प्रोग्रामिंग शुरू करने से पहले, हमें पहले अपने आठवीं कक्षा के + स्वयं को चैनल करना चाहिए, ग्राफ पेपर के एक टुकड़े को बाहर निकालना चाहिए, और + एक रेखा खींचना चाहिए। दो बिंदुओं के बीच की सबसे छोटी दूरी एक अच्छी पुरानी + जमाने की रेखा है, और यह वह जगह है जहाँ हम शुरू करते हैं, उस ग्राफ़ पेपर पर + दो बिंदुओं के साथ। + coordinate-system-description-p2x1: >- + उपरोक्त आंकड़ा बिंदु A (1,0) और बिंदु B (4,5) के बीच एक रेखा दिखाता है। यदि + आप अपने किसी मित्र को उसी रेखा को खींचने के लिए निर्देशित करना चाहते हैं, तो + आप उन्हें एक चिल्लाहट देंगे और कहेंगे " बिंदु वन-शून्य से बिंदु चार-पाँच तक + एक रेखा खींचिए, कृपया। " , कल्पना कीजिए कि आपका दोस्त एक कंप्यूटर था और आप + इस डिजिटल पाल को उसकी स्क्रीन पर उसी लाइन को प्रदर्शित करने का निर्देश देना + चाहते थे। एक ही आदेश लागू होता है (केवल इस बार आप सुखदताओं को छोड़ सकते हैं + और आपको एक सटीक स्वरूपण को लागू करने की आवश्यकता होगी)। यहाँ, निर्देश इस तरह + दिखेगा: + coordinate-system-description-p3x1: >- + यहां तक ​​कि लेखन कोड के वाक्यविन्यास का अध्ययन किए बिना, उपरोक्त कथन को + उचित मात्रा में समझ में आना चाहिए। हम एक आदेश प्रदान कर रहे हैं (जिसे हम + मशीन के लिए " फ़ंक्शन " के रूप में संदर्भित करेंगे) "लाइन।" (1,0) से बी तक + (4,5)। यदि आप एक वाक्य के रूप में कोड की उस पंक्ति के बारे में सोचते हैं, तो + फ़ंक्शन एक क्रिया है और तर्क वाक्य की वस्तुएं हैं। कोड की सजा भी एक अवधि के + बजाय एक अर्धविराम के साथ समाप्त होती है। + coordinate-system-description-p4x1: >- + यहां कुंजी यह महसूस करना है कि कंप्यूटर स्क्रीन ग्राफ पेपर के एक कट्टर + टुकड़े से ज्यादा कुछ नहीं है। स्क्रीन का प्रत्येक पिक्सेल एक समन्वय होता है + - दो नंबर, एक " x " (क्षैतिज) और एक " y " (ऊर्ध्वाधर) - जो अंतरिक्ष में एक + बिंदु के स्थान को निर्धारित करता है। और यह निर्दिष्ट करना हमारा काम है कि इन + पिक्सेल निर्देशांक में किस आकार और रंग दिखाई देने चाहिए। + coordinate-system-description-p5x1: >- + फिर भी, यहाँ एक पकड़ है। आठवीं कक्षा से ग्राफ पेपर (" कार्टेशियन कोऑर्डिनेट + सिस्टम ") केंद्र में रखा गया (0,0) y- अक्ष की ओर इशारा करता है और x- अक्ष + दाईं ओर इंगित करता है (सकारात्मक दिशा में, नकारात्मक नीचे और) छोडा)। + कंप्यूटर विंडो में पिक्सेल के लिए समन्वय प्रणाली, हालांकि, y- अक्ष के साथ + उलट है। (0,0) सकारात्मक दिशा के साथ बाईं ओर शीर्ष पर क्षैतिज और लंबवत नीचे + पाया जा सकता है। + coordinate-system-simple-shapes-title: सरल आकृतियाँ + coordinate-system-simple-shapes-p1x1: >- + P5 के साथ आपके द्वारा देखे जाने वाले अधिकांश प्रोग्रामिंग उदाहरण प्रकृति में + दृश्य हैं। इन उदाहरणों में, उनके मूल में, आकृतियाँ आरेखित करना और पिक्सेल + सेट करना शामिल है। चलो चार आदिम आकृतियों को देखकर शुरू करते हैं। + coordinate-system-simple-shapes-p2x1: >- + प्रत्येक आकृति के लिए, हम स्वयं से पूछेंगे कि उस आकृति के स्थान और आकार (और + बाद में रंग) को निर्दिष्ट करने के लिए कौन सी जानकारी आवश्यक है और जानें कि + p5 उस जानकारी को प्राप्त करने की अपेक्षा करता है। नीचे दिए गए प्रत्येक चित्र + में, हम 10 पिक्सेल की चौड़ाई और 10 पिक्सेल की ऊँचाई के साथ एक विंडो मानेंगे। + यह विशेष रूप से वास्तविक नहीं है क्योंकि जब आप वास्तव में कोडिंग शुरू करते + हैं, तो आप बहुत अधिक बड़ी खिड़कियों के साथ काम करने की संभावना करेंगे (10x10 + पिक्सेल स्क्रीन स्पेस के मुश्किल से कुछ मिलीमीटर हैं।) फिर भी प्रदर्शन + प्रयोजनों के लिए, क्रम में छोटी संख्या के साथ काम करना अच्छा है। पिक्सेल को + प्रस्तुत करें क्योंकि वे कोड के प्रत्येक पंक्ति के आंतरिक कामकाज को बेहतर + ढंग से चित्रित करने के लिए ग्राफ पेपर (अभी के लिए) पर दिखाई दे सकते हैं। + coordinate-system-simple-shapes-p3x1: 'A ' + coordinate-system-simple-shapes-p3x2: ' (बिंदु) आकृतियों का सबसे आसान और शुरू करने के लिए एक अच्छी जगह है। एक बिंदु खींचने के लिए, हमें केवल एक x और y समन्वय की आवश्यकता है।' + coordinate-system-simple-shapes-p4x1: 'A ' + coordinate-system-simple-shapes-p4x2: ' लाइन बहुत मुश्किल नहीं है और बस दो बिंदुओं की आवश्यकता है: (X1, y1) और (x2, y2):' + coordinate-system-simple-shapes-p5x1: 'एक बार जब हम एक ' + coordinate-system-simple-shapes-p5x2: ' (आयत) बनाने आए, चीजें थोड़ी और जटिल हो जाती हैं। P5 में, एक आयत आयत के शीर्ष बाएं कोने के लिए समन्वय द्वारा निर्दिष्ट किया गया है, साथ ही इसकी चौड़ाई और ऊंचाई भी।' + coordinate-system-simple-shapes-p6x1: >- + आयत बनाने का दूसरा तरीका चौड़ाई और ऊंचाई के साथ-साथ केंद्र बिंदु को + निर्दिष्ट करना शामिल है। यदि हम इस विधि को पसंद करते हैं, तो हम पहले संकेत + करते हैं कि हम आयत के लिए निर्देश से पहले + coordinate-system-simple-shapes-p6x2: ' (केंद्र) मोड का उपयोग करना चाहते हैं।. ध्यान दें कि पी 5 केस-संवेदी है।' + coordinate-system-simple-shapes-p7x1: >- + अंत में, हम दो बिंदुओं (शीर्ष बाएं कोने और नीचे दाएं कोने) के साथ एक आयत भी + खींच सकते हैं। यहां मोड + coordinate-system-simple-shapes-p7x2: ' (कॉर्नर) है। ध्यान दें कि यह उदाहरण ऊपर दिए गए उदाहरण के समान स्क्रीन पर परिणाम देता है।' + coordinate-system-simple-shapes-p8x1: 'एक बार जब हम एक आयत बनाने की अवधारणा के साथ सहज हो गए हैं, ' + coordinate-system-simple-shapes-p8x2: ' (दीर्घवृत्त ()) एक तस्वीर है।. वास्तव में, यह ' + coordinate-system-simple-shapes-p8x3: ' के समान है () इस अंतर के साथ कि एक दीर्घवृत्त खींचा जाता है जहां आयत का बाउंडिंग बॉक्स होगा। ' + coordinate-system-simple-shapes-p8x4: ' है ' + coordinate-system-simple-shapes-p8x5: ', ना की ' + coordinate-system-simple-shapes-p8x6: . + coordinate-system-simple-shapes-p9x1: >- + अब देखते हैं कि 200 से 200 के विंडो आयाम के साथ अधिक यथार्थवादी सेटिंग में + आकृतियों के साथ कुछ कोड क्या हैं। विंडो की चौड़ाई और ऊंचाई को निर्दिष्ट करने + के लिए createCanvas () फ़ंक्शन के उपयोग पर ध्यान दें। + teach-desc: 'Teach a p5 workshop or class, or create teaching materials!' +libraries: + Libraries: लाइब्रेरी + core-libraries: कोर लाइब्रेरी + community-libraries: सामुदायिक लाइब्रेरी + libraries-created-by: 'निर्माता:' + p5.sound: >- + p5.sound ऑडियो इनपुट, प्लेबैक, विश्लेषण और संश्लेषण सहित वेब ऑडियो + कार्यक्षमता के साथ p5 का विस्तार करता है। + p5.accessibility: >- + p5.accessibility उन लोगों के लिए p5 कैनवास को अधिक सुलभ बनाती है जो नेत्रहीन + और दृष्टिबाधित हैं। + asciiart: 'p5.asciiart p5js के लिए एक सरल और आसान छवि-से-ASCII कला कनवर्टर है। ' + p5.ble: >- + एक जावास्क्रिप्ट लाइब्रेरी जो BLE उपकरणों और p5 स्केच के बीच संचार को सक्षम + करता है। + p5.bots: >- + p5.bots के साथ आप ब्राउज़र के भीतर से अपने Arduino (या अन्य माइक्रोप्रोसेसर) + के साथ बातचीत कर सकते हैं। स्केच चलाने के लिए सेंसर डेटा का उपयोग करें; एल ई + डी, मोटर, और बहुत कुछ चलाने के लिए एक स्केच का उपयोग करें! + p5.bezier: >- + 'एक पुस्तकालय असीमित बिंदुओं के साथ उच्च-डिग्री बेज़ियर वक्र बनाने में मदद + करता है।' + p5.clickable: 'p5.js के लिए इवेंट संचालित, उपयोग में आसान बटन लाइब्रेरी।' + p5.cmyk.js: 'CMYK कलरस्पेस। ' + p5.collide2D: >- + p5.collide2D p5.js के साथ 2D ज्यामिति के लिए टकराव का पता लगाने की गणना के + लिए उपकरण प्रदान करता है। + CO2Budget.js: >- + यह पुस्तकालय p5 * js से जुड़े कोडरों, डिजाइनरों और कलाकारों के रचनात्मक + समुदायों के CO2-उलटी गिनती के विचार को खोलता है।. + p5.createloop: 'कोड की एक पंक्ति में ध्वनि और GIF निर्यात के साथ एनीमेशन लूप बनाएं। ' + p5.dimensions: >- + p5.dimensions किसी भी संख्या के आयामों में काम करने के लिए p5.js के वेक्टर + फ़ंक्शन का विस्तार करता है। + p5.EasyCam: >- + जड़त्वीय पैन, ज़ूम और रोटेट के साथ सरल 3D कैमरा नियंत्रण। थॉमस डाइवाल्ड का + प्रमुख योगदान। + p5.experience: >- + p5.js के लिए विस्तृत लाइब्रेरी जो कैनवास-आधारित वेब एप्लिकेशन बनाने के लिए + अतिरिक्त ईवेंट-सुनने की कार्यक्षमता जोड़ती है। + p5.func: >- + p5.func एक p5 एक्सटेंशन है जो समय, आवृत्ति और स्थानिक डोमेन में फ़ंक्शन + जनरेशन के लिए नई ऑब्जेक्ट और उपयोगिताओं को प्रदान करता है। + p5.geolocation: >- + p5.geolocation p5.js के लिए उपयोगकर्ता स्थानों को प्राप्त करने, देखने, गणना + करने और जियोफेंसिंग के लिए तकनीक प्रदान करता है। + p5.glitch: p5.glitch extends p5.js for glitching images and binary files. + p5.gibber: p5.gibber तेजी से संगीत अनुक्रमण और ऑडियो संश्लेषण क्षमता प्रदान करता है। + grafica.js: >- + grafica.js आपको अपने p5.js स्केच में सरल लेकिन अत्यधिक विन्यास योग्य 2D + प्लॉट जोड़ने देता है। + p5.gui: 'p5.gui आपके p5.js स्केच के लिए एक ग्राफिकल यूजर इंटरफेस बनाता है। ' + p5.j5: >- + The full Johnny-Five.io Nodebots/robotics library for Arduino and other + microcontrollers made to work directly in browser with WebSerial or WebUSB. + p5.localmessage: >- + p5.localmessage आसान मल्टी-विंडो स्केचिंग के लिए स्थानीय रूप से एक स्केच से + दूसरे में संदेश भेजने के लिए एक सरल इंटरफ़ेस प्रदान करता है! + marching: 'वेक्टर रूपांतरण के लिए रेखापुंज, आइसोसर्फेस।' + mappa: >- + मप्पा स्थिर मानचित्रों, टाइल मानचित्रों और भू-डेटा के साथ काम करने के लिए + उपकरणों का एक सेट प्रदान करता है। भौगोलिक स्थान-आधारित दृश्य अभ्यावेदन बनाते + समय उपयोगी। + ml5.js: >- + ml5.js Tensorflow.js पर बनाता है और ब्राउज़र में मशीन लर्निंग एल्गोरिदम और + मॉडल के लिए अनुकूल पहुँच प्रदान करता है। + numero: p5.js के लिए एक सहयोगपूर्ण और सहज गणित पुस्तकालय | + pdl.library: >- + भौतिकी शिक्षण और सीखने के लिए इंटरेक्टिव आरेख बनाने के लिए कार्यों और + कक्षाओं का एक सेट। + p5.play: >- + p5.play गेम और गेमेलिक एप्लिकेशन के लिए स्प्राइट, एनिमेशन, इनपुट और कोलिजन + फंक्शन प्रदान करता है। + p5.particle: >- + कण और फव्वारा वस्तुओं का उपयोग डेटा-संचालित प्रभाव बनाने के लिए किया जा सकता + है जो उपयोगकर्ता संरचनाओं या JSON इनपुट और उपयोगकर्ता-ड्रा फ़ंक्शन के माध्यम + से परिभाषित होते हैं। + p5.party: >- + p5.party is a library for easily creating networked multiuser games, apps, + and sketches. + p5.Polar: >- + p5.Polar provides mathematical abstractions making it easy to create create + beautiful, kaleidoscopic, radial patterns. + react-p5: This library lets you integrate p5 Sketches into your React App. + p5.recorder: Record sketch canvas and audio. + p5.Riso: >- + p5.Riso, Risograph मुद्रण के लिए उपयुक्त फ़ाइलें बनाने के लिए एक पुस्तकालय + है। यह आपके रेखाचित्रों को बहु-रंगीन प्रिंटों में बदलने में मदद करता है। + rita.js: >- + RiTa.js जनरेटिव साहित्य के लिए प्राकृतिक भाषा प्रसंस्करण वस्तुओं का एक सेट + प्रदान करता है। + Rotating knobs: Make knobs you can rotate with custom graphics and return value ranges. + p5.scenemanager: >- + p5.SceneManager आपको कई राज्यों/दृश्यों के साथ रेखाचित्र बनाने में मदद करता + है। प्रत्येक दृश्य मुख्य स्केच के भीतर एक स्केच की तरह है। + p5.screenPosition: प्रोसेसिंग से P5js तक ScreenX और ScreenY कार्यक्षमता जोड़ता है। + p5.scribble: >- + स्केची लुक में 2D प्रिमिटिव ड्रा करें। मूल प्रसंस्करण पुस्तकालय के एक + बंदरगाह के आधार पर, जेनेक वुल्सचलेगर द्वारा बनाया गया। + p5.serialport: >- + p5.serial enables serial communication between devices that support serial + (RS-232) and p5 sketches running in the browser. + Shape5: >- + Shape5 उन प्राथमिक छात्रों के लिए एक 2D प्राइमरी लाइब्रेरी है जो पहली बार + कोड करना सीख रहे हैं। + p5.shape.js: >- + P5.js ढांचे में और अधिक सरल आकृतियों को जोड़ने के लिए बनाया गया एक + फ्रेमवर्क। + P5.slides: 'p5.slides, p5.js में लिखा गया एक प्रेजेंटेशन प्लेटफॉर्म है।' + p5snap: >- + p5snap एक कमांड-लाइन इंटरफ़ेस है जो एक अंतराल पर p5 स्केच के स्नैपशॉट बनाता + और सहेजता है| + p5.speech: >- + p5.speech वेब स्पीच और स्पीच रिकग्निशन एपीआई के लिए सरल, स्पष्ट पहुंच प्रदान + करता है, जिससे स्केच के आसान निर्माण की अनुमति मिलती है जो बात कर सकते हैं + और सुन सकते हैं। + p5.start2d.js: 'px, mm, cm या इंच का उपयोग करके 2D स्थिर कला के लिए p5 एक्सटेंशन' + p5.tiledmap: >- + p5.tiledmap आपके रेखाचित्रों में मानचित्रों को शामिल करने के लिए आरेखण और + सहायक कार्य प्रदान करता है। + TiledPlay: >- + A small library to bridge the functionality of p5.js, p5.play.js and + p5.tiled.js to easily create 2D platformer games using javascript. + p5.touchgui: p5.js के लिए एक मल्टी-टच और माउस GUI लाइब्रेरी। + tramontana: >- + ट्रैमोंटाना इंटरएक्टिव वातावरण, इंटरेक्टिव स्पेस या पैमाने पर और अंतरिक्ष + में सिर्फ प्रोटोटाइप अनुभव बनाने के लिए आसानी से कई उपकरणों (आईओएस, + एंड्रॉइड, ट्रैमोंटाना बोर्ड, ...) का उपयोग करने के लिए एक मंच है। + TurtleGFX: >- + TurtleGFX allows to code with Turtle Graphics in JavaScript. Great for + education and creative coding. + p5.tween: >- + With p5.tween you can create easily animations as tween for your objects + and shapes. + vida: >- + विडा एक साधारण पुस्तकालय है जो कैमरा (या वीडियो) आधारित गति पहचान और ब्लॉब + ट्रैकिंग कार्यक्षमता को p5js में जोड़ता है। + p5.voronoi: >- + p5.voronoi आपके p5.js रेखाचित्रों में वोरोनोई आरेख बनाने और उनका उपयोग करने + के लिए उपकरणों का एक सेट प्रदान करता है। + p5.wasm: >- + p5.wasm is an addon library written in Rust and compiled to WebAssembly + that implements common functions found in p5.js. + p5.xr: p5 के साथ VR और AR रेखाचित्र बनाने के लिए एक पुस्तकालय| + p5.3D: 'WebGL में 3D पाठ और छवियां। ' + WEBMIDI.js: Easily send and receive MIDI messages from p5. + p5.buttons: '''एक पुस्तकालय जिसका उद्देश्य स्क्रिप्टिंग बटन को जटिल बनाना है।''' + p5.button: >- + 'p5.js कैनवास में सीधे सरल या स्टाइल वाले बटनों को डिज़ाइन और प्रस्तुत करने + के लिए छोटा एक फ़ंक्शन लाइब्रेरी।' + p5.math.js: >- + The mathematical operations of JavaScript have been converted into simple + human language so that they can understand really quickly. + p5LiveMedia: 'रीयल टाइम ऑडियो, वीडियो, कैनवस और डेटा शेयरिंग।' + P5.Create: >- + p5.create एक पुस्तकालय है जो कुशल गेम निर्माण के लिए डिज़ाइन किए गए सेव, + एनीमेशन, टक्कर और टैग फ़ंक्शन प्रदान करता है. + p5.quadrille.js: p5.js quadrille library. + p5.animS: p5.animS animates p5.js shapes by rendering their drawing processes. + I_AM_UI: एक यूजरइंटरफेस लाइब्रेरी + simple.js: Helper functions and defaults for young and new coders. + p5.timer: >- + This library performs asynchronous timing functions like countdowns, + one-shot timers, % time elapsed and encapsulates the millis() function and + other related calculations that often clog up your code. + c2.js: >- + c2.js कम्प्यूटेशनल ज्यामिति, भौतिकी सिमुलेशन, विकासवादी एल्गोरिथ्म और अन्य + मॉड्यूल पर आधारित रचनात्मक कोडिंग के लिए एक Javascript पुस्तकालय है। + Concave Hull: 2D space में बिंदुओं के एक सेट से अवतल हल की गणना करें| + p5.joystick: भौतिक जॉयस्टिक से जुड़ें और खेलें + p5.webserial: >- + "वेब सीरियल एपीआई (क्रोम और एज पर उपलब्ध) पर आधारित ब्राउज़र के भीतर से + सीरियल उपकरणों के साथ बातचीत करने के लिए एक पुस्तकालय"| + p5.pattern: p5.js के लिए एक पैटर्न ड्राइंग लाइब्रेरी। + p5.jacdac: p5js के लिए प्लग-एंड-प्ले माइक्रो-कंट्रोलर। + p5.PatGrad: p5.PatGrad let's you add patterns and gradients to your sketches. + p5.projection: Easy projection mapping of sketches onto real world surfaces + p5.Framebuffer: >- + A fast offscreen canvas for WebGL, giving access to depth data for fog and + blur effects. + p5.capture: >- + p5.capture provides a simple GUI to easily record p5.js animations and + output video files in various formats (webm, gif, mp4, png, jpg, and webp). + p5.input: Adds more key support for p5.js. + p5.web-serial: >- + A p5.js library for using the Web Serial API to access devices like + Arduino, no setup required. + p5.wasm.core: A web assembly core for p5.js. + p5.videorecorder: Record your canvas as a video file with audio. + p5.mapper: >- + p5.mapper is a projection mapping library for p5.js. This library makes it + easy to code and keystone interactive, algorithmic sketches. + p5.teach: >- + A beginner friendly math animation library for p5.js. Created with + mentorship from Nick McIntyre and Jithin KS. + p5.fab: p5.fab controls digital fabrication machines from p5.js. + using-a-library-title: पुस्तकालय का उपयोग करना + using-a-library1: >- + एक p5.js पुस्तकालय कोई भी JavaScript कोड हो सकता है जो p5.js मुख्य + कार्यक्षमता को बढ़ाता या जोड़ता है। पुस्तकालयों की दो श्रेणियां हैं। कोर + लाइब्रेरी ( + using-a-library3: >- + ) p5.js वितरण का हिस्सा हैं, जबकि योगदान की गई लाइब्रेरी p5.js समुदाय के + सदस्यों द्वारा विकसित, स्वामित्व और रखरखाव की जाती हैं। + using-a-library4: >- + अपने स्केच में लाइब्रेरी शामिल करने के लिए, इसे p5.js. में लिंक करने के बाद + अपनी HTML फ़ाइल में लिंक करें। उदाहरण के लिए एक HTML फ़ाइल कुछ इस तरह दिख + सकती है + create-your-own-title: खुद से बनाए + create-your-own1: >- + p5.js दूसरों द्वारा योगदान किए गए लाइब्रेरी का स्वागत करता है! एक लाइब्रेरी + बनाने के तरीके के बारे में अधिक विशिष्टताओं के लिए + create-your-own2: लाइब्रेरी शिक्षण + create-your-own3: की जाँच करें। + create-your-own4: >- + यदि आपने एक लाइब्रेरी बनाई है और इसे इस पृष्ठ पर शामिल करना चाहते हैं, तो इस + फॉर्म को जमा करें! +community: + community-title: समुदाय + community-statement-title: p5.js समुदाय वक्तव्य + community-statement1: >- + p5.js प्रौद्योगिकी के साथ कला और डिजाइन के निर्माण की खोज में रुचि रखने वाला + समुदाय है। + community-statement2: >- + हम एक समुदाय हैं, और हर लिंग के लोगों के साथ एकजुटता में हैं पहचान और + अभिव्यक्ति, यौन अभिविन्यास, जाति, जातीयता, भाषा, न्यूरो-प्रकार, आकार, + क्षमता, वर्ग, धर्म, संस्कृति, उपसंस्कृति, राजनीतिक राय, आयु, कौशल स्तर, + व्यवसाय और पृष्ठभूमि। हम मानते हैं कि हर किसी के पास सक्रिय रूप से समय, + वित्तीय साधन या क्षमता नहीं है भाग लेते हैं, लेकिन हम सभी प्रकार की भागीदारी + को पहचानते हैं और प्रोत्साहित करते हैं। हम पहुंच और सशक्तिकरण को सुगम और + बढ़ावा देना। हम सब शिक्षार्थी हैं। + community-statement3: >- + हमें ये हैशटैग पसंद हैं: #noCodeSnobs (क्योंकि हम समुदाय को महत्व देते हैं + दक्षता), #newKidLove (क्योंकि हम सभी ने कहीं न कहीं शुरुआत की है), + #unassumeCore (क्योंकि हम ज्ञान को ग्रहण नहीं करते हैं), और + #BlackLivesMatter (क्योंकि हम समानता में विश्वास करते हैं)। + in-practice-title: 'प्रयोग में:' + in-practice1: >- + हम कोड स्नोब नहीं हैं। हम यह नहीं मानते हैं कि किसी के पास पूर्व ज्ञान या + ऐसी चीजें हैं जिन्हें जानने की जरूरत है। + in-practice2: >- + हम प्रतिक्रिया के अनुरोधों के साथ सक्रिय रूप से जुड़ने पर जोर देते हैं, चाहे + उनकी जटिलता कुछ भी हो। + in-practice3: >- + हम नवागंतुकों का स्वागत करते हैं और दूसरों की शिक्षा को प्राथमिकता देते हैं। + हम प्रयास करते हैं किसी नवागंतुक के उत्साह के साथ सभी कार्यों को पूरा करें। + क्योंकि हम मानते हैं कि नवागंतुक इस प्रयास में उतने ही मूल्यवान हैं जितने कि + विशेषज्ञ। + in-practice4: >- + हम लगातार कई प्रकार के योगदानों को सक्रिय रूप से पहचानने और मान्य करने का + प्रयास करते हैं। + in-practice5: हम हमेशा मदद या मार्गदर्शन देने के लिए तैयार हैं। + in-times-conflict-title: 'संघर्ष के समय में:' + in-times-conflict1: हम सुनते हैं। + in-times-conflict2: हम दूसरे की भावनाओं को स्वीकार करते हुए स्पष्ट रूप से संवाद करते हैं। + in-times-conflict3: >- + हम स्वीकार करते हैं कि हम गलत हैं, माफी माँगते हैं, और अपने कार्यों के लिए + जिम्मेदारी स्वीकार करते हैं। + in-times-conflict4: हम लगातार खुद को और अपने समुदाय को बेहतर बनाने की कोशिश कर रहे हैं। + in-times-conflict5: हम अपने समुदाय को सम्मानजनक और खुले रखते हैं। + in-times-conflict6: हम सभी को सुना हुआ महसूस कराते हैं। + in-times-conflict7: हम अपनी बातचीत में सावधान और दयालु हैं। + in-the-future-title: 'भविष्य में:' + in-the-future1: भविष्य आज है। + notes-title: नोट्स + notes1: 'कृपया हमारे ' + notes2: p5.js Code of Conduct + notes3: ' पर भी जाएं। P5.js समुदाय कथन एक ' + notes4: Creative Commons license + notes5: ' के तहत लाइसेंस प्राप्त है। एट्रिब्यूशन के साथ साझा करने और रीमिक्स करने के लिए स्वतंत्र महसूस करें। ' + contribute-title: योगदान + contribute1: हमारा समुदाय हमेशा उत्साही लोगों की तलाश में रहता है जो हर तरह से मदद करें। + develop-title: विकास करना। + develop1: GitHub + develop2: ' मुख्य स्थान है जहां कोड एकत्र किया जाता है, मुद्दों का दस्तावेजीकरण किया जाता है, और कोड के बारे में चर्चा की जाती है। आरंभ करने के लिए ' + develop3: ' विकास शिक्षण' + develop4: ' देखें, या ' + develop5: अपना स्वयं का लाइब्रेरी बनाएं। + document-title: प्रलेखन। + document1: ' सभी को प्रलेखन पसंद है। मदद की जरूरत है ' + document2: उदाहरणों को पोर्ट करने + document3: ', और' + document4: ' प्रलेखन को जोड़ने' + document5: ', और शिक्षण बनाने में।' + teach-title: सिखाओ। + teach1: ' एक कार्यशाला, एक कक्षा, एक दोस्त, एक सहयोगी को पढ़ाएं! ट्विटर पर @ p5xjs टैग करें और आप जो कर रहे हैं उसे साझा करने के लिए हम पूरी कोशिश करेंगे।' + create-title: सर्जन करना। + create1: ' p5.js आपके रचनात्मक और अद्भुत काम को सामने वाले पृष्ठ पर दिखाने और अन्य लोगों को प्रेरित करने के लिए डिजाइनरों, कलाकारों, कोडर्स, प्रोग्रामर की तलाश में है। अपना काम ' + create2: hello@p5js.org + create3: पर भेजें। + donate-title: दान देना। + donate1: ' p5.js स्वतंत्र और खुला स्रोत है और कलाकारों द्वारा बनाया गया है। ' + donate2: प्रोसेसिंग फाउंडेशन + donate3: ' को दान के माध्यम से p5.js के विकास में सहायता करें। ' + contributors-conference-title: p5.js योगदानकर्ता सम्मेलन + contributors-conference1: >- + जबकि अधिकांश कार्य ऑनलाइन होते है, हम IRL भी आयोजित करते हैं। हमने + पिट्सबर्ग, पेंसिल्वेनिया में + contributors-conference2: >- + कार्नेगी मेलन विश्वविद्यालय में योगदानकर्ताओं के दो सम्मेलन आयोजित किए। + कलाकार, डिजाइनर, डेवलपर्स, शिक्षक p5.js परियोजना को आगे बढ़ाने के लिए एक साथ + शामिल हुए। + participants-title: प्रतिभागी + support-title: 'सहयोग ' + support1: हमारा योगदान सम्मेलन + support2: >- + कार्नेगी मेलन विश्वविद्यालय में हुआ, जो कला, विज्ञान, प्रौद्योगिकी और + संस्कृति के चौराहों पर एक अकादमिक प्रयोगशाला है। + support3: यह अयोजन + support4: के अनुदान से और + support5: और + support6: 'धन्यवाद! ' + mailing-list-title: मेलिंग सूची + mailing-list-1: >- + प्रोसेसिंग फाउंडेशन से कभी-कभार अपडेट प्राप्त करने के लिए अपना ईमेल पता दर्ज + करें। + 2015contributors-conference-title: योगदानकर्ता सम्मेलन 2015 + 2015contributors-conference-date: 25-31 मई + 2015contributors-conference1: लगभग 30 प्रतिभागियों के एक समूह ने एक सप्ताह बिताया + 2015contributors-conference2: >- + , p5.js प्रोग्रामिंग वातावरण के कोड, दस्तावेज़ीकरण और सामुदायिक आउटरीच टूल + को आगे बढ़ाया। प्रतिभागी हांगकांग, सिएटल, लॉस एंजिल्स, बोस्टन और न्यूयॉर्क + जैसे दूर से आए थे। अधिकांश रचनात्मक प्रौद्योगिकी, इंटरेक्शन डिज़ाइन और + न्यू-मीडिया कला के क्षेत्र में काम कर रहे पेशेवर थे, लेकिन समूह में कार्नेगी + मेलॉन के स्कूल ऑफ आर्ट एंड आर्किटेक्चर के आधा दर्जन स्नातक और स्नातक छात्र + भी शामिल थे। + 2015contributors-conference3: तस्वीरें तायून चोई द्वारा + 2015contributors-conference-diversity-title: विविधता + 2015contributors-conference-diversity1: >- + तकनीकी विकास के साथ-साथ, इस सम्मेलन का एक मुख्य फोकस आउटरीच, समुदाय और + विविधता थी। सम्मेलन एक पैनल के साथ शुरू हुआ + 2015contributors-conference-diversity2: 'विविधता: रेस, जेंडर, एबिलिटी पर सात आवाज़ें, FLOSS और इंटरनेट के लिए क्लास' + 2015contributors-conference-diversity3: '। ' + 2015contributors-conference-diversity4: Organized by + 2015contributors-conference-diversity5: तथा + 2015contributors-conference-diversity6: ' के द्वारा आयोजित, ' + 2015contributors-conference-diversity7: >- + यह पैनल मंगलवार 25 मई 2015 को कार्नेगी मेलन विश्वविद्यालय में क्रेगे सभागार + में हुआ। वक्ताओं में शामिल + 2015contributors-conference-diversity8: तथा + 2015contributors-conference-diversity9: । + 2015cc_1: >- + प्रतिभागियों के विविध समूह मुस्कुराते हैं और अपने हाथों से एक पी 5 संकेत + बनाते हैं + 2015cc_2: >- + हरे लॉन में प्रतिभागियों ने छलांग लगाई, मुस्कुराए और खुशी से हवा में हाथ + हिलाया। + 2015cc_3: महिला अपने लैपटॉप से ​​p5.js समुदाय का बयान प्रस्तुत करती है + 2015cc_4: >- + महिला स्पष्ट रूप से एक माइक्रोफोन में बात करती है जबकि दो पुरुष सहयोगी दिखते + हैं + 2015cc_5: प्रतिभागी मुस्कुराते हैं और एक प्रस्तुति सुनते हैं + 2015cc_6: तीन महिला छात्रों के लिए माइक्रोफ़ोन में महिला p5.js के बारे में पढ़ती है + 2015cc_7: >- + प्रतिभागी एक व्हाइटबोर्ड के चारों ओर एक सर्कल में बैठते हैं, जिस पर स्टिक + नोट्स होते हैं, जबकि एक महिला छात्र माइक्रोफोन में बोलती है + 2015cc_8: >- + प्रतिभागी एक दूसरे के लैपटॉप को देखते हुए टेबल के चारों ओर बैठते हैं और कोड + की तुलना करते हैं + 2015cc_9: >- + विभिन्न रंगीन स्टिक नोट्स और प्रोग्रामिंग के बारे में लिखित नोट्स के साथ + व्हाइटबोर्ड + 2015cc_10: >- + विभिन्न कौशल सेटों के मूल्य निर्धारण के बारे में माइक्रोफोन में बोलने वाली + महिला, जबकि लैपटॉप वाले प्रतिभागियों का एक समूह कक्षा में उसके पावरपॉइंट को + देखता है + 2015cc_11: >- + महिला एक सभागार में पोडियम पर बोलती है जबकि तीन प्रतिभागी मंच पर बैठते हैं + और एक अन्य तीन मंच स्क्रीन पर लंघन कर रहे हैं + 2015cc_12: अपने लैपटॉप पर काम करने वाले प्रतिभागियों के साथ एक कक्षा का ओवरहेड दृश्य + 2015cc_13: एक सर्कल में पांच लोगों की चर्चा + 2015cc_14: एक सर्कल में पांच लोग अपने लैपटॉप के साथ अपने नोट्स साझा करते हैं + 2015cc_15: प्रतिभागियों के एक समूह के लिए एक माइक्रोफोन के साथ कक्षा में आदमी + 2019contributors-conference-title: योगदानकर्ता सम्मेलन 2019 + 2019contributors-conference-date: 13-18 अगस्त + 2019contributors-conference1: 35 प्रतिभागियों का एक अंतःविषय समूह में एकत्र हुए + 2019contributors-conference2: >- + कोड, दस्तावेज़ीकरण, और सामुदायिक आउटरीच टूल को आगे बढ़ाते हुए एकत्र हुआ और + p5.js प्रोग्रामिंग वातावरण के वर्तमान परिदृश्य की खोज। रचनात्मक के क्षेत्र + में प्रतिभागियों की एक विविध श्रेणी का मिश्रण प्रौद्योगिकी, बातचीत डिजाइन, + और नई मीडिया कला, सम्मेलन का उद्देश्य था बहु-विषयक लेंस के माध्यम से संवाद + को बढ़ावा देना। कामकाजी समूह कई विषय क्षेत्रों पर ध्यान केंद्रित: पहुंच; + प्रदर्शन में संगीत और कोड; क्रिएटिव टेक का लैंडस्केप; और अंतर्राष्ट्रीयकरण। + 2019contributors-conference3: Qianqian Ye द्वारा वीडियो + 2019contributors-conference4: जैकलीन जॉनसन द्वारा तस्वीरें + outputs: आउटपुट + output1: >- + । P5.js. के लिए अत्यधिक लचीले त्रिभुज, वर्ग, षट्भुज और अष्टकोणीय परिंदों का + क्रियान्वयन एरेन डेवी द्वारा बनाया गया। + output2: >- + । मल्टी-डिवाइस, मल्टीप्लेयर गेम के निर्माण के लिए टेम्प्लेट फ़ाइलों का एक + सेट जहां कई क्लाइंट एक निर्दिष्ट होस्ट पेज से जुड़ सकते हैं। L05 द्वारा + बनाया गया। + output3: Experiments using + output3-1: ' के साथ प्रयोग, सॉफ्टकॉमपाइल के शुरुआती कार्यान्वयन का परीक्षण, ओएससी इंटरफेसिंग और मिडी सेटअप के लिए डेमो के साथ जुड़ाव। एक p5.js सहयोगी लाइव-कोडिंग vj वातावरण! टेड डेविस द्वारा बनाया गया।' + output4: >- + अमेरिकी कलाकार के नेतृत्व में वर्चुअल स्पेस में ब्लैकनेस एंड जेंडर पर एक + पैनल, जिसमें श्वेनी माइकेलैन खोखला और लाजुन मैकमिलियन थे। + output5: एवरेस्ट पिपकिन और जॉन चैंबर्स के नेतृत्व में कार्यशालाएं। + output6: 'A prototype of a ' + output6-1: 'p5.js. के लिए नोटबुक इंटरफ़ेस ' + output6-2: का एक प्रोटोटाइप एलीसन पैरिश द्वारा बनाया गया। + output7: >- + स्टालजिया ग्रिग, लाजुन मैकमिलियन, आतिश भाटिया और जॉन चेम्बर्स द्वारा नई कला + स्थापना। + output8: p5.js वैश्विक योगदानकर्ता का टूलकिट। + output8-1: >- + आरोन मोन्टोया-मोरागा, केनेथ लिम, गुइलेर्मो मोंटेकिनो, कियानकियन ये, डोरोथी + आर सैंटोस और यशेंग शी द्वारा बनाया गया। + output9: अहिंसक रचनात्मक कोड कैसे लिखें। + output9-1: ओलिविया रॉस के नेतृत्व में एक ज़ीन। + output10: >- + पहुँच के लिए p5.js वेबसाइट का एक ओवरहाल। स्क्रीन रीडर पहुंच के लिए अद्यतन और + होम, डाउनलोड, आरंभ करे और संदर्भ पृष्ठ में सुधार करना। क्लेयर किर्नी-वोल्पे, + सिना बहराम, केट होलेनबाख, ओलिविया रॉस, लुइस मोरालेस-नवारो, लॉरेन मैकार्थी और + एवलिन मासो के योगदान के साथ। + output11: >- + लुइसा परेरा, जून शर्न चैन, शेफाली नायक, सोना ली, टेड डेविस और कार्लोस + गार्सिया द्वारा सहयोगपूर्ण प्रदर्शन। + output12: नताली ब्रिगिंस्की का एक प्रदर्शन। + output13: >- + P5 संपादक के लिए p5.js लाइब्रेरी सिस्टम का एक डिज़ाइन। Cassie Tarakajian और + Luca Damasco द्वारा बनाया गया। + output14: >- + P5 को अन्य लाइब्रेरीज से जोड़ने वाला प्रोटोटाइप। एलेक्स यिक्सुआन जू और लॉरेन + वैली द्वारा बनाया गया। + output15: गोलान लेविन के नेतृत्व में एक समापन कैम्प सर्कल। + 2019cc_1: समूह में प्रस्तुति देने वाले पोडियम पर आदमी + 2019cc_2: दोपहर के भोजन और एक चर्चा में एक लंबी मेज पर बैठे प्रतिभागी + 2019cc_3: >- + एक कक्षा में प्रतिभागी, कुछ अपने लैपटॉप पर काम कर रहे हैं, अन्य बात कर रहे + हैं + 2019cc_4: अपने लैपटॉप पर काम करने वाले प्रतिभागियों की कक्षा + 2019cc_5: एक अंधेरे कक्षा में एक बैठक में भाग लेने वाले + 2019cc_6: विविध प्रतिभागियों की कक्षा में प्रस्तुति देती महिला + 2019cc_7: एक व्यस्त कक्षा में बातचीत करने वाले प्रतिभागी + 2019cc_8: एक कक्षा में साथी प्रतिभागियों के साथ बोलने वाली माइक्रोफोन वाली महिला + 2019cc_9: >- + प्रतिभागी अनुमानित पाठ के सामने पोडियम पर डेटा को अज्ञात करने की समस्या के + बारे में बोलता है + 2019cc_10: >- + P5.js पाठ के सामने साथी प्रतिभागियों से बात करने वाले माइक्रोफोन के साथ एक + व्यक्ति जो पहुंच बढ़ाने के अलावा कोई नई सुविधा नहीं जोड़ेंगे + 2019cc_11: साथी प्रतिभागियों से बात करते माइक्रोफोन में बोलती महिला + 2019cc_12: साथी प्रतिभागियों से बात करने वाला एक माइक्रोफोन + 2019cc_13: प्रतिभागी एक कक्षा में वक्ताओं की ओर ध्यान से सुनते हैं + 2019cc_14: एक वक्ता का सामना करने वाले प्रतिभागियों का क्लासरूम सुनते हैं + 2019cc_15: >- + उसके पीछे के प्रक्षेपण में पाठ पवित्र सीमाओं के साथ साथी प्रतिभागियों के साथ + बोलने वाली माइक्रोफोन + 2019cc_16: >- + 3D की छवि वाले लोगों के एक पैनल को सुनने वाले प्रतिभागियों का ओवरहेड दृश्य + इस पर प्रस्तुत किया गया है + 2019cc_17: >- + प्रतिभागी अपने लैपटॉप के साथ एक मेज के चारों ओर बैठते हैं और एक स्क्रीन पर + कोड का निरीक्षण करते हैं + 2019cc_18: एक आदमकद टेडी बियर के बगल में बैठी महिला अपने लैपटॉप पर काम करती है + 2019cc_19: मुस्कुराते हुए बाहर खड़े प्रतिभागी + 2019cc_20: एक वार्तालाप में चार प्रतिभागी खड़े होते हैं + 2019cc_21: दोपहर के भोजन के साथ बाहर बैठे प्रतिभागी + 2019cc_22: >- + एक बड़े यू आकार की मेज के चारों ओर बैठे प्रतिभागी कक्षा के सामने की ओर देखते + हैं + 2019cc_23: कक्षा में सामने बैठा आदमी ऊर्जावान ढंग से माइक्रोफोन में बोल रहा है + 2019cc_24: प्रतिभागियों के समूह फोटो हवा में अपने हाथों से उत्साह से मुस्कुराते हुए + 2019cc_25: लोगों के समूह चार एलसीडी मॉनिटर से बने कैम्प फायर के आसपास बैठते हैं। +books: + books-title: पुस्तकें + book-1-title: p5.js . के साथ शुरुआत करना + book-1-authors: 'लॉरेन मैकार्थी, केसी रियास और बेन फ्राई। ताइयून चोई द्वारा चित्रण।' + book-1-publisher: 'अक्टूबर 2015 को प्रकाशित, मेकर मीडिया।' + book-1-pages: 246 पृष्ठ। + book-1-type: पेपरबैक। + book-1-description: >- + प्रमुख p5.js डेवलपर और प्रसंस्करण के संस्थापकों द्वारा लिखित, यह पुस्तक आज + के वेब की रचनात्मक संभावनाओं का परिचय प्रदान करती है, जावास्क्रिप्ट और + एचटीएमएल का उपयोग करना। + book-1-order-a: O'Reilly . से प्रिंट/ईबुक ऑर्डर करें + book-1-order-b: अमेज़न से ऑर्डर करें + book-2-title: p5.js का परिचय (स्पेनिश संस्करण) + book-2-authors: >- + लॉरेन मैकार्थी, केसी रियास और बेन फ्राई। एरोनो द्वारा अनुवादित + मोंटोया-मोरागा। Ilustraciones de Taeyoon Choi।" + book-2-publisher: 'प्रकाशित 2018, प्रोसेसिंग फाउंडेशन, इंक।' + book-2-pages: 246 पृष्ठ। + book-2-type: मुलायम आवरण। + book-2-description: |- + प्रमुख p5.js डेवलपर और प्रसंस्करण के संस्थापकों द्वारा लिखित, यह + पुस्तक आज के वेब की रचनात्मक संभावनाओं का परिचय प्रदान करती है, + जावास्क्रिप्ट और एचटीएमएल का उपयोग करना। + book-2-order-a: प्रोसेसिंग फाउंडेशन प्रेस से पीडीएफ ऑर्डर करें + book-2-order-b: Amazon से भौतिक संस्करण ऑर्डर करें + book-3-title: जनरेटिव डिजाइन + book-3-authors: 'बेनेडिक्ट ग्रॉस, हार्टमुट बोहनेकर, जूलिया लाउब और क्लॉडियस लेज़ेरोनी।' + book-3-publisher: >- + 30 अक्टूबर, 2018 को प्रकाशित, प्रिंसटन आर्किटेक्चरल प्रेस; पुनर्मुद्रण + संस्करण। + book-3-pages: 255 पेज। + book-3-type: पेपरबैक। + book-3-description: >- + p5.js, कलाकारों और निर्माताओं में जावास्क्रिप्ट जैसी सरल भाषाओं का उपयोग + करके इंटरैक्टिव टाइपोग्राफी और टेक्सटाइल से लेकर 3डी-प्रिंटेड तक सब कुछ बना + सकते हैं जटिल और सुरुचिपूर्ण इन्फोग्राफिक्स के लिए फर्नीचर। + book-3-order-a: प्रिंसटन आर्किटेक्चरल प्रेस से आदेश + book-3-order-b: अमेज़न से ऑर्डर करें + book-4-title: जनरेटिव गेस्टाल्टुंग (जर्मन संस्करण) + book-4-authors: 'बेनेडिक्ट ग्रॉस, हार्टमुट बोहनेकर, जूलिया लाउब और क्लॉडियस लेज़ेरोनी।' + book-4-publisher: '1 मार्च, 2018 को प्रकाशित, श्मिट हरमन वेरलाग।' + book-4-pages: 256 पृष्ठ। + book-4-type: हार्डकवर। + book-4-description: >- + p5.js, कलाकारों और निर्माताओं में जावास्क्रिप्ट जैसी सरल भाषाओं का उपयोग + करके इंटरैक्टिव टाइपोग्राफी और टेक्सटाइल से लेकर 3डी-प्रिंटेड तक सब कुछ बना + सकते हैं जटिल और सुरुचिपूर्ण इन्फोग्राफिक्स के लिए फर्नीचर। + book-4-order-a: वेरलाग हरमन श्मिट से आदेश + book-4-order-b: अमेज़न से ऑर्डर करें + book-5-title: p5.js के साथ जावास्क्रिप्ट सीखें + book-5-authors: इंजिन अर्सलान + book-5-publisher: 'प्रकाशित 2018, एप्रेस।' + book-5-pages: 217 पृष्ठ। + book-5-type: पेपरबैक + book-5-description: >- + का उपयोग करके अत्यधिक आकर्षक और दृश्य तरीके से शुरू से कोडिंग सीखें + प्रोग्रामिंग लाइब्रेरी p5.js के साथ अत्यधिक लोकप्रिय जावास्क्रिप्ट। कौशल आप + इस पुस्तक से प्राप्त होने वाले बहुत से असंख्य को अत्यधिक हस्तांतरणीय हैं + उद्योगों और वेब अनुप्रयोगों के निर्माण के लिए इस्तेमाल किया जा सकता है, + प्रोग्राम करने योग्य रोबोट, या जनरेटिव आर्ट। + book-5-order-a: अप्रेस से आदेश Order + book-5-order-b: अमेज़न से ऑर्डर करें + book-6-title: 'एस्थेटिक प्रोग्रामिंग: ए हैंडबुक ऑफ सॉफ्टवेयर स्टडीज' + book-6-authors: 'विनी सून, ज्योफ कॉक्स।' + book-6-publisher: 'प्रकाशित 2020, ओपन ह्यूमैनिटीज प्रेस।' + book-6-pages: 298 पृष्ठ। + book-6-type: हार्डकवर + book-6-description: >- + p5.js का उपयोग करते हुए, यह पुस्तक रिफ्लेक्टिव अभ्यास का परिचय और प्रदर्शन + करती है + सौंदर्य प्रोग्रामिंग की, एक तरह से कार्यक्रम के लिए सीखने के साथ संलग्न + मौजूदा तकनीकी वस्तुओं और प्रतिमानों को समझें और सवाल करें, + और व्यापक पारिस्थितिक-सामाजिक-तकनीकी प्रणालियों को पुन: प्रोग्राम करने की क्षमता का पता लगाने के लिए। + book-6-order-a: पीडीएफ डाउनलोड करें (फ्री) + book-6-order-b: बार्न्स एंड नोबल से आदेश +examples: + Examples: उदाहरण + back-examples: उदाहरण + Structure: संरचना + Form: प्रपत्र + Data: डेटा + Arrays: Arrays + Control: नियंत्रण + Image: छवि + Color: रंग + Math: गणित + Simulate: सिम्यलट + Interaction: इंटरेक्शन + Objects: वस्तुओं + Lights: रोशनी + Motion: गति + Instance_Mode: उदाहरण मोड + Dom: DOM + Drawing: चित्रकारी + Transform: परिवर्तन + Typography: टाइपोग्राफी + 3D: 3 डी + Input: इनपुट + Advanced_Data: उन्नत डेटा + Sound: ध्वनि + Mobile: मोबाइल + Hello_P5: हैलो पी 5 +reference: + Reference: संदर्भ +showcase: + showcase-title: Showcase + showcase-intro1: 'Introducing Showcase, created by ' + showcase-intro2: ' in 2019 and currently curated by ' + showcase-intro3: >- + We're celebrating how people are using p5.js to make creative work, + learning, and open source more interesting and inclusive. Together, we make + community. During Summer 2019, we asked a few creators to share more about + how they've used p5.js through different projects and pieces. + showcase-intro4: >- + The Summer 2020 Showcase is now open for submissions, nominate someone's + p5.js work or your own to be featured here! + nominate-project: Nominate a Project + showcase-featuring: Featuring + project-tag-art: Art + project-tag-design: Design + project-tag-code: Code + project-tag-curriculum: Curriculum + project-tag-documentation: Documentation + project-tag-game: Game + project-tag-library: Library + project-tag-organizing: Organizing + project-tag-tool: Tool + project-tag-tutorial: Tutorial + project-roni: Programmed Plotter Drawings + credit-roni: Roni Cantor + description-roni: >- + Sine waves and lerps generated in p5.js, exported as SVG, and drawn with a + plotter and pens. + project-phuong: Airi Flies + credit-phuong: Phuong Ngo + description-phuong: >- + In this game developed with p5.play, help Airi fly by saying PEW. Created to + encourage people to get out of their comfort zone and feel more confident + about themselves regardless of what they do and how they look or sound. + project-daein: Chillin' + credit-daein: Dae In Chung + description-daein: >- + An interactive typographic poster that uses a mobile device's motion sensor + with p5.js. + project-qianqian: Qtv + credit-qianqian: Qianqian Ye + description-qianqian: >- + A video channel with 1-minute videos in Mandarin about creative coding, art, + and technology, including p5.js tutorials for beginners. Available on + YouTube, Instagram, Bilibili, and TikTok. + project-casey-louise: p5.js Shaders + credit-casey-louise: 'Casey Conchinha, Louise Lessél' + description-casey-louise: 'A resource for learning the what, why, and how of using shaders in p5.js.' + project-moon-xin: Moving Responsive Posters + credit-moon-xin: 'Moon Jang, Xin Xin, and students' + description-moon-xin: >- + Browser-based moving posters that use graphical systems, transformation + methods, and p5.js to address the connotations of a word less than 8 + letters. Designed by students for a graphic design course (Visual Narrative + Systems) at the University of Georgia. + created-by: Created By + pronouns-female: (she/her) + creator-from-roni-cantor: 'From Toronto, Canada' + project-links: Project Links + project-links-text-1-roni-cantor: Example sketch in p5.js Web Editor + project-links-text-2-roni-cantor: AxiDraw V3 demo video + project-q-1-1: What are you up to? + project-q-1-2: How did you get started with p5.js? + project-a-1-1-roni-cantor: >- + I just graduated from Ryerson University's New Media program. Coming from 4 + years of coding and making robots, I decided to take a break and play with + some more traditional forms of art—while still coding and playing with + robots. + project-a-1-2-roni-cantor: 'I first started using p5.js at ' + project-a-1-3-roni-cantor: '! After using ' + project-a-1-4-roni-cantor: ' for many years, I wanted to try something new.' + project-q-2: How did you use p5.js in this project? + project-a-2-1-roni-cantor: >- + I used p5.js in this project to generate the sine wave and lerp (linear + interpolation) formulas and display the visuals in the + project-a-2-2-roni-cantor: >- + . I then used a feature in my code that exported my programmed graphic into + an + project-a-2-3-roni-cantor: ' file. I needed an SVG file to give to the plotter—an ' + project-a-2-4-roni-cantor: >- + —so that it understood where to draw the lines that I programmed. I sent + this information to the plotter with a program called + project-a-2-5-roni-cantor: '!' + project-q-3: What's your favorite p5.js feature? + project-a-3-roni-cantor: ' because lines are fun and "lerp" is a fun word to say!' + project-q-4: >- + Did you face any challenges working on this project? If so, how did you + overcome them? + project-a-4-roni-cantor: >- + It was my first time using p5.js, Inkscape, and a plotter! I really + benefited from the people around me who had used p5 before, as well as + online guides and forums. + project-q-5: What's a cool thing we should check out? + project-a-5-roni-cantor: ' on Instagram—super cool analog plotter stuff.' + project-q-6: Where can people learn more about you? + project-a-6-roni-cantor: ' (Instagram)' + project-resources: Project Resources + creator-from-qianqian: 'Los Angeles, California' + interview-link-qianqian: Processing Foundation interview with Qianqian Ye + project-a-1-1-qianqian: I am a Chinese artist and designer based in Los Angeles. + project-a-1-2-qianqian: >- + My partner introduced me to p5.js, which I learned mainly by watching free + online video tutorials. My first p5.js project was drawing some shapes with + different colors. + project-a-2-1-qianqian: >- + This project started with an idea of teaching my mom, who lives in China and + doesn’t speak English, to code with p5.js. This project was difficult on + multiple levels, and I wanted to start by identifying the main reasons why + it’s more challenging for someone like my mother to learn to code—primarily + due to the lack of free creative coding education resources. Most of the + free resources to learn creative coding are unavailable in China. The p5.js + tutorials on YouTube as well as the p5.js Twitter and Instagram accounts are + inaccessible in China because of internet censorship. + project-a-2-2-qianqian: 'I learned a lot from YouTube videos such as the ' + project-a-2-3-qianqian: >- + , but the more I watched coding tutorials online, the more I realized how + difficult it is to find other womxn and people of color teaching coding, + especially in Mandarin. I wanted to help other Chinese womxn relate to + creative coding. + project-a-2-4-qianqian: >- + I am working on opening up the video channels to other Chinese creatives who + want to contribute to the educational resource together, like interviews and + guest tutorials. If you are interested in teaching/talking about creative + coding in Mandarin, HMU! + project-a-3-1-qianqian: 'The ' + project-a-3-2-qianqian: ' is my favorite feature. It makes web-based creative coding seamless.' + project-a-4-1-qianqian: >- + Learning to code in a second language was difficult and the lack of + community made this process even harder. I hope to speak from my experience + as a beginner and someone who once felt like an outsider to the creative + coding and video tutorial world. + project-a-4-2-qianqian: >- + I spend a lot of time researching the latest technology for my videos. In + the end, I decided on using my phone to record and iMovie to edit. I hope to + encourage others that it doesn’t take a lot of expensive gears to get + started making instructional videos. + project-a-4-3-qianqian: >- + Another issue I came across was my own fear of putting myself online. I + first had to get over my anxiety of making mistakes in the videos or + receiving negative comments online. Often womxn and people of color are + targets for online harassment. I’m hoping to help set an example for other + womxn and people of color that it’s ok to put yourselves online and + strengthen your communities by sharing your knowledge. Eventually, we will + be able to stop online harassment by creating strong diverse communities. + project-a-5-1-qianqian: 'I am very excited about ' + project-a-5-2-qianqian: ' in LA.' + creator-from-phuong: 'From Kyiv, Ukraine' + project-a-1-1-phuong: 'I''m a creative coder and designer, a ' + link-1-phuong: Play Airi Flies! + link-2-phuong: Code for AiriFlies on GitHub + link-3-phuong: More info in Phuong Ngo's portfolio + project-a-1-2-phuong: ' diversity scholarship recipient, and just a curious creature.' + project-a-1-3-phuong: >- + I was taking a course at the School of Machines in Berlin this summer + called! " + project-a-1-4-phuong: '," mainly taught by ' + project-a-2-1-phuong: >- + I used p5.js to work on the visual part of the game. The animation sprites + for Airi and the ghosts were drawn on an iPad app called + project-a-2-2-phuong: ' and then integrated into ' + project-a-2-3-phuong: ' code. I mainly used examples at p5.play as a reference.' + project-a-2-4-phuong: 'For the endless scrolling background, I found a ' + p5-sketch-by-chjno-phuong: p5 sketch by chjno + project-a-2-5-phuong: >- + . I set a condition so whenever the word "pew" or a mouse click was + detected, the scrolling speed would change to make an illusion of Airi + flying up. When the user does not do anything, the scrolling speed is + negative, which makes it look like Airi is falling down. + project-a-2-6-phuong: 'For sound recognition, I used ' + project-a-2-7-phuong: ' (currently, there is a beta version not available in public yet, but it will be very soon!). I added around 120 samples of my classmates saying the word "pew" with different intonations and 80 samples of background noise to train it. Then I integrated the model into the game with ' + project-a-3-1-phuong: >- + I really love how easily you can create, manipulate, and delete HTML blocks + and classes with the + project-a-3-2-phuong: ' via ' + project-a-3-3-phuong: ' etc. But my most favorite function is ' + project-a-3-4-phuong: ', since this is where you create magic.' + project-a-4-1-phuong: >- + There were a lot of challenges simply because p5.js was something new to me. + I did not work much with JavaScript in general before. Reading documentation + and searching for similar examples helped a lot. + project-a-5-1-phuong: 'Check out ' + school-of-machines-phuong: School of Machines' courses + project-a-5-2-phuong: >- + ! They try hard to connect the most creative people in the world and they do + it well so far. ❤️ + pronouns-male: (he/him) + creator-from-chung: 'From Baltimore, Maryland' + link-1-casey-louise: p5.js Shaders guide + link-2-casey-louise: Glitch collection of p5.js shader examples + link-1-chung: View Chillin' + link-2-chung: Code for Chillin' on GitHub + link-3-chung: More info in Dae In Chung's Portfolio + project-a-1-1-chung: >- + I am a graphic designer and a faculty member at Maryland Institute College + of Art, where I mainly teach coding (with p5.js and Processing, of course) + and motion graphics. + project-a-1-2-chung: 'I have been using ' + project-a-1-3-chung: ' for some time, and when p5.js came along, I started using it without a second thought because it was easy to convert existing Processing code and share projects online.' + project-a-2-1-chung: >- + This summer, I gave myself a challenge of making typographic posters with + coding, and this is one of the posters I made. I didn’t know until very + recently that I could use motion sensor data with p5.js. I was also watching + dan-shiffman-matterjs-tutorial: Dan Shiffman’s matter.js tutorial videos + project-a-2-2-chung: ', so I thought why not combine the two and practice what I was learning?' + project-a-3-1-chung: >- + There are many things I love about p5.js such as the online community and + beginner friendliness. What I really like right now is the + project-a-3-2-chung: >- + , with which I can not only work online for myself but also share URLs + quickly in the present mode. For this project in particular, I had to do a + lot of testing on my phone, and it was much easier and quicker than + committing to GitHub. + project-a-4-1-chung: 'I had some troubles with handling font, alpha channel and z-depth in ' + project-a-4-2-chung: ' mode. I am still not happy with all my decisions. But in general, it was helpful to search the forum and not to forget to break down problems into smaller ones and iterate little by little. Also, I had issues with rendering out video files directly out of p5.js. Screen recording was not an option because of intermittent frame rate drops (my laptop is pretty slow). After doing some research, I decided to learn some basics of ' + project-a-4-3-chung: ' and build a tool for myself.' + project-a-5-1-chung: >- + As mentioned above, if you want to render out frames and video files out of + p5.js sketches, check out my + project-a-5-2-chung: ' and let me know what you think.' + creator-from-casey-louise: 'From New York, New York' + project-a-1-1-casey-louise: >- + Casey: I'm a student at NYU ITP who's interested in computer graphics and + interactive spaces, physical and digital. + project-a-1-2-casey-louise: >- + Louise: I'm a student at NYU ITP who's interested in computer graphics and + interactive spaces based on sensor technologies. + project-a-1-3-casey-louise: >- + Casey: I started learning p5.js in 2018 in my first semester at ITP, though + I had been dabbling in + project-a-1-4-casey-louise: ' since 2012. I was introduced to Processing by my friend Pedro while I was studying graphic design, and it blew my mind. The idea of making my own tools for creating graphics and interactive art piqued my interest, but once I actually tried it, I was hooked. The first project I can remember was an eye that followed you around the screen, and it was sad when you left it alone.' + project-a-1-5-casey-louise: >- + Louise: I initially learned p5.js to make a website I was creating more + playful. I’m a C# programmer, so this was a good segway into JavaScript for + me. + project-a-2-1-casey-louise: >- + Casey: I was putting off learning shaders for a long time, and I was also + curious if I could use them in p5.js. Then I heard about a grant for open + source, storytelling, and learning resource projects at ITP called + project-a-2-2-casey-louise: >- + . Since I wasn't finding much in the way of p5.js + shader documentation, I + decided to figure out how they're implemented in p5.js and create a resource + for others to learn. When I told Louise about the project, she was + immediately excited about learning and teaching shaders in p5.js. She's been + great about making sure the project is a learning resource and not just a + collection of examples. + project-a-3-1-casey-louise: 'Casey: Does ' + project-a-3-2-casey-louise: ' count as a feature? I also love having the ability to share my programs on the web so that people don''t have to install special software or come to NYC to see my work.' + project-a-3-3-casey-louise: 'Louise: My favorite feature is ' + project-a-3-4-casey-louise: ' and ' + project-a-3-5-casey-louise: ' for transformation of the coordinate system to make generative visuals.' + project-a-4-1-casey-louise: >- + Casey: The beginning of the project (figuring out how things work) was us + reaching out to amazing people, asking questions, and asking for permission + to use their examples in our project. + adam-ferris-repo-casey-louise: Adam Ferriss' GitHub repo + project-a-4-2-casey-louise: ' really laid the groundwork for us in understanding how shaders work in p5.js and provided a framework of approachable examples for us to build on. For some specific p5.js-related issues we were having, we reached out to ' + project-a-4-3-casey-louise: ' and ' + project-a-4-4-casey-louise: ' (who worked on the ' + webgl-casey-louise: WebGL implementation in p5.js + project-a-4-5-casey-louise: '), and they were super helpful.' + project-a-4-6-casey-louise: >- + Louise: The learning curve was pretty steep for getting shaders into p5. + Luckily, there were some very well-documented examples on GitHub by Adam + Ferriss. Our aim was to do so in a way that a complete beginner can + understand how to implement it, so it was as much a technical challenge as + it was a challenge in teaching code to strangers and beginners. Here we drew + inspiration from the way the + openframeworks-book-casey-louise: openFrameworks book + project-a-4-7-casey-louise: ' is written. A fun "hey, it’s not hard and you can do it too" approach is what we believe in.' + project-a-5-1-casey-louise: 'Check out the ' + project-a-5-2-casey-louise: ' to explore our peers'' amazing grant projects!' + pronouns-nonbinary: (they/them) + creator-from-moon: 'From Athens, Georgia' + posters-by: Posters By + project-a-1-1-moon: >- + Moon: I'm a graphic designer, visual artist, and design educator. This + summer, I taught a graphic design course in the University of Georgia + Cortona program in Italy, introducing some basics of p5.js. This fall, I am + planning to teach and to study digital platforms at UGA. + project-a-1-2-moon: 'My former colleague, ' + project-a-1-3-moon: ', invited me to ' + project-a-1-4-moon: ' in ' + pcd-la-moon: LA in January 2019 + project-a-1-5-moon: >- + . They helped me with the tools and logics of p5.js. It was an excellent + teaching and learning experience. + project-a-2-1-moon: 'We followed basic tutorials, ' + codetrain-moon: Daniel's videos on YouTube + project-a-2-2-moon: ', and ' + p5-reference-moon: Reference on the p5.js website + project-a-2-3-moon: . + project-a-3-1-moon: 'My favorite function is related to ' + project-a-3-2-moon: ' and ' + project-a-3-3-moon: ': ' + project-a-3-4-moon: >- + . I was able to use and to teach this tool to visualize various ideas about + time in motion. + project-a-4-1-moon: >- + It was challenging for me, a beginner, to understand the overall structure + of p5.js and how code works in general. I had to repeat the p5.js basics a + couple of times, and then I drew a chart to memorize and to teach the way I + understood the p5.js structure and code with strong constraints I set up. It + was an excellent teaching and learning experience. + project-a-5-1-moon: 'Check out the ' + project-a-5-2-moon: ' in Milan, Italy.' +teach: + teach-title2: सिखाना + teach-intro1: 'प्रत्येक शिक्षण के अपने विशिष्ट लक्ष्य, संदेश, शर्तें और वातावरण होते हैं।' + teach-intro2: >- + p5 कार्यशालाओं, कक्षाओं और सामग्रियों का दस्तावेज़ीकरण और साझा करके, हम + दुनिया भर में p5.js शिक्षार्थी और शिक्षक समुदायों को बेहतर ढंग से जोड़ने की + उम्मीद करते हैं। + teach-intro3: साझा करें या अनुशंसा करें + teach-intro4: आपके अपने शिक्षण अनुभव भी! + teach-heading: p5 शिक्षण संसाधन + teach-search-filter: Search Filter + teach-filter1: 'Diversity & Inclusion : ' + teach-filter1-label1: Gender + teach-filter1-label2: Race & Ethnicity + teach-filter1-label3: Language + teach-filter1-label4: Neuro-Type + teach-filter1-label5: Ability + teach-filter1-label6: Class + teach-filter1-label7: Religion + teach-filter1-label8: (Sub-)Culture + teach-filter1-label9: Political Opinion + teach-filter1-label10: Age + teach-filter1-label11: Skill Level + teach-filter1-label12: Occupation + teach-filter1-label13: '#noCodeSnobs' + teach-filter1-label14: '#newKidLove' + teach-filter1-label15: '#unassumeCore' + teach-filter1-label16: '#BlackLivesMatter' + teach-filter2: 'Venue : ' + teach-filter2-label1: Africa + teach-filter2-label2: Asia + teach-filter2-label3: Europe + teach-filter2-label4: North America + teach-filter2-label5: Oceania + teach-filter2-label6: South America + teach-filter2-label7: 'Virtual-Online ' + teach-filter3: 'Year : ' + teach-filter4: 'Level of Difficulty : ' + teach-filter4-label1: Elementary + teach-filter4-label2: Intermediate + teach-filter4-label3: Advanced + teach-case-subtitle1: Venue & Date + teach-case-subtitle2: Participants + teach-case-subtitle3: Level of Difficulty + teach-case-subtitle4: Goals + teach-case-subtitle5: Method & Materials + teach-case1-title: p5.js à l'Ubuntu Party! + teach-case1-lead-name: Basile Pesin + teach-case1-content1: '2020 Ubuntu Party, ' + teach-case1-content1-1: 'Cité des Sciences et de l''Industrie, Paris, France' + teach-case1-content2: 'Any age, including children and parents, young and older adults.' + teach-case1-content3: Advanced + teach-case1-content4: >- + To introduce a new public to programming through fun and compelling + examples. + teach-case1-content5: >- + Method: in-person workshop, 1 hour per session, with different participant + each times. The students were using (Ubuntu) machines with the p5.js web + editor. I was teaching using a video projector as well as a board. + teach-case1-content5-1: >- + Materials: The exercises I gave where accessible through p5.js web-editor + links available in + teach-case2-title: >- + Making The Thing that Makes the Thing: Exploring Generative Art & Design + with p5.js + teach-case2-lead-name: Priti Pandurangan & Ajith Ranka + teach-case2-image-alt: >- + A group of participants collaborating to create some designs using the p5.js + web editor on their laptops. + teach-case2-content1: 'National Institute of Design, Bangalore' + teach-case2-content1-1: '2020 February 8, 2:30-4:00 PM' + teach-case2-content2: >- + Our participants included art/design students & professionals, creative + coding enthusiasts. We had close to 50 participants. + teach-case2-content3: 'Priti: Intermediate & Ajith: Advanced' + teach-case2-content4: >- + To explore generative art & design and recreate some classical works + with p5.js. + teach-case2-content5: 'Methods: In-person, collaborative, hands-on workshop.' + teach-case2-content5-1: 'Materials: ' + teach-case2-content5-2: 'course page ' + teach-case2-content5-3: 'linking to sketches on the p5 editor, ' + teach-case2-content5-4: 'interactive reference guide ' + teach-case2-content5-5: to p5 basics + teach-case3-title: CC Fest (Creative Coding Festival) + teach-case3-lead-name: Saber + teach-case3-speech: 'Love p5.js. It has meant so much to me, my students, and this community.' + teach-case3-content1: ' New York, Los Angeles, San Francisco, Virtual-Online ' + teach-case3-content1-1: ' Twice a year in NYC for four years; once a year in LA for three years; once a year in SF for two years; now virtual' + teach-case3-content2: >- + Our participants included art/design students & professionals, creative + coding enthusiasts. We had close to 50 participants. + teach-case3-content3: Intermediate + teach-case3-content4: >- + To build a teacher and student community around p5 for middle and high + school. + teach-case3-content5: >- + A half-day of workshop led by volunteer teachers. We saw lots of different + methods and materials. Most used some sort of slides or documentation, some + live coding using an editor, with work time for participant to remix. + teach-case3-content5-1: CC Fest Lessons page + teach-case3-content5-2: ' for teaching materials' + teach-case3-content5-3: More photos + teach-case4-title: Taller Introducción a la Programación Creativa con p5.js + teach-case4-lead-name: Aarón Montoya-Moraga + teach-case4-image-alt: >- + A group of 20 people sitting on a large shared table with their laptops + looking at a projected screen. + teach-case4-speech: 'p5.js is my happy place ' + teach-case4-content1: ' PlusCode Media Arts Festival, Buenos Aires, Argentina & Virtual-Online ' + teach-case4-content1-1: ' 2018 November 14, 3 hours' + teach-case4-content2: >- + I had around 16 students in the workshop, and a team including 3 people from + the PlusCode festival, and one person at the venue. + teach-case4-content3: 'Elementary, Intermediate, Advanced' + teach-case4-content4: >- + Introduction to beginners and artists of graphic web programming and open + source, using p5.js, in Spanish :) + teach-case4-content5: 'I used the material on this ' + teach-case4-content5-1: GitHub repo + teach-case4-content5-2: ', we used the p5.js web editor, we had a three hour long workshop' + teach-case4-content5-3: '+CODE electronic art festival 2018, Argentina' + teach-case4-content5-4: ', Medium' + teach-case5-title: Introduction to Generative Drawing + teach-case5-lead-name: Adam Herst + teach-case5-speech: >- + My greatest source of uncertainty in developing the workshop was whether it + was trying to teach art to programmers or to teach programming to artists. + teach-case5-content1: Inter/Access + teach-case5-content1-1: ' (artist-run centre), Toronto, Ontario, Canada' + teach-case5-content1-2: In-person with a self-paced workbook for remote work + teach-case5-content1-3: ' 2020 February 12, 7PM-9PM' + teach-case5-content2: 15 artists + teach-case5-content3: Elementary + teach-case5-content4: >- + To introduce p5.js to artists with little or no programming experience and + to suggest one way an analogue practice can migrate to a digital form. + teach-case5-content5: >- + A printed workbook with activities that used the p5.js web editor to show + how translate an physical drawing into a digital drawing. + teach-case5-content5-1: 'Processing Community Day 2019: Generative Drawing at Inter/Access' + teach-case5-content5-2: Introduction to Generative Drawing Letter PDF + teach-case5-content5-3: Introduction to Generative Drawing Booklet PDF + teach-case6-title: 'Open Lecture, Creative Coding: 2020' + teach-case6-lead-name: Shunsuke Takawo + teach-case6-image-alt: >- + A table on which there is a laptop, some sheets of papers, colorful pens and + two automatic machines drawing something with a pen on a sheet. + teach-case6-speech: >- + I love p5.js because it's so easy to read and write code in p5.js. Coding in + your everyday life! + teach-case6-content1: ' Kyoto University of Art and Design, Kyoto, Japan & Virtual-Online ' + teach-case6-content1-1: ' 2020 March 16-18, 1-7 PM' + teach-case6-content2: 'Students of Kyoto University of Art and Design, and anyone.' + teach-case6-content3: Elementary + teach-case6-content4: Making code as a tool for artistic expression. + teach-case6-content5: 'Dropbox Paper, p5.js web editor.' + teach-case6-content5-1: Syllabus + teach-case6-content5-2: Day 1 + teach-case6-content5-3: Day 2 + teach-case6-content5-4: Day 3 + teach-case6-content5-5: ', YouTube' + teach-case7-title: Creative Coding for Static Graphics + teach-case7-lead-name: Shunsuke Takawo + teach-case7-speech: >- + Coding in p5.js is a lot of fun. If you haven't started yet, I encourage you + to give it a try! + teach-case7-content1: ' FabCafe MTRL, Tokyo, Japan' + teach-case7-content1-1: ' 2019 September 15, 4-7 PM ' + teach-case7-content2: Anyone who wants to try coding in p5.js. + teach-case7-content3: Intermediate + teach-case7-content4: To code from the graphic design's perspective. + teach-case7-content5: 'Dropbox Paper, p5.js web editor.' + teach-case7-content5-1: Syllabus & Material + teach-case8-title: Generative Typography + teach-case8-lead-name: Dae In Chung + teach-case8-image-alt: >- + A image with black background displaying the letter 'b' in 5 different + styles along with a menu with various styling options to choose. + teach-case8-content1: ' Baltimore, Maryland, USA & Virtual-Online ' + teach-case8-content1-1: ' 2019 January 21 - May 08, every Wednesday, 4-10 PM' + teach-case8-content2: 14 undergrads and grad students who had little to no experience in coding. + teach-case8-content3: Elementary + teach-case8-content4: Experiment with typographic forms and structures through computation. + teach-case8-content5: 'Methods: online/offline lectures and critiques.' + teach-case8-content5-1: 'Materials: p5js online editor, Github, youtube tutorials.' + teach-case8-content5-2: Works of participants + teach-case9-title: Machine Learning for the Web + teach-case9-lead-name: Yining Shi + teach-case9-image-alt: >- + A group of 16 people sitting around tables with their laptops, mobile phones + and some other accessories, facing towards a large television screen. + teach-case9-content1: ' ITP, NYU, 370 Jay St, Brooklyn, NY 11201, USA' + teach-case9-content1-1: '2019 March 09 - October 12, every Tuesday, 6:30-9:00 PM' + teach-case9-content2: >- + Students at Interactive Telecommunications Program, New York University. 16 + people. + teach-case9-content3: 'Elementary, Intermediate' + teach-case9-content4: >- + The goal of this class is to learn and understand common machine learning + techniques and apply them to generate creative outputs in the browser using + ml5.js and p5.js. + teach-case9-content5: >- + This class is a mix of lectures, coding sessions, group discussions, and + presentations. I used + teach-case9-content5-1: GitHub + teach-case9-content5-2: ' to host class syllabus and all the coding materials, Google Slides for lectures and p5.js Web Editor for live coding sessions. Every week, there were one-on-one office hours to talk about any difficulties of coming up with an idea for the homework or any coding changes.' + teach-case9-content5-3: 'Methods: online/offline lectures and critiques.' + teach-case10-title: Introduction to p5.js and JavaScript + teach-case10-lead-name: Nico Reski + teach-case10-content1: ' Currently available as self-study at own pace with accompanying slides, linked below.' + teach-case10-content3: 'Beginner, Elementary' + teach-case10-content4: >- + Introduce learners (potentially with no coding experiences at all) to the + very basics of p5.js (and JavaScript), in order to encourage creative coding + and enable them to pursue own projects in a safe environment. + teach-case10-content5: >- + p5.js source code (for the introductory project), JavaScript source code + (illustrating some basic JavaScript functionalities), accompanying slides in + .pdf format, all hosted publicly on GitHub. + teach-case10-content5-1: Overview + teach-case10-content5-2: ' of the workshop and its contents (including all links to the material hosted on GitHub) on my academic webpage.' + teach-case11-title: Digital Weaving & Physical Computing Workshop Series + teach-case11-lead-name: Qianqian Ye & Evelyn Masso + teach-case11-image-alt: >- + This image is divided in two parts. The left part shows a group of 15 women + sitting on chairs with their laptops and looking at a presentor who is + explaining a code on a projected screen. The right part of the image shows a + person learning weaving using a physical pattern and a weaving tool. + teach-case11-content1: ' Womens Center for Creative Work (WCCW), Los Angeles, CA, US' + teach-case11-content1-1: ' 2019 October 19 - November 02, every Saturday 3-6 PM' + teach-case11-content2: '15 women and non-binary artists, designer, makers, programers. ' + teach-case11-content3: Elementary + teach-case11-content4: >- + Over the course of three workshops, we will draw and create patterns using + p5.js, an open-source graphical library; we will learn and apply + computational concepts to transform patterns and finally, we will bring a + weaving to life with electronic microcontrollers. + teach-case11-content5: 'Methods: small team session' + teach-case11-content5-1: >- + Materials: slides, p5.js web editor, pen and paper to draw pattern, physical + pattern weaving tool. + teach-case11-content5-2: 'Workshop Slide #1' + teach-case11-content5-3: 'Workshop Slide #2' + teach-case11-content5-4: Workshop Information + teach-case11-content5-5: ' on WCCW website.' + teach-case12-title: Signing Coders + teach-case12-lead-name: Taeyoon Choi + teach-case12-image-alt: >- + Two volunteers explaining concepts using a white board and a screen to a + bunch of deaf and hard of hearing students, each student facing a computer + screen. + teach-case12-speech: >- + I'm working on a new series of coding class for Disabled students in South + Korea. I'm researching about the pedagogy and translation. I plan to hold + workshops in December 2020. The project is supported by the Open Society + Foundation Human Rights Initiative and Korea Disability Arts & Culture + Center. + teach-case12-content1: ' WRIC, New York City, USA & Seoul Museum of Art, Seoul, South Korea.' + teach-case12-content1-1: '5 Sessions, each 2~3 hours' + teach-case12-content2: Deaf and Hard of Hearing students age 10~50 who live in NYC. + teach-case12-content3: Elementary + teach-case12-content4: >- + To help Deaf and Hard of Hearing students learn about computer programming + through playful exercises. To make ASL tutorial of basic coding concepts. + teach-case12-content5: >- + We used p5.js Web editor and code examples on the website. We also used + dice, playing cards and various paper tools to help students learn about + coding concepts. + teach-case12-content5-1: Syllabus & Material + teach-case12-content5-2: More photos diff --git a/src/data/it.yml b/src/data/it.yml index 8f33688848..01e04cbffd 100644 --- a/src/data/it.yml +++ b/src/data/it.yml @@ -17,7 +17,6 @@ Forum: Forum Showcase: Showcase footerxh1: Meriti footer1: 'p5.js è stato creato da ' -footer2: ' ed è sviluppato da una community di collaboratori, con il supporto di ' footer3: ' e ' footer4: 'Web identity e graphic design di ' tagline1: il divertimento di Processing x l'eccentricità di JavaScript @@ -717,7 +716,6 @@ learn: disegno più pratiche. Useremo una dimensione della tela di 200 per 200. Nota l'uso della funzione createCanvas() per specificare la larghezza e l'altezza della tela. -test-tutorial: null libraries: Libraries: Librerie core-libraries: Librerie di base diff --git a/src/data/ko.yml b/src/data/ko.yml index a33f5fac32..4209c864c4 100644 --- a/src/data/ko.yml +++ b/src/data/ko.yml @@ -9,18 +9,22 @@ Start: 시작하기 Reference: 레퍼런스 Libraries: 라이브러리 Learn: 배우기 +Teach: 가르치기 Examples: 예제 Books: 출판물 Community: 커뮤니티 Contribute: 기여하기 Forum: 포럼 Showcase: 쇼케이스 -footerxh1: 스케치 크레딧 -footer1: 'p5.js는 현재 모이라 터너 ' -footer2: ' 가 리드하며, 로렌 맥카시 ' -footer3: ' 가 창안하고 협력자 커뮤니티와 함께 개발하였습니다. 지원: 프로세싱 재단 ' -footer4: '과 ' -footer5: ' 아이덴티티 및 그래픽 디자인: ' +footerxh1: 크레딧 +footer1: p5.js는 현재 치안치안 예 +footer3: ' 가 리드하고, 로렌 맥카시 ' +footer4: ' 가 창안하였습니다. p5.js는 프로세싱 재단 ' +footer5: ' 과 ' +footer6: ' 의 지원으로, 협력자 커뮤니티와 함께 개발되었습니다. 아이덴티티 및 그래픽 디자인: 제럴 존슨 ' +footer7: '. ' +footer8: Info +footer9: . tagline1: 프로세싱의 즐거움에 자바스크립트의 매력을 곱하다* tagline2: 프로세싱의 간편함에 자바스크립트의 유연성을 곱하다* tagline3: 프로세싱의 직관성에 자바스크립트의 강력함을 곱하다* @@ -47,7 +51,7 @@ home: p2x2: 'p5.js는 프로세싱 ' p2x3: ' 을 오늘날의 웹에 맞게 해석한 것입니다. p5의 행사와 모임은 프로세싱 재단 ' p2x4: ' 의 지원을 받아 개최됩니다.' - p2x5: '' + p2x5: 'Learn more about ' p2x6: 커뮤니티 p2x7: 에 대해 더 알아보세요. p3xh2: 시작하기 @@ -85,7 +89,7 @@ get started: settingUp-title: 데스크탑 에디터에 p5.js 설정하기 download-title: 다운로드 & 파일 설정 hosted-title: 호스팅된 p5.js 라이브러리 사용하기 - download1: '' + download1: 'The easiest way to start is by using the empty example that comes with the ' download2: p5.js complete download3: 파일을 다운받아 시작하는 것이 가장 쉽고 간편합니다. download8: '다운로드 후에는 로컬 서버를 설정해야 합니다. ' @@ -136,7 +140,10 @@ get started: 주의: 스크린 리더를 사용하는 경우, p5 웹에디터에서 접근성 모드 출력(Accessible Outputs)을 활성화해야 합니다. 별도의 에디터를 사용하는 경우, 접근성 라이브러리를 html 파일에 추가해야 합니다. 자세한 설명은 다음 링크를 참조하세요: your-first-sketch5: 스크린 리더에서 p5를 사용하는 방법 - your-first-sketch6: '' + your-first-sketch6: >- + If you are using a screen reader, you must turn on the accessible outputs in + the p5 online editor, outside the editor you must add the accessibility + library in your html. To learn more visit your-first-sketch7: 접근성 라이브러리란? your-first-sketch8: '캔버스에 폭과 높이가 50인 타원이 x 80, y 80의 위치에 그려져있다' your-first-sketch9: >- @@ -543,7 +550,6 @@ learn: 자, 이제 좀 더 완성도있는 그림을 그려볼까요! 아래의 코드는 200x200 픽셀 크기의 캔버스 위에 여러개의 도형을 그립니다. createCanvas() 함수를 사용하여 캔버스의 너비(width)와 높이(height)를 설정할 수 있습니다. teach-desc: 'Teach a p5 workshop or class, or create teaching materials!' -test-tutorial: null libraries: Libraries: 라이브러리 core-libraries: 주요 라이브러리 @@ -558,48 +564,130 @@ libraries: p5.bots: >- p5.bots를 통해 브라우저, 아두이노, 마이크로프로세서 간의 인터랙션을 만들 수 있습니다. 센서 데이터로 스케치를 만들거나, 스케치에서 LED나 모터를 작동해보세요! + p5.bezier: >- + p5.beizer는 조절점(control point) 개수 제한 없이 정교한 베지에 곡선(Bézier Curve)을 그릴 수 있게 해주는 + 라이브러리입니다. p5.clickable: '사용이 편리한, 이벤트 기반 p5.js 버튼 라이브러리입니다.' p5.cmyk.js: CMYK 색상 모드. p5.collide2D: 'p5.collide2D는 p5.js로 만든 2D 도형들 간의 충돌을 감지합니다. ' + CO2Budget.js: '이 라이브러리는 p5 * js와 관련된 코더, 디자이너 및 아티스트의 크리에이티브 커뮤니티에 CO2 카운트 다운 아이디어를 제공합니다.' p5.createloop: '노이즈와 GIF 기반의 반복 애니메이션을 단 한 줄의 코드로 만들어보세요. ' p5.dimensions: 'p5.dimensions은 p5.js의 벡터 기능을 확장하여 n차원에서 작동하도록 합니다. ' p5.EasyCam: '패닝, 줌, 회전이 가능한 간단한 3D 카메라 컨트롤. Thomas Diewald가 핵심적으로 기여하였습니다. ' p5.experience: '확장형 p5.js 라이브러리로, 캔버스 기반 웹 어플리케이션 제작을 위한 이벤트리스닝 기능을 추가할 수 있습니다. ' p5.func: 'p5.func은 시간, 빈도, 그리고 공간 기능 생성을 위한 새로운 객체 및 기능을 제공합니다. ' p5.geolocation: 'p5.geolocation은 사용자 위치를 획득, 관찰, 계산, 지오펜싱(geo-fencing)하기 위한 기술을 제공합니다. ' + p5.glitch: p5.glitch는 글리치 이미지와 이진(binary) 파일을 위한 p5.js 확장자입니다. p5.gibber: 'p5.gibber는 음악 시퀀싱 및 오디오 합성 기능을 빠른 속도로 제공합니다. ' grafica.js: 'grafica.js는 p5.js 스케치상 변형이 쉬운 2D 플롯을 추가합니다. ' p5.gui: 'p5.gui는 p5.js 스케치를 위한 그래픽 유저 인터페이스를 생성합니다. ' + p5.j5: >- + The full Johnny-Five.io Nodebots/robotics library for Arduino and other + microcontrollers made to work directly in browser with WebSerial or WebUSB. p5.localmessage: 'p5.localmessage는 멀티윈도우 스케칭을 위한 스케치 간 로컬 메시지 전송 기능 및 인터페이스를 제공합니다. ' marching: '래스터에서 벡터로의 변환, 등면.' mappa: 'Mappa는 정적 맵, 타일 맵, 지오 데이터 활용을 위한 툴을 제공합니다. 지리 정보 기반의 시각적 재현물을 제작할 때 용이합니다. ' ml5.js: 'ml5.js는 Tensorflow.js를 기반으로하며, 머신러닝 알고리즘 및 모델에 대한 브라우저상의 접근성을 높입니다. ' + numero: 친숙하고 직관적인 수학 라이브러리입니다. + pdl.library: 상호작용하는 도형을 통해 물리를 가르치고 배울 수 있게하는 함수와 클래스들입니다. p5.play: 'p5.play는 게임과 같은 어플리케이션 제작을 위한 스프라이트(sprite), 애니메이션, 인풋, 충돌 기능을 제공합니다. ' p5.particle: '파티클은 사용자가 직접 제작한 구조나 기능, 또는 JSON 인풋 데이터를 사용하여 시각적 효과를 만드는 데에 쓰입니다. ' + p5.party: 'p5.party는 네트워크 기반의 멀티유저 게임, 앱, 그리고 스케치를 쉽게 만들 수 있게 하는 라이브러리입니다.' + p5.Polar: p5.Polar는 수학적 추상화를 통해 아름답고 만화경 같은 방사형의 패턴을 쉽게 만들 수 있게 해 줍니다. + react-p5: 이 라이브러리는 여러분의 p5 스케치와 리액트(React) 앱을 연동합니다. + p5.recorder: 스케치 녹화 및 오디오 녹음 기능을 제공합니다. p5.Riso: 'p5.Riso는 석판화와 같은 파일을 생성하는 라이브러리입니다. 스케치를 다양한 색상의 판화처럼 만들어줍니다. ' rita.js: 'RiTa.js는 제너레이티브 문학을 위한 자연어 처리 객체를 제공합니다. ' - Rotating knobs: Make knobs you can rotate with custom graphics and return value ranges. + Rotating knobs: 스킨과 반환값을 설정할 수 있는 나만의 노브(knob)를 만들어보세요 p5.scenemanager: >- p5.SceneManager는 스케치를 여러 단계의 씬들로 구성할 수 있도록 합니다. 각각의 씬은 메인 스케치에 포함된 일부 스케치와도 같습니다. p5.screenPosition: 프로세싱의 screenX 및 screenY 기능을 p5js에 적용합니다. p5.scribble: '2D 기본 조형을 손그림으로 표현합니다. 제작: Janneck Wullschleger, 프로세싱 라이브러리 포트 기반 ' - p5.serial: 'p5.serial는 시리얼 (RS-232)와 p5 웹 에디터를 지원하는 기기상에서의 직렬 통신을 구현합니다. ' + p5.serialport: >- + p5.serial enables serial communication between devices that support serial + (RS-232) and p5 sketches running in the browser. Shape5: Shape5는 코딩을 처음 배우는 초등학생을 위한 2D 기본 조형 라이브러리입니다. p5.shape.js: p5.js 프레임워크에 더 많은 기본 도형을 추가하고자 제작된 라이브러리입니다. + P5.slides: p5.slides is a presentation platform written in p5.js. + p5snap: >- + p5snap is a command-line interface that creates and saves snapshots of a p5 + sketchp5snap is a command-line interface that creates and saves snapshots + of a p5 sketch on an interval. p5.speech: >- p5.speech는 웹 스피치 및 스피치 인식 API에 대한 접근 권한을 제공하여, 음성을 인식하고 출력할 수 있는 스케치를 쉽게 만들 수 있게 합니다. p5.start2d.js: '픽셀, 밀리미터, 센티미터 또는 인치 단위의 정적인 2D 아트를 만들기 위한 p5 확장 라이브러리입니다. ' p5.tiledmap: 'p5.tiledmap은 스케치에 지도를 넣기 위한 드로잉 및 도움 기능을 제공합니다. ' + TiledPlay: >- + A small library to bridge the functionality of p5.js, p5.play.js and + p5.tiled.js to easily create 2D platformer games using javascript. p5.touchgui: 'p5.js를 위한 멀티터치 및 마우스 그래픽 유저 인터페이스(GUI) 라이브러리 ' tramontana: >- Tramontana는 인터랙티브 환경 및 공간을 생성하거나, 공간 속 스케일 기능을 프로토타이핑하기 위한 여러가지 기기(iOS, Android, tramontana Board, ...)를 쉽게 쓸 수 있도록 하는 플랫폼입니다. + TurtleGFX: >- + TurtleGFX allows to code with Turtle Graphics in JavaScript. Great for + education and creative coding. + p5.tween: >- + With p5.tween you can create easily animations as tween for your objects + and shapes. vida: 'Vida는 카메라(또는 비디오) 기반의 모션 감지 및 얼룩(blob) 트래킹 기능을 더하는 p5js 라이브러리입니다. ' p5.voronoi: 'p5.voronoi는 p5.js 스케치상 보로노이 다이어그램을 그리고 활용할 수 있는 툴을 제공합니다. ' + p5.wasm: >- + p5.wasm is an addon library written in Rust and compiled to WebAssembly + that implements common functions found in p5.js. p5.xr: p5로 VR 및 AR 스케치를 작성하기위한 라이브러리. p5.3D: 'WebGL로 3D 텍스트 및 이미지를 쓸 수 있습니다. ' + WEBMIDI.js: Easily send and receive MIDI messages from p5. + p5.buttons: A library that aims to de-complicate scripting buttons. + p5.button: >- + Small one function library to design and render simple or styled buttons + directly in p5.js canvas. + p5.math.js: >- + The mathematical operations of JavaScript have been converted into simple + human language so that they can understand really quickly. + p5LiveMedia: 'Real time audio, video, canvas, and data sharing.' + P5.Create: 'p5.create는 효율적인 게임 제작을 위해 설계된 저장, 애니메이션, 충돌 및 태그 기능을 제공하는 라이브러리입니다.' + p5.quadrille.js: p5.js quadrille library. + p5.animS: p5.animS animates p5.js shapes by rendering their drawing processes. + I_AM_UI: UserInterface 라이브러리. + simple.js: Helper functions and defaults for young and new coders. + p5.timer: >- + This library performs asynchronous timing functions like countdowns, + one-shot timers, % time elapsed and encapsulates the millis() function and + other related calculations that often clog up your code. + c2.js: >- + c2.js is a JavaScript library for creative coding based on computational + geometry, physics simulation, evolutionary algorithm and other modules. + Concave Hull: Calculate a Concave Hull from a set of points in 2D space. + p5.joystick: 물리적 조이스틱으로 연결 및 플레이. + p5.webserial: >- + A library for interacting with Serial devices from within the browser, + based on Web Serial API (available on Chrome and Edge). + p5.pattern: A pattern drawing library for p5.js. + p5.jacdac: Plug-and-play micro-controllers for p5js + p5.PatGrad: p5.PatGrad let's you add patterns and gradients to your sketches. + p5.projection: Easy projection mapping of sketches onto real world surfaces + p5.Framebuffer: >- + A fast offscreen canvas for WebGL, giving access to depth data for fog and + blur effects. + p5.capture: >- + p5.capture provides a simple GUI to easily record p5.js animations and + output video files in various formats (webm, gif, mp4, png, jpg, and webp). + p5.input: Adds more key support for p5.js. + p5.web-serial: >- + A p5.js library for using the Web Serial API to access devices like + Arduino, no setup required. + p5.wasm.core: A web assembly core for p5.js. + p5.videorecorder: Record your canvas as a video file with audio. + p5.mapper: >- + p5.mapper is a projection mapping library for p5.js. This library makes it + easy to code and keystone interactive, algorithmic sketches. + p5.teach: >- + A beginner friendly math animation library for p5.js. Created with + mentorship from Nick McIntyre and Jithin KS. + p5.fab: p5.fab controls digital fabrication machines from p5.js. using-a-library-title: 라이브러리 이용하기 using-a-library1: >- 라이브러리란 p5.js의 핵심 기능을 확장하거나 추가하는 자바스크립트 코드를 말합니다. 라이브러리에는 크게 두 종류가 있습니다. 주요 @@ -647,7 +735,7 @@ community: in-the-future-title: '미래에 우리는: ' in-the-future1: 지금이 바로 미래입니다. notes-title: 유의사항 - notes1: '' + notes1: 'Please also visit our ' notes2: p5.js 행동 강령 notes3: '을 참고하세요. p5.js 커뮤니티 성명서는 ' notes4: 크리에이티브 커먼즈 라이선스(CC) @@ -742,7 +830,7 @@ community: outputs: 결과물 output1: '. p5.js를 위한 아주 유연한 삼각형, 사각형, 육각형, 그리고 팔각형 묶음 구현. 제작: 아렌 데이비(Aren Davey)' output2: '. 복수의 클라이언트를 특정 호스트 페이지에 연결하는 멀티디바이스 및 멀티플레이어 게임을 위한 템플릿 파일. 제작: L05' - output3: '' + output3: Experiments using output3-1: >- 를 이용한 실험들. softCompile 및 OSC 인터페이스 초기 단계 구현과 더불어 MIDI 셋업에 연결한 데모. p5.js 협업 라이브 코딩 VJ 환경 구현. 제작: 테드 데이비스(Ted Davis) @@ -750,7 +838,7 @@ community: 가상 공간에서의 블랙니스(Blackness)와 젠더를 다룬 패널, 아메리칸 아티스트(American Artist)가 진행하고 shawné michaelain holloway와 LaJuné McMillian이 함께함. output5: 에베레스트 핍킨(Everest Pipkin)과 존 챔버스(Jon Chambers)가 진행한 워크숍 - output6: '' + output6: 'A prototype of a ' output6-1: p5.js를 위한 노트북 인터페이스 output6-2: '의 프로토타입. 제작: 앨리슨 패리쉬(Allison Parrish)' output7: >- @@ -1262,6 +1350,9 @@ teach: Making The Thing that Makes the Thing: Exploring Generative Art & Design with p5.js teach-case2-lead-name: Priti Pandurangan & Ajith Ranka + teach-case2-image-alt: >- + A group of participants collaborating to create some designs using the p5.js + web editor on their laptops. teach-case2-content1: 'National Institute of Design, Bangalore' teach-case2-content1-1: '2020 February 8, 2:30-4:00 PM' teach-case2-content2: >- @@ -1298,6 +1389,9 @@ teach: teach-case3-content5-3: More photos teach-case4-title: Introduction to Creative Programming with p5.js teach-case4-lead-name: Aarón Montoya-Moraga + teach-case4-image-alt: >- + A group of 20 people sitting on a large shared table with their laptops + looking at a projected screen. teach-case4-speech: 'p5.js is my happy place ' teach-case4-content1: ' PlusCode Media Arts Festival, Buenos Aires, Argentina & Virtual-Online ' teach-case4-content1-1: ' 2018 November 14, 3 hours' @@ -1335,6 +1429,9 @@ teach: teach-case5-content5-3: Introduction to Generative Drawing Booklet PDF teach-case6-title: 'Open Lecture, Creative Coding: 2020' teach-case6-lead-name: Shunsuke Takawo + teach-case6-image-alt: >- + A table on which there is a laptop, some sheets of papers, colorful pens and + two automatic machines drawing something with a pen on a sheet. teach-case6-speech: >- I love p5.js because it's so easy to read and write code in p5.js. Coding in your everyday life! @@ -1363,6 +1460,9 @@ teach: teach-case7-content5-1: Syllabus & Material teach-case8-title: Generative Typography teach-case8-lead-name: 정대인 + teach-case8-image-alt: >- + A image with black background displaying the letter 'b' in 5 different + styles along with a menu with various styling options to choose. teach-case8-content1: ' Baltimore, Maryland, USA & Virtual-Online ' teach-case8-content1-1: ' 2019 January 21 - May 08, every Wednesday, 4-10 PM' teach-case8-content2: 14 undergrads and grad students who had little to no experience in coding. @@ -1373,6 +1473,9 @@ teach: teach-case8-content5-2: Works of participants teach-case9-title: Machine Learning for the Web teach-case9-lead-name: Yining Shi + teach-case9-image-alt: >- + A group of 16 people sitting around tables with their laptops, mobile phones + and some other accessories, facing towards a large television screen. teach-case9-content1: ' ITP, NYU, 370 Jay St, Brooklyn, NY 11201, USA' teach-case9-content1-1: '2019 March 09 - October 12, every Tuesday, 6:30-9:00 PM' teach-case9-content2: >- @@ -1405,6 +1508,11 @@ teach: teach-case10-content5-2: ' of the workshop and its contents (including all links to the material hosted on GitHub) on my academic webpage.' teach-case11-title: Digital Weaving & Physical Computing Workshop Series teach-case11-lead-name: Qianqian Ye & Evelyn Masso + teach-case11-image-alt: >- + This image is divided in two parts. The left part shows a group of 15 women + sitting on chairs with their laptops and looking at a presentor who is + explaining a code on a projected screen. The right part of the image shows a + person learning weaving using a physical pattern and a weaving tool. teach-case11-content1: ' Womens Center for Creative Work (WCCW), Los Angeles, CA, US' teach-case11-content1-1: ' 2019 October 19 - November 02, every Saturday 3-6 PM' teach-case11-content2: '15 women and non-binary artists, designer, makers, programers. ' @@ -1424,6 +1532,10 @@ teach: teach-case11-content5-5: ' on WCCW website.' teach-case12-title: Signing Coders teach-case12-lead-name: 최태윤 + teach-case12-image-alt: >- + Two volunteers explaining concepts using a white board and a screen to a + bunch of deaf and hard of hearing students, each student facing a computer + screen. teach-case12-speech: >- I'm working on a new series of coding class for Disabled students in South Korea. I'm researching about the pedagogy and translation. I plan to hold diff --git a/src/data/learn/learn.json b/src/data/learn/learn.json index 816769ab4e..5c3907f178 100644 --- a/src/data/learn/learn.json +++ b/src/data/learn/learn.json @@ -82,7 +82,7 @@ }, { "name": "looking-inside", - "url": "http://www.luisapereira.net/teaching/looking-inside-p5/" + "url": "https://www.luisapereira.net/teaching/materials/processing-foundation" }, { "name": "writing-tutorial", @@ -93,4 +93,4 @@ "url": "https://github.com/processing/p5.js/blob/main/contributor_docs/creating_libraries.md" } ] -} \ No newline at end of file +} diff --git a/src/data/libraries/libraries.json b/src/data/libraries/libraries.json index c2ab21b645..bef0eb2730 100644 --- a/src/data/libraries/libraries.json +++ b/src/data/libraries/libraries.json @@ -26,17 +26,157 @@ } ] }, + { + "name": "c2.js", + "url": "https://c2js.org/", + "authors": [ + { + "name": "Ren Yuan", + "url": "https://renyuan.io/" + } + ] + }, + { + "name": "CO2Budget.js", + "url": "https://github.com/OlafVal/CO2Budget.js", + "authors": [ + { + "name": "Olaf Val", + "url": "http://projects.olafval.de/p5-co2budget-js/" + } + ] + }, + { + "name": "Concave Hull", + "url": "https://github.com/markroland/concaveHullJS", + "authors": [ + { + "name": "Mark Roland", + "url": "https://markroland.com" + } + ] + }, + { + "name": "grafica.js", + "url": "https://github.com/jagracar/grafica.js", + "authors": [ + { + "name": "Javier Graciá Carpio", + "url": "https://jagracar.com/p5jsSketches.php" + } + ] + }, + { + "name": "I_AM_UI", + "url": "https://github.com/zturtledog/I_AM_UI/blob/main/I_AM_UI.js", + "authors": [ + { + "name": "sam oakes", + "url": "https://github.com/zturtledog" + } + ] + }, + { + "name": "mappa", + "url": "https://github.com/cvalenzuela/Mappa", + "authors": [ + { + "name": "Cristóbal Valenzuela", + "url": "https://github.com/cvalenzuela/" + } + ] + }, + { + "name": "marching", + "url": "https://github.com/jtnimoy/marching", + "authors": [ + { + "name": "JT Nimoy", + "url": "https://jtnimoy.cc/" + } + ] + }, + { + "name": "ml5.js", + "url": "https://ml5js.org/", + "authors": [ + { + "name": "NYU ITP/IMA and contributors", + "url": "https://ml5js.org/" + } + ] + }, + { + "name": "numero", + "url": "https://github.com/nickmcintyre/numero", + "authors": [ + { + "name": "Nick McIntyre", + "url": "https://mcintyre.io" + } + ] + }, + { + "name": "p5LiveMedia", + "url": "https://github.com/vanevery/p5LiveMedia", + "authors": [ + { + "name": "Shawn Van Every", + "url": "http://www.walking-productions.com/notslop/" + } + ] + }, + { + "name": "p5snap", + "url": "https://www.npmjs.com/package/p5snap", + "authors": [ + { + "name": "Zach Krall", + "url": "https://zachkrall.com" + } + ] + }, + { + "name": "p5.3D", + "url": "https://github.com/FreddieRa/p5.3D", + "authors": [ + { + "name": "Freddie Rawlins", + "url": "https://freddierawlins.wixsite.com/site" + } + ] + }, + { + "name": "p5.animS", + "url": "https://wixette.github.io/p5.animS/", + "authors": [ + { + "name": "Yonggang Wang", + "url": "https://github.com/wixette" + } + ] + }, + { + "name": "p5.bezier", + "url": "https://github.com/peilingjiang/p5.bezier", + "authors": [ + { + "name": "Peiling Jiang", + "url": "https://www.jpl.design" + } + ] + }, { "name": "p5.ble", "url": "https://itpnyu.github.io/p5ble-website/", "authors": [ { "name": "Yining Shi", - "url": "http://1023.io" + "url": "https://1023.io" }, { "name": "Jingwen Zhu", - "url": "http://www.jingwen-zhu.com/" + "url": "https://www.jingwen-zhu.com/" }, { "name": "Tom Igoe", @@ -54,6 +194,36 @@ } ] }, + { + "name": "p5.button", + "url": "https://www.nicoatek.com/js_libraries/p5.button.min.js", + "authors": [ + { + "name": "Nicolas ATEK", + "url": "https://www.nicoatek.com/p5button" + } + ] + }, + { + "name": "p5.buttons", + "url": "https://github.com/koerismo/p5.buttons", + "authors": [ + { + "name": "Jadon L", + "url": "https://github.com/koerismo" + } + ] + }, + { + "name": "p5.capture", + "url": "https://github.com/tapioca24/p5.capture", + "authors": [ + { + "name": "tapioca24", + "url": "https://github.com/tapioca24" + } + ] + }, { "name": "p5.clickable", "url": "https://github.com/Lartu/p5.clickable", @@ -70,7 +240,7 @@ "authors": [ { "name": "JT Nimoy", - "url": "http://jtnimoy.net" + "url": "https://jtnimoy.cc/" } ] }, @@ -80,17 +250,27 @@ "authors": [ { "name": "Ben Moren", - "url": "http://www.benmoren.com/" + "url": "https://www.benmoren.com/" } ] }, + { + "name": "P5.Create", + "url": "https://github.com/zachmohammed/P5.Create", + "authors": [ + { + "name": "Zach Mohammed", + "url": "https://github.com/zachmohammed" + } + ] + }, { "name": "p5.createloop", "url": "https://www.npmjs.com/package/p5.createloop", "authors": [ { "name": "Peter Hayman", - "url": "http://www.piratesjustar.com/" + "url": "https://www.piratesjustar.com/" } ] }, @@ -128,13 +308,33 @@ } ] }, + { + "name": "p5.fab", + "url": "https://github.com/machineagency/p5.fab", + "authors": [ + { + "name": "Blair Subbaraman", + "url": "https://blairsubbaraman.com/" + } + ] + }, + { + "name": "p5.Framebuffer", + "url": "https://github.com/davepagurek/p5.Framebuffer", + "authors": [ + { + "name": "Dave Pagurek", + "url": "https://www.davepagurek.com/" + } + ] + }, { "name": "p5.func", "url": "https://idmnyu.github.io/p5.js-func", "authors": [ { "name": "R. Luke DuBois", - "url": "http://lukedubois.com/" + "url": "https://lukedubois.com/" } ] }, @@ -144,27 +344,37 @@ "authors": [ { "name": "Ben Moren", - "url": "http://www.benmoren.com/" + "url": "https://www.benmoren.com/" } ] }, { "name": "p5.gibber", - "url": "http://charlie-roberts.com/gibber/p5-gibber/", + "url": "https://charlie-roberts.com/gibber/p5-gibber/", "authors": [ { "name": "Charlie Roberts", - "url": "http://charlie-roberts.com" + "url": "https://charlie-roberts.com" } ] }, { - "name": "grafica.js", - "url": "https://github.com/jagracar/grafica.js", + "name": "p5.glitch", + "url": "https://p5.glitch.me/", "authors": [ { - "name": "Javier Graciá Carpio", - "url": "http://jagracar.com/p5jsSketches.php" + "name": "Ted Davis", + "url": "https://teddavis.org" + } + ] + }, + { + "name": "p5.input", + "url": "https://github.com/Buggem/processing.input/blob/main/p5.input.js", + "authors": [ + { + "name": "Max Parry", + "url": "https://github.com/Buggem/" } ] }, @@ -174,57 +384,67 @@ "authors": [ { "name": "Martin Schneider", - "url": "http://www.bitcraftlab.com/" + "url": "https://www.bitcraftlab.com/" } ] }, { - "name": "p5.localmessage", - "url": "https://github.com/bmoren/p5.localmessage", + "name": "p5.j5", + "url": "https://github.com/monteslu/p5.j5", "authors": [ { - "name": "Ben Moren", - "url": "http://benmoren.com" + "name": "Luis Montes", + "url": "https://twitter.com/monteslu" } ] }, { - "name": "marching", - "url": "https://github.com/jtnimoy/marching", + "name": "p5.jacdac", + "url": "https://microsoft.github.io/jacdac-docs/clients/javascript/p5js/ ", "authors": [ { - "name": "jtnimoy", - "url": "http://jtnimoy.net" + "name": "Jonathan de Halleux", + "url": "https://twitter.com/pelikhan" } ] }, { - "name": "mappa", - "url": "https://github.com/cvalenzuela/Mappa", + "name": "p5.joystick", + "url": "https://github.com/Vamoss/p5.joystick", "authors": [ { - "name": "Cristóbal Valenzuela", - "url": "https://github.com/cvalenzuela/" + "name": "Vamoss", + "url": "https://vamoss.com.br" } ] }, { - "name": "ml5.js", - "url": "https://ml5js.org/", + "name": "p5.localmessage", + "url": "https://github.com/bmoren/p5.localmessage", "authors": [ { - "name": "NYU ITP/IMA and contributors", - "url": "https://ml5js.org/" + "name": "Ben Moren", + "url": "https://benmoren.com" } ] }, { - "name": "p5.play", - "url": "http://p5play.molleindustria.org", + "name": "p5.mapper", + "url": "https://github.com/jdeboi/p5.mapper", "authors": [ { - "name": "Paolo Pedercini", - "url": "http://www.molleindustria.org/" + "name": "Jenna deBoisblanc", + "url": "https://jdeboi.com/" + } + ] + }, + { + "name": "p5.math.js", + "url": "https://editor.p5js.org/bharathsatheesan7a/sketches/NHvinWyye", + "authors": [ + { + "name": "Bharath Satheesan", + "url": "https://github.com/bharathsatheesan" } ] }, @@ -239,39 +459,99 @@ ] }, { - "name": "p5.Riso", - "url": "https://antiboredom.github.io/p5.riso", + "name": "p5.party", + "url": "https://github.com/jbakse/p5.party", + "authors": [ + { + "name": "Justin Bakse", + "url": "http://justinbakse.com" + } + ] + }, + { + "name": "p5.PatGrad", + "url": "https://github.com/antiboredom/p5.patgrad", "authors": [ { "name": "Sam Lavigne", - "url": "https://lav.io/" - }, + "url": "https://lav.io" + } + ] + }, + { + "name": "p5.pattern", + "url": "https://github.com/SYM380/p5.pattern", + "authors": [ { - "name": "Tega Brain", - "url": "http://tegabrain.com/" + "name": "Taichi Sayama", + "url": "https://twitter.com/hyappy717" } ] }, { - "name": "rita.js", - "url": "http://rednoise.org/rita", + "name": "p5.play", + "url": "http://p5play.molleindustria.org", "authors": [ { - "name": "Daniel C. Howe", - "url": "http://rednoise.org/daniel" + "name": "Paolo Pedercini", + "url": "https://www.molleindustria.org/" } ] }, { - "name": "Rotating knobs", - "url": "http://codeforartists.com/RotatingKnobMaker", + "name": "p5.Polar", + "url": "https://github.com/liz-peng/p5.Polar", "authors": [ { - "name": "Miles DeCoster", - "url": "http://codeforartists.com" + "name": "Liz Peng", + "url": "https://github.com/liz-peng" + } + ] + }, + { + "name": "p5.projection", + "url": "https://osresearch.github.io/p5.projection/", + "authors": [ + { + "name": "Trammell Hudson", + "url": "https://trmm.net/" } ] }, + { + "name": "p5.quadrille.js", + "url": "https://objetos.github.io/p5.quadrille.js/", + "authors": [ + { + "name": "Jean Pierre Charalambos", + "url": "https://github.com/nakednous" + } + ] + }, + { + "name": "p5.recorder", + "url": "https://github.com/doriclaudino/p5.recorder", + "authors": [ + { + "name": "Dori Claudino", + "url": "https://github.com/doriclaudino" + } + ] + }, + { + "name": "p5.Riso", + "url": "https://antiboredom.github.io/p5.riso", + "authors": [ + { + "name": "Sam Lavigne", + "url": "https://lav.io/" + }, + { + "name": "Tega Brain", + "url": "https://tegabrain.com/" + } + ] + }, { "name": "p5.scenemanager", "url": "https://github.com/mveteanu/p5.SceneManager", @@ -303,12 +583,12 @@ ] }, { - "name": "p5.serial", + "name": "p5.serialport", "url": "https://github.com/vanevery/p5.serialport", "authors": [ { "name": "Shawn Van Every", - "url": "http://www.walking-productions.com/notslop/abou/" + "url": "https://www.walking-productions.com/notslop/abou/" }, { "name": "Jen Kagan", @@ -316,27 +596,27 @@ }, { "name": "Tom Igoe", - "url": "http://tigoe.net/" + "url": "https://tigoe.net/" } ] }, { - "name": "Shape5", - "url": "https://github.com/pfe1223/Shape5js", + "name": "p5.shape.js", + "url": "https://github.com/gaba5/p5.shape.js", "authors": [ { - "name": "Patrick Ester", - "url": "https://github.com/pfe1223" + "name": "Sebastien Lorentz", + "url": "https://github.com/gaba5" } ] }, { - "name": "p5.shape.js", - "url": "https://github.com/gaba5/p5.shape.js", + "name": "P5.slides", + "url": "https://github.com/GarrettMFlynn/p5.js-slides", "authors": [ { - "name": "Sebastien Lorentz", - "url": "https://github.com/gaba5" + "name": "Garrett Flynn", + "url": "http://garrettflynn.com/" } ] }, @@ -346,7 +626,7 @@ "authors": [ { "name": "R. Luke DuBois", - "url": "http://lukedubois.com/" + "url": "https://lukedubois.com/" } ] }, @@ -360,13 +640,33 @@ } ] }, + { + "name": "p5.teach", + "url": "https://github.com/two-ticks/p5.teach.js", + "authors": [ + { + "name": "Aditya Siddheshwar", + "url": "https://www.linkedin.com/in/aditya-siddheshwar/" + } + ] + }, { "name": "p5.tiledmap", "url": "https://github.com/linux-man/p5.tiledmap", "authors": [ { "name": "Caldas Lopes", - "url": "http://softlab.pt/" + "url": "https://softlab.pt/" + } + ] + }, + { + "name": "p5.timer", + "url": "https://github.com/scottkildall/p5.timer", + "authors": [ + { + "name": "Scott Kildall", + "url": "https://www.kildall.com" } ] }, @@ -381,22 +681,22 @@ ] }, { - "name": "tramontana", - "url": "http://www.tramontana.xyz", + "name": "p5.tween", + "url": "https://github.com/Milchreis/p5.tween", "authors": [ { - "name": "Pierluigi Dalla Rosa", - "url": "http://www.pierdr.com" + "name": "Nick Müller", + "url": "https://github.com/Milchreis" } ] }, { - "name": "vida", - "url": "https://tetoki.eu/vida", + "name": "p5.videorecorder", + "url": "https://github.com/calebfoss/p5.videorecorder", "authors": [ { - "name": "Pawel Janicki", - "url": "https://paweljanicki.jp" + "name": "Caleb Foss", + "url": "https://www.calebfoss.com/" } ] }, @@ -410,23 +710,163 @@ } ] }, + { + "name": "p5.wasm", + "url": "https://github.com/limzykenneth/p5.wasm", + "authors": [ + { + "name": "Kenneth Lim", + "url": "https://github.com/limzykenneth" + } + ] + }, + { + "name": "p5.wasm.core", + "url": "https://github.com/ars2062/p5-wasm", + "authors": [ + { + "name": "Arshia Moghaddam", + "url": "https://github.com/ars2062" + } + ] + }, + { + "name": "p5.webserial", + "url": "https://github.com/gohai/p5.webserial/", + "authors": [ + { + "name": "Gottfried Haider", + "url": "https://github.com/gohai/" + } + ] + }, + { + "name": "p5.web-serial", + "url": "https://github.com/ongzzzzzz/p5.web-serial", + "authors": [ + { + "name": "Ong Zhi Zheng", + "url": "https://ongzz.ml" + } + ] + }, { "name": "p5.xr", - "url": "http://p5xr.org/#/", + "url": "https://p5xr.org/#/", "authors": [ { "name": "Stalgia Grigg", - "url": "http://www.stalgiagrigg.name/" + "url": "https://www.stalgiagrigg.name/" } ] }, { - "name": "p5.3D", - "url": "https://github.com/FreddieRa/p5.3D", + "name": "pdl.library", + "url": "https://github.com/phywand/pdl-library/", "authors": [ { - "name": "Freddie Rawlins", - "url": "https://freddierawlins.wixsite.com/site" + "name": "Ian Lawrence", + "url": "https://slowthinkingphysics.net" + } + ] + }, + { + "name": "react-p5", + "url": "https://github.com/Gherciu/react-p5", + "authors": [ + { + "name": "Gherciu Gheorghe", + "url": "https://gherciu.github.io/" + } + ] + }, + { + "name": "rita.js", + "url": "https://rednoise.org/rita", + "authors": [ + { + "name": "Daniel C. Howe", + "url": "https://rednoise.org/daniel" + } + ] + }, + { + "name": "Rotating knobs", + "url": "https://codeforartists.com/RotatingKnobMaker", + "authors": [ + { + "name": "Miles DeCoster", + "url": "https://codeforartists.com" + } + ] + }, + { + "name": "Shape5", + "url": "https://github.com/pfe1223/Shape5js", + "authors": [ + { + "name": "Patrick Ester", + "url": "https://github.com/pfe1223" + } + ] + }, + { + "name": "simple.js", + "url": "https://github.com/makeyourownalgorithmicart/simple.js/wiki", + "authors": [ + { + "name": "Tariq Rashid", + "url": "https://github.com/makeyourownalgorithmicart/simple.js/wiki" + } + ] + }, + { + "name": "TiledPlay", + "url": "https://github.com/andrewtacon/p5.tiledplay.js", + "authors": [ + { + "name": "Andrew Tacon", + "url": "https://github.com/andrewtacon" + } + ] + }, + { + "name": "tramontana", + "url": "https://www.tramontana.xyz", + "authors": [ + { + "name": "Pierluigi Dalla Rosa", + "url": "https://www.pierdr.com" + } + ] + }, + { + "name": "TurtleGFX", + "url": "https://github.com/CodeGuppyPrograms/TurtleGFX", + "authors": [ + { + "name": "CodeGuppy", + "url": "https://codeguppy.com" + } + ] + }, + { + "name": "vida", + "url": "https://tetoki.eu/vida", + "authors": [ + { + "name": "Pawel Janicki", + "url": "https://paweljanicki.jp" + } + ] + }, + { + "name": "WEBMIDI.js", + "url": "https://webmidijs.org/", + "authors": [ + { + "name": "Jean-Philippe Côté", + "url": "https://djip.co" } ] } diff --git a/src/data/localization/en/JSON.ftl b/src/data/localization/en/JSON.ftl new file mode 100644 index 0000000000..83d4818a30 --- /dev/null +++ b/src/data/localization/en/JSON.ftl @@ -0,0 +1,2 @@ +stringify__description__0 = From the MDN entry: The JSON.stringify() method converts a JavaScript object or value to a JSON string. +stringify__params__object = Object: :Javascript object that you would like to convert to JSON diff --git a/src/data/localization/en/console.ftl b/src/data/localization/en/console.ftl new file mode 100644 index 0000000000..5e550f68cb --- /dev/null +++ b/src/data/localization/en/console.ftl @@ -0,0 +1,4 @@ +log__description__0 = Prints a message to your browser's web console. When using p5, you can use print and console.log interchangeably. +log__description__1 = The console is opened differently depending on which browser you are using. Here are links on how to open the console in Firefox , Chrome, Edge, and Safari. With the online p5 editor the console is embedded directly in the page underneath the code editor. +log__description__2 = From the MDN entry: The Console method log() outputs a message to the web console. The message may be a single string (with optional substitution values), or it may be any one or more JavaScript objects. +log__params__message = String|Expression|Object: :Message that you would like to print to the console diff --git a/src/data/localization/en/p5.Amplitude.ftl b/src/data/localization/en/p5.Amplitude.ftl new file mode 100644 index 0000000000..aa3cced496 --- /dev/null +++ b/src/data/localization/en/p5.Amplitude.ftl @@ -0,0 +1,12 @@ +description__0 = Amplitude measures volume between 0.0 and 1.0. Listens to all p5sound by default, or use setInput() to listen to a specific sound source. Accepts an optional smoothing value, which defaults to 0. +params__smoothing = Number: (Optional) between 0.0 and .999 to smooth amplitude readings (defaults to 0) +setInput__description__0 = Connects to the p5sound instance (main output) by default. Optionally, you can pass in a specific source (i.e. a soundfile). +setInput__params__snd = SoundObject|undefined: (Optional) set the sound source (optional, defaults to main output) +setInput__params__smoothing = Number|undefined: (Optional) a range between 0.0 and 1.0 to smooth amplitude readings +getLevel__description__0 = Returns a single Amplitude reading at the moment it is called. For continuous readings, run in the draw loop. +getLevel__returns = Number: Amplitude as a number between 0.0 and 1.0 +getLevel__params__channel = Number: (Optional) Optionally return only channel 0 (left) or 1 (right) +toggleNormalize__description__0 = Determines whether the results of Amplitude.process() will be Normalized. To normalize, Amplitude finds the difference the loudest reading it has processed and the maximum amplitude of 1.0. Amplitude adds this difference to all values to produce results that will reliably map between 0.0 and 1.0. However, if a louder moment occurs, the amount that Normalize adds to all the values will change. Accepts an optional boolean parameter (true or false). Normalizing is off by default. +toggleNormalize__params__boolean = Boolean: (Optional) set normalize to true (1) or false (0) +smooth__description__0 = Smooth Amplitude analysis by averaging with the last analysis frame. Off by default. +smooth__params__set = Number: smoothing from 0.0 <= 1 diff --git a/src/data/localization/en/p5.AudioIn.ftl b/src/data/localization/en/p5.AudioIn.ftl new file mode 100644 index 0000000000..64a1d6490e --- /dev/null +++ b/src/data/localization/en/p5.AudioIn.ftl @@ -0,0 +1,27 @@ +description__0 = Get audio from an input, i.e. your computer's microphone. +description__1 = Turn the mic on/off with the start() and stop() methods. When the mic is on, its volume can be measured with getLevel or by connecting an FFT object. +description__2 = If you want to hear the AudioIn, use the .connect() method. AudioIn does not connect to p5.sound output by default to prevent feedback. +description__3 = Note: This uses the getUserMedia/ Stream API, which is not supported by certain browsers. Access in Chrome browser is limited to localhost and https, but access over http may be limited. +params__errorCallback = Function: (Optional) A function to call if there is an error accessing the AudioIn. For example, Safari and iOS devices do not currently allow microphone access. +enabled__description__0 = Client must allow browser to access their microphone / audioin source. Default: false. Will become true when the client enables access. +amplitude__description__0 = Input amplitude, connect to it by default but not to master out +start__description__0 = Start processing audio input. This enables the use of other AudioIn methods like getLevel(). Note that by default, AudioIn is not connected to p5.sound's output. So you won't hear anything unless you use the connect() method.
        +start__description__1 = Certain browsers limit access to the user's microphone. For example, Chrome only allows access from localhost and over https. For this reason, you may want to include an errorCallback—a function that is called in case the browser won't provide mic access. +start__params__successCallback = Function: (Optional) Name of a function to call on success. +start__params__errorCallback = Function: (Optional) Name of a function to call if there was an error. For example, some browsers do not support getUserMedia. +stop__description__0 = Turn the AudioIn off. If the AudioIn is stopped, it cannot getLevel(). If re-starting, the user may be prompted for permission access. +connect__description__0 = Connect to an audio unit. If no parameter is provided, will connect to the main output (i.e. your speakers).
        +connect__params__unit = Object: (Optional) An object that accepts audio input, such as an FFT +disconnect__description__0 = Disconnect the AudioIn from all audio units. For example, if connect() had been called, disconnect() will stop sending signal to your speakers.
        +getLevel__description__0 = Read the Amplitude (volume level) of an AudioIn. The AudioIn class contains its own instance of the Amplitude class to help make it easy to get a microphone's volume level. Accepts an optional smoothing value (0.0 < 1.0). NOTE: AudioIn must .start() before using .getLevel().
        +getLevel__returns = Number: Volume level (between 0.0 and 1.0) +getLevel__params__smoothing = Number: (Optional) Smoothing is 0.0 by default. Smooths values based on previous values. +amp__description__0 = Set amplitude (volume) of a mic input between 0 and 1.0.
        +amp__params__vol = Number: between 0 and 1.0 +amp__params__time = Number: (Optional) ramp time (optional) +getSources__description__0 = Returns a list of available input sources. This is a wrapper for MediaDevices.enumerateDevices() - Web APIs | MDN and it returns a Promise. +getSources__returns = Promise: Returns a Promise that can be used in place of the callbacks, similar to the enumerateDevices() method +getSources__params__successCallback = Function: (Optional) This callback function handles the sources when they have been enumerated. The callback function receives the deviceList array as its only argument +getSources__params__errorCallback = Function: (Optional) This optional callback receives the error message as its argument. +setSource__description__0 = Set the input source. Accepts a number representing a position in the array returned by getSources(). This is only available in browsers that support navigator.mediaDevices.enumerateDevices() +setSource__params__num = Number: position of input source in the array diff --git a/src/data/localization/en/p5.AudioVoice.ftl b/src/data/localization/en/p5.AudioVoice.ftl new file mode 100644 index 0000000000..dd6d5826a9 --- /dev/null +++ b/src/data/localization/en/p5.AudioVoice.ftl @@ -0,0 +1,4 @@ +description__0 = Base class for monophonic synthesizers. Any extensions of this class should follow the API and implement the methods below in order to remain compatible with p5.PolySynth(); +connect__description__0 = Connect to p5 objects or Web Audio Nodes +connect__params__unit = Object +disconnect__description__0 = Disconnect from soundOut diff --git a/src/data/localization/en/p5.BandPass.ftl b/src/data/localization/en/p5.BandPass.ftl new file mode 100644 index 0000000000..456ac14737 --- /dev/null +++ b/src/data/localization/en/p5.BandPass.ftl @@ -0,0 +1 @@ +description__0 = Constructor: new p5.BandPass() Filter. This is the same as creating a p5.Filter and then calling its method setType('bandpass'). See p5.Filter for methods. diff --git a/src/data/localization/en/p5.Camera.ftl b/src/data/localization/en/p5.Camera.ftl new file mode 100644 index 0000000000..0044055c45 --- /dev/null +++ b/src/data/localization/en/p5.Camera.ftl @@ -0,0 +1,34 @@ +description__0 = This class describes a camera for use in p5's WebGL mode. It contains camera position, orientation, and projection information necessary for rendering a 3D scene. +description__1 = New p5.Camera objects can be made through the createCamera() function and controlled through the methods described below. A camera created in this way will use a default position in the scene and a default perspective projection until these properties are changed through the various methods available. It is possible to create multiple cameras, in which case the current camera can be set through the setCamera() method. +description__2 = Note: The methods below operate in two coordinate systems: the 'world' coordinate system describe positions in terms of their relationship to the origin along the X, Y and Z axes whereas the camera's 'local' coordinate system describes positions from the camera's point of view: left-right, up-down, and forward-backward. The move() method, for instance, moves the camera along its own axes, whereas the setPosition() method sets the camera's position in world-space. +description__3 = The camera object propreties eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ which describes camera position, orientation, and projection are also accessible via the camera object generated using createCamera() +params__rendererGL = RendererGL: instance of WebGL renderer +eyeX__description__0 = camera position value on x axis +eyeY__description__0 = camera position value on y axis +eyeZ__description__0 = camera position value on z axis +centerX__description__0 = x coordinate representing center of the sketch +centerY__description__0 = y coordinate representing center of the sketch +centerZ__description__0 = z coordinate representing center of the sketch +upX__description__0 = x component of direction 'up' from camera +upY__description__0 = y component of direction 'up' from camera +upZ__description__0 = z component of direction 'up' from camera +perspective__description__0 = Sets a perspective projection. Accepts the same parameters as the global perspective(). More information on this function can be found there. +ortho__description__0 = Sets an orthographic projection. Accepts the same parameters as the global ortho(). More information on this function can be found there. +frustum__description__0 = Sets the camera's frustum. Accepts the same parameters as the global frustum(). More information on this function can be found there. +pan__description__0 = Panning rotates the camera view to the left and right. +pan__params__angle = Number: amount to rotate camera in current angleMode units. Greater than 0 values rotate counterclockwise (to the left). +tilt__description__0 = Tilting rotates the camera view up and down. +tilt__params__angle = Number: amount to rotate camera in current angleMode units. Greater than 0 values rotate counterclockwise (to the left). +lookAt__description__0 = Reorients the camera to look at a position in world space. +lookAt__params__x = Number: x position of a point in world space +lookAt__params__y = Number: y position of a point in world space +lookAt__params__z = Number: z position of a point in world space +camera__description__0 = Sets the camera's position and orientation. Accepts the same parameters as the global camera(). More information on this function can be found there. +move__description__0 = Move camera along its local axes while maintaining current camera orientation. +move__params__x = Number: amount to move along camera's left-right axis +move__params__y = Number: amount to move along camera's up-down axis +move__params__z = Number: amount to move along camera's forward-backward axis +setPosition__description__0 = Set camera position in world-space while maintaining current camera orientation. +setPosition__params__x = Number: x position of a point in world space +setPosition__params__y = Number: y position of a point in world space +setPosition__params__z = Number: z position of a point in world space diff --git a/src/data/localization/en/p5.Color.ftl b/src/data/localization/en/p5.Color.ftl new file mode 100644 index 0000000000..3ff1e244cc --- /dev/null +++ b/src/data/localization/en/p5.Color.ftl @@ -0,0 +1,14 @@ +description__0 = Each color stores the color mode and level maxes that was applied at the time of its construction. These are used to interpret the input arguments (at construction and later for that instance of color) and to format the output e.g. when saturation() is requested. +description__1 = Internally, we store an array representing the ideal RGBA values in floating point form, normalized from 0 to 1. From this we calculate the closest screen color (RGBA levels from 0 to 255) and expose this to the renderer. +description__2 = We also cache normalized, floating point components of the color in various representations as they are calculated. This is done to prevent repeating a conversion that has already been performed. +toString__description__0 = This function returns the color formatted as a string. This can be useful for debugging, or for using p5.js with other libraries. +toString__returns = String: the formatted string +toString__params__format = String: (Optional) How the color string will be formatted. Leaving this empty formats the string as rgba(r, g, b, a). '#rgb' '#rgba' '#rrggbb' and '#rrggbbaa' format as hexadecimal color codes. 'rgb' 'hsb' and 'hsl' return the color formatted in the specified color mode. 'rgba' 'hsba' and 'hsla' are the same as above but with alpha channels. 'rgb%' 'hsb%' 'hsl%' 'rgba%' 'hsba%' and 'hsla%' format as percentages. +setRed__description__0 = The setRed function sets the red component of a color. The range depends on your color mode, in the default RGB mode it's between 0 and 255. +setRed__params__red = Number: the new red value +setGreen__description__0 = The setGreen function sets the green component of a color. The range depends on your color mode, in the default RGB mode it's between 0 and 255. +setGreen__params__green = Number: the new green value +setBlue__description__0 = The setBlue function sets the blue component of a color. The range depends on your color mode, in the default RGB mode it's between 0 and 255. +setBlue__params__blue = Number: the new blue value +setAlpha__description__0 = The setAlpha function sets the transparency (alpha) value of a color. The range depends on your color mode, in the default RGB mode it's between 0 and 255. +setAlpha__params__alpha = Number: the new alpha value diff --git a/src/data/localization/en/p5.Compressor.ftl b/src/data/localization/en/p5.Compressor.ftl new file mode 100644 index 0000000000..a390a77703 --- /dev/null +++ b/src/data/localization/en/p5.Compressor.ftl @@ -0,0 +1,33 @@ +description__0 = Compressor is an audio effect class that performs dynamics compression on an audio input source. This is a very commonly used technique in music and sound production. Compression creates an overall louder, richer, and fuller sound by lowering the volume of louds and raising that of softs. Compression can be used to avoid clipping (sound distortion due to peaks in volume) and is especially useful when many sounds are played at once. Compression can be used on indivudal sound sources in addition to the main output. +description__1 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +compressor__description__0 = The p5.Compressor is built with a Web Audio Dynamics Compressor Node +process__description__0 = Performs the same function as .connect, but also accepts optional parameters to set compressor's audioParams +process__params__src = Object: Sound source to be connected +process__params__attack = Number: (Optional) The amount of time (in seconds) to reduce the gain by 10dB, default = .003, range 0 - 1 +process__params__knee = Number: (Optional) A decibel value representing the range above the threshold where the curve smoothly transitions to the "ratio" portion. default = 30, range 0 - 40 +process__params__ratio = Number: (Optional) The amount of dB change in input for a 1 dB change in output default = 12, range 1 - 20 +process__params__threshold = Number: (Optional) The decibel value above which the compression will start taking effect default = -24, range -100 - 0 +process__params__release = Number: (Optional) The amount of time (in seconds) to increase the gain by 10dB default = .25, range 0 - 1 +set__description__0 = Set the paramters of a compressor. +set__params__attack = Number: The amount of time (in seconds) to reduce the gain by 10dB, default = .003, range 0 - 1 +set__params__knee = Number: A decibel value representing the range above the threshold where the curve smoothly transitions to the "ratio" portion. default = 30, range 0 - 40 +set__params__ratio = Number: The amount of dB change in input for a 1 dB change in output default = 12, range 1 - 20 +set__params__threshold = Number: The decibel value above which the compression will start taking effect default = -24, range -100 - 0 +set__params__release = Number: The amount of time (in seconds) to increase the gain by 10dB default = .25, range 0 - 1 +attack__description__0 = Get current attack or set value w/ time ramp +attack__params__attack = Number: (Optional) Attack is the amount of time (in seconds) to reduce the gain by 10dB, default = .003, range 0 - 1 +attack__params__time = Number: (Optional) Assign time value to schedule the change in value +knee__description__0 = Get current knee or set value w/ time ramp +knee__params__knee = Number: (Optional) A decibel value representing the range above the threshold where the curve smoothly transitions to the "ratio" portion. default = 30, range 0 - 40 +knee__params__time = Number: (Optional) Assign time value to schedule the change in value +ratio__description__0 = Get current ratio or set value w/ time ramp +ratio__params__ratio = Number: (Optional) The amount of dB change in input for a 1 dB change in output default = 12, range 1 - 20 +ratio__params__time = Number: (Optional) Assign time value to schedule the change in value +threshold__description__0 = Get current threshold or set value w/ time ramp +threshold__params__threshold = Number: The decibel value above which the compression will start taking effect default = -24, range -100 - 0 +threshold__params__time = Number: (Optional) Assign time value to schedule the change in value +release__description__0 = Get current release or set value w/ time ramp +release__params__release = Number: The amount of time (in seconds) to increase the gain by 10dB default = .25, range 0 - 1 +release__params__time = Number: (Optional) Assign time value to schedule the change in value +reduction__description__0 = Return the current reduction value +reduction__returns = Number: Value of the amount of gain reduction that is applied to the signal diff --git a/src/data/localization/en/p5.Convolver.ftl b/src/data/localization/en/p5.Convolver.ftl new file mode 100644 index 0000000000..6c27d0df7b --- /dev/null +++ b/src/data/localization/en/p5.Convolver.ftl @@ -0,0 +1,20 @@ +description__0 = p5.Convolver extends p5.Reverb. It can emulate the sound of real physical spaces through a process called convolution. +description__1 = Convolution multiplies any audio input by an "impulse response" to simulate the dispersion of sound over time. The impulse response is generated from an audio file that you provide. One way to generate an impulse response is to pop a balloon in a reverberant space and record the echo. Convolution can also be used to experiment with sound. +description__2 = Use the method createConvolution(path) to instantiate a p5.Convolver with a path to your impulse response audio file. +params__path = String: path to a sound file +params__callback = Function: (Optional) function to call when loading succeeds +params__errorCallback = Function: (Optional) function to call if loading fails. This function will receive an error or XMLHttpRequest object with information about what went wrong. +convolverNode__description__0 = Internally, the p5.Convolver uses the a Web Audio Convolver Node. +impulses__description__0 = If you load multiple impulse files using the .addImpulse method, they will be stored as Objects in this Array. Toggle between them with the toggleImpulse(id) method. +process__description__0 = Connect a source to the convolver. +process__params__src = Object: p5.sound / Web Audio object with a sound output. +addImpulse__description__0 = Load and assign a new Impulse Response to the p5.Convolver. The impulse is added to the .impulses array. Previous impulses can be accessed with the .toggleImpulse(id) method. +addImpulse__params__path = String: path to a sound file +addImpulse__params__callback = Function: function (optional) +addImpulse__params__errorCallback = Function: function (optional) +resetImpulse__description__0 = Similar to .addImpulse, except that the .impulses Array is reset to save memory. A new .impulses array is created with this impulse as the only item. +resetImpulse__params__path = String: path to a sound file +resetImpulse__params__callback = Function: function (optional) +resetImpulse__params__errorCallback = Function: function (optional) +toggleImpulse__description__0 = If you have used .addImpulse() to add multiple impulses to a p5.Convolver, then you can use this method to toggle between the items in the .impulses Array. Accepts a parameter to identify which impulse you wish to use, identified either by its original filename (String) or by its position in the .impulses Array (Number).
        You can access the objects in the .impulses Array directly. Each Object has two attributes: an .audioBuffer (type: Web Audio AudioBuffer) and a .name, a String that corresponds with the original filename. +toggleImpulse__params__id = String|Number: Identify the impulse by its original filename (String), or by its position in the .impulses Array (Number). diff --git a/src/data/localization/en/p5.Delay.ftl b/src/data/localization/en/p5.Delay.ftl new file mode 100644 index 0000000000..477a0c7ee5 --- /dev/null +++ b/src/data/localization/en/p5.Delay.ftl @@ -0,0 +1,26 @@ +description__0 = Delay is an echo effect. It processes an existing sound source, and outputs a delayed version of that sound. The p5.Delay can produce different effects depending on the delayTime, feedback, filter, and type. In the example below, a feedback of 0.5 (the default value) will produce a looping delay that decreases in volume by 50% each repeat. A filter will cut out the high frequencies so that the delay does not sound as piercing as the original source. +description__1 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +leftDelay__description__0 = The p5.Delay is built with two Web Audio Delay Nodes, one for each stereo channel. +rightDelay__description__0 = The p5.Delay is built with two Web Audio Delay Nodes, one for each stereo channel. +process__description__0 = Add delay to an audio signal according to a set of delay parameters. +process__params__Signal = Object: An object that outputs audio +process__params__delayTime = Number: (Optional) Time (in seconds) of the delay/echo. Some browsers limit delayTime to 1 second. +process__params__feedback = Number: (Optional) sends the delay back through itself in a loop that decreases in volume each time. +process__params__lowPass = Number: (Optional) Cutoff frequency. Only frequencies below the lowPass will be part of the delay. +delayTime__description__0 = Set the delay (echo) time, in seconds. Usually this value will be a floating point number between 0.0 and 1.0. +delayTime__params__delayTime = Number: Time (in seconds) of the delay +feedback__description__0 = Feedback occurs when Delay sends its signal back through its input in a loop. The feedback amount determines how much signal to send each time through the loop. A feedback greater than 1.0 is not desirable because it will increase the overall output each time through the loop, creating an infinite feedback loop. The default value is 0.5 +feedback__returns = Number: Feedback value +feedback__params__feedback = Number|Object: 0.0 to 1.0, or an object such as an Oscillator that can be used to modulate this param +filter__description__0 = Set a lowpass filter frequency for the delay. A lowpass filter will cut off any frequencies higher than the filter frequency. +filter__params__cutoffFreq = Number|Object: A lowpass filter will cut off any frequencies higher than the filter frequency. +filter__params__res = Number|Object: Resonance of the filter frequency cutoff, or an object (i.e. a p5.Oscillator) that can be used to modulate this parameter. High numbers (i.e. 15) will produce a resonance, low numbers (i.e. .2) will produce a slope. +setType__description__0 = Choose a preset type of delay. 'pingPong' bounces the signal from the left to the right channel to produce a stereo effect. Any other parameter will revert to the default delay setting. +setType__params__type = String|Number: 'pingPong' (1) or 'default' (0) +amp__description__0 = Set the output level of the delay effect. +amp__params__volume = Number: amplitude between 0 and 1.0 +amp__params__rampTime = Number: (Optional) create a fade that lasts rampTime +amp__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +connect__description__0 = Send output to a p5.sound or web audio object +connect__params__unit = Object +disconnect__description__0 = Disconnect all output. diff --git a/src/data/localization/en/p5.Distortion.ftl b/src/data/localization/en/p5.Distortion.ftl new file mode 100644 index 0000000000..ad6c63fddc --- /dev/null +++ b/src/data/localization/en/p5.Distortion.ftl @@ -0,0 +1,15 @@ +description__0 = A Distortion effect created with a Waveshaper Node, with an approach adapted from Kevin Ennis +description__1 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +params__amount = Number: (Optional) Unbounded distortion amount. Normal values range from 0-1. +params__oversample = String: (Optional) 'none', '2x', or '4x'. +WaveShaperNode__description__0 = The p5.Distortion is built with a Web Audio WaveShaper Node. +process__description__0 = Process a sound source, optionally specify amount and oversample values. +process__params__amount = Number: (Optional) Unbounded distortion amount. Normal values range from 0-1. +process__params__oversample = String: (Optional) 'none', '2x', or '4x'. +set__description__0 = Set the amount and oversample of the waveshaper distortion. +set__params__amount = Number: (Optional) Unbounded distortion amount. Normal values range from 0-1. +set__params__oversample = String: (Optional) 'none', '2x', or '4x'. +getAmount__description__0 = Return the distortion amount, typically between 0-1. +getAmount__returns = Number: Unbounded distortion amount. Normal values range from 0-1. +getOversample__description__0 = Return the oversampling. +getOversample__returns = String: Oversample can either be 'none', '2x', or '4x'. diff --git a/src/data/localization/en/p5.EQ.ftl b/src/data/localization/en/p5.EQ.ftl new file mode 100644 index 0000000000..ed26786124 --- /dev/null +++ b/src/data/localization/en/p5.EQ.ftl @@ -0,0 +1,7 @@ +description__0 = p5.EQ is an audio effect that performs the function of a multiband audio equalizer. Equalization is used to adjust the balance of frequency compoenents of an audio signal. This process is commonly used in sound production and recording to change the waveform before it reaches a sound output device. EQ can also be used as an audio effect to create interesting distortions by filtering out parts of the spectrum. p5.EQ is built using a chain of Web Audio Biquad Filter Nodes and can be instantiated with 3 or 8 bands. Bands can be added or removed from the EQ by directly modifying p5.EQ.bands (the array that stores filters). +description__1 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +returns = Object: p5.EQ object +params___eqsize = Number: (Optional) Constructor will accept 3 or 8, defaults to 3 +bands__description__0 = The p5.EQ is built with abstracted p5.Filter objects. To modify any bands, use methods of the p5.Filter API, especially gain and freq. Bands are stored in an array, with indices 0 - 3, or 0 - 7 +process__description__0 = Process an input by connecting it to the EQ +process__params__src = Object: Audio source diff --git a/src/data/localization/en/p5.Effect.ftl b/src/data/localization/en/p5.Effect.ftl new file mode 100644 index 0000000000..6fe2788f9e --- /dev/null +++ b/src/data/localization/en/p5.Effect.ftl @@ -0,0 +1,18 @@ +description__0 = Effect is a base class for audio effects in p5. This module handles the nodes and methods that are common and useful for current and future effects. +description__1 = This class is extended by p5.Distortion, p5.Compressor, p5.Delay, p5.Filter, p5.Reverb. +params__ac = Object: (Optional) Reference to the audio context of the p5 object +params__input = AudioNode: (Optional) Gain Node effect wrapper +params__output = AudioNode: (Optional) Gain Node effect wrapper +params___drywet = Object: (Optional) Tone.JS CrossFade node (defaults to value: 1) +params__wet = AudioNode: (Optional) Effects that extend this class should connect to the wet signal to this gain node, so that dry and wet signals are mixed properly. +amp__description__0 = Set the output volume of the filter. +amp__params__vol = Number: (Optional) amplitude between 0 and 1.0 +amp__params__rampTime = Number: (Optional) create a fade that lasts until rampTime +amp__params__tFromNow = Number: (Optional) schedule this event to happen in tFromNow seconds +chain__description__0 = Link effects together in a chain Example usage: filter.chain(reverb, delay, panner); May be used with an open-ended number of arguments +chain__params__arguments = Object: (Optional) Chain together multiple sound objects +drywet__description__0 = Adjust the dry/wet value. +drywet__params__fade = Number: (Optional) The desired drywet value (0 - 1.0) +connect__description__0 = Send output to a p5.js-sound, Web Audio Node, or use signal to control an AudioParam +connect__params__unit = Object +disconnect__description__0 = Disconnect all output. diff --git a/src/data/localization/en/p5.Element.ftl b/src/data/localization/en/p5.Element.ftl new file mode 100644 index 0000000000..16ad1b5646 --- /dev/null +++ b/src/data/localization/en/p5.Element.ftl @@ -0,0 +1,86 @@ +description__0 = Base class for all elements added to a sketch, including canvas, graphics buffers, and other HTML elements. It is not called directly, but p5.Element objects are created by calling createCanvas, createGraphics, createDiv, createImg, createInput, etc. +params__elt = String: DOM node that is wrapped +params__pInst = P5: (Optional) pointer to p5 instance +elt__description__0 = Underlying HTML element. All normal HTML methods can be called on this. +parent__description__0 = Attaches the element to the parent specified. A way of setting the container for the element. Accepts either a string ID, DOM node, or p5.Element. If no arguments given, parent node is returned. For more ways to position the canvas, see the positioning the canvas wiki page. +parent__params__parent = String|p5.Element|Object: the ID, DOM node, or p5.Element of desired parent element +id__description__0 = Sets the ID of the element. If no ID argument is passed in, it instead returns the current ID of the element. Note that only one element can have a particular id in a page. The .class() function can be used to identify multiple elements with the same class name. +id__params__id = String: ID of the element +class__description__0 = Adds given class to the element. If no class argument is passed in, it instead returns a string containing the current class(es) of the element. +class__params__class = String: class to add +mousePressed__description__0 = The .mousePressed() function is called once after every time a mouse button is pressed over the element. Some mobile browsers may also trigger this event on a touch screen, if the user performs a quick tap. This can be used to attach element specific event listeners. +mousePressed__params__fxn = Function|Boolean: function to be fired when mouse is pressed over the element. if false is passed instead, the previously firing function will no longer fire. +doubleClicked__description__0 = The .doubleClicked() function is called once after every time a mouse button is pressed twice over the element. This can be used to attach element and action specific event listeners. +doubleClicked__returns = p5.Element: +doubleClicked__params__fxn = Function|Boolean: function to be fired when mouse is double clicked over the element. if false is passed instead, the previously firing function will no longer fire. +mouseWheel__description__0 = The mouseWheel() function is called once after every time a mouse wheel is scrolled over the element. This can be used to attach element specific event listeners. +mouseWheel__description__1 = The function accepts a callback function as argument which will be executed when the wheel event is triggered on the element, the callback function is passed one argument event. The event.deltaY property returns negative values if the mouse wheel is rotated up or away from the user and positive in the other direction. The event.deltaX does the same as event.deltaY except it reads the horizontal wheel scroll of the mouse wheel. +mouseWheel__description__2 = On OS X with "natural" scrolling enabled, the event.deltaY values are reversed. +mouseWheel__params__fxn = Function|Boolean: function to be fired when mouse is scrolled over the element. if false is passed instead, the previously firing function will no longer fire. +mouseReleased__description__0 = The mouseReleased() function is called once after every time a mouse button is released over the element. Some mobile browsers may also trigger this event on a touch screen, if the user performs a quick tap. This can be used to attach element specific event listeners. +mouseReleased__params__fxn = Function|Boolean: function to be fired when mouse is released over the element. if false is passed instead, the previously firing function will no longer fire. +mouseClicked__description__0 = The .mouseClicked() function is called once after a mouse button is pressed and released over the element. Some mobile browsers may also trigger this event on a touch screen, if the user performs a quick tap.This can be used to attach element specific event listeners. +mouseClicked__params__fxn = Function|Boolean: function to be fired when mouse is clicked over the element. if false is passed instead, the previously firing function will no longer fire. +mouseMoved__description__0 = The .mouseMoved() function is called once every time a mouse moves over the element. This can be used to attach an element specific event listener. +mouseMoved__params__fxn = Function|Boolean: function to be fired when a mouse moves over the element. if false is passed instead, the previously firing function will no longer fire. +mouseOver__description__0 = The .mouseOver() function is called once after every time a mouse moves onto the element. This can be used to attach an element specific event listener. +mouseOver__params__fxn = Function|Boolean: function to be fired when a mouse moves onto the element. if false is passed instead, the previously firing function will no longer fire. +mouseOut__description__0 = The .mouseOut() function is called once after every time a mouse moves off the element. This can be used to attach an element specific event listener. +mouseOut__params__fxn = Function|Boolean: function to be fired when a mouse moves off of an element. if false is passed instead, the previously firing function will no longer fire. +touchStarted__description__0 = The .touchStarted() function is called once after every time a touch is registered. This can be used to attach element specific event listeners. +touchStarted__params__fxn = Function|Boolean: function to be fired when a touch starts over the element. if false is passed instead, the previously firing function will no longer fire. +touchMoved__description__0 = The .touchMoved() function is called once after every time a touch move is registered. This can be used to attach element specific event listeners. +touchMoved__params__fxn = Function|Boolean: function to be fired when a touch moves over the element. if false is passed instead, the previously firing function will no longer fire. +touchEnded__description__0 = The .touchEnded() function is called once after every time a touch is registered. This can be used to attach element specific event listeners. +touchEnded__params__fxn = Function|Boolean: function to be fired when a touch ends over the element. if false is passed instead, the previously firing function will no longer fire. +dragOver__description__0 = The .dragOver() function is called once after every time a file is dragged over the element. This can be used to attach an element specific event listener. +dragOver__params__fxn = Function|Boolean: function to be fired when a file is dragged over the element. if false is passed instead, the previously firing function will no longer fire. +dragLeave__description__0 = The .dragLeave() function is called once after every time a dragged file leaves the element area. This can be used to attach an element specific event listener. +dragLeave__params__fxn = Function|Boolean: function to be fired when a file is dragged off the element. if false is passed instead, the previously firing function will no longer fire. +addClass__description__0 = Adds specified class to the element. +addClass__params__class = String: name of class to add +removeClass__description__0 = Removes specified class from the element. +removeClass__params__class = String: name of class to remove +hasClass__description__0 = Checks if specified class already set to element +hasClass__returns = Boolean: a boolean value if element has specified class +hasClass__params__c = String: class name of class to check +toggleClass__description__0 = Toggles element class +toggleClass__params__c = String: class name to toggle +child__description__0 = Attaches the element as a child to the parent specified. Accepts either a string ID, DOM node, or p5.Element. If no argument is specified, an array of children DOM nodes is returned. +child__returns = Node[]: an array of child nodes +child__params__child = String|p5.Element: (Optional) the ID, DOM node, or p5.Element to add to the current element +center__description__0 = Centers a p5 Element either vertically, horizontally, or both, relative to its parent or according to the body if the Element has no parent. If no argument is passed the Element is aligned both vertically and horizontally. +center__params__align = String: (Optional) passing 'vertical', 'horizontal' aligns element accordingly +html__description__0 = If an argument is given, sets the inner HTML of the element, replacing any existing html. If true is included as a second argument, html is appended instead of replacing existing html. If no arguments are given, returns the inner HTML of the element. +html__returns = String: the inner HTML of the element +html__params__html = String: (Optional) the HTML to be placed inside the element +html__params__append = Boolean: (Optional) whether to append HTML to existing +position__description__0 = Sets the position of the element. If no position type argument is given, the position will be relative to (0, 0) of the window. Essentially, this sets position:absolute and left and top properties of style. If an optional third argument specifying position type is given, the x and y coordinates will be interpreted based on the positioning scheme. If no arguments given, the function returns the x and y position of the element. found documentation on how to be more specific with object type https://stackoverflow.com/questions/14714314/how-do-i-comment-object-literals-in-yuidoc +position__returns = Object: object of form {"{"} x: 0, y: 0 {"}"} containing the position of the element in an object +position__params__x = Number: (Optional) x-position relative to upper left of window (optional) +position__params__y = Number: (Optional) y-position relative to upper left of window (optional) +position__params__positionType = String: (Optional) it can be static, fixed, relative, sticky, initial or inherit (optional) +style__description__0 = Sets the given style (css) property (1st arg) of the element with the given value (2nd arg). If a single argument is given, .style() returns the value of the given property; however, if the single argument is given in css syntax ('text-align:center'), .style() sets the css appropriately. +style__returns = String: value of property +style__params__property = String: property to be set +style__params__value = String|p5.Color: value to assign to property +attribute__description__0 = Adds a new attribute or changes the value of an existing attribute on the specified element. If no value is specified, returns the value of the given attribute, or null if attribute is not set. +attribute__returns = String: value of attribute +attribute__params__attr = String: attribute to set +attribute__params__value = String: value to assign to attribute +removeAttribute__description__0 = Removes an attribute on the specified element. +removeAttribute__params__attr = String: attribute to remove +value__description__0 = Either returns the value of the element if no arguments given, or sets the value of the element. +value__returns = String|Number: value of the element +value__params__value = String|Number +show__description__0 = Shows the current element. Essentially, setting display:block for the style. +hide__description__0 = Hides the current element. Essentially, setting display:none for the style. +size__description__0 = Sets the width and height of the element. AUTO can be used to only adjust one dimension at a time. If no arguments are given, it returns the width and height of the element in an object. In case of elements which need to be loaded, such as images, it is recommended to call the function after the element has finished loading. +size__returns = Object: the width and height of the element in an object +size__params__w = Number|Constant: width of the element, either AUTO, or a number +size__params__h = Number|Constant: (Optional) height of the element, either AUTO, or a number +remove__description__0 = Removes the element, stops all media streams, and deregisters all listeners. +drop__description__0 = Registers a callback that gets called every time a file that is dropped on the element has been loaded. p5 will load every dropped file into memory and pass it as a p5.File object to the callback. Multiple files dropped at the same time will result in multiple calls to the callback. +drop__description__1 = You can optionally pass a second callback which will be registered to the raw drop event. The callback will thus be provided the original DragEvent. Dropping multiple files at the same time will trigger the second callback once per drop, whereas the first callback will trigger for each loaded file. +drop__params__callback = Function: callback to receive loaded file, called for each file dropped. +drop__params__fxn = Function: (Optional) callback triggered once when files are dropped with the drop event. diff --git a/src/data/localization/en/p5.Envelope.ftl b/src/data/localization/en/p5.Envelope.ftl new file mode 100644 index 0000000000..41b0324830 --- /dev/null +++ b/src/data/localization/en/p5.Envelope.ftl @@ -0,0 +1,55 @@ +description__0 = Envelopes are pre-defined amplitude distribution over time. Typically, envelopes are used to control the output volume of an object, a series of fades referred to as Attack, Decay, Sustain and Release ( ADSR ). Envelopes can also control other Web Audio Parameters—for example, a p5.Envelope can control an Oscillator's frequency like this: osc.freq(env). +description__1 = Use setRange to change the attack/release level. Use setADSR to change attackTime, decayTime, sustainPercent and releaseTime. +description__2 = Use the play method to play the entire envelope, the ramp method for a pingable trigger, or triggerAttack/ triggerRelease to trigger noteOn/noteOff. +attackTime__description__0 = Time until envelope reaches attackLevel +attackLevel__description__0 = Level once attack is complete. +decayTime__description__0 = Time until envelope reaches decayLevel. +decayLevel__description__0 = Level after decay. The envelope will sustain here until it is released. +releaseTime__description__0 = Duration of the release portion of the envelope. +releaseLevel__description__0 = Level at the end of the release. +set__description__0 = Reset the envelope with a series of time/value pairs. +set__params__attackTime = Number: Time (in seconds) before level reaches attackLevel +set__params__attackLevel = Number: Typically an amplitude between 0.0 and 1.0 +set__params__decayTime = Number: Time +set__params__decayLevel = Number: Amplitude (In a standard ADSR envelope, decayLevel = sustainLevel) +set__params__releaseTime = Number: Release Time (in seconds) +set__params__releaseLevel = Number: Amplitude +setADSR__description__0 = Set values like a traditional ADSR envelope . +setADSR__params__attackTime = Number: Time (in seconds before envelope reaches Attack Level +setADSR__params__decayTime = Number: (Optional) Time (in seconds) before envelope reaches Decay/Sustain Level +setADSR__params__susRatio = Number: (Optional) Ratio between attackLevel and releaseLevel, on a scale from 0 to 1, where 1.0 = attackLevel, 0.0 = releaseLevel. The susRatio determines the decayLevel and the level at which the sustain portion of the envelope will sustain. For example, if attackLevel is 0.4, releaseLevel is 0, and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is increased to 1.0 (using setRange), then decayLevel would increase proportionally, to become 0.5. +setADSR__params__releaseTime = Number: (Optional) Time in seconds from now (defaults to 0) +setRange__description__0 = Set max (attackLevel) and min (releaseLevel) of envelope. +setRange__params__aLevel = Number: attack level (defaults to 1) +setRange__params__rLevel = Number: release level (defaults to 0) +setInput__description__0 = Assign a parameter to be controlled by this envelope. If a p5.Sound object is given, then the p5.Envelope will control its output gain. If multiple inputs are provided, the env will control all of them. +setInput__params__inputs = Object: (Optional) A p5.sound object or Web Audio Param. +setExp__description__0 = Set whether the envelope ramp is linear (default) or exponential. Exponential ramps can be useful because we perceive amplitude and frequency logarithmically. +setExp__params__isExp = Boolean: true is exponential, false is linear +play__description__0 = Play tells the envelope to start acting on a given input. If the input is a p5.sound object (i.e. AudioIn, Oscillator, SoundFile), then Envelope will control its output volume. Envelopes can also be used to control any Web Audio Audio Param. +play__params__unit = Object: A p5.sound object or Web Audio Param. +play__params__startTime = Number: (Optional) time from now (in seconds) at which to play +play__params__sustainTime = Number: (Optional) time to sustain before releasing the envelope +triggerAttack__description__0 = Trigger the Attack, and Decay portion of the Envelope. Similar to holding down a key on a piano, but it will hold the sustain level until you let go. Input can be any p5.sound object, or a Web Audio Param. +triggerAttack__params__unit = Object: p5.sound Object or Web Audio Param +triggerAttack__params__secondsFromNow = Number: time from now (in seconds) +triggerRelease__description__0 = Trigger the Release of the Envelope. This is similar to releasing the key on a piano and letting the sound fade according to the release level and release time. +triggerRelease__params__unit = Object: p5.sound Object or Web Audio Param +triggerRelease__params__secondsFromNow = Number: time to trigger the release +ramp__description__0 = Exponentially ramp to a value using the first two values from setADSR(attackTime, decayTime) as time constants for simple exponential ramps. If the value is higher than current value, it uses attackTime, while a decrease uses decayTime. +ramp__params__unit = Object: p5.sound Object or Web Audio Param +ramp__params__secondsFromNow = Number: When to trigger the ramp +ramp__params__v = Number: Target value +ramp__params__v2 = Number: (Optional) Second target value +add__description__0 = Add a value to the p5.Oscillator's output amplitude, and return the oscillator. Calling this method again will override the initial add() with new values. +add__returns = p5.Envelope: Envelope Returns this envelope with scaled output +add__params__number = Number: Constant number to add +mult__description__0 = Multiply the p5.Envelope's output amplitude by a fixed value. Calling this method again will override the initial mult() with new values. +mult__returns = p5.Envelope: Envelope Returns this envelope with scaled output +mult__params__number = Number: Constant number to multiply +scale__description__0 = Scale this envelope's amplitude values to a given range, and return the envelope. Calling this method again will override the initial scale() with new values. +scale__returns = p5.Envelope: Envelope Returns this envelope with scaled output +scale__params__inMin = Number: input range minumum +scale__params__inMax = Number: input range maximum +scale__params__outMin = Number: input range minumum +scale__params__outMax = Number: input range maximum diff --git a/src/data/localization/en/p5.FFT.ftl b/src/data/localization/en/p5.FFT.ftl new file mode 100644 index 0000000000..62f8486e2d --- /dev/null +++ b/src/data/localization/en/p5.FFT.ftl @@ -0,0 +1,33 @@ +description__0 = FFT (Fast Fourier Transform) is an analysis algorithm that isolates individual audio frequencies within a waveform. +description__1 = Once instantiated, a p5.FFT object can return an array based on two types of analyses: • FFT.waveform() computes amplitude values along the time domain. The array indices correspond to samples across a brief moment in time. Each value represents amplitude of the waveform at that sample of time. • FFT.analyze() computes amplitude values along the frequency domain. The array indices correspond to frequencies (i.e. pitches), from the lowest to the highest that humans can hear. Each value represents amplitude at that slice of the frequency spectrum. Use with getEnergy() to measure amplitude at specific frequencies, or within a range of frequencies. +description__2 = FFT analyzes a very short snapshot of sound called a sample buffer. It returns an array of amplitude measurements, referred to as bins. The array is 1024 bins long by default. You can change the bin array length, but it must be a power of 2 between 16 and 1024 in order for the FFT algorithm to function correctly. The actual size of the FFT buffer is twice the number of bins, so given a standard sample rate, the buffer is 2048/44100 seconds long. +params__smoothing = Number: (Optional) Smooth results of Freq Spectrum. 0.0 < smoothing < 1.0. Defaults to 0.8. +params__bins = Number: (Optional) Length of resulting array. Must be a power of two between 16 and 1024. Defaults to 1024. +setInput__description__0 = Set the input source for the FFT analysis. If no source is provided, FFT will analyze all sound in the sketch. +setInput__params__source = Object: (Optional) p5.sound object (or web audio API source node) +waveform__description__0 = Returns an array of amplitude values (between -1.0 and +1.0) that represent a snapshot of amplitude readings in a single buffer. Length will be equal to bins (defaults to 1024). Can be used to draw the waveform of a sound. +waveform__returns = Array: Array Array of amplitude values (-1 to 1) over time. Array length = bins. +waveform__params__bins = Number: (Optional) Must be a power of two between 16 and 1024. Defaults to 1024. +waveform__params__precision = String: (Optional) If any value is provided, will return results in a Float32 Array which is more precise than a regular array. +analyze__description__0 = Returns an array of amplitude values (between 0 and 255) across the frequency spectrum. Length is equal to FFT bins (1024 by default). The array indices correspond to frequencies (i.e. pitches), from the lowest to the highest that humans can hear. Each value represents amplitude at that slice of the frequency spectrum. Must be called prior to using getEnergy(). +analyze__returns = Array: spectrum Array of energy (amplitude/volume) values across the frequency spectrum. Lowest energy (silence) = 0, highest possible is 255. +analyze__params__bins = Number: (Optional) Must be a power of two between 16 and 1024. Defaults to 1024. +analyze__params__scale = Number: (Optional) If "dB," returns decibel float measurements between -140 and 0 (max). Otherwise returns integers from 0-255. +getEnergy__description__0 = Returns the amount of energy (volume) at a specific frequency, or the average amount of energy between two frequencies. Accepts Number(s) corresponding to frequency (in Hz), or a "string" corresponding to predefined frequency ranges ("bass", "lowMid", "mid", "highMid", "treble"). Returns a range between 0 (no energy/volume at that frequency) and 255 (maximum energy). NOTE: analyze() must be called prior to getEnergy(). analyze() tells the FFT to analyze frequency data, and getEnergy() uses the results to determine the value at a specific frequency or range of frequencies. +getEnergy__returns = Number: Energy Energy (volume/amplitude) from 0 and 255. +getEnergy__params__frequency1 = Number|String: Will return a value representing energy at this frequency. Alternately, the strings "bass", "lowMid" "mid", "highMid", and "treble" will return predefined frequency ranges. +getEnergy__params__frequency2 = Number: (Optional) If a second frequency is given, will return average amount of energy that exists between the two frequencies. +getCentroid__description__0 = Returns the spectral centroid of the input signal. NOTE: analyze() must be called prior to getCentroid(). Analyze() tells the FFT to analyze frequency data, and getCentroid() uses the results determine the spectral centroid. +getCentroid__returns = Number: Spectral Centroid Frequency of the spectral centroid in Hz. +smooth__description__0 = Smooth FFT analysis by averaging with the last analysis frame. +smooth__params__smoothing = Number: 0.0 < smoothing < 1.0. Defaults to 0.8. +linAverages__description__0 = Returns an array of average amplitude values for a given number of frequency bands split equally. N defaults to 16. NOTE: analyze() must be called prior to linAverages(). Analyze() tells the FFT to analyze frequency data, and linAverages() uses the results to group them into a smaller set of averages. +linAverages__returns = Array: linearAverages Array of average amplitude values for each group +linAverages__params__N = Number: Number of returned frequency groups +logAverages__description__0 = Returns an array of average amplitude values of the spectrum, for a given set of Octave Bands NOTE: analyze() must be called prior to logAverages(). Analyze() tells the FFT to analyze frequency data, and logAverages() uses the results to group them into a smaller set of averages. +logAverages__returns = Array: logAverages Array of average amplitude values for each group +logAverages__params__octaveBands = Array: Array of Octave Bands objects for grouping +getOctaveBands__description__0 = Calculates and Returns the 1/N Octave Bands N defaults to 3 and minimum central frequency to 15.625Hz. (1/3 Octave Bands ~= 31 Frequency Bands) Setting fCtr0 to a central value of a higher octave will ignore the lower bands and produce less frequency groups. +getOctaveBands__returns = Array: octaveBands Array of octave band objects with their bounds +getOctaveBands__params__N = Number: Specifies the 1/N type of generated octave bands +getOctaveBands__params__fCtr0 = Number: Minimum central frequency for the lowest band diff --git a/src/data/localization/en/p5.File.ftl b/src/data/localization/en/p5.File.ftl new file mode 100644 index 0000000000..91fc131ddd --- /dev/null +++ b/src/data/localization/en/p5.File.ftl @@ -0,0 +1,8 @@ +description__0 = Base class for a file. Used for Element.drop and createFileInput. +params__file = File: File that is wrapped +file__description__0 = Underlying File object. All normal File methods can be called on this. +type__description__0 = File type (image, text, etc.) +subtype__description__0 = File subtype (usually the file extension jpg, png, xml, etc.) +name__description__0 = File name +size__description__0 = File size +data__description__0 = URL string containing either image data, the text contents of the file or a parsed object if file is JSON and p5.XML if XML diff --git a/src/data/localization/en/p5.Filter.ftl b/src/data/localization/en/p5.Filter.ftl new file mode 100644 index 0000000000..4608f85587 --- /dev/null +++ b/src/data/localization/en/p5.Filter.ftl @@ -0,0 +1,28 @@ +description__0 = A p5.Filter uses a Web Audio Biquad Filter to filter the frequency response of an input source. Subclasses include: p5.LowPass: Allows frequencies below the cutoff frequency to pass through, and attenuates frequencies above the cutoff.
        p5.HighPass: The opposite of a lowpass filter.
        p5.BandPass: Allows a range of frequencies to pass through and attenuates the frequencies below and above this frequency range.
        +description__1 = The .res() method controls either width of the bandpass, or resonance of the low/highpass cutoff frequency. +description__2 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +params__type = String: (Optional) 'lowpass' (default), 'highpass', 'bandpass' +biquadFilter__description__0 = The p5.Filter is built with a Web Audio BiquadFilter Node. +process__description__0 = Filter an audio signal according to a set of filter parameters. +process__params__Signal = Object: An object that outputs audio +process__params__freq = Number: (Optional) Frequency in Hz, from 10 to 22050 +process__params__res = Number: (Optional) Resonance/Width of the filter frequency from 0.001 to 1000 +set__description__0 = Set the frequency and the resonance of the filter. +set__params__freq = Number: (Optional) Frequency in Hz, from 10 to 22050 +set__params__res = Number: (Optional) Resonance (Q) from 0.001 to 1000 +set__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +freq__description__0 = Set the filter frequency, in Hz, from 10 to 22050 (the range of human hearing, although in reality most people hear in a narrower range). +freq__returns = Number: value Returns the current frequency value +freq__params__freq = Number: Filter Frequency +freq__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +res__description__0 = Controls either width of a bandpass frequency, or the resonance of a low/highpass cutoff frequency. +res__returns = Number: value Returns the current res value +res__params__res = Number: Resonance/Width of filter freq from 0.001 to 1000 +res__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +gain__description__0 = Controls the gain attribute of a Biquad Filter. This is distinctly different from .amp() which is inherited from p5.Effect .amp() controls the volume via the output gain node p5.Filter.gain() controls the gain parameter of a Biquad Filter node. +gain__returns = Number: Returns the current or updated gain value +gain__params__gain = Number +toggle__description__0 = Toggle function. Switches between the specified type and allpass +toggle__returns = Boolean: [Toggle value] +setType__description__0 = Set the type of a p5.Filter. Possible types include: "lowpass" (default), "highpass", "bandpass", "lowshelf", "highshelf", "peaking", "notch", "allpass". +setType__params__t = String diff --git a/src/data/localization/en/p5.Font.ftl b/src/data/localization/en/p5.Font.ftl new file mode 100644 index 0000000000..b5105a863c --- /dev/null +++ b/src/data/localization/en/p5.Font.ftl @@ -0,0 +1,17 @@ +description__0 = Base class for font handling +params__pInst = P5: (Optional) pointer to p5 instance +font__description__0 = Underlying opentype font implementation +textBounds__description__0 = Returns a tight bounding box for the given text string using this font +textBounds__returns = Object: a rectangle object with properties: x, y, w, h +textBounds__params__line = String: a line of text +textBounds__params__x = Number: x-position +textBounds__params__y = Number: y-position +textBounds__params__fontSize = Number: (Optional) font size to use (optional) Default is 12. +textBounds__params__options = Object: (Optional) opentype options (optional) opentype fonts contains alignment and baseline options. Default is 'LEFT' and 'alphabetic' +textToPoints__description__0 = Computes an array of points following the path for specified text +textToPoints__returns = Array: an array of points, each with x, y, alpha (the path angle) +textToPoints__params__txt = String: a line of text +textToPoints__params__x = Number: x-position +textToPoints__params__y = Number: y-position +textToPoints__params__fontSize = Number: font size to use (optional) +textToPoints__params__options = Object: (Optional) an (optional) object that can contain: sampleFactor - the ratio of path-length to number of samples (default=.1); higher values yield more points and are therefore more precise simplifyThreshold - if set to a non-zero value, collinear points will be be removed from the polygon; the value represents the threshold angle to use when determining whether two edges are collinear diff --git a/src/data/localization/en/p5.Gain.ftl b/src/data/localization/en/p5.Gain.ftl new file mode 100644 index 0000000000..a06aa722c9 --- /dev/null +++ b/src/data/localization/en/p5.Gain.ftl @@ -0,0 +1,10 @@ +description__0 = A gain node is usefull to set the relative volume of sound. It's typically used to build mixers. +setInput__description__0 = Connect a source to the gain node. +setInput__params__src = Object: p5.sound / Web Audio object with a sound output. +connect__description__0 = Send output to a p5.sound or web audio object +connect__params__unit = Object +disconnect__description__0 = Disconnect all output. +amp__description__0 = Set the output level of the gain node. +amp__params__volume = Number: amplitude between 0 and 1.0 +amp__params__rampTime = Number: (Optional) create a fade that lasts rampTime +amp__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now diff --git a/src/data/localization/en/p5.Geometry.ftl b/src/data/localization/en/p5.Geometry.ftl new file mode 100644 index 0000000000..3453d8c46e --- /dev/null +++ b/src/data/localization/en/p5.Geometry.ftl @@ -0,0 +1,9 @@ +description__0 = p5 Geometry class +params__detailX = Integer: (Optional) number of vertices along the x-axis. +params__detailY = Integer: (Optional) number of vertices along the y-axis. +params__callback = Function: (Optional) function to call upon object instantiation. +computeFaces__description__0 = computes faces for geometry objects based on the vertices. +computeNormals__description__0 = computes smooth normals per vertex as an average of each face. +averageNormals__description__0 = Averages the vertex normals. Used in curved surfaces +averagePoleNormals__description__0 = Averages pole normals. Used in spherical primitives +normalize__description__0 = Modifies all vertices to be centered within the range -100 to 100. diff --git a/src/data/localization/en/p5.Graphics.ftl b/src/data/localization/en/p5.Graphics.ftl new file mode 100644 index 0000000000..74372de2a2 --- /dev/null +++ b/src/data/localization/en/p5.Graphics.ftl @@ -0,0 +1,7 @@ +description__0 = Thin wrapper around a renderer, to be used for creating a graphics buffer object. Use this class if you need to draw into an off-screen graphics buffer. The two parameters define the width and height in pixels. The fields and methods for this class are extensive, but mirror the normal drawing API for p5. +params__w = Number: width +params__h = Number: height +params__renderer = Constant: the renderer to use, either P2D or WEBGL +params__pInst = P5: (Optional) pointer to p5 instance +reset__description__0 = Resets certain values such as those modified by functions in the Transform category and in the Lights category that are not automatically reset with graphics buffer objects. Calling this in draw() will copy the behavior of the standard canvas. +remove__description__0 = Removes a Graphics object from the page and frees any resources associated with it. diff --git a/src/data/localization/en/p5.HighPass.ftl b/src/data/localization/en/p5.HighPass.ftl new file mode 100644 index 0000000000..98f66dfc82 --- /dev/null +++ b/src/data/localization/en/p5.HighPass.ftl @@ -0,0 +1 @@ +description__0 = Constructor: new p5.HighPass() Filter. This is the same as creating a p5.Filter and then calling its method setType('highpass'). See p5.Filter for methods. diff --git a/src/data/localization/en/p5.Image.ftl b/src/data/localization/en/p5.Image.ftl new file mode 100644 index 0000000000..8ba9fe97cc --- /dev/null +++ b/src/data/localization/en/p5.Image.ftl @@ -0,0 +1,82 @@ +description__0 = Creates a new p5.Image. A p5.Image is a canvas backed representation of an image. +description__1 = p5 can display .gif, .jpg and .png images. Images may be displayed in 2D and 3D space. Before an image is used, it must be loaded with the loadImage() function. The p5.Image class contains fields for the width and height of the image, as well as an array called pixels[] that contains the values for every pixel in the image. +description__2 = The methods described below allow easy access to the image's pixels and alpha channel and simplify the process of compositing. +description__3 = Before using the pixels[] array, be sure to use the loadPixels() method on the image to make sure that the pixel data is properly loaded. +params__width = Number +params__height = Number +width__description__0 = Image width. +height__description__0 = Image height. +pixels__description__0 = Array containing the values for all the pixels in the display window. These values are numbers. This array is the size (include an appropriate factor for pixelDensity) of the display window x4, representing the R, G, B, A values in order for each pixel, moving from left to right across each row, then down each column. Retina and other high density displays may have more pixels (by a factor of pixelDensity^2). For example, if the image is 100×100 pixels, there will be 40,000. With pixelDensity = 2, there will be 160,000. The first four values (indices 0-3) in the array will be the R, G, B, A values of the pixel at (0, 0). The second four values (indices 4-7) will contain the R, G, B, A values of the pixel at (1, 0). More generally, to set values for a pixel at (x, y):
        let d = pixelDensity(); for (let i = 0; i < d; i++) {"{"}  for (let j = 0; j < d; j++) {"{"}  // loop over  index = 4 * ((y * d + j) * width * d + (x * d + i));  pixels[index] = r;  pixels[index+1] = g;  pixels[index+2] = b;  pixels[index+3] = a;  {"}"} {"}"}
        +pixels__description__1 = Before accessing this array, the data must loaded with the loadPixels() function. After the array data has been modified, the updatePixels() function must be run to update the changes. +loadPixels__description__0 = Loads the pixels data for this image into the [pixels] attribute. +updatePixels__description__0 = Updates the backing canvas for this image with the contents of the [pixels] array. +updatePixels__description__1 = If this image is an animated GIF then the pixels will be updated in the frame that is currently displayed. +updatePixels__params__x = Integer: x-offset of the target update area for the underlying canvas +updatePixels__params__y = Integer: y-offset of the target update area for the underlying canvas +updatePixels__params__w = Integer: height of the target update area for the underlying canvas +updatePixels__params__h = Integer: height of the target update area for the underlying canvas +get__description__0 = Get a region of pixels from an image. +get__description__1 = If no params are passed, the whole image is returned. If x and y are the only params passed a single pixel is extracted. If all params are passed a rectangle region is extracted and a p5.Image is returned. +get__returns = p5.Image: the rectangle p5.Image +get__params__x = Number: x-coordinate of the pixel +get__params__y = Number: y-coordinate of the pixel +get__params__w = Number: width +get__params__h = Number: height +set__description__0 = Set the color of a single pixel or write an image into this p5.Image. +set__description__1 = Note that for a large number of pixels this will be slower than directly manipulating the pixels array and then calling updatePixels(). +set__params__x = Number: x-coordinate of the pixel +set__params__y = Number: y-coordinate of the pixel +set__params__a = Number|Number[]|Object: grayscale value | pixel array | a p5.Color | image to copy +resize__description__0 = Resize the image to a new width and height. To make the image scale proportionally, use 0 as the value for the wide or high parameter. For instance, to make the width of an image 150 pixels, and change the height using the same proportion, use resize(150, 0). +resize__params__width = Number: the resized image width +resize__params__height = Number: the resized image height +copy__description__0 = Copies a region of pixels from one image to another. If no srcImage is specified this is used as the source. If the source and destination regions aren't the same size, it will automatically resize source pixels to fit the specified target region. +copy__params__srcImage = p5.Image|p5.Element: source image +copy__params__sx = Integer: X coordinate of the source's upper left corner +copy__params__sy = Integer: Y coordinate of the source's upper left corner +copy__params__sw = Integer: source image width +copy__params__sh = Integer: source image height +copy__params__dx = Integer: X coordinate of the destination's upper left corner +copy__params__dy = Integer: Y coordinate of the destination's upper left corner +copy__params__dw = Integer: destination image width +copy__params__dh = Integer: destination image height +mask__description__0 = Masks part of an image from displaying by loading another image and using its alpha channel as an alpha channel for this image. Masks are cumulative, one applied to an image object, they cannot be removed. +mask__params__srcImage = p5.Image: source image +filter__description__0 = Applies an image filter to a p5.Image +filter__description__1 = THRESHOLD Converts the image to black and white pixels depending if they are above or below the threshold defined by the level parameter. The parameter must be between 0.0 (black) and 1.0 (white). If no level is specified, 0.5 is used. +filter__description__2 = GRAY Converts any colors in the image to grayscale equivalents. No parameter is used. +filter__description__3 = OPAQUE Sets the alpha channel to entirely opaque. No parameter is used. +filter__description__4 = INVERT Sets each pixel to its inverse value. No parameter is used. +filter__description__5 = POSTERIZE Limits each channel of the image to the number of colors specified as the parameter. The parameter can be set to values between 2 and 255, but results are most noticeable in the lower ranges. +filter__description__6 = BLUR Executes a Gaussian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Gaussian blur of radius 1. Larger values increase the blur. +filter__description__7 = ERODE Reduces the light areas. No parameter is used. +filter__description__8 = DILATE Increases the light areas. No parameter is used. +filter__description__9 = filter() does not work in WEBGL mode. A similar effect can be achieved in WEBGL mode using custom shaders. Adam Ferriss has written a selection of shader examples that contains many of the effects present in the filter examples. +filter__params__filterType = Constant: either THRESHOLD, GRAY, OPAQUE, INVERT, POSTERIZE, ERODE, DILATE or BLUR. See Filters.js for docs on each available filter +filter__params__filterParam = Number: (Optional) an optional parameter unique to each filter, see above +blend__description__0 = Copies a region of pixels from one image to another, using a specified blend mode to do the operation. +blend__params__srcImage = p5.Image: source image +blend__params__sx = Integer: X coordinate of the source's upper left corner +blend__params__sy = Integer: Y coordinate of the source's upper left corner +blend__params__sw = Integer: source image width +blend__params__sh = Integer: source image height +blend__params__dx = Integer: X coordinate of the destination's upper left corner +blend__params__dy = Integer: Y coordinate of the destination's upper left corner +blend__params__dw = Integer: destination image width +blend__params__dh = Integer: destination image height +blend__params__blendMode = Constant: the blend mode. either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, SOFT_LIGHT, DODGE, BURN, ADD or NORMAL. Available blend modes are: normal | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation | color | luminosity http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/ +save__description__0 = Saves the image to a file and force the browser to download it. Accepts two strings for filename and file extension Supports png (default), jpg, and gif Note that the file will only be downloaded as an animated GIF if the p5.Image was loaded from a GIF file. +save__params__filename = String: give your file a name +save__params__extension = String: 'png' or 'jpg' +reset__description__0 = Starts an animated GIF over at the beginning state. +getCurrentFrame__description__0 = Gets the index for the frame that is currently visible in an animated GIF. +getCurrentFrame__returns = Number: The index for the currently displaying frame in animated GIF +setFrame__description__0 = Sets the index of the frame that is currently visible in an animated GIF +setFrame__params__index = Number: the index for the frame that should be displayed +numFrames__description__0 = Returns the number of frames in an animated GIF +numFrames__returns = Number: +play__description__0 = Plays an animated GIF that was paused with pause() +pause__description__0 = Pauses an animated GIF. +delay__description__0 = Changes the delay between frames in an animated GIF. There is an optional second parameter that indicates an index for a specific frame that should have its delay modified. If no index is given, all frames will have the new delay. +delay__params__d = Number: the amount in milliseconds to delay between switching frames +delay__params__index = Number: (Optional) the index of the frame that should have the new delay value {"{"}optional{"}"} diff --git a/src/data/localization/en/p5.LowPass.ftl b/src/data/localization/en/p5.LowPass.ftl new file mode 100644 index 0000000000..6d057d506a --- /dev/null +++ b/src/data/localization/en/p5.LowPass.ftl @@ -0,0 +1 @@ +description__0 = Constructor: new p5.LowPass() Filter. This is the same as creating a p5.Filter and then calling its method setType('lowpass'). See p5.Filter for methods. diff --git a/src/data/localization/en/p5.MediaElement.ftl b/src/data/localization/en/p5.MediaElement.ftl new file mode 100644 index 0000000000..a946c36cd8 --- /dev/null +++ b/src/data/localization/en/p5.MediaElement.ftl @@ -0,0 +1,41 @@ +description__0 = Extends p5.Element to handle audio and video. In addition to the methods of p5.Element, it also contains methods for controlling media. It is not called directly, but p5.MediaElements are created by calling createVideo, createAudio, and createCapture. +params__elt = String: DOM node that is wrapped +src__description__0 = Path to the media element source. +src__returns = String: src +play__description__0 = Play an HTML5 media element. +stop__description__0 = Stops an HTML5 media element (sets current time to zero). +pause__description__0 = Pauses an HTML5 media element. +loop__description__0 = Set 'loop' to true for an HTML5 media element, and starts playing. +noLoop__description__0 = Set 'loop' to false for an HTML5 media element. Element will stop when it reaches the end. +autoplay__description__0 = Set HTML5 media element to autoplay or not. If no argument is specified, by default it will autoplay. +autoplay__params__shouldAutoplay = Boolean: whether the element should autoplay +volume__description__0 = Sets volume for this HTML5 media element. If no argument is given, returns the current volume. +volume__returns = Number: current volume +volume__params__val = Number: volume between 0.0 and 1.0 +speed__description__0 = If no arguments are given, returns the current playback speed of the element. The speed parameter sets the speed where 2.0 will play the element twice as fast, 0.5 will play at half the speed, and -1 will play the element in normal speed in reverse.(Note that not all browsers support backward playback and even if they do, playback might not be smooth.) +speed__returns = Number: current playback speed of the element +speed__params__speed = Number: speed multiplier for element playback +time__description__0 = If no arguments are given, returns the current time of the element. If an argument is given the current time of the element is set to it. +time__returns = Number: current time (in seconds) +time__params__time = Number: time to jump to (in seconds) +duration__description__0 = Returns the duration of the HTML5 media element. +duration__returns = Number: duration +onended__description__0 = Schedule an event to be called when the audio or video element reaches the end. If the element is looping, this will not be called. The element is passed in as the argument to the onended callback. +onended__params__callback = Function: function to call when the soundfile has ended. The media element will be passed in as the argument to the callback. +connect__description__0 = Send the audio output of this element to a specified audioNode or p5.sound object. If no element is provided, connects to p5's main output. That connection is established when this method is first called. All connections are removed by the .disconnect() method. +connect__description__1 = This method is meant to be used with the p5.sound.js addon library. +connect__params__audioNode = AudioNode|Object: AudioNode from the Web Audio API, or an object from the p5.sound library +disconnect__description__0 = Disconnect all Web Audio routing, including to main output. This is useful if you want to re-route the output through audio effects, for example. +showControls__description__0 = Show the default MediaElement controls, as determined by the web browser. +hideControls__description__0 = Hide the default mediaElement controls. +addCue__description__0 = Schedule events to trigger every time a MediaElement (audio/video) reaches a playback cue point. +addCue__description__1 = Accepts a callback function, a time (in seconds) at which to trigger the callback, and an optional parameter for the callback. +addCue__description__2 = Time will be passed as the first parameter to the callback function, and param will be the second parameter. +addCue__returns = Number: id ID of this cue, useful for removeCue(id) +addCue__params__time = Number: Time in seconds, relative to this media element's playback. For example, to trigger an event every time playback reaches two seconds, pass in the number 2. This will be passed as the first parameter to the callback function. +addCue__params__callback = Function: Name of a function that will be called at the given time. The callback will receive time and (optionally) param as its two parameters. +addCue__params__value = Object: (Optional) An object to be passed as the second parameter to the callback function. +removeCue__description__0 = Remove a callback based on its ID. The ID is returned by the addCue method. +removeCue__params__id = Number: ID of the cue, as returned by addCue +clearCues__description__0 = Remove all of the callbacks that had originally been scheduled via the addCue method. +clearCues__params__id = Number: ID of the cue, as returned by addCue diff --git a/src/data/localization/en/p5.MonoSynth.ftl b/src/data/localization/en/p5.MonoSynth.ftl new file mode 100644 index 0000000000..02c4d229ea --- /dev/null +++ b/src/data/localization/en/p5.MonoSynth.ftl @@ -0,0 +1,26 @@ +description__0 = A MonoSynth is used as a single voice for sound synthesis. This is a class to be used in conjunction with the PolySynth class. Custom synthetisers should be built inheriting from this class. +attack__description__0 = Getters and Setters +play__description__0 = Play tells the MonoSynth to start playing a note. This method schedules the calling of .triggerAttack and .triggerRelease. +play__params__note = String | Number: the note you want to play, specified as a frequency in Hertz (Number) or as a midi value in Note/Octave format ("C4", "Eb3"...etc") See Tone. Defaults to 440 hz. +play__params__velocity = Number: (Optional) velocity of the note to play (ranging from 0 to 1) +play__params__secondsFromNow = Number: (Optional) time from now (in seconds) at which to play +play__params__sustainTime = Number: (Optional) time to sustain before releasing the envelope. Defaults to 0.15 seconds. +triggerAttack__description__0 = Trigger the Attack, and Decay portion of the Envelope. Similar to holding down a key on a piano, but it will hold the sustain level until you let go. +triggerAttack__params__note = String | Number: the note you want to play, specified as a frequency in Hertz (Number) or as a midi value in Note/Octave format ("C4", "Eb3"...etc") See Tone. Defaults to 440 hz +triggerAttack__params__velocity = Number: (Optional) velocity of the note to play (ranging from 0 to 1) +triggerAttack__params__secondsFromNow = Number: (Optional) time from now (in seconds) at which to play +triggerRelease__description__0 = Trigger the release of the Envelope. This is similar to releasing the key on a piano and letting the sound fade according to the release level and release time. +triggerRelease__params__secondsFromNow = Number: time to trigger the release +setADSR__description__0 = Set values like a traditional ADSR envelope . +setADSR__params__attackTime = Number: Time (in seconds before envelope reaches Attack Level +setADSR__params__decayTime = Number: (Optional) Time (in seconds) before envelope reaches Decay/Sustain Level +setADSR__params__susRatio = Number: (Optional) Ratio between attackLevel and releaseLevel, on a scale from 0 to 1, where 1.0 = attackLevel, 0.0 = releaseLevel. The susRatio determines the decayLevel and the level at which the sustain portion of the envelope will sustain. For example, if attackLevel is 0.4, releaseLevel is 0, and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is increased to 1.0 (using setRange), then decayLevel would increase proportionally, to become 0.5. +setADSR__params__releaseTime = Number: (Optional) Time in seconds from now (defaults to 0) +amp__description__0 = MonoSynth amp +amp__returns = Number: new volume value +amp__params__vol = Number: desired volume +amp__params__rampTime = Number: (Optional) Time to reach new volume +connect__description__0 = Connect to a p5.sound / Web Audio object. +connect__params__unit = Object: A p5.sound or Web Audio object +disconnect__description__0 = Disconnect all outputs +dispose__description__0 = Get rid of the MonoSynth and free up its resources / memory. diff --git a/src/data/localization/en/p5.Noise.ftl b/src/data/localization/en/p5.Noise.ftl new file mode 100644 index 0000000000..4b92afc02c --- /dev/null +++ b/src/data/localization/en/p5.Noise.ftl @@ -0,0 +1,4 @@ +description__0 = Noise is a type of oscillator that generates a buffer with random values. +params__type = String: Type of noise can be 'white' (default), 'brown' or 'pink'. +setType__description__0 = Set type of noise to 'white', 'pink' or 'brown'. White is the default. +setType__params__type = String: (Optional) 'white', 'pink' or 'brown' diff --git a/src/data/localization/en/p5.NumberDict.ftl b/src/data/localization/en/p5.NumberDict.ftl new file mode 100644 index 0000000000..338c059d12 --- /dev/null +++ b/src/data/localization/en/p5.NumberDict.ftl @@ -0,0 +1,21 @@ +description__0 = A simple Dictionary class for Numbers. +add__description__0 = Add the given number to the value currently stored at the given key. The sum then replaces the value previously stored in the Dictionary. +add__params__Key = Number: for the value you wish to add to +add__params__Number = Number: to add to the value +sub__description__0 = Subtract the given number from the value currently stored at the given key. The difference then replaces the value previously stored in the Dictionary. +sub__params__Key = Number: for the value you wish to subtract from +sub__params__Number = Number: to subtract from the value +mult__description__0 = Multiply the given number with the value currently stored at the given key. The product then replaces the value previously stored in the Dictionary. +mult__params__Key = Number: for value you wish to multiply +mult__params__Amount = Number: to multiply the value by +div__description__0 = Divide the given number with the value currently stored at the given key. The quotient then replaces the value previously stored in the Dictionary. +div__params__Key = Number: for value you wish to divide +div__params__Amount = Number: to divide the value by +minValue__description__0 = Return the lowest number currently stored in the Dictionary. +minValue__returns = Number: +maxValue__description__0 = Return the highest number currently stored in the Dictionary. +maxValue__returns = Number: +minKey__description__0 = Return the lowest key currently used in the Dictionary. +minKey__returns = Number: +maxKey__description__0 = Return the highest key currently used in the Dictionary. +maxKey__returns = Number: diff --git a/src/data/localization/en/p5.OnsetDetect.ftl b/src/data/localization/en/p5.OnsetDetect.ftl new file mode 100644 index 0000000000..29fd30bdc3 --- /dev/null +++ b/src/data/localization/en/p5.OnsetDetect.ftl @@ -0,0 +1,5 @@ +description__0 = Listen for onsets (a sharp increase in volume) within a given frequency range. +params__freqLow = Number: Low frequency +params__freqHigh = Number: High frequency +params__threshold = Number: Amplitude threshold between 0 (no energy) and 1 (maximum) +params__callback = Function: Function to call when an onset is detected diff --git a/src/data/localization/en/p5.Oscillator.ftl b/src/data/localization/en/p5.Oscillator.ftl new file mode 100644 index 0000000000..1421f1072a --- /dev/null +++ b/src/data/localization/en/p5.Oscillator.ftl @@ -0,0 +1,50 @@ +description__0 = Creates a signal that oscillates between -1.0 and 1.0. By default, the oscillation takes the form of a sinusoidal shape ('sine'). Additional types include 'triangle', 'sawtooth' and 'square'. The frequency defaults to 440 oscillations per second (440Hz, equal to the pitch of an 'A' note). +description__1 = Set the type of oscillation with setType(), or by instantiating a specific oscillator: p5.SinOsc, p5.TriOsc, p5.SqrOsc, or p5.SawOsc. +params__freq = Number: (Optional) frequency defaults to 440Hz +params__type = String: (Optional) type of oscillator. Options: 'sine' (default), 'triangle', 'sawtooth', 'square' +start__description__0 = Start an oscillator. +start__description__1 = Starting an oscillator on a user gesture will enable audio in browsers that have a strict autoplay policy, including Chrome and most mobile devices. See also: userStartAudio(). +start__params__time = Number: (Optional) startTime in seconds from now. +start__params__frequency = Number: (Optional) frequency in Hz. +stop__description__0 = Stop an oscillator. Accepts an optional parameter to determine how long (in seconds from now) until the oscillator stops. +stop__params__secondsFromNow = Number: Time, in seconds from now. +amp__description__0 = Set the amplitude between 0 and 1.0. Or, pass in an object such as an oscillator to modulate amplitude with an audio signal. +amp__returns = AudioParam: gain If no value is provided, returns the Web Audio API AudioParam that controls this oscillator's gain/amplitude/volume) +amp__params__vol = Number|Object: between 0 and 1.0 or a modulating signal/oscillator +amp__params__rampTime = Number: (Optional) create a fade that lasts rampTime +amp__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +getAmp__description__0 = Returns the value of output gain +getAmp__returns = Number: Amplitude value between 0.0 and 1.0 +freq__description__0 = Set frequency of an oscillator to a value. Or, pass in an object such as an oscillator to modulate the frequency with an audio signal. +freq__returns = AudioParam: Frequency If no value is provided, returns the Web Audio API AudioParam that controls this oscillator's frequency +freq__params__Frequency = Number|Object: Frequency in Hz or modulating signal/oscillator +freq__params__rampTime = Number: (Optional) Ramp time (in seconds) +freq__params__timeFromNow = Number: (Optional) Schedule this event to happen at x seconds from now +getFreq__description__0 = Returns the value of frequency of oscillator +getFreq__returns = Number: Frequency of oscillator in Hertz +setType__description__0 = Set type to 'sine', 'triangle', 'sawtooth' or 'square'. +setType__params__type = String: 'sine', 'triangle', 'sawtooth' or 'square'. +getType__description__0 = Returns current type of oscillator eg. 'sine', 'triangle', 'sawtooth' or 'square'. +getType__returns = String: type of oscillator eg . 'sine', 'triangle', 'sawtooth' or 'square'. +connect__description__0 = Connect to a p5.sound / Web Audio object. +connect__params__unit = Object: A p5.sound or Web Audio object +disconnect__description__0 = Disconnect all outputs +pan__description__0 = Pan between Left (-1) and Right (1) +pan__params__panning = Number: Number between -1 and 1 +pan__params__timeFromNow = Number: schedule this event to happen seconds from now +getPan__description__0 = Returns the current value of panPosition , between Left (-1) and Right (1) +getPan__returns = Number: panPosition of oscillator , between Left (-1) and Right (1) +phase__description__0 = Set the phase of an oscillator between 0.0 and 1.0. In this implementation, phase is a delay time based on the oscillator's current frequency. +phase__params__phase = Number: float between 0.0 and 1.0 +add__description__0 = Add a value to the p5.Oscillator's output amplitude, and return the oscillator. Calling this method again will override the initial add() with a new value. +add__returns = p5.Oscillator: Oscillator Returns this oscillator with scaled output +add__params__number = Number: Constant number to add +mult__description__0 = Multiply the p5.Oscillator's output amplitude by a fixed value (i.e. turn it up!). Calling this method again will override the initial mult() with a new value. +mult__returns = p5.Oscillator: Oscillator Returns this oscillator with multiplied output +mult__params__number = Number: Constant number to multiply +scale__description__0 = Scale this oscillator's amplitude values to a given range, and return the oscillator. Calling this method again will override the initial scale() with new values. +scale__returns = p5.Oscillator: Oscillator Returns this oscillator with scaled output +scale__params__inMin = Number: input range minumum +scale__params__inMax = Number: input range maximum +scale__params__outMin = Number: input range minumum +scale__params__outMax = Number: input range maximum diff --git a/src/data/localization/en/p5.Panner3D.ftl b/src/data/localization/en/p5.Panner3D.ftl new file mode 100644 index 0000000000..92fd144bc0 --- /dev/null +++ b/src/data/localization/en/p5.Panner3D.ftl @@ -0,0 +1,39 @@ +description__0 = Panner3D is based on the Web Audio Spatial Panner Node. This panner is a spatial processing node that allows audio to be positioned and oriented in 3D space. +description__1 = The position is relative to an Audio Context Listener, which can be accessed by p5.soundOut.audiocontext.listener +panner__description__0 = Web Audio Spatial Panner Node +panner__description__1 = Properties include Panning Model : "equal power" or "HRTF" DistanceModel : "linear", "inverse", or "exponential" +process__description__0 = Connect an audio sorce +process__params__src = Object: Input source +set__description__0 = Set the X,Y,Z position of the Panner +set__returns = Array: Updated x, y, z values as an array +set__params__xVal = Number +set__params__yVal = Number +set__params__zVal = Number +set__params__time = Number +positionX__description__0 = Getter and setter methods for position coordinates +positionX__returns = Number: updated coordinate value +positionY__description__0 = Getter and setter methods for position coordinates +positionY__returns = Number: updated coordinate value +positionZ__description__0 = Getter and setter methods for position coordinates +positionZ__returns = Number: updated coordinate value +orient__description__0 = Set the X,Y,Z position of the Panner +orient__returns = Array: Updated x, y, z values as an array +orient__params__xVal = Number +orient__params__yVal = Number +orient__params__zVal = Number +orient__params__time = Number +orientX__description__0 = Getter and setter methods for orient coordinates +orientX__returns = Number: updated coordinate value +orientY__description__0 = Getter and setter methods for orient coordinates +orientY__returns = Number: updated coordinate value +orientZ__description__0 = Getter and setter methods for orient coordinates +orientZ__returns = Number: updated coordinate value +setFalloff__description__0 = Set the rolloff factor and max distance +setFalloff__params__maxDistance = Number (Optional) +setFalloff__params__rolloffFactor = Number (Optional) +maxDist__description__0 = Maxium distance between the source and the listener +maxDist__returns = Number: updated value +maxDist__params__maxDistance = Number +rollof__description__0 = How quickly the volume is reduced as the source moves away from the listener +rollof__returns = Number: updated value +rollof__params__rolloffFactor = Number diff --git a/src/data/localization/en/p5.Part.ftl b/src/data/localization/en/p5.Part.ftl new file mode 100644 index 0000000000..6de2878e9a --- /dev/null +++ b/src/data/localization/en/p5.Part.ftl @@ -0,0 +1,29 @@ +description__0 = A p5.Part plays back one or more p5.Phrases. Instantiate a part with steps and tatums. By default, each step represents a 1/16th note. +description__1 = See p5.Phrase for more about musical timing. +params__steps = Number: (Optional) Steps in the part +params__tatums = Number: (Optional) Divisions of a beat, e.g. use 1/4, or 0.25 for a quater note (default is 1/16, a sixteenth note) +setBPM__description__0 = Set the tempo of this part, in Beats Per Minute. +setBPM__params__BPM = Number: Beats Per Minute +setBPM__params__rampTime = Number: (Optional) Seconds from now +getBPM__description__0 = Returns the tempo, in Beats Per Minute, of this part. +getBPM__returns = Number: +start__description__0 = Start playback of this part. It will play through all of its phrases at a speed determined by setBPM. +start__params__time = Number: (Optional) seconds from now +loop__description__0 = Loop playback of this part. It will begin looping through all of its phrases at a speed determined by setBPM. +loop__params__time = Number: (Optional) seconds from now +noLoop__description__0 = Tell the part to stop looping. +stop__description__0 = Stop the part and cue it to step 0. Playback will resume from the begining of the Part when it is played again. +stop__params__time = Number: (Optional) seconds from now +pause__description__0 = Pause the part. Playback will resume from the current step. +pause__params__time = Number: seconds from now +addPhrase__description__0 = Add a p5.Phrase to this Part. +addPhrase__params__phrase = p5.Phrase: reference to a p5.Phrase +removePhrase__description__0 = Remove a phrase from this part, based on the name it was given when it was created. +removePhrase__params__phraseName = String +getPhrase__description__0 = Get a phrase from this part, based on the name it was given when it was created. Now you can modify its array. +getPhrase__params__phraseName = String +replaceSequence__description__0 = Find all sequences with the specified name, and replace their patterns with the specified array. +replaceSequence__params__phraseName = String +replaceSequence__params__sequence = Array: Array of values to pass into the callback at each step of the phrase. +onStep__description__0 = Set the function that will be called at every step. This will clear the previous function. +onStep__params__callback = Function: The name of the callback you want to fire on every beat/tatum. diff --git a/src/data/localization/en/p5.PeakDetect.ftl b/src/data/localization/en/p5.PeakDetect.ftl new file mode 100644 index 0000000000..225467a07a --- /dev/null +++ b/src/data/localization/en/p5.PeakDetect.ftl @@ -0,0 +1,17 @@ +description__0 = PeakDetect works in conjunction with p5.FFT to look for onsets in some or all of the frequency spectrum. +description__1 = To use p5.PeakDetect, call update in the draw loop and pass in a p5.FFT object. +description__2 = You can listen for a specific part of the frequency spectrum by setting the range between freq1 and freq2. +description__3 = threshold is the threshold for detecting a peak, scaled between 0 and 1. It is logarithmic, so 0.1 is half as loud as 1.0. +description__4 = The update method is meant to be run in the draw loop, and frames determines how many loops must pass before another peak can be detected. For example, if the frameRate() = 60, you could detect the beat of a 120 beat-per-minute song with this equation: framesPerPeak = 60 / (estimatedBPM / 60 ); +description__5 = Based on example contribtued by @b2renger, and a simple beat detection explanation by Felix Turner. +params__freq1 = Number: (Optional) lowFrequency - defaults to 20Hz +params__freq2 = Number: (Optional) highFrequency - defaults to 20000 Hz +params__threshold = Number: (Optional) Threshold for detecting a beat between 0 and 1 scaled logarithmically where 0.1 is 1/2 the loudness of 1.0. Defaults to 0.35. +params__framesPerPeak = Number: (Optional) Defaults to 20. +isDetected__description__0 = isDetected is set to true when a peak is detected. +update__description__0 = The update method is run in the draw loop. +update__description__1 = Accepts an FFT object. You must call .analyze() on the FFT object prior to updating the peakDetect because it relies on a completed FFT analysis. +update__params__fftObject = p5.FFT: A p5.FFT object +onPeak__description__0 = onPeak accepts two arguments: a function to call when a peak is detected. The value of the peak, between 0.0 and 1.0, is passed to the callback. +onPeak__params__callback = Function: Name of a function that will be called when a peak is detected. +onPeak__params__val = Object: (Optional) Optional value to pass into the function when a peak is detected. diff --git a/src/data/localization/en/p5.Phrase.ftl b/src/data/localization/en/p5.Phrase.ftl new file mode 100644 index 0000000000..3713b544f7 --- /dev/null +++ b/src/data/localization/en/p5.Phrase.ftl @@ -0,0 +1,7 @@ +description__0 = A phrase is a pattern of musical events over time, i.e. a series of notes and rests. +description__1 = Phrases must be added to a p5.Part for playback, and each part can play multiple phrases at the same time. For example, one Phrase might be a kick drum, another could be a snare, and another could be the bassline. +description__2 = The first parameter is a name so that the phrase can be modified or deleted later. The callback is a a function that this phrase will call at every step—for example it might be called playNote(value){"{"}{"}"}. The array determines which value is passed into the callback at each step of the phrase. It can be numbers, an object with multiple numbers, or a zero (0) indicates a rest so the callback won't be called). +params__name = String: Name so that you can access the Phrase. +params__callback = Function: The name of a function that this phrase will call. Typically it will play a sound, and accept two parameters: a time at which to play the sound (in seconds from now), and a value from the sequence array. The time should be passed into the play() or start() method to ensure precision. +params__sequence = Array: Array of values to pass into the callback at each step of the phrase. +sequence__description__0 = Array of values to pass into the callback at each step of the phrase. Depending on the callback function's requirements, these values may be numbers, strings, or an object with multiple parameters. Zero (0) indicates a rest. diff --git a/src/data/localization/en/p5.PolySynth.ftl b/src/data/localization/en/p5.PolySynth.ftl new file mode 100644 index 0000000000..477f8567df --- /dev/null +++ b/src/data/localization/en/p5.PolySynth.ftl @@ -0,0 +1,33 @@ +description__0 = An AudioVoice is used as a single voice for sound synthesis. The PolySynth class holds an array of AudioVoice, and deals with voices allocations, with setting notes to be played, and parameters to be set. +params__synthVoice = Number: (Optional) A monophonic synth voice inheriting the AudioVoice class. Defaults to p5.MonoSynth +params__maxVoices = Number: (Optional) Number of voices, defaults to 8; +notes__description__0 = An object that holds information about which notes have been played and which notes are currently being played. New notes are added as keys on the fly. While a note has been attacked, but not released, the value of the key is the audiovoice which is generating that note. When notes are released, the value of the key becomes undefined. +polyvalue__description__0 = A PolySynth must have at least 1 voice, defaults to 8 +AudioVoice__description__0 = Monosynth that generates the sound for each note that is triggered. The p5.PolySynth defaults to using the p5.MonoSynth as its voice. +play__description__0 = Play a note by triggering noteAttack and noteRelease with sustain time +play__params__note = Number: (Optional) midi note to play (ranging from 0 to 127 - 60 being a middle C) +play__params__velocity = Number: (Optional) velocity of the note to play (ranging from 0 to 1) +play__params__secondsFromNow = Number: (Optional) time from now (in seconds) at which to play +play__params__sustainTime = Number: (Optional) time to sustain before releasing the envelope +noteADSR__description__0 = noteADSR sets the envelope for a specific note that has just been triggered. Using this method modifies the envelope of whichever audiovoice is being used to play the desired note. The envelope should be reset before noteRelease is called in order to prevent the modified envelope from being used on other notes. +noteADSR__params__note = Number: (Optional) Midi note on which ADSR should be set. +noteADSR__params__attackTime = Number: (Optional) Time (in seconds before envelope reaches Attack Level +noteADSR__params__decayTime = Number: (Optional) Time (in seconds) before envelope reaches Decay/Sustain Level +noteADSR__params__susRatio = Number: (Optional) Ratio between attackLevel and releaseLevel, on a scale from 0 to 1, where 1.0 = attackLevel, 0.0 = releaseLevel. The susRatio determines the decayLevel and the level at which the sustain portion of the envelope will sustain. For example, if attackLevel is 0.4, releaseLevel is 0, and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is increased to 1.0 (using setRange), then decayLevel would increase proportionally, to become 0.5. +noteADSR__params__releaseTime = Number: (Optional) Time in seconds from now (defaults to 0) +setADSR__description__0 = Set the PolySynths global envelope. This method modifies the envelopes of each monosynth so that all notes are played with this envelope. +setADSR__params__attackTime = Number: (Optional) Time (in seconds before envelope reaches Attack Level +setADSR__params__decayTime = Number: (Optional) Time (in seconds) before envelope reaches Decay/Sustain Level +setADSR__params__susRatio = Number: (Optional) Ratio between attackLevel and releaseLevel, on a scale from 0 to 1, where 1.0 = attackLevel, 0.0 = releaseLevel. The susRatio determines the decayLevel and the level at which the sustain portion of the envelope will sustain. For example, if attackLevel is 0.4, releaseLevel is 0, and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is increased to 1.0 (using setRange), then decayLevel would increase proportionally, to become 0.5. +setADSR__params__releaseTime = Number: (Optional) Time in seconds from now (defaults to 0) +noteAttack__description__0 = Trigger the Attack, and Decay portion of a MonoSynth. Similar to holding down a key on a piano, but it will hold the sustain level until you let go. +noteAttack__params__note = Number: (Optional) midi note on which attack should be triggered. +noteAttack__params__velocity = Number: (Optional) velocity of the note to play (ranging from 0 to 1)/ +noteAttack__params__secondsFromNow = Number: (Optional) time from now (in seconds) +noteRelease__description__0 = Trigger the Release of an AudioVoice note. This is similar to releasing the key on a piano and letting the sound fade according to the release level and release time. +noteRelease__params__note = Number: (Optional) midi note on which attack should be triggered. If no value is provided, all notes will be released. +noteRelease__params__secondsFromNow = Number: (Optional) time to trigger the release +connect__description__0 = Connect to a p5.sound / Web Audio object. +connect__params__unit = Object: A p5.sound or Web Audio object +disconnect__description__0 = Disconnect all outputs +dispose__description__0 = Get rid of the MonoSynth and free up its resources / memory. diff --git a/src/data/localization/en/p5.PrintWriter.ftl b/src/data/localization/en/p5.PrintWriter.ftl new file mode 100644 index 0000000000..b0e9b6a172 --- /dev/null +++ b/src/data/localization/en/p5.PrintWriter.ftl @@ -0,0 +1,8 @@ +params__filename = String +params__extension = String (Optional) +write__description__0 = Writes data to the PrintWriter stream +write__params__data = Array: all data to be written by the PrintWriter +print__description__0 = Writes data to the PrintWriter stream, and adds a new line at the end +print__params__data = Array: all data to be printed by the PrintWriter +clear__description__0 = Clears the data already written to the PrintWriter object +close__description__0 = Closes the PrintWriter diff --git a/src/data/localization/en/p5.Pulse.ftl b/src/data/localization/en/p5.Pulse.ftl new file mode 100644 index 0000000000..52ad1a1668 --- /dev/null +++ b/src/data/localization/en/p5.Pulse.ftl @@ -0,0 +1,5 @@ +description__0 = Creates a Pulse object, an oscillator that implements Pulse Width Modulation. The pulse is created with two oscillators. Accepts a parameter for frequency, and to set the width between the pulses. See p5.Oscillator for a full list of methods. +params__freq = Number: (Optional) Frequency in oscillations per second (Hz) +params__w = Number: (Optional) Width between the pulses (0 to 1.0, defaults to 0) +width__description__0 = Set the width of a Pulse object (an oscillator that implements Pulse Width Modulation). +width__params__width = Number: (Optional) Width between the pulses (0 to 1.0, defaults to 0) diff --git a/src/data/localization/en/p5.Renderer.ftl b/src/data/localization/en/p5.Renderer.ftl new file mode 100644 index 0000000000..f9fbf7272f --- /dev/null +++ b/src/data/localization/en/p5.Renderer.ftl @@ -0,0 +1,4 @@ +description__0 = Main graphics and rendering context, as well as the base API implementation for p5.js "core". To be used as the superclass for Renderer2D and Renderer3D classes, respectively. +params__elt = String: DOM node that is wrapped +params__pInst = P5: (Optional) pointer to p5 instance +params__isMainCanvas = Boolean: (Optional) whether we're using it as main canvas diff --git a/src/data/localization/en/p5.Reverb.ftl b/src/data/localization/en/p5.Reverb.ftl new file mode 100644 index 0000000000..ca566dba77 --- /dev/null +++ b/src/data/localization/en/p5.Reverb.ftl @@ -0,0 +1,18 @@ +description__0 = Reverb adds depth to a sound through a large number of decaying echoes. It creates the perception that sound is occurring in a physical space. The p5.Reverb has paramters for Time (how long does the reverb last) and decayRate (how much the sound decays with each echo) that can be set with the .set() or .process() methods. The p5.Convolver extends p5.Reverb allowing you to recreate the sound of actual physical spaces through convolution. +description__1 = This class extends p5.Effect. Methods amp(), chain(), drywet(), connect(), and disconnect() are available. +process__description__0 = Connect a source to the reverb, and assign reverb parameters. +process__params__src = Object: p5.sound / Web Audio object with a sound output. +process__params__seconds = Number: (Optional) Duration of the reverb, in seconds. Min: 0, Max: 10. Defaults to 3. +process__params__decayRate = Number: (Optional) Percentage of decay with each echo. Min: 0, Max: 100. Defaults to 2. +process__params__reverse = Boolean: (Optional) Play the reverb backwards or forwards. +set__description__0 = Set the reverb settings. Similar to .process(), but without assigning a new input. +set__params__seconds = Number: (Optional) Duration of the reverb, in seconds. Min: 0, Max: 10. Defaults to 3. +set__params__decayRate = Number: (Optional) Percentage of decay with each echo. Min: 0, Max: 100. Defaults to 2. +set__params__reverse = Boolean: (Optional) Play the reverb backwards or forwards. +amp__description__0 = Set the output level of the reverb effect. +amp__params__volume = Number: amplitude between 0 and 1.0 +amp__params__rampTime = Number: (Optional) create a fade that lasts rampTime +amp__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +connect__description__0 = Send output to a p5.sound or web audio object +connect__params__unit = Object +disconnect__description__0 = Disconnect all output. diff --git a/src/data/localization/en/p5.SawOsc.ftl b/src/data/localization/en/p5.SawOsc.ftl new file mode 100644 index 0000000000..e7f6c6ccdb --- /dev/null +++ b/src/data/localization/en/p5.SawOsc.ftl @@ -0,0 +1,2 @@ +description__0 = Constructor: new p5.SawOsc(). This creates a SawTooth Wave Oscillator and is equivalent to new p5.Oscillator('sawtooth') or creating a p5.Oscillator and then calling its method setType('sawtooth'). See p5.Oscillator for methods. +params__freq = Number: (Optional) Set the frequency diff --git a/src/data/localization/en/p5.Score.ftl b/src/data/localization/en/p5.Score.ftl new file mode 100644 index 0000000000..8d57b4ee6e --- /dev/null +++ b/src/data/localization/en/p5.Score.ftl @@ -0,0 +1,10 @@ +description__0 = A Score consists of a series of Parts. The parts will be played back in order. For example, you could have an A part, a B part, and a C part, and play them back in this order new p5.Score(a, a, b, a, c) +params__parts = p5.Part: (Optional) One or multiple parts, to be played in sequence. +start__description__0 = Start playback of the score. +stop__description__0 = Stop playback of the score. +pause__description__0 = Pause playback of the score. +loop__description__0 = Loop playback of the score. +noLoop__description__0 = Stop looping playback of the score. If it is currently playing, this will go into effect after the current round of playback completes. +setBPM__description__0 = Set the tempo for all parts in the score +setBPM__params__BPM = Number: Beats Per Minute +setBPM__params__rampTime = Number: Seconds from now diff --git a/src/data/localization/en/p5.Shader.ftl b/src/data/localization/en/p5.Shader.ftl new file mode 100644 index 0000000000..4f48485c0c --- /dev/null +++ b/src/data/localization/en/p5.Shader.ftl @@ -0,0 +1,8 @@ +description__0 = Shader class for WEBGL Mode +params__renderer = p5.RendererGL: an instance of p5.RendererGL that will provide the GL context for this new p5.Shader +params__vertSrc = String: source code for the vertex shader (as a string) +params__fragSrc = String: source code for the fragment shader (as a string) +setUniform__description__0 = Used to set the uniforms of a p5.Shader object. +setUniform__description__1 = Uniforms are used as a way to provide shader programs (which run on the GPU) with values from a sketch (which runs on the CPU). +setUniform__params__uniformName = String: the name of the uniform. Must correspond to the name used in the vertex and fragment shaders +setUniform__params__data = Boolean|Number|Number[]|p5.Image|p5.Graphics|p5.MediaElement|p5.Texture: the data to associate with the uniform. The type can be a boolean (true/false), a number, an array of numbers, or an image (p5.Image, p5.Graphics, p5.MediaElement, p5.Texture) diff --git a/src/data/localization/en/p5.SinOsc.ftl b/src/data/localization/en/p5.SinOsc.ftl new file mode 100644 index 0000000000..541f002d33 --- /dev/null +++ b/src/data/localization/en/p5.SinOsc.ftl @@ -0,0 +1,2 @@ +description__0 = Constructor: new p5.SinOsc(). This creates a Sine Wave Oscillator and is equivalent to new p5.Oscillator('sine') or creating a p5.Oscillator and then calling its method setType('sine'). See p5.Oscillator for methods. +params__freq = Number: (Optional) Set the frequency diff --git a/src/data/localization/en/p5.SoundFile.ftl b/src/data/localization/en/p5.SoundFile.ftl new file mode 100644 index 0000000000..b564c506ef --- /dev/null +++ b/src/data/localization/en/p5.SoundFile.ftl @@ -0,0 +1,91 @@ +description__0 = SoundFile object with a path to a file. +description__1 = The p5.SoundFile may not be available immediately because it loads the file information asynchronously. +description__2 = To do something with the sound as soon as it loads pass the name of a function as the second parameter. +description__3 = Only one file path is required. However, audio file formats (i.e. mp3, ogg, wav and m4a/aac) are not supported by all web browsers. If you want to ensure compatability, instead of a single file path, you may include an Array of filepaths, and the browser will choose a format that works. +params__path = String|Array: path to a sound file (String). Optionally, you may include multiple file formats in an array. Alternately, accepts an object from the HTML5 File API, or a p5.File. +params__successCallback = Function: (Optional) Name of a function to call once file loads +params__errorCallback = Function: (Optional) Name of a function to call if file fails to load. This function will receive an error or XMLHttpRequest object with information about what went wrong. +params__whileLoadingCallback = Function: (Optional) Name of a function to call while file is loading. That function will receive progress of the request to load the sound file (between 0 and 1) as its first parameter. This progress does not account for the additional time needed to decode the audio data. +isLoaded__description__0 = Returns true if the sound file finished loading successfully. +isLoaded__returns = Boolean: +play__description__0 = Play the p5.SoundFile +play__params__startTime = Number: (Optional) (optional) schedule playback to start (in seconds from now). +play__params__rate = Number: (Optional) (optional) playback rate +play__params__amp = Number: (Optional) (optional) amplitude (volume) of playback +play__params__cueStart = Number: (Optional) (optional) cue start time in seconds +play__params__duration = Number: (Optional) (optional) duration of playback in seconds +playMode__description__0 = p5.SoundFile has two play modes: restart and sustain. Play Mode determines what happens to a p5.SoundFile if it is triggered while in the middle of playback. In sustain mode, playback will continue simultaneous to the new playback. In restart mode, play() will stop playback and start over. With untilDone, a sound will play only if it's not already playing. Sustain is the default mode. +playMode__params__str = String: 'restart' or 'sustain' or 'untilDone' +pause__description__0 = Pauses a file that is currently playing. If the file is not playing, then nothing will happen. +pause__description__1 = After pausing, .play() will resume from the paused position. If p5.SoundFile had been set to loop before it was paused, it will continue to loop after it is unpaused with .play(). +pause__params__startTime = Number: (Optional) (optional) schedule event to occur seconds from now +loop__description__0 = Loop the p5.SoundFile. Accepts optional parameters to set the playback rate, playback volume, loopStart, loopEnd. +loop__params__startTime = Number: (Optional) (optional) schedule event to occur seconds from now +loop__params__rate = Number: (Optional) (optional) playback rate +loop__params__amp = Number: (Optional) (optional) playback volume +loop__params__cueLoopStart = Number: (Optional) (optional) startTime in seconds +loop__params__duration = Number: (Optional) (optional) loop duration in seconds +setLoop__description__0 = Set a p5.SoundFile's looping flag to true or false. If the sound is currently playing, this change will take effect when it reaches the end of the current playback. +setLoop__params__Boolean = Boolean: set looping to true or false +isLooping__description__0 = Returns 'true' if a p5.SoundFile is currently looping and playing, 'false' if not. +isLooping__returns = Boolean: +isPlaying__description__0 = Returns true if a p5.SoundFile is playing, false if not (i.e. paused or stopped). +isPlaying__returns = Boolean: +isPaused__description__0 = Returns true if a p5.SoundFile is paused, false if not (i.e. playing or stopped). +isPaused__returns = Boolean: +stop__description__0 = Stop soundfile playback. +stop__params__startTime = Number: (Optional) (optional) schedule event to occur in seconds from now +pan__description__0 = Set the stereo panning of a p5.sound object to a floating point number between -1.0 (left) and 1.0 (right). Default is 0.0 (center). +pan__params__panValue = Number: (Optional) Set the stereo panner +pan__params__timeFromNow = Number: (Optional) schedule this event to happen seconds from now +getPan__description__0 = Returns the current stereo pan position (-1.0 to 1.0) +getPan__returns = Number: Returns the stereo pan setting of the Oscillator as a number between -1.0 (left) and 1.0 (right). 0.0 is center and default. +rate__description__0 = Set the playback rate of a sound file. Will change the speed and the pitch. Values less than zero will reverse the audio buffer. +rate__params__playbackRate = Number: (Optional) Set the playback rate. 1.0 is normal, .5 is half-speed, 2.0 is twice as fast. Values less than zero play backwards. +setVolume__description__0 = Multiply the output volume (amplitude) of a sound file between 0.0 (silence) and 1.0 (full volume). 1.0 is the maximum amplitude of a digital sound, so multiplying by greater than 1.0 may cause digital distortion. To fade, provide a rampTime parameter. For more complex fades, see the Envelope class. +setVolume__description__1 = Alternately, you can pass in a signal source such as an oscillator to modulate the amplitude with an audio signal. +setVolume__params__volume = Number|Object: Volume (amplitude) between 0.0 and 1.0 or modulating signal/oscillator +setVolume__params__rampTime = Number: (Optional) Fade for t seconds +setVolume__params__timeFromNow = Number: (Optional) Schedule this event to happen at t seconds in the future +duration__description__0 = Returns the duration of a sound file in seconds. +duration__returns = Number: The duration of the soundFile in seconds. +currentTime__description__0 = Return the current position of the p5.SoundFile playhead, in seconds. Time is relative to the normal buffer direction, so if reverseBuffer has been called, currentTime will count backwards. +currentTime__returns = Number: currentTime of the soundFile in seconds. +jump__description__0 = Move the playhead of a soundfile that is currently playing to a new position and a new duration, in seconds. If none are given, will reset the file to play entire duration from start to finish. To set the position of a soundfile that is not currently playing, use the play or loop methods. +jump__params__cueTime = Number: cueTime of the soundFile in seconds. +jump__params__duration = Number: duration in seconds. +channels__description__0 = Return the number of channels in a sound file. For example, Mono = 1, Stereo = 2. +channels__returns = Number: [channels] +sampleRate__description__0 = Return the sample rate of the sound file. +sampleRate__returns = Number: [sampleRate] +frames__description__0 = Return the number of samples in a sound file. Equal to sampleRate * duration. +frames__returns = Number: [sampleCount] +getPeaks__description__0 = Returns an array of amplitude peaks in a p5.SoundFile that can be used to draw a static waveform. Scans through the p5.SoundFile's audio buffer to find the greatest amplitudes. Accepts one parameter, 'length', which determines size of the array. Larger arrays result in more precise waveform visualizations. +getPeaks__description__1 = Inspired by Wavesurfer.js. +getPeaks__returns = Float32Array: Array of peaks. +getPeaks__params__length = Number: (Optional) length is the size of the returned array. Larger length results in more precision. Defaults to 5*width of the browser window. +reverseBuffer__description__0 = Reverses the p5.SoundFile's buffer source. Playback must be handled separately (see example). +onended__description__0 = Schedule an event to be called when the soundfile reaches the end of a buffer. If the soundfile is playing through once, this will be called when it ends. If it is looping, it will be called when stop is called. +onended__params__callback = Function: function to call when the soundfile has ended. +connect__description__0 = Connects the output of a p5sound object to input of another p5.sound object. For example, you may connect a p5.SoundFile to an FFT or an Effect. If no parameter is given, it will connect to the main output. Most p5sound objects connect to the master output when they are created. +connect__params__object = Object: (Optional) Audio object that accepts an input +disconnect__description__0 = Disconnects the output of this p5sound object. +setPath__description__0 = Reset the source for this SoundFile to a new path (URL). +setPath__params__path = String: path to audio file +setPath__params__callback = Function: Callback +setBuffer__description__0 = Replace the current Audio Buffer with a new Buffer. +setBuffer__params__buf = Array: Array of Float32 Array(s). 2 Float32 Arrays will create a stereo source. 1 will create a mono source. +addCue__description__0 = Schedule events to trigger every time a MediaElement (audio/video) reaches a playback cue point. +addCue__description__1 = Accepts a callback function, a time (in seconds) at which to trigger the callback, and an optional parameter for the callback. +addCue__description__2 = Time will be passed as the first parameter to the callback function, and param will be the second parameter. +addCue__returns = Number: id ID of this cue, useful for removeCue(id) +addCue__params__time = Number: Time in seconds, relative to this media element's playback. For example, to trigger an event every time playback reaches two seconds, pass in the number 2. This will be passed as the first parameter to the callback function. +addCue__params__callback = Function: Name of a function that will be called at the given time. The callback will receive time and (optionally) param as its two parameters. +addCue__params__value = Object: (Optional) An object to be passed as the second parameter to the callback function. +removeCue__description__0 = Remove a callback based on its ID. The ID is returned by the addCue method. +removeCue__params__id = Number: ID of the cue, as returned by addCue +clearCues__description__0 = Remove all of the callbacks that had originally been scheduled via the addCue method. +save__description__0 = Save a p5.SoundFile as a .wav file. The browser will prompt the user to download the file to their device. To upload a file to a server, see getBlob +save__params__fileName = String: (Optional) name of the resulting .wav file. +getBlob__description__0 = This method is useful for sending a SoundFile to a server. It returns the .wav-encoded audio data as a "Blob". A Blob is a file-like data object that can be uploaded to a server with an http request. We'll use the httpDo options object to send a POST request with some specific options: we encode the request as multipart/form-data, and attach the blob as one of the form values using FormData. +getBlob__returns = Blob: A file-like data object diff --git a/src/data/localization/en/p5.SoundLoop.ftl b/src/data/localization/en/p5.SoundLoop.ftl new file mode 100644 index 0000000000..cfad2ea3de --- /dev/null +++ b/src/data/localization/en/p5.SoundLoop.ftl @@ -0,0 +1,18 @@ +description__0 = SoundLoop +params__callback = Function: this function will be called on each iteration of theloop +params__interval = Number|String: (Optional) amount of time (if a number) or beats (if a string, following Tone.Time convention) for each iteration of the loop. Defaults to 1 second. +bpm__description__0 = Getters and Setters, setting any paramter will result in a change in the clock's frequency, that will be reflected after the next callback beats per minute (defaults to 60) +timeSignature__description__0 = number of quarter notes in a measure (defaults to 4) +interval__description__0 = length of the loops interval +iterations__description__0 = how many times the callback has been called so far +musicalTimeMode__description__0 = musicalTimeMode uses Tone.Time convention true if string, false if number +maxIterations__description__0 = Set a limit to the number of loops to play. defaults to Infinity +start__description__0 = Start the loop +start__params__timeFromNow = Number: (Optional) schedule a starting time +stop__description__0 = Stop the loop +stop__params__timeFromNow = Number: (Optional) schedule a stopping time +pause__description__0 = Pause the loop +pause__params__timeFromNow = Number: (Optional) schedule a pausing time +syncedStart__description__0 = Synchronize loops. Use this method to start two or more loops in synchronization or to start a loop in synchronization with a loop that is already playing This method will schedule the implicit loop in sync with the explicit master loop i.e. loopToStart.syncedStart(loopToSyncWith) +syncedStart__params__otherLoop = Object: a p5.SoundLoop to sync with +syncedStart__params__timeFromNow = Number: (Optional) Start the loops in sync after timeFromNow seconds diff --git a/src/data/localization/en/p5.SoundRecorder.ftl b/src/data/localization/en/p5.SoundRecorder.ftl new file mode 100644 index 0000000000..8e8f2ca9aa --- /dev/null +++ b/src/data/localization/en/p5.SoundRecorder.ftl @@ -0,0 +1,9 @@ +description__0 = Record sounds for playback and/or to save as a .wav file. The p5.SoundRecorder records all sound output from your sketch, or can be assigned a specific source with setInput(). +description__1 = The record() method accepts a p5.SoundFile as a parameter. When playback is stopped (either after the given amount of time, or with the stop() method), the p5.SoundRecorder will send its recording to that p5.SoundFile for playback. +setInput__description__0 = Connect a specific device to the p5.SoundRecorder. If no parameter is given, p5.SoundRecorer will record all audible p5.sound from your sketch. +setInput__params__unit = Object: (Optional) p5.sound object or a web audio unit that outputs sound +record__description__0 = Start recording. To access the recording, provide a p5.SoundFile as the first parameter. The p5.SoundRecorder will send its recording to that p5.SoundFile for playback once recording is complete. Optional parameters include duration (in seconds) of the recording, and a callback function that will be called once the complete recording has been transfered to the p5.SoundFile. +record__params__soundFile = p5.SoundFile: p5.SoundFile +record__params__duration = Number: (Optional) Time (in seconds) +record__params__callback = Function: (Optional) The name of a function that will be called once the recording completes +stop__description__0 = Stop the recording. Once the recording is stopped, the results will be sent to the p5.SoundFile that was given on .record(), and if a callback function was provided on record, that function will be called. diff --git a/src/data/localization/en/p5.SqrOsc.ftl b/src/data/localization/en/p5.SqrOsc.ftl new file mode 100644 index 0000000000..be2dd3c835 --- /dev/null +++ b/src/data/localization/en/p5.SqrOsc.ftl @@ -0,0 +1,2 @@ +description__0 = Constructor: new p5.SqrOsc(). This creates a Square Wave Oscillator and is equivalent to new p5.Oscillator('square') or creating a p5.Oscillator and then calling its method setType('square'). See p5.Oscillator for methods. +params__freq = Number: (Optional) Set the frequency diff --git a/src/data/localization/en/p5.StringDict.ftl b/src/data/localization/en/p5.StringDict.ftl new file mode 100644 index 0000000000..b76b577e7c --- /dev/null +++ b/src/data/localization/en/p5.StringDict.ftl @@ -0,0 +1 @@ +description__0 = A simple Dictionary class for Strings. diff --git a/src/data/localization/en/p5.Table.ftl b/src/data/localization/en/p5.Table.ftl new file mode 100644 index 0000000000..0768cc0699 --- /dev/null +++ b/src/data/localization/en/p5.Table.ftl @@ -0,0 +1,78 @@ +description__0 = Table objects store data with multiple rows and columns, much like in a traditional spreadsheet. Tables can be generated from scratch, dynamically, or using data from an existing file. +params__rows = p5.TableRow[]: (Optional) An array of p5.TableRow objects +columns__description__0 = An array containing the names of the columns in the table, if the "header" the table is loaded with the "header" parameter. +rows__description__0 = An array containing the p5.TableRow objects that make up the rows of the table. The same result as calling getRows() +addRow__description__0 = Use addRow() to add a new row of data to a p5.Table object. By default, an empty row is created. Typically, you would store a reference to the new row in a TableRow object (see newRow in the example above), and then set individual values using set(). +addRow__description__1 = If a p5.TableRow object is included as a parameter, then that row is duplicated and added to the table. +addRow__returns = p5.TableRow: the row that was added +addRow__params__row = p5.TableRow: (Optional) row to be added to the table +removeRow__description__0 = Removes a row from the table object. +removeRow__params__id = Integer: ID number of the row to remove +getRow__description__0 = Returns a reference to the specified p5.TableRow. The reference can then be used to get and set values of the selected row. +getRow__returns = p5.TableRow: p5.TableRow object +getRow__params__rowID = Integer: ID number of the row to get +getRows__description__0 = Gets all rows from the table. Returns an array of p5.TableRows. +getRows__returns = p5.TableRow[]: Array of p5.TableRows +findRow__description__0 = Finds the first row in the Table that contains the value provided, and returns a reference to that row. Even if multiple rows are possible matches, only the first matching row is returned. The column to search may be specified by either its ID or title. +findRow__returns = p5.TableRow: +findRow__params__value = String: The value to match +findRow__params__column = Integer|String: ID number or title of the column to search +findRows__description__0 = Finds the rows in the Table that contain the value provided, and returns references to those rows. Returns an Array, so for must be used to iterate through all the rows, as shown in the example above. The column to search may be specified by either its ID or title. +findRows__returns = p5.TableRow[]: An Array of TableRow objects +findRows__params__value = String: The value to match +findRows__params__column = Integer|String: ID number or title of the column to search +matchRow__description__0 = Finds the first row in the Table that matches the regular expression provided, and returns a reference to that row. Even if multiple rows are possible matches, only the first matching row is returned. The column to search may be specified by either its ID or title. +matchRow__returns = p5.TableRow: TableRow object +matchRow__params__regexp = String|RegExp: The regular expression to match +matchRow__params__column = String|Integer: The column ID (number) or title (string) +matchRows__description__0 = Finds the rows in the Table that match the regular expression provided, and returns references to those rows. Returns an array, so for must be used to iterate through all the rows, as shown in the example. The column to search may be specified by either its ID or title. +matchRows__returns = p5.TableRow[]: An Array of TableRow objects +matchRows__params__regexp = String: The regular expression to match +matchRows__params__column = String|Integer: (Optional) The column ID (number) or title (string) +getColumn__description__0 = Retrieves all values in the specified column, and returns them as an array. The column may be specified by either its ID or title. +getColumn__returns = Array: Array of column values +getColumn__params__column = String|Number: String or Number of the column to return +clearRows__description__0 = Removes all rows from a Table. While all rows are removed, columns and column titles are maintained. +addColumn__description__0 = Use addColumn() to add a new column to a Table object. Typically, you will want to specify a title, so the column may be easily referenced later by name. (If no title is specified, the new column's title will be null.) +addColumn__params__title = String: (Optional) title of the given column +getColumnCount__description__0 = Returns the total number of columns in a Table. +getColumnCount__returns = Integer: Number of columns in this table +getRowCount__description__0 = Returns the total number of rows in a Table. +getRowCount__returns = Integer: Number of rows in this table +removeTokens__description__0 = Removes any of the specified characters (or "tokens"). +removeTokens__description__1 = If no column is specified, then the values in all columns and rows are processed. A specific column may be referenced by either its ID or title. +removeTokens__params__chars = String: String listing characters to be removed +removeTokens__params__column = String|Integer: (Optional) Column ID (number) or name (string) +trim__description__0 = Trims leading and trailing whitespace, such as spaces and tabs, from String table values. If no column is specified, then the values in all columns and rows are trimmed. A specific column may be referenced by either its ID or title. +trim__params__column = String|Integer: (Optional) Column ID (number) or name (string) +removeColumn__description__0 = Use removeColumn() to remove an existing column from a Table object. The column to be removed may be identified by either its title (a String) or its index value (an int). removeColumn(0) would remove the first column, removeColumn(1) would remove the second column, and so on. +removeColumn__params__column = String|Integer: columnName (string) or ID (number) +set__description__0 = Stores a value in the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +set__params__row = Integer: row ID +set__params__column = String|Integer: column ID (Number) or title (String) +set__params__value = String|Number: value to assign +setNum__description__0 = Stores a Float value in the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +setNum__params__row = Integer: row ID +setNum__params__column = String|Integer: column ID (Number) or title (String) +setNum__params__value = Number: value to assign +setString__description__0 = Stores a String value in the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +setString__params__row = Integer: row ID +setString__params__column = String|Integer: column ID (Number) or title (String) +setString__params__value = String: value to assign +get__description__0 = Retrieves a value from the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +get__returns = String|Number: +get__params__row = Integer: row ID +get__params__column = String|Integer: columnName (string) or ID (number) +getNum__description__0 = Retrieves a Float value from the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +getNum__returns = Number: +getNum__params__row = Integer: row ID +getNum__params__column = String|Integer: columnName (string) or ID (number) +getString__description__0 = Retrieves a String value from the Table's specified row and column. The row is specified by its ID, while the column may be specified by either its ID or title. +getString__returns = String: +getString__params__row = Integer: row ID +getString__params__column = String|Integer: columnName (string) or ID (number) +getObject__description__0 = Retrieves all table data and returns as an object. If a column name is passed in, each row object will be stored with that attribute as its title. +getObject__returns = Object: +getObject__params__headerColumn = String: (Optional) Name of the column which should be used to title each row object (optional) +getArray__description__0 = Retrieves all table data and returns it as a multidimensional array. +getArray__returns = Array: diff --git a/src/data/localization/en/p5.TableRow.ftl b/src/data/localization/en/p5.TableRow.ftl new file mode 100644 index 0000000000..c2490a7af6 --- /dev/null +++ b/src/data/localization/en/p5.TableRow.ftl @@ -0,0 +1,22 @@ +description__0 = A TableRow object represents a single row of data values, stored in columns, from a table. +description__1 = A Table Row contains both an ordered array, and an unordered JSON object. +params__str = String: (Optional) optional: populate the row with a string of values, separated by the separator +params__separator = String: (Optional) comma separated values (csv) by default +set__description__0 = Stores a value in the TableRow's specified column. The column may be specified by either its ID or title. +set__params__column = String|Integer: Column ID (Number) or Title (String) +set__params__value = String|Number: The value to be stored +setNum__description__0 = Stores a Float value in the TableRow's specified column. The column may be specified by either its ID or title. +setNum__params__column = String|Integer: Column ID (Number) or Title (String) +setNum__params__value = Number|String: The value to be stored as a Float +setString__description__0 = Stores a String value in the TableRow's specified column. The column may be specified by either its ID or title. +setString__params__column = String|Integer: Column ID (Number) or Title (String) +setString__params__value = String|Number|Boolean|Object: The value to be stored as a String +get__description__0 = Retrieves a value from the TableRow's specified column. The column may be specified by either its ID or title. +get__returns = String|Number: +get__params__column = String|Integer: columnName (string) or ID (number) +getNum__description__0 = Retrieves a Float value from the TableRow's specified column. The column may be specified by either its ID or title. +getNum__returns = Number: Float Floating point number +getNum__params__column = String|Integer: columnName (string) or ID (number) +getString__description__0 = Retrieves an String value from the TableRow's specified column. The column may be specified by either its ID or title. +getString__returns = String: String +getString__params__column = String|Integer: columnName (string) or ID (number) diff --git a/src/data/localization/en/p5.TriOsc.ftl b/src/data/localization/en/p5.TriOsc.ftl new file mode 100644 index 0000000000..a62708257c --- /dev/null +++ b/src/data/localization/en/p5.TriOsc.ftl @@ -0,0 +1,2 @@ +description__0 = Constructor: new p5.TriOsc(). This creates a Triangle Wave Oscillator and is equivalent to new p5.Oscillator('triangle') or creating a p5.Oscillator and then calling its method setType('triangle'). See p5.Oscillator for methods. +params__freq = Number: (Optional) Set the frequency diff --git a/src/data/localization/en/p5.TypedDict.ftl b/src/data/localization/en/p5.TypedDict.ftl new file mode 100644 index 0000000000..374255da09 --- /dev/null +++ b/src/data/localization/en/p5.TypedDict.ftl @@ -0,0 +1,22 @@ +description__0 = Base class for all p5.Dictionary types. Specifically typed Dictionary classes inherit from this class. +size__description__0 = Returns the number of key-value pairs currently stored in the Dictionary. +size__returns = Integer: the number of key-value pairs in the Dictionary +hasKey__description__0 = Returns true if the given key exists in the Dictionary, otherwise returns false. +hasKey__returns = Boolean: whether that key exists in Dictionary +hasKey__params__key = Number|String: that you want to look up +get__description__0 = Returns the value stored at the given key. +get__returns = Number|String: the value stored at that key +get__params__the = Number|String: key you want to access +set__description__0 = Updates the value associated with the given key in case it already exists in the Dictionary. Otherwise a new key-value pair is added. +set__params__key = Number|String +set__params__value = Number|String +create__description__0 = Creates a new key-value pair in the Dictionary. +create__params__key = Number|String +create__params__value = Number|String +create__params__obj = Object: key/value pair +clear__description__0 = Removes all previously stored key-value pairs from the Dictionary. +remove__description__0 = Removes the key-value pair stored at the given key from the Dictionary. +remove__params__key = Number|String: for the pair to remove +print__description__0 = Logs the set of items currently stored in the Dictionary to the console. +saveTable__description__0 = Converts the Dictionary into a CSV file for local download. +saveJSON__description__0 = Converts the Dictionary into a JSON file for local download. diff --git a/src/data/localization/en/p5.Vector.ftl b/src/data/localization/en/p5.Vector.ftl new file mode 100644 index 0000000000..b6752a3e42 --- /dev/null +++ b/src/data/localization/en/p5.Vector.ftl @@ -0,0 +1,135 @@ +description__0 = A class to describe a two or three dimensional vector, specifically a Euclidean (also known as geometric) vector. A vector is an entity that has both magnitude and direction. The datatype, however, stores the components of the vector (x, y for 2D, and x, y, z for 3D). The magnitude and direction can be accessed via the methods mag() and heading(). +description__1 = In many of the p5.js examples, you will see p5.Vector used to describe a position, velocity, or acceleration. For example, if you consider a rectangle moving across the screen, at any given instant it has a position (a vector that points from the origin to its location), a velocity (the rate at which the object's position changes per time unit, expressed as a vector), and acceleration (the rate at which the object's velocity changes per time unit, expressed as a vector). +description__2 = Since vectors represent groupings of values, we cannot simply use traditional addition/multiplication/etc. Instead, we'll need to do some "vector" math, which is made easy by the methods inside the p5.Vector class. +params__x = Number: (Optional) x component of the vector +params__y = Number: (Optional) y component of the vector +params__z = Number: (Optional) z component of the vector +x__description__0 = The x component of the vector +y__description__0 = The y component of the vector +z__description__0 = The z component of the vector +toString__description__0 = Returns a string representation of a vector v by calling String(v) or v.toString(). This method is useful for logging vectors in the console. +toString__returns = String: +set__description__0 = Sets the x, y, and z component of the vector using two or three separate variables, the data from a p5.Vector, or the values from a float array. +set__params__x = Number: (Optional) the x component of the vector +set__params__y = Number: (Optional) the y component of the vector +set__params__z = Number: (Optional) the z component of the vector +set__params__value = p5.Vector|Number[]: the vector to set +copy__description__0 = Gets a copy of the vector, returns a p5.Vector object. +copy__returns = p5.Vector: the copy of the p5.Vector object +add__description__0 = Adds x, y, and z components to a vector, adds one vector to another, or adds two independent vectors together. The version of the method that adds two vectors together is a static method and returns a p5.Vector, the others acts directly on the vector. Additionally, you may provide arguments to this function as an array. See the examples for more context. +add__params__x = Number: the x component of the vector to be added +add__params__y = Number: (Optional) the y component of the vector to be added +add__params__z = Number: (Optional) the z component of the vector to be added +add__params__value = p5.Vector|Number[]: the vector to add +add__params__v1 = p5.Vector: a p5.Vector to add +add__params__v2 = p5.Vector: a p5.Vector to add +add__params__target = p5.Vector: (Optional) the vector to receive the result +rem__description__0 = Gives remainder of a vector when it is divided by another vector. See examples for more context. +rem__params__x = Number: the x component of divisor vector +rem__params__y = Number: the y component of divisor vector +rem__params__z = Number: the z component of divisor vector +rem__params__value = p5.Vector | Number[]: divisor vector +rem__params__v1 = p5.Vector: dividend p5.Vector +rem__params__v2 = p5.Vector: divisor p5.Vector +sub__description__0 = Subtracts x, y, and z components from a vector, subtracts one vector from another, or subtracts two independent vectors. The version of the method that subtracts two vectors is a static method and returns a p5.Vector, the other acts directly on the vector. Additionally, you may provide arguments to this function as an array. See the examples for more context. +sub__params__x = Number: the x component of the vector to subtract +sub__params__y = Number: (Optional) the y component of the vector to subtract +sub__params__z = Number: (Optional) the z component of the vector to subtract +sub__params__value = p5.Vector|Number[]: the vector to subtract +sub__params__v1 = p5.Vector: a p5.Vector to subtract from +sub__params__v2 = p5.Vector: a p5.Vector to subtract +sub__params__target = p5.Vector: (Optional) the vector to receive the result +mult__description__0 = Multiplies the vector by a scalar, multiplies the x, y, and z components from a vector, or multiplies the x, y, and z components of two independent vectors. When multiplying a vector by a scalar, the x, y, and z components of the vector are all multiplied by the scalar. When multiplying a vector by a vector, the x, y, z components of both vectors are multiplied by each other (for example, with two vectors a and b: a.x * b.x, a.y * b.y, a.z * b.z). The static version of this method creates a new p5.Vector while the non static version acts on the vector directly. Additionally, you may provide arguments to this function as an array. See the examples for more context. +mult__params__n = Number: The number to multiply with the vector +mult__params__x = Number: The number to multiply with the x component of the vector +mult__params__y = Number: The number to multiply with the y component of the vector +mult__params__z = Number: (Optional) The number to multiply with the z component of the vector +mult__params__arr = Number[]: The array to multiply with the components of the vector +mult__params__v = p5.Vector: The vector to multiply with the components of the original vector +mult__params__target = p5.Vector: (Optional) the vector to receive the result +mult__params__v0 = p5.Vector +mult__params__v1 = p5.Vector +div__description__0 = Divides the vector by a scalar, divides a vector by the x, y, and z arguments, or divides the x, y, and z components of two vectors against each other. When dividing a vector by a scalar, the x, y, and z components of the vector are all divided by the scalar. When dividing a vector by a vector, the x, y, z components of the source vector are treated as the dividend, and the x, y, z components of the argument is treated as the divisor (for example with two vectors a and b: a.x / b.x, a.y / b.y, a.z / b.z). The static version of this method creates a new p5.Vector while the non static version acts on the vector directly. Additionally, you may provide arguments to this function as an array. See the examples for more context. +div__params__n = Number: The number to divide the vector by +div__params__x = Number: The number to divide with the x component of the vector +div__params__y = Number: The number to divide with the y component of the vector +div__params__z = Number: (Optional) The number to divide with the z component of the vector +div__params__arr = Number[]: The array to divide the components of the vector by +div__params__v = p5.Vector: The vector to divide the components of the original vector by +div__params__target = p5.Vector: (Optional) the vector to receive the result +div__params__v0 = p5.Vector +div__params__v1 = p5.Vector +mag__description__0 = Calculates the magnitude (length) of the vector and returns the result as a float (this is simply the equation sqrt(x*x + y*y + z*z).) +mag__returns = Number: magnitude of the vector +mag__params__vecT = p5.Vector: the vector to return the magnitude of +magSq__description__0 = Calculates the squared magnitude of the vector and returns the result as a float (this is simply the equation (x*x + y*y + z*z).) Faster if the real length is not required in the case of comparing vectors, etc. +magSq__returns = Number: squared magnitude of the vector +dot__description__0 = Calculates the dot product of two vectors. The version of the method that computes the dot product of two independent vectors is a static method. See the examples for more context. +dot__returns = Number: the dot product +dot__params__x = Number: x component of the vector +dot__params__y = Number: (Optional) y component of the vector +dot__params__z = Number: (Optional) z component of the vector +dot__params__value = p5.Vector: value component of the vector or a p5.Vector +dot__params__v1 = p5.Vector: the first p5.Vector +dot__params__v2 = p5.Vector: the second p5.Vector +cross__description__0 = Calculates and returns a vector composed of the cross product between two vectors. Both the static and non static methods return a new p5.Vector. See the examples for more context. +cross__returns = p5.Vector: p5.Vector composed of cross product +cross__params__v = p5.Vector: p5.Vector to be crossed +cross__params__v1 = p5.Vector: the first p5.Vector +cross__params__v2 = p5.Vector: the second p5.Vector +dist__description__0 = Calculates the Euclidean distance between two points (considering a point as a vector object). If you are looking to calculate distance with 2 points see dist() +dist__returns = Number: the distance +dist__params__v = p5.Vector: the x, y, and z coordinates of a p5.Vector +dist__params__v1 = p5.Vector: the first p5.Vector +dist__params__v2 = p5.Vector: the second p5.Vector +normalize__description__0 = Normalize the vector to length 1 (make it a unit vector). +normalize__returns = p5.Vector: normalized p5.Vector +normalize__params__v = p5.Vector: the vector to normalize +normalize__params__target = p5.Vector: (Optional) the vector to receive the result +limit__description__0 = Limit the magnitude of this vector to the value used for the max parameter. +limit__params__max = Number: the maximum magnitude for the vector +setMag__description__0 = Set the magnitude of this vector to the value used for the len parameter. +setMag__params__len = Number: the new length for this vector +heading__description__0 = Calculate the angle of rotation for this vector(only 2D vectors). p5.Vectors created using createVector() will take the current angleMode into consideration, and give the angle in radians or degree accordingly. +heading__returns = Number: the angle of rotation +setHeading__description__0 = Rotate the vector to a specific angle (only 2D vectors), magnitude remains the same +setHeading__params__angle = Number: the angle of rotation +rotate__description__0 = Rotate the vector by an angle (only 2D vectors), magnitude remains the same +rotate__params__angle = Number: the angle of rotation +rotate__params__v = p5.Vector +rotate__params__target = p5.Vector: (Optional) the vector to receive the result +angleBetween__description__0 = Calculates and returns the angle between two vectors. This function will take the current angleMode into consideration, and give the angle in radians or degree accordingly. +angleBetween__returns = Number: the angle between (in radians) +angleBetween__params__value = p5.Vector: the x, y, and z components of a p5.Vector +lerp__description__0 = Linear interpolate the vector to another vector +lerp__params__x = Number: the x component +lerp__params__y = Number: the y component +lerp__params__z = Number: the z component +lerp__params__amt = Number: the amount of interpolation; some value between 0.0 (old vector) and 1.0 (new vector). 0.9 is very near the new vector. 0.5 is halfway in between. +lerp__params__v = p5.Vector: the p5.Vector to lerp to +lerp__params__v1 = p5.Vector +lerp__params__v2 = p5.Vector +lerp__params__target = p5.Vector: (Optional) the vector to receive the result +reflect__description__0 = Reflect the incoming vector about a normal to a line in 2D, or about a normal to a plane in 3D This method acts on the vector directly +reflect__params__surfaceNormal = p5.Vector: the p5.Vector to reflect about, will be normalized by this method +array__description__0 = Return a representation of this vector as a float array. This is only for temporary use. If used in any other fashion, the contents should be copied by using the p5.Vector.copy() method to copy into your own array. +array__returns = Number[]: an Array with the 3 values +equals__description__0 = Equality check against a p5.Vector +equals__returns = Boolean: whether the vectors are equals +equals__params__x = Number: (Optional) the x component of the vector +equals__params__y = Number: (Optional) the y component of the vector +equals__params__z = Number: (Optional) the z component of the vector +equals__params__value = p5.Vector|Array: the vector to compare +fromAngle__description__0 = Make a new 2D vector from an angle +fromAngle__returns = p5.Vector: the new p5.Vector object +fromAngle__params__angle = Number: the desired angle, in radians (unaffected by angleMode) +fromAngle__params__length = Number: (Optional) the length of the new vector (defaults to 1) +fromAngles__description__0 = Make a new 3D vector from a pair of ISO spherical angles +fromAngles__returns = p5.Vector: the new p5.Vector object +fromAngles__params__theta = Number: the polar angle, in radians (zero is up) +fromAngles__params__phi = Number: the azimuthal angle, in radians (zero is out of the screen) +fromAngles__params__length = Number: (Optional) the length of the new vector (defaults to 1) +random2D__description__0 = Make a new 2D unit vector from a random angle +random2D__returns = p5.Vector: the new p5.Vector object +random3D__description__0 = Make a new random 3D unit vector. +random3D__returns = p5.Vector: the new p5.Vector object diff --git a/src/data/localization/en/p5.XML.ftl b/src/data/localization/en/p5.XML.ftl new file mode 100644 index 0000000000..8fff4e3de9 --- /dev/null +++ b/src/data/localization/en/p5.XML.ftl @@ -0,0 +1,46 @@ +description__0 = XML is a representation of an XML object, able to parse XML code. Use loadXML() to load external XML files and create XML objects. +getParent__description__0 = Gets a copy of the element's parent. Returns the parent as another p5.XML object. +getParent__returns = p5.XML: element parent +getName__description__0 = Gets the element's full name, which is returned as a String. +getName__returns = String: the name of the node +setName__description__0 = Sets the element's name, which is specified as a String. +setName__params__the = String: new name of the node +hasChildren__description__0 = Checks whether or not the element has any children, and returns the result as a boolean. +hasChildren__returns = Boolean: +listChildren__description__0 = Get the names of all of the element's children, and returns the names as an array of Strings. This is the same as looping through and calling getName() on each child element individually. +listChildren__returns = String[]: names of the children of the element +getChildren__description__0 = Returns all of the element's children as an array of p5.XML objects. When the name parameter is specified, then it will return all children that match that name. +getChildren__returns = p5.XML[]: children of the element +getChildren__params__name = String: (Optional) element name +getChild__description__0 = Returns the first of the element's children that matches the name parameter or the child of the given index.It returns undefined if no matching child is found. +getChild__returns = p5.XML: +getChild__params__name = String|Integer: element name or index +addChild__description__0 = Appends a new child to the element. The child can be specified with either a String, which will be used as the new tag's name, or as a reference to an existing p5.XML object. A reference to the newly created child is returned as an p5.XML object. +addChild__params__node = p5.XML: a p5.XML Object which will be the child to be added +removeChild__description__0 = Removes the element specified by name or index. +removeChild__params__name = String|Integer: element name or index +getAttributeCount__description__0 = Counts the specified element's number of attributes, returned as an Number. +getAttributeCount__returns = Integer: +listAttributes__description__0 = Gets all of the specified element's attributes, and returns them as an array of Strings. +listAttributes__returns = String[]: an array of strings containing the names of attributes +hasAttribute__description__0 = Checks whether or not an element has the specified attribute. +hasAttribute__returns = Boolean: true if attribute found else false +hasAttribute__params__the = String: attribute to be checked +getNum__description__0 = Returns an attribute value of the element as an Number. If the defaultValue parameter is specified and the attribute doesn't exist, then defaultValue is returned. If no defaultValue is specified and the attribute doesn't exist, the value 0 is returned. +getNum__returns = Number: +getNum__params__name = String: the non-null full name of the attribute +getNum__params__defaultValue = Number: (Optional) the default value of the attribute +getString__description__0 = Returns an attribute value of the element as an String. If the defaultValue parameter is specified and the attribute doesn't exist, then defaultValue is returned. If no defaultValue is specified and the attribute doesn't exist, null is returned. +getString__returns = String: +getString__params__name = String: the non-null full name of the attribute +getString__params__defaultValue = Number: (Optional) the default value of the attribute +setAttribute__description__0 = Sets the content of an element's attribute. The first parameter specifies the attribute name, while the second specifies the new content. +setAttribute__params__name = String: the full name of the attribute +setAttribute__params__value = Number|String|Boolean: the value of the attribute +getContent__description__0 = Returns the content of an element. If there is no such content, defaultValue is returned if specified, otherwise null is returned. +getContent__returns = String: +getContent__params__defaultValue = String: (Optional) value returned if no content is found +setContent__description__0 = Sets the element's content. +setContent__params__text = String: the new content +serialize__description__0 = Serializes the element into a string. This function is useful for preparing the content to be sent over a http request or saved to file. +serialize__returns = String: Serialized string of the element diff --git a/src/data/localization/en/p5.ftl b/src/data/localization/en/p5.ftl new file mode 100644 index 0000000000..fead75094c --- /dev/null +++ b/src/data/localization/en/p5.ftl @@ -0,0 +1,1556 @@ +description__0 = This is the p5 instance constructor. +description__1 = A p5 instance holds all the properties and methods related to a p5 sketch. It expects an incoming sketch closure and it can also take an optional node parameter for attaching the generated p5 canvas to a node. The sketch closure takes the newly created p5 instance as its sole argument and may optionally set preload(), setup(), and/or draw() properties on it for running a sketch. +description__2 = A p5 sketch can run in "global" or "instance" mode: "global" - all properties and methods are attached to the window "instance" - all properties and methods are bound to this p5 object +returns = P5: a p5 instance +params__sketch = Function: a closure that can set optional preload(), setup(), and/or draw() properties on the given p5 instance +params__node = HTMLElement: (Optional) element to attach canvas to +describe__description__0 = Creates a screen reader accessible description for the canvas. The first parameter should be a string with a description of the canvas. The second parameter is optional. If specified, it determines how the description is displayed. +describe__description__1 = describe(text, LABEL) displays the description to all users as a tombstone or exhibit label/caption in a div adjacent to the canvas. You can style it as you wish in your CSS. +describe__description__2 = describe(text, FALLBACK) makes the description accessible to screen-reader users only, in a sub DOM inside the canvas element. If a second parameter is not specified, by default, the description will only be available to screen-reader users. +describe__params__text = String: description of the canvas +describe__params__display = Constant: (Optional) either LABEL or FALLBACK +describeElement__description__0 = This function creates a screen-reader accessible description for elements —shapes or groups of shapes that create meaning together— in the canvas. The first paramater should be the name of the element. The second parameter should be a string with a description of the element. The third parameter is optional. If specified, it determines how the element description is displayed. +describeElement__description__1 = describeElement(name, text, LABEL) displays the element description to all users as a tombstone or exhibit label/caption in a div adjacent to the canvas. You can style it as you wish in your CSS. +describeElement__description__2 = describeElement(name, text, FALLBACK) makes the element description accessible to screen-reader users only, in a sub DOM inside the canvas element. If a second parameter is not specified, by default, the element description will only be available to screen-reader users. +describeElement__params__name = String: name of the element +describeElement__params__text = String: description of the element +describeElement__params__display = Constant: (Optional) either LABEL or FALLBACK +textOutput__description__0 = textOutput() creates a screenreader accessible output that describes the shapes present on the canvas. The general description of the canvas includes canvas size, canvas color, and number of elements in the canvas (example: 'Your output is a, 400 by 400 pixels, lavender blue canvas containing the following 4 shapes:'). This description is followed by a list of shapes where the color, position, and area of each shape are described (example: "orange ellipse at top left covering 1% of the canvas"). Each element can be selected to get more details. A table of elements is also provided. In this table, shape, color, location, coordinates and area are described (example: "orange ellipse location=top left area=2"). +textOutput__description__1 = textOutput() and textOutput(FALLBACK) make the output available in a sub DOM inside the canvas element which is accessible to screen readers. textOutput(LABEL) creates an additional div with the output adjacent to the canvas, this is useful for non-screen reader users that might want to display the output outside of the canvas' sub DOM as they code. However, using LABEL will create unnecessary redundancy for screen reader users. We recommend using LABEL only as part of the development process of a sketch and removing it before publishing or sharing with screen reader users. +textOutput__params__display = Constant: (Optional) either FALLBACK or LABEL +gridOutput__description__0 = gridOutput() lays out the content of the canvas in the form of a grid (html table) based on the spatial location of each shape. A brief description of the canvas is available before the table output. This description includes: color of the background, size of the canvas, number of objects, and object types (example: "lavender blue canvas is 200 by 200 and contains 4 objects - 3 ellipses 1 rectangle"). The grid describes the content spatially, each element is placed on a cell of the table depending on its position. Within each cell an element the color and type of shape of that element are available (example: "orange ellipse"). These descriptions can be selected individually to get more details. A list of elements where shape, color, location, and area are described (example: "orange ellipse location=top left area=1%") is also available. +gridOutput__description__1 = gridOutput() and gridOutput(FALLBACK) make the output available in a sub DOM inside the canvas element which is accessible to screen readers. gridOutput(LABEL) creates an additional div with the output adjacent to the canvas, this is useful for non-screen reader users that might want to display the output outside of the canvas' sub DOM as they code. However, using LABEL will create unnecessary redundancy for screen reader users. We recommend using LABEL only as part of the development process of a sketch and removing it before publishing or sharing with screen reader users. +gridOutput__params__display = Constant: (Optional) either FALLBACK or LABEL +alpha__description__0 = Extracts the alpha value from a color or pixel array. +alpha__returns = Number: the alpha value +alpha__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +blue__description__0 = Extracts the blue value from a color or pixel array. +blue__returns = Number: the blue value +blue__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +brightness__description__0 = Extracts the HSB brightness value from a color or pixel array. +brightness__returns = Number: the brightness value +brightness__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +color__description__0 = Creates colors for storing in variables of the color datatype. The parameters are interpreted as RGB or HSB values depending on the current colorMode(). The default mode is RGB values from 0 to 255 and, therefore, the function call color(255, 204, 0) will return a bright yellow color. +color__description__1 = Note that if only one value is provided to color(), it will be interpreted as a grayscale value. Add a second value, and it will be used for alpha transparency. When three values are specified, they are interpreted as either RGB or HSB values. Adding a fourth value applies alpha transparency. +color__description__2 = If a single string argument is provided, RGB, RGBA and Hex CSS color strings and all named color strings are supported. In this case, an alpha number value as a second argument is not supported, the RGBA form should be used. +color__returns = p5.Color: resulting color +color__params__gray = Number: number specifying value between white and black. +color__params__alpha = Number: (Optional) alpha value relative to current color range (default is 0-255) +color__params__v1 = Number: red or hue value relative to the current color range +color__params__v2 = Number: green or saturation value relative to the current color range +color__params__v3 = Number: blue or brightness value relative to the current color range +color__params__value = String: a color string +color__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +color__params__color = p5.Color +green__description__0 = Extracts the green value from a color or pixel array. +green__returns = Number: the green value +green__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +hue__description__0 = Extracts the hue value from a color or pixel array. +hue__description__1 = Hue exists in both HSB and HSL. This function will return the HSB-normalized hue when supplied with an HSB color object (or when supplied with a pixel array while the color mode is HSB), but will default to the HSL-normalized hue otherwise. (The values will only be different if the maximum hue setting for each system is different.) +hue__returns = Number: the hue +hue__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +lerpColor__description__0 = Blends two colors to find a third color somewhere between them. The amt parameter is the amount to interpolate between the two values where 0.0 is equal to the first color, 0.1 is very near the first color, 0.5 is halfway in between, etc. An amount below 0 will be treated as 0. Likewise, amounts above 1 will be capped at 1. This is different from the behavior of lerp(), but necessary because otherwise numbers outside the range will produce strange and unexpected colors. +lerpColor__description__1 = The way that colors are interpolated depends on the current color mode. +lerpColor__returns = p5.Color: interpolated color +lerpColor__params__c1 = p5.Color: interpolate from this color +lerpColor__params__c2 = p5.Color: interpolate to this color +lerpColor__params__amt = Number: number between 0 and 1 +lightness__description__0 = Extracts the HSL lightness value from a color or pixel array. +lightness__returns = Number: the lightness +lightness__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +red__description__0 = Extracts the red value from a color or pixel array. +red__returns = Number: the red value +red__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +saturation__description__0 = Extracts the saturation value from a color or pixel array. +saturation__description__1 = Saturation is scaled differently in HSB and HSL. This function will return the HSB saturation when supplied with an HSB color object (or when supplied with a pixel array while the color mode is HSB), but will default to the HSL saturation otherwise. +saturation__returns = Number: the saturation value +saturation__params__color = p5.Color|Number[]|String: p5.Color object, color components, or CSS color +background__description__0 = The background() function sets the color used for the background of the p5.js canvas. The default background is transparent. This function is typically used within draw() to clear the display window at the beginning of each frame, but it can be used inside setup() to set the background on the first frame of animation or if the background need only be set once. +background__description__1 = The color is either specified in terms of the RGB, HSB, or HSL color depending on the current colorMode. (The default color space is RGB, with each value in the range from 0 to 255). The alpha range by default is also 0 to 255. +background__description__2 = If a single string argument is provided, RGB, RGBA and Hex CSS color strings and all named color strings are supported. In this case, an alpha number value as a second argument is not supported, the RGBA form should be used. +background__description__3 = A p5.Color object can also be provided to set the background color. +background__description__4 = A p5.Image can also be provided to set the background image. +background__params__color = p5.Color: any value created by the color() function +background__params__colorstring = String: color string, possible formats include: integer rgb() or rgba(), percentage rgb() or rgba(), 3-digit hex, 6-digit hex +background__params__a = Number: (Optional) opacity of the background relative to current color range (default is 0-255) +background__params__gray = Number: specifies a value between white and black +background__params__v1 = Number: red or hue value (depending on the current color mode) +background__params__v2 = Number: green or saturation value (depending on the current color mode) +background__params__v3 = Number: blue or brightness value (depending on the current color mode) +background__params__values = Number[]: an array containing the red, green, blue and alpha components of the color +background__params__image = p5.Image: image created with loadImage() or createImage(), to set as background (must be same size as the sketch window) +clear__description__0 = Clears the pixels within a buffer. This function only clears the canvas. It will not clear objects created by createX() methods such as createVideo() or createDiv(). Unlike the main graphics context, pixels in additional graphics areas created with createGraphics() can be entirely or partially transparent. This function clears everything to make all of the pixels 100% transparent. +clear__description__1 = Note: In WebGL mode, this function can be passed normalized RGBA color values in order to clear the screen to a specific color. In addition to color, it will also clear the depth buffer. If you are not using the webGL renderer these color values will have no effect. +clear__params__r = Number: normalized red val. +clear__params__g = Number: normalized green val. +clear__params__b = Number: normalized blue val. +clear__params__a = Number: normalized alpha val. +colorMode__description__0 = colorMode() changes the way p5.js interprets color data. By default, the parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to setting colorMode(RGB, 255). Setting colorMode(HSB) lets you use the HSB system instead. By default, this is colorMode(HSB, 360, 100, 100, 1). You can also use HSL. +colorMode__description__1 = Note: existing color objects remember the mode that they were created in, so you can change modes as you like without affecting their appearance. +colorMode__params__mode = Constant: either RGB, HSB or HSL, corresponding to Red/Green/Blue and Hue/Saturation/Brightness (or Lightness) +colorMode__params__max = Number: (Optional) range for all values +colorMode__params__max1 = Number: range for the red or hue depending on the current color mode +colorMode__params__max2 = Number: range for the green or saturation depending on the current color mode +colorMode__params__max3 = Number: range for the blue or brightness/lightness depending on the current color mode +colorMode__params__maxA = Number: (Optional) range for the alpha +fill__description__0 = Sets the color used to fill shapes. For example, if you run fill(204, 102, 0), all shapes drawn after the fill command will be filled with the color orange. This color is either specified in terms of the RGB or HSB color depending on the current colorMode(). (The default color space is RGB, with each value in the range from 0 to 255). The alpha range by default is also 0 to 255. +fill__description__1 = If a single string argument is provided, RGB, RGBA and Hex CSS color strings and all named color strings are supported. In this case, an alpha number value as a second argument is not supported, the RGBA form should be used. +fill__description__2 = A p5 Color object can also be provided to set the fill color. +fill__params__v1 = Number: red or hue value relative to the current color range +fill__params__v2 = Number: green or saturation value relative to the current color range +fill__params__v3 = Number: blue or brightness value relative to the current color range +fill__params__alpha = Number (Optional) +fill__params__value = String: a color string +fill__params__gray = Number: a gray value +fill__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +fill__params__color = p5.Color: the fill color +noFill__description__0 = Disables filling geometry. If both noStroke() and noFill() are called, nothing will be drawn to the screen. +noStroke__description__0 = Disables drawing the stroke (outline). If both noStroke() and noFill() are called, nothing will be drawn to the screen. +stroke__description__0 = Sets the color used to draw lines and borders around shapes. This color is either specified in terms of the RGB or HSB color depending on the current colorMode() (the default color space is RGB, with each value in the range from 0 to 255). The alpha range by default is also 0 to 255. +stroke__description__1 = If a single string argument is provided, RGB, RGBA and Hex CSS color strings and all named color strings are supported. In this case, an alpha number value as a second argument is not supported, the RGBA form should be used. +stroke__description__2 = A p5 Color object can also be provided to set the stroke color. +stroke__params__v1 = Number: red or hue value relative to the current color range +stroke__params__v2 = Number: green or saturation value relative to the current color range +stroke__params__v3 = Number: blue or brightness value relative to the current color range +stroke__params__alpha = Number (Optional) +stroke__params__value = String: a color string +stroke__params__gray = Number: a gray value +stroke__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +stroke__params__color = p5.Color: the stroke color +erase__description__0 = All drawing that follows erase() will subtract from the canvas.Erased areas will reveal the web page underneath the canvas.Erasing can be canceled with noErase(). +erase__description__1 = Drawing done with image() and background() in between erase() and noErase() will not erase the canvas but works as usual. +erase__params__strengthFill = Number: (Optional) A number (0-255) for the strength of erasing for a shape's fill. This will default to 255 when no argument is given, which is full strength. +erase__params__strengthStroke = Number: (Optional) A number (0-255) for the strength of erasing for a shape's stroke. This will default to 255 when no argument is given, which is full strength. +noErase__description__0 = Ends erasing that was started with erase(). The fill(), stroke(), and blendMode() settings will return to what they were prior to calling erase(). +arc__description__0 = Draw an arc to the screen. If called with only x, y, w, h, start and stop, the arc will be drawn and filled as an open pie segment. If a mode parameter is provided, the arc will be filled like an open semi-circle (OPEN), a closed semi-circle (CHORD), or as a closed pie segment (PIE). The origin may be changed with the ellipseMode() function. +arc__description__1 = The arc is always drawn clockwise from wherever start falls to wherever stop falls on the ellipse. Adding or subtracting TWO_PI to either angle does not change where they fall. If both start and stop fall at the same place, a full ellipse will be drawn. Be aware that the y-axis increases in the downward direction, therefore angles are measured clockwise from the positive x-direction ("3 o'clock"). +arc__params__x = Number: x-coordinate of the arc's ellipse +arc__params__y = Number: y-coordinate of the arc's ellipse +arc__params__w = Number: width of the arc's ellipse by default +arc__params__h = Number: height of the arc's ellipse by default +arc__params__start = Number: angle to start the arc, specified in radians +arc__params__stop = Number: angle to stop the arc, specified in radians +arc__params__mode = Constant: (Optional) optional parameter to determine the way of drawing the arc. either CHORD, PIE or OPEN +arc__params__detail = Integer: (Optional) optional parameter for WebGL mode only. This is to specify the number of vertices that makes up the perimeter of the arc. Default value is 25. Won't draw a stroke for a detail of more than 50. +ellipse__description__0 = Draws an ellipse (oval) to the screen. By default, the first two parameters set the location of the center of the ellipse, and the third and fourth parameters set the shape's width and height. If no height is specified, the value of width is used for both the width and height. If a negative height or width is specified, the absolute value is taken. +ellipse__description__1 = An ellipse with equal width and height is a circle. The origin may be changed with the ellipseMode() function. +ellipse__params__x = Number: x-coordinate of the center of ellipse. +ellipse__params__y = Number: y-coordinate of the center of ellipse. +ellipse__params__w = Number: width of the ellipse. +ellipse__params__h = Number: (Optional) height of the ellipse. +ellipse__params__detail = Integer: (Optional) optional parameter for WebGL mode only. This is to specify the number of vertices that makes up the perimeter of the ellipse. Default value is 25. Won't draw a stroke for a detail of more than 50. +circle__description__0 = Draws a circle to the screen. A circle is a simple closed shape. It is the set of all points in a plane that are at a given distance from a given point, the centre. This function is a special case of the ellipse() function, where the width and height of the ellipse are the same. Height and width of the ellipse correspond to the diameter of the circle. By default, the first two parameters set the location of the centre of the circle, the third sets the diameter of the circle. +circle__params__x = Number: x-coordinate of the centre of the circle. +circle__params__y = Number: y-coordinate of the centre of the circle. +circle__params__d = Number: diameter of the circle. +line__description__0 = Draws a line (a direct path between two points) to the screen. If called with only 4 parameters, it will draw a line in 2D with a default width of 1 pixel. This width can be modified by using the strokeWeight() function. A line cannot be filled, therefore the fill() function will not affect the color of a line. So to color a line, use the stroke() function. +line__params__x1 = Number: the x-coordinate of the first point +line__params__y1 = Number: the y-coordinate of the first point +line__params__x2 = Number: the x-coordinate of the second point +line__params__y2 = Number: the y-coordinate of the second point +line__params__z1 = Number: the z-coordinate of the first point +line__params__z2 = Number: the z-coordinate of the second point +point__description__0 = Draws a point, a coordinate in space at the dimension of one pixel. The first parameter is the horizontal value for the point, the second param is the vertical value for the point. The color of the point is changed with the stroke() function. The size of the point can be changed with the strokeWeight() function. +point__params__x = Number: the x-coordinate +point__params__y = Number: the y-coordinate +point__params__z = Number: (Optional) the z-coordinate (for WebGL mode) +point__params__coordinate_vector = p5.Vector: the coordinate vector +quad__description__0 = Draws a quad on the canvas. A quad is a quadrilateral, a four sided polygon. It is similar to a rectangle, but the angles between its edges are not constrained to ninety degrees. The first pair of parameters (x1,y1) sets the first vertex and the subsequent pairs should proceed clockwise or counter-clockwise around the defined shape. z-arguments only work when quad() is used in WEBGL mode. +quad__params__x1 = Number: the x-coordinate of the first point +quad__params__y1 = Number: the y-coordinate of the first point +quad__params__x2 = Number: the x-coordinate of the second point +quad__params__y2 = Number: the y-coordinate of the second point +quad__params__x3 = Number: the x-coordinate of the third point +quad__params__y3 = Number: the y-coordinate of the third point +quad__params__x4 = Number: the x-coordinate of the fourth point +quad__params__y4 = Number: the y-coordinate of the fourth point +quad__params__detailX = Integer: (Optional) number of segments in the x-direction +quad__params__detailY = Integer: (Optional) number of segments in the y-direction +quad__params__z1 = Number: the z-coordinate of the first point +quad__params__z2 = Number: the z-coordinate of the second point +quad__params__z3 = Number: the z-coordinate of the third point +quad__params__z4 = Number: the z-coordinate of the fourth point +rect__description__0 = Draws a rectangle on the canvas. A rectangle is a four-sided closed shape with every angle at ninety degrees. By default, the first two parameters set the location of the upper-left corner, the third sets the width, and the fourth sets the height. The way these parameters are interpreted, may be changed with the rectMode() function. +rect__description__1 = The fifth, sixth, seventh and eighth parameters, if specified, determine corner radius for the top-left, top-right, lower-right and lower-left corners, respectively. An omitted corner radius parameter is set to the value of the previously specified radius value in the parameter list. +rect__params__x = Number: x-coordinate of the rectangle. +rect__params__y = Number: y-coordinate of the rectangle. +rect__params__w = Number: width of the rectangle. +rect__params__h = Number: (Optional) height of the rectangle. +rect__params__tl = Number: (Optional) optional radius of top-left corner. +rect__params__tr = Number: (Optional) optional radius of top-right corner. +rect__params__br = Number: (Optional) optional radius of bottom-right corner. +rect__params__bl = Number: (Optional) optional radius of bottom-left corner. +rect__params__detailX = Integer: (Optional) number of segments in the x-direction (for WebGL mode) +rect__params__detailY = Integer: (Optional) number of segments in the y-direction (for WebGL mode) +square__description__0 = Draws a square to the screen. A square is a four-sided shape with every angle at ninety degrees, and equal side size. This function is a special case of the rect() function, where the width and height are the same, and the parameter is called "s" for side size. By default, the first two parameters set the location of the upper-left corner, the third sets the side size of the square. The way these parameters are interpreted, may be changed with the rectMode() function. +square__description__1 = The fourth, fifth, sixth and seventh parameters, if specified, determine corner radius for the top-left, top-right, lower-right and lower-left corners, respectively. An omitted corner radius parameter is set to the value of the previously specified radius value in the parameter list. +square__params__x = Number: x-coordinate of the square. +square__params__y = Number: y-coordinate of the square. +square__params__s = Number: side size of the square. +square__params__tl = Number: (Optional) optional radius of top-left corner. +square__params__tr = Number: (Optional) optional radius of top-right corner. +square__params__br = Number: (Optional) optional radius of bottom-right corner. +square__params__bl = Number: (Optional) optional radius of bottom-left corner. +triangle__description__0 = Draws a triangle to the canvas. A triangle is a plane created by connecting three points. The first two arguments specify the first point, the middle two arguments specify the second point, and the last two arguments specify the third point. +triangle__params__x1 = Number: x-coordinate of the first point +triangle__params__y1 = Number: y-coordinate of the first point +triangle__params__x2 = Number: x-coordinate of the second point +triangle__params__y2 = Number: y-coordinate of the second point +triangle__params__x3 = Number: x-coordinate of the third point +triangle__params__y3 = Number: y-coordinate of the third point +ellipseMode__description__0 = Modifies the location from which ellipses are drawn by changing the way in which parameters given to ellipse(), circle() and arc() are interpreted. +ellipseMode__description__1 = The default mode is CENTER, in which the first two parameters are interpreted as the shape's center point's x and y coordinates respectively, while the third and fourth parameters are its width and height. +ellipseMode__description__2 = ellipseMode(RADIUS) also uses the first two parameters as the shape's center point's x and y coordinates, but uses the third and fourth parameters to specify half of the shapes's width and height. +ellipseMode__description__3 = ellipseMode(CORNER) interprets the first two parameters as the upper-left corner of the shape, while the third and fourth parameters are its width and height. +ellipseMode__description__4 = ellipseMode(CORNERS) interprets the first two parameters as the location of one corner of the ellipse's bounding box, and the third and fourth parameters as the location of the opposite corner. +ellipseMode__description__5 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +ellipseMode__params__mode = Constant: either CENTER, RADIUS, CORNER, or CORNERS +noSmooth__description__0 = Draws all geometry with jagged (aliased) edges. Note that smooth() is active by default in 2D mode, so it is necessary to call noSmooth() to disable smoothing of geometry, images, and fonts. In 3D mode, noSmooth() is enabled by default, so it is necessary to call smooth() if you would like smooth (antialiased) edges on your geometry. +rectMode__description__0 = Modifies the location from which rectangles are drawn by changing the way in which parameters given to rect() are interpreted. +rectMode__description__1 = The default mode is CORNER, which interprets the first two parameters as the upper-left corner of the shape, while the third and fourth parameters are its width and height. +rectMode__description__2 = rectMode(CORNERS) interprets the first two parameters as the location of one of the corners, and the third and fourth parameters as the location of the diagonally opposite corner. Note, the rectangle is drawn between the coordinates, so it is not neccesary that the first corner be the upper left corner. +rectMode__description__3 = rectMode(CENTER) interprets the first two parameters as the shape's center point, while the third and fourth parameters are its width and height. +rectMode__description__4 = rectMode(RADIUS) also uses the first two parameters as the shape's center point, but uses the third and fourth parameters to specify half of the shape's width and height respectively. +rectMode__description__5 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +rectMode__params__mode = Constant: either CORNER, CORNERS, CENTER, or RADIUS +smooth__description__0 = Draws all geometry with smooth (anti-aliased) edges. smooth() will also improve image quality of resized images. Note that smooth() is active by default in 2D mode; noSmooth() can be used to disable smoothing of geometry, images, and fonts. In 3D mode, noSmooth() is enabled by default, so it is necessary to call smooth() if you would like smooth (antialiased) edges on your geometry. +strokeCap__description__0 = Sets the style for rendering line endings. These ends are either rounded, squared or extended, each of which specified with the corresponding parameters: ROUND, SQUARE and PROJECT. The default cap is ROUND. +strokeCap__description__1 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +strokeCap__params__cap = Constant: either ROUND, SQUARE or PROJECT +strokeJoin__description__0 = Sets the style of the joints which connect line segments. These joints are either mitered, beveled or rounded and specified with the corresponding parameters MITER, BEVEL and ROUND. The default joint is MITER. +strokeJoin__description__1 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +strokeJoin__params__join = Constant: either MITER, BEVEL, ROUND +strokeWeight__description__0 = Sets the width of the stroke used for lines, points and the border around shapes. All widths are set in units of pixels. +strokeWeight__description__1 = Note that it is affected by any transformation or scaling that has been applied previously. +strokeWeight__params__weight = Number: the weight of the stroke (in pixels) +bezier__description__0 = Draws a cubic Bezier curve on the screen. These curves are defined by a series of anchor and control points. The first two parameters specify the first anchor point and the last two parameters specify the other anchor point, which become the first and last points on the curve. The middle parameters specify the two control points which define the shape of the curve. Approximately speaking, control points "pull" the curve towards them. +bezier__description__1 = Bezier curves were developed by French automotive engineer Pierre Bezier, and are commonly used in computer graphics to define gently sloping curves. See also curve(). +bezier__params__x1 = Number: x-coordinate for the first anchor point +bezier__params__y1 = Number: y-coordinate for the first anchor point +bezier__params__x2 = Number: x-coordinate for the first control point +bezier__params__y2 = Number: y-coordinate for the first control point +bezier__params__x3 = Number: x-coordinate for the second control point +bezier__params__y3 = Number: y-coordinate for the second control point +bezier__params__x4 = Number: x-coordinate for the second anchor point +bezier__params__y4 = Number: y-coordinate for the second anchor point +bezier__params__z1 = Number: z-coordinate for the first anchor point +bezier__params__z2 = Number: z-coordinate for the first control point +bezier__params__z3 = Number: z-coordinate for the second control point +bezier__params__z4 = Number: z-coordinate for the second anchor point +bezierDetail__description__0 = Sets the resolution at which Bezier's curve is displayed. The default value is 20. +bezierDetail__description__1 = Note, This function is only useful when using the WEBGL renderer as the default canvas renderer does not use this information. +bezierDetail__params__detail = Number: resolution of the curves +bezierPoint__description__0 = Given the x or y co-ordinate values of control and anchor points of a bezier curve, it evaluates the x or y coordinate of the bezier at position t. The parameters a and d are the x or y coordinates of first and last points on the curve while b and c are of the control points.The final parameter t is the position of the resultant point which is given between 0 and 1. This can be done once with the x coordinates and a second time with the y coordinates to get the location of a bezier curve at t. +bezierPoint__returns = Number: the value of the Bezier at position t +bezierPoint__params__a = Number: coordinate of first point on the curve +bezierPoint__params__b = Number: coordinate of first control point +bezierPoint__params__c = Number: coordinate of second control point +bezierPoint__params__d = Number: coordinate of second point on the curve +bezierPoint__params__t = Number: value between 0 and 1 +bezierTangent__description__0 = Evaluates the tangent to the Bezier at position t for points a, b, c, d. The parameters a and d are the first and last points on the curve, and b and c are the control points. The final parameter t varies between 0 and 1. +bezierTangent__returns = Number: the tangent at position t +bezierTangent__params__a = Number: coordinate of first point on the curve +bezierTangent__params__b = Number: coordinate of first control point +bezierTangent__params__c = Number: coordinate of second control point +bezierTangent__params__d = Number: coordinate of second point on the curve +bezierTangent__params__t = Number: value between 0 and 1 +curve__description__0 = Draws a curved line on the screen between two points, given as the middle four parameters. The first two parameters are a control point, as if the curve came from this point even though it's not drawn. The last two parameters similarly describe the other control point.

        Longer curves can be created by putting a series of curve() functions together or using curveVertex(). An additional function called curveTightness() provides control for the visual quality of the curve. The curve() function is an implementation of Catmull-Rom splines. +curve__params__x1 = Number: x-coordinate for the beginning control point +curve__params__y1 = Number: y-coordinate for the beginning control point +curve__params__x2 = Number: x-coordinate for the first point +curve__params__y2 = Number: y-coordinate for the first point +curve__params__x3 = Number: x-coordinate for the second point +curve__params__y3 = Number: y-coordinate for the second point +curve__params__x4 = Number: x-coordinate for the ending control point +curve__params__y4 = Number: y-coordinate for the ending control point +curve__params__z1 = Number: z-coordinate for the beginning control point +curve__params__z2 = Number: z-coordinate for the first point +curve__params__z3 = Number: z-coordinate for the second point +curve__params__z4 = Number: z-coordinate for the ending control point +curveDetail__description__0 = Sets the resolution at which curves display. The default value is 20 while the minimum value is 3. +curveDetail__description__1 = This function is only useful when using the WEBGL renderer as the default canvas renderer does not use this information. +curveDetail__params__resolution = Number: resolution of the curves +curveTightness__description__0 = Modifies the quality of forms created with curve() and curveVertex().The parameter tightness determines how the curve fits to the vertex points. The value 0.0 is the default value for tightness (this value defines the curves to be Catmull-Rom splines) and the value 1.0 connects all the points with straight lines. Values within the range -5.0 and 5.0 will deform the curves but will leave them recognizable and as values increase in magnitude, they will continue to deform. +curveTightness__params__amount = Number: amount of deformation from the original vertices +curvePoint__description__0 = Evaluates the curve at position t for points a, b, c, d. The parameter t varies between 0 and 1, a and d are control points of the curve, and b and c are the start and end points of the curve. This can be done once with the x coordinates and a second time with the y coordinates to get the location of a curve at t. +curvePoint__returns = Number: bezier value at position t +curvePoint__params__a = Number: coordinate of first control point of the curve +curvePoint__params__b = Number: coordinate of first point +curvePoint__params__c = Number: coordinate of second point +curvePoint__params__d = Number: coordinate of second control point +curvePoint__params__t = Number: value between 0 and 1 +curveTangent__description__0 = Evaluates the tangent to the curve at position t for points a, b, c, d. The parameter t varies between 0 and 1, a and d are points on the curve, and b and c are the control points. +curveTangent__returns = Number: the tangent at position t +curveTangent__params__a = Number: coordinate of first control point +curveTangent__params__b = Number: coordinate of first point on the curve +curveTangent__params__c = Number: coordinate of second point on the curve +curveTangent__params__d = Number: coordinate of second conrol point +curveTangent__params__t = Number: value between 0 and 1 +beginContour__description__0 = Use the beginContour() and endContour() functions to create negative shapes within shapes such as the center of the letter 'O'. beginContour() begins recording vertices for the shape and endContour() stops recording. The vertices that define a negative shape must "wind" in the opposite direction from the exterior shape. First draw vertices for the exterior clockwise order, then for internal shapes, draw vertices shape in counter-clockwise. +beginContour__description__1 = These functions can only be used within a beginShape()/endShape() pair and transformations such as translate(), rotate(), and scale() do not work within a beginContour()/endContour() pair. It is also not possible to use other shapes, such as ellipse() or rect() within. +beginShape__description__0 = Using the beginShape() and endShape() functions allow creating more complex forms. beginShape() begins recording vertices for a shape and endShape() stops recording. The value of the kind parameter tells it which types of shapes to create from the provided vertices. With no mode specified, the shape can be any irregular polygon. +beginShape__description__1 = The parameters available for beginShape() are: +beginShape__description__2 = POINTS Draw a series of points +beginShape__description__3 = LINES Draw a series of unconnected line segments (individual lines) +beginShape__description__4 = TRIANGLES Draw a series of separate triangles +beginShape__description__5 = TRIANGLE_FAN Draw a series of connected triangles sharing the first vertex in a fan-like fashion +beginShape__description__6 = TRIANGLE_STRIP Draw a series of connected triangles in strip fashion +beginShape__description__7 = QUADS Draw a series of separate quad +beginShape__description__8 = QUAD_STRIP Draw quad strip using adjacent edges to form the next quad +beginShape__description__9 = TESS (WebGl only) Handle irregular polygon for filling curve by explicit tessellation +beginShape__description__10 = After calling the beginShape() function, a series of vertex() commands must follow. To stop drawing the shape, call endShape(). Each shape will be outlined with the current stroke color and filled with the fill color. +beginShape__description__11 = Transformations such as translate(), rotate(), and scale() do not work within beginShape(). It is also not possible to use other shapes, such as ellipse() or rect() within beginShape(). +beginShape__params__kind = Constant: (Optional) either POINTS, LINES, TRIANGLES, TRIANGLE_FAN TRIANGLE_STRIP, QUADS, QUAD_STRIP or TESS +bezierVertex__description__0 = Specifies vertex coordinates for Bezier curves. Each call to bezierVertex() defines the position of two control points and one anchor point of a Bezier curve, adding a new segment to a line or shape. For WebGL mode bezierVertex() can be used in 2D as well as 3D mode. 2D mode expects 6 parameters, while 3D mode expects 9 parameters (including z coordinates). +bezierVertex__description__1 = The first time bezierVertex() is used within a beginShape() call, it must be prefaced with a call to vertex() to set the first anchor point. This function must be used between beginShape() and endShape() and only when there is no MODE or POINTS parameter specified to beginShape(). +bezierVertex__params__x2 = Number: x-coordinate for the first control point +bezierVertex__params__y2 = Number: y-coordinate for the first control point +bezierVertex__params__x3 = Number: x-coordinate for the second control point +bezierVertex__params__y3 = Number: y-coordinate for the second control point +bezierVertex__params__x4 = Number: x-coordinate for the anchor point +bezierVertex__params__y4 = Number: y-coordinate for the anchor point +bezierVertex__params__z2 = Number: z-coordinate for the first control point (for WebGL mode) +bezierVertex__params__z3 = Number: z-coordinate for the second control point (for WebGL mode) +bezierVertex__params__z4 = Number: z-coordinate for the anchor point (for WebGL mode) +curveVertex__description__0 = Specifies vertex coordinates for curves. This function may only be used between beginShape() and endShape() and only when there is no MODE parameter specified to beginShape(). For WebGL mode curveVertex() can be used in 2D as well as 3D mode. 2D mode expects 2 parameters, while 3D mode expects 3 parameters. +curveVertex__description__1 = The first and last points in a series of curveVertex() lines will be used to guide the beginning and end of the curve. A minimum of four points is required to draw a tiny curve between the second and third points. Adding a fifth point with curveVertex() will draw the curve between the second, third, and fourth points. The curveVertex() function is an implementation of Catmull-Rom splines. +curveVertex__params__x = Number: x-coordinate of the vertex +curveVertex__params__y = Number: y-coordinate of the vertex +curveVertex__params__z = Number: (Optional) z-coordinate of the vertex (for WebGL mode) +endContour__description__0 = Use the beginContour() and endContour() functions to create negative shapes within shapes such as the center of the letter 'O'. beginContour() begins recording vertices for the shape and endContour() stops recording. The vertices that define a negative shape must "wind" in the opposite direction from the exterior shape. First draw vertices for the exterior clockwise order, then for internal shapes, draw vertices shape in counter-clockwise. +endContour__description__1 = These functions can only be used within a beginShape()/endShape() pair and transformations such as translate(), rotate(), and scale() do not work within a beginContour()/endContour() pair. It is also not possible to use other shapes, such as ellipse() or rect() within. +endShape__description__0 = The endShape() function is the companion to beginShape() and may only be called after beginShape(). When endShape() is called, all of image data defined since the previous call to beginShape() is written into the image buffer. The constant CLOSE as the value for the MODE parameter to close the shape (to connect the beginning and the end). +endShape__params__mode = Constant: (Optional) use CLOSE to close the shape +quadraticVertex__description__0 = Specifies vertex coordinates for quadratic Bezier curves. Each call to quadraticVertex() defines the position of one control points and one anchor point of a Bezier curve, adding a new segment to a line or shape. The first time quadraticVertex() is used within a beginShape() call, it must be prefaced with a call to vertex() to set the first anchor point. For WebGL mode quadraticVertex() can be used in 2D as well as 3D mode. 2D mode expects 4 parameters, while 3D mode expects 6 parameters (including z coordinates). +quadraticVertex__description__1 = This function must be used between beginShape() and endShape() and only when there is no MODE or POINTS parameter specified to beginShape(). +quadraticVertex__params__cx = Number: x-coordinate for the control point +quadraticVertex__params__cy = Number: y-coordinate for the control point +quadraticVertex__params__x3 = Number: x-coordinate for the anchor point +quadraticVertex__params__y3 = Number: y-coordinate for the anchor point +quadraticVertex__params__cz = Number: z-coordinate for the control point (for WebGL mode) +quadraticVertex__params__z3 = Number: z-coordinate for the anchor point (for WebGL mode) +vertex__description__0 = All shapes are constructed by connecting a series of vertices. vertex() is used to specify the vertex coordinates for points, lines, triangles, quads, and polygons. It is used exclusively within the beginShape() and endShape() functions. +vertex__params__x = Number: x-coordinate of the vertex +vertex__params__y = Number: y-coordinate of the vertex +vertex__params__z = Number: z-coordinate of the vertex. Defaults to 0 if not specified. +vertex__params__u = Number: the vertex's texture u-coordinate +vertex__params__v = Number: the vertex's texture v-coordinate +normal__description__0 = Sets the 3d vertex normal to use for subsequent vertices drawn with vertex(). A normal is a vector that is generally nearly perpendicular to a shape's surface which controls how much light will be reflected from that part of the surface. +normal__params__vector = Vector: A p5.Vector representing the vertex normal. +normal__params__x = Number: The x component of the vertex normal. +normal__params__y = Number: The y component of the vertex normal. +normal__params__z = Number: The z component of the vertex normal. +VERSION__description__0 = Version of this p5.js. +P2D__description__0 = The default, two-dimensional renderer. +WEBGL__description__0 = One of the two render modes in p5.js: P2D (default renderer) and WEBGL Enables 3D render by introducing the third dimension: Z +HALF_PI__description__0 = HALF_PI is a mathematical constant with the value 1.57079632679489661923. It is half the ratio of the circumference of a circle to its diameter. It is useful in combination with the trigonometric functions sin() and cos(). +PI__description__0 = PI is a mathematical constant with the value 3.14159265358979323846. It is the ratio of the circumference of a circle to its diameter. It is useful in combination with the trigonometric functions sin() and cos(). +QUARTER_PI__description__0 = QUARTER_PI is a mathematical constant with the value 0.7853982. It is one quarter the ratio of the circumference of a circle to its diameter. It is useful in combination with the trigonometric functions sin() and cos(). +TAU__description__0 = TAU is an alias for TWO_PI, a mathematical constant with the value 6.28318530717958647693. It is twice the ratio of the circumference of a circle to its diameter. It is useful in combination with the trigonometric functions sin() and cos(). +TWO_PI__description__0 = TWO_PI is a mathematical constant with the value 6.28318530717958647693. It is twice the ratio of the circumference of a circle to its diameter. It is useful in combination with the trigonometric functions sin() and cos(). +DEGREES__description__0 = Constant to be used with angleMode() function, to set the mode which p5.js interprets and calculates angles (either DEGREES or RADIANS). +RADIANS__description__0 = Constant to be used with angleMode() function, to set the mode which p5.js interprets and calculates angles (either RADIANS or DEGREES). +HSB__description__0 = HSB (hue, saturation, brightness) is a type of color model. You can learn more about it at HSB. +AUTO__description__0 = AUTO allows us to automatically set the width or height of an element (but not both), based on the current height and width of the element. Only one parameter can be passed to the size function as AUTO, at a time. +print__description__0 = The print() function writes to the console area of your browser. This function is often helpful for looking at the data a program is producing. This function creates a new line of text for each call to the function. Individual elements can be separated with quotes ("") and joined with the addition operator (+). +print__description__1 = Note that calling print() without any arguments invokes the window.print() function which opens the browser's print dialog. To print a blank line to console you can write print('\n'). +print__params__contents = Any: any combination of Number, String, Object, Boolean, Array to print +frameCount__description__0 = The system variable frameCount contains the number of frames that have been displayed since the program started. Inside setup() the value is 0, after the first iteration of draw it is 1, etc. +deltaTime__description__0 = The system variable deltaTime contains the time difference between the beginning of the previous frame and the beginning of the current frame in milliseconds. +deltaTime__description__1 = This variable is useful for creating time sensitive animation or physics calculation that should stay constant regardless of frame rate. +focused__description__0 = Confirms if the window a p5.js program is in is "focused," meaning that the sketch will accept mouse or keyboard input. This variable is "true" if the window is focused and "false" if not. +cursor__description__0 = Sets the cursor to a predefined symbol or an image, or makes it visible if already hidden. If you are trying to set an image as the cursor, the recommended size is 16×16 or 32×32 pixels. The values for parameters x and y must be less than the dimensions of the image. +cursor__params__type = String|Constant: Built-In: either ARROW, CROSS, HAND, MOVE, TEXT and WAIT Native CSS properties: 'grab', 'progress', 'cell' etc. External: path for cursor's images (Allowed File extensions: .cur, .gif, .jpg, .jpeg, .png) For more information on Native CSS cursors and url visit: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor +cursor__params__x = Number: (Optional) the horizontal active spot of the cursor (must be less than 32) +cursor__params__y = Number: (Optional) the vertical active spot of the cursor (must be less than 32) +frameRate__description__0 = Specifies the number of frames to be displayed every second. For example, the function call frameRate(30) will attempt to refresh 30 times a second. If the processor is not fast enough to maintain the specified rate, the frame rate will not be achieved. Setting the frame rate within setup() is recommended. The default frame rate is based on the frame rate of the display (here also called "refresh rate"), which is set to 60 frames per second on most computers. A frame rate of 24 frames per second (usual for movies) or above will be enough for smooth animations. This is the same as setFrameRate(val). +frameRate__description__1 = Calling frameRate() with no arguments returns the current framerate. The draw function must run at least once before it will return a value. This is the same as getFrameRate(). +frameRate__description__2 = Calling frameRate() with arguments that are not of the type numbers or are non positive also returns current framerate. +frameRate__params__fps = Number: number of frames to be displayed every second +noCursor__description__0 = Hides the cursor from view. +displayWidth__description__0 = System variable that stores the width of the screen display according to The default pixelDensity. This is used to run a full-screen program on any display size. To return actual screen size, multiply this by pixelDensity. +displayHeight__description__0 = System variable that stores the height of the screen display according to The default pixelDensity. This is used to run a full-screen program on any display size. To return actual screen size, multiply this by pixelDensity. +windowWidth__description__0 = System variable that stores the width of the inner window, it maps to window.innerWidth. +windowHeight__description__0 = System variable that stores the height of the inner window, it maps to window.innerHeight. +windowResized__description__0 = The windowResized() function is called once every time the browser window is resized. This is a good place to resize the canvas or do any other adjustments to accommodate the new window size. +windowResized__params__event = Object: (Optional) optional Event callback argument. +width__description__0 = System variable that stores the width of the drawing canvas. This value is set by the first parameter of the createCanvas() function. For example, the function call createCanvas(320, 240) sets the width variable to the value 320. The value of width defaults to 100 if createCanvas() is not used in a program. +height__description__0 = System variable that stores the height of the drawing canvas. This value is set by the second parameter of the createCanvas() function. For example, the function call createCanvas(320, 240) sets the height variable to the value 240. The value of height defaults to 100 if createCanvas() is not used in a program. +fullscreen__description__0 = If argument is given, sets the sketch to fullscreen or not based on the value of the argument. If no argument is given, returns the current fullscreen state. Note that due to browser restrictions this can only be called on user input, for example, on mouse press like the example below. +fullscreen__returns = Boolean: current fullscreen state +fullscreen__params__val = Boolean: (Optional) whether the sketch should be in fullscreen mode or not +pixelDensity__description__0 = Sets the pixel scaling for high pixel density displays. By default pixel density is set to match display density, call pixelDensity(1) to turn this off. Calling pixelDensity() with no arguments returns the current pixel density of the sketch. +pixelDensity__params__val = Number: whether or how much the sketch should scale +displayDensity__description__0 = Returns the pixel density of the current display the sketch is running on. +displayDensity__returns = Number: current pixel density of the display +getURL__description__0 = Gets the current URL. Note: when using the p5 Editor, this will return an empty object because the sketch is embedded in an iframe. It will work correctly if you view the sketch using the editor's present or share URLs. +getURL__returns = String: url +getURLPath__description__0 = Gets the current URL path as an array. Note: when using the p5 Editor, this will return an empty object because the sketch is embedded in an iframe. It will work correctly if you view the sketch using the editor's present or share URLs. +getURLPath__returns = String[]: path components +getURLParams__description__0 = Gets the current URL params as an Object. Note: when using the p5 Editor, this will return an empty object because the sketch is embedded in an iframe. It will work correctly if you view the sketch using the editor's present or share URLs. +getURLParams__returns = Object: URL params +preload__description__0 = Called directly before setup(), the preload() function is used to handle asynchronous loading of external files in a blocking way. If a preload function is defined, setup() will wait until any load calls within have finished. Nothing besides load calls (loadImage, loadJSON, loadFont, loadStrings, etc.) should be inside the preload function. If asynchronous loading is preferred, the load methods can instead be called in setup() or anywhere else with the use of a callback parameter. +preload__description__1 = By default the text "loading..." will be displayed. To make your own loading page, include an HTML element with id "p5_loading" in your page. More information here. +setup__description__0 = The setup() function is called once when the program starts. It's used to define initial environment properties such as screen size and background color and to load media such as images and fonts as the program starts. There can only be one setup() function for each program and it shouldn't be called again after its initial execution. +setup__description__1 = Note: Variables declared within setup() are not accessible within other functions, including draw(). +draw__description__0 = Called directly after setup(), the draw() function continuously executes the lines of code contained inside its block until the program is stopped or noLoop() is called. Note if noLoop() is called in setup(), draw() will still be executed once before stopping. draw() is called automatically and should never be called explicitly. +draw__description__1 = It should always be controlled with noLoop(), redraw() and loop(). After noLoop() stops the code in draw() from executing, redraw() causes the code inside draw() to execute once, and loop() will cause the code inside draw() to resume executing continuously. +draw__description__2 = The number of times draw() executes in each second may be controlled with the frameRate() function. +draw__description__3 = There can only be one draw() function for each sketch, and draw() must exist if you want the code to run continuously, or to process events such as mousePressed(). Sometimes, you might have an empty call to draw() in your program, as shown in the above example. +draw__description__4 = It is important to note that the drawing coordinate system will be reset at the beginning of each draw() call. If any transformations are performed within draw() (ex: scale, rotate, translate), their effects will be undone at the beginning of draw(), so transformations will not accumulate over time. On the other hand, styling applied (ex: fill, stroke, etc) will remain in effect. +remove__description__0 = Removes the entire p5 sketch. This will remove the canvas and any elements created by p5.js. It will also stop the draw loop and unbind any properties or methods from the window global scope. It will leave a variable p5 in case you wanted to create a new p5 sketch. If you like, you can set p5 = null to erase it. While all functions and variables and objects created by the p5 library will be removed, any other global variables created by your code will remain. +disableFriendlyErrors__description__0 = Turn off some features of the friendly error system (FES), which can give a significant boost to performance when needed. +disableFriendlyErrors__description__1 = Note that this will disable the parts of the FES that cause performance slowdown (like argument checking). Friendly errors that have no performance cost (like giving an descriptive error if a file load fails, or warning you if you try to override p5.js functions in the global space), will remain in place. +disableFriendlyErrors__description__2 = See disabling the friendly error system. +let__description__0 = Creates and names a new variable. A variable is a container for a value. +let__description__1 = Variables that are declared with let will have block-scope. This means that the variable only exists within the block that it is created within. +let__description__2 = From the MDN entry: Declares a block scope local variable, optionally initializing it to a value. +const__description__0 = Creates and names a new constant. Like a variable created with let, a constant that is created with const is a container for a value, however constants cannot be reassigned once they are declared. Although it is noteworthy that for non-primitive data types like objects & arrays, their elements can still be changeable. So if a variable is assigned an array, you can still add or remove elements from the array but cannot reassign another array to it. Also unlike let, you cannot declare variables without value using const. +const__description__1 = Constants have block-scope. This means that the constant only exists within the block that it is created within. A constant cannot be redeclared within a scope in which it already exists. +const__description__2 = From the MDN entry: Declares a read-only named constant. Constants are block-scoped, much like variables defined using the 'let' statement. The value of a constant can't be changed through reassignment, and it can't be redeclared. +===__description__0 = The strict equality operator === checks to see if two values are equal and of the same type. +===__description__1 = A comparison expression always evaluates to a boolean. +===__description__2 = From the MDN entry: The non-identity operator returns true if the operands are not equal and/or not of the same type. +===__description__3 = Note: In some examples around the web you may see a double-equals-sign ==, used for comparison instead. This is the non-strict equality operator in Javascript. This will convert the two values being compared to the same type before comparing them. +>__description__0 = The greater than operator > evaluates to true if the left value is greater than the right value. There is more info on comparison operators on MDN. +>=__description__0 = The greater than or equal to operator >= evaluates to true if the left value is greater than or equal to the right value. +>=__description__1 = There is more info on comparison operators on MDN. +<__description__0 = The less than operator < evaluates to true if the left value is less than the right value. +<__description__1 = There is more info on comparison operators on MDN. +<=__description__0 = The less than or equal to operator <= evaluates to true if the left value is less than or equal to the right value. +<=__description__1 = There is more info on comparison operators on MDN. +if-else__description__0 = The if-else statement helps control the flow of your code. +if-else__description__1 = A condition is placed between the parenthesis following 'if', when that condition evalues to truthy, the code between the following curly braces is run. Alternatively, when the condition evaluates to falsy, the code between the curly braces of 'else' block is run instead. Writing an else block is optional. +if-else__description__2 = From the MDN entry: The 'if' statement executes a statement if a specified condition is truthy. If the condition is falsy, another statement can be executed +function__description__0 = Creates and names a function. A function is a set of statements that perform a task. +function__description__1 = Optionally, functions can have parameters. Parameters are variables that are scoped to the function, that can be assigned a value when calling the function.Multiple parameters can be given by seperating them with commmas. +function__description__2 = From the MDN entry: Declares a function with the specified parameters. +return__description__0 = Specifies the value to be returned by a function. For more info checkout the MDN entry for return. +boolean__description__0 = Converts a number or string to its boolean representation. For a number, any non-zero value (positive or negative) evaluates to true, while zero evaluates to false. For a string, the value "true" evaluates to true, while any other value evaluates to false. When an array of number or string values is passed in, then a array of booleans of the same length is returned. +boolean__returns = Boolean: boolean representation of value +boolean__params__n = String|Boolean|Number|Array: value to parse +string__description__0 = A string is one of the 7 primitive data types in Javascript. A string is a series of text characters. In Javascript, a string value must be surrounded by either single-quotation marks(') or double-quotation marks("). +string__description__1 = From the MDN entry: A string is a sequence of characters used to represent text. +number__description__0 = A number is one of the 7 primitive data types in Javascript. A number can be a whole number or a decimal number. +number__description__1 = The MDN entry for number +object__description__0 = From MDN's object basics: An object is a collection of related data and/or functionality (which usually consists of several variables and functions — which are called properties and methods when they are inside objects.) +class__description__0 = Creates and names a class which is a template for the creation of objects. +class__description__1 = From the MDN entry: The class declaration creates a new Class with a given name using prototype-based inheritance. +for__description__0 = for creates a loop that is useful for executing one section of code multiple times. +for__description__1 = A 'for loop' consists of three different expressions inside of a parenthesis, all of which are optional.These expressions are used to control the number of times the loop is run.The first expression is a statement that is used to set the initial state for the loop.The second expression is a condition that you would like to check before each loop. If this expression returns false then the loop will exit.The third expression is executed at the end of each loop. These expression are separated by ; (semi-colon).In case of an empty expression, only a semi-colon is written. +for__description__2 = The code inside of the loop body (in between the curly braces) is executed between the evaluation of the second and third expression. +for__description__3 = As with any loop, it is important to ensure that the loop can 'exit', or that the test condition will eventually evaluate to false. The test condition with a for loop is the second expression detailed above. Ensuring that this expression can eventually become false ensures that your loop doesn't attempt to run an infinite amount of times, which can crash your browser. +for__description__4 = From the MDN entry: Creates a loop that executes a specified statement until the test condition evaluates to false. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once. +while__description__0 = while creates a loop that is useful for executing one section of code multiple times. +while__description__1 = With a 'while loop', the code inside of the loop body (between the curly braces) is run repeatedly until the test condition (inside of the parenthesis) evaluates to false. The condition is tested before executing the code body with while, so if the condition is initially false the loop body, or statement, will never execute. +while__description__2 = As with any loop, it is important to ensure that the loop can 'exit', or that the test condition will eventually evaluate to false. This is to keep your loop from trying to run an infinite amount of times, which can crash your browser. +while__description__3 = From the MDN entry: The while statement creates a loop that executes a specified statement as long as the test condition evaluates to true.The condition is evaluated before executing the statement. +createCanvas__description__0 = Creates a canvas element in the document, and sets the dimensions of it in pixels. This method should be called only once at the start of setup. Calling createCanvas more than once in a sketch will result in very unpredictable behavior. If you want more than one drawing canvas you could use createGraphics (hidden by default but it can be shown). +createCanvas__description__1 = Important note: in 2D mode (i.e. when p5.Renderer is not set) the origin (0,0) is positioned at the top left of the screen. In 3D mode (i.e. when p5.Renderer is set to WEBGL), the origin is positioned at the center of the canvas. See this issue for more information. +createCanvas__description__2 = The system variables width and height are set by the parameters passed to this function. If createCanvas() is not used, the window will be given a default size of 100×100 pixels. +createCanvas__description__3 = For more ways to position the canvas, see the positioning the canvas wiki page. +createCanvas__returns = p5.Renderer: +createCanvas__params__w = Number: width of the canvas +createCanvas__params__h = Number: height of the canvas +createCanvas__params__renderer = Constant: (Optional) either P2D or WEBGL +resizeCanvas__description__0 = Resizes the canvas to given width and height. The canvas will be cleared and draw will be called immediately, allowing the sketch to re-render itself in the resized canvas. +resizeCanvas__params__w = Number: width of the canvas +resizeCanvas__params__h = Number: height of the canvas +resizeCanvas__params__noRedraw = Boolean: (Optional) don't redraw the canvas immediately +noCanvas__description__0 = Removes the default canvas for a p5 sketch that doesn't require a canvas +createGraphics__description__0 = Creates and returns a new p5.Renderer object. Use this class if you need to draw into an off-screen graphics buffer. The two parameters define the width and height in pixels. +createGraphics__returns = p5.Graphics: offscreen graphics buffer +createGraphics__params__w = Number: width of the offscreen graphics buffer +createGraphics__params__h = Number: height of the offscreen graphics buffer +createGraphics__params__renderer = Constant: (Optional) either P2D or WEBGL undefined defaults to p2d +blendMode__description__0 = Blends the pixels in the display window according to the defined mode. There is a choice of the following modes to blend the source pixels (A) with the ones of pixels already in the display window (B):
        • BLEND - linear interpolation of colours: C = A*factor + B. This is the default blending mode.
        • ADD - sum of A and B
        • DARKEST - only the darkest colour succeeds: C = min(A*factor, B).
        • LIGHTEST - only the lightest colour succeeds: C = max(A*factor, B).
        • DIFFERENCE - subtract colors from underlying image.
        • EXCLUSION - similar to DIFFERENCE, but less extreme.
        • MULTIPLY - multiply the colors, result will always be darker.
        • SCREEN - opposite multiply, uses inverse values of the colors.
        • REPLACE - the pixels entirely replace the others and don't utilize alpha (transparency) values.
        • REMOVE - removes pixels from B with the alpha strength of A.
        • OVERLAY - mix of MULTIPLY and SCREEN . Multiplies dark values, and screens light values. (2D)
        • HARD_LIGHT - SCREEN when greater than 50% gray, MULTIPLY when lower. (2D)
        • SOFT_LIGHT - mix of DARKEST and LIGHTEST. Works like OVERLAY, but not as harsh. (2D)
        • DODGE - lightens light tones and increases contrast, ignores darks. (2D)
        • BURN - darker areas are applied, increasing contrast, ignores lights. (2D)
        • SUBTRACT - remainder of A and B (3D)
        +blendMode__description__1 = (2D) indicates that this blend mode only works in the 2D renderer. (3D) indicates that this blend mode only works in the WEBGL renderer. +blendMode__params__mode = Constant: blend mode to set for canvas. either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, SOFT_LIGHT, DODGE, BURN, ADD, REMOVE or SUBTRACT +drawingContext__description__0 = The p5.js API provides a lot of functionality for creating graphics, but there is some native HTML5 Canvas functionality that is not exposed by p5. You can still call it directly using the variable drawingContext, as in the example shown. This is the equivalent of calling canvas.getContext('2d'); or canvas.getContext('webgl');. See this reference for the native canvas API for possible drawing functions you can call. +noLoop__description__0 = Stops p5.js from continuously executing the code within draw(). If loop() is called, the code in draw() begins to run continuously again. If using noLoop() in setup(), it should be the last line inside the block. +noLoop__description__1 = When noLoop() is used, it's not possible to manipulate or access the screen inside event handling functions such as mousePressed() or keyPressed(). Instead, use those functions to call redraw() or loop(), which will run draw(), which can update the screen properly. This means that when noLoop() has been called, no drawing can happen, and functions like saveFrames() or loadPixels() may not be used. +noLoop__description__2 = Note that if the sketch is resized, redraw() will be called to update the sketch, even after noLoop() has been specified. Otherwise, the sketch would enter an odd state until loop() was called. +noLoop__description__3 = Use isLooping() to check current state of loop(). +loop__description__0 = By default, p5.js loops through draw() continuously, executing the code within it. However, the draw() loop may be stopped by calling noLoop(). In that case, the draw() loop can be resumed with loop(). +loop__description__1 = Avoid calling loop() from inside setup(). +loop__description__2 = Use isLooping() to check current state of loop(). +isLooping__description__0 = By default, p5.js loops through draw() continuously, executing the code within it. If the sketch is stopped with noLoop() or resumed with loop(), isLooping() returns the current state for use within custom event handlers. +push__description__0 = The push() function saves the current drawing style settings and transformations, while pop() restores these settings. Note that these functions are always used together. They allow you to change the style and transformation settings and later return to what you had. When a new state is started with push(), it builds on the current style and transform information. The push() and pop() functions can be embedded to provide more control. (See the second example for a demonstration.) +push__description__1 = push() stores information related to the current transformation state and style settings controlled by the following functions: fill(), noFill(), noStroke(), stroke(), tint(), noTint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix(), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +push__description__2 = In WEBGL mode additional style settings are stored. These are controlled by the following functions: setCamera(), ambientLight(), directionalLight(), pointLight(), texture(), specularMaterial(), shininess(), normalMaterial() and shader(). +pop__description__0 = The push() function saves the current drawing style settings and transformations, while pop() restores these settings. Note that these functions are always used together. They allow you to change the style and transformation settings and later return to what you had. When a new state is started with push(), it builds on the current style and transform information. The push() and pop() functions can be embedded to provide more control. (See the second example for a demonstration.) +pop__description__1 = push() stores information related to the current transformation state and style settings controlled by the following functions: fill(), noFill(), noStroke(), stroke(), tint(), noTint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix(), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +pop__description__2 = In WEBGL mode additional style settings are stored. These are controlled by the following functions: setCamera(), ambientLight(), directionalLight(), pointLight(), texture(), specularMaterial(), shininess(), normalMaterial() and shader(). +redraw__description__0 = Executes the code within draw() one time. This function allows the program to update the display window only when necessary, for example when an event registered by mousePressed() or keyPressed() occurs. +redraw__description__1 = In structuring a program, it only makes sense to call redraw() within events such as mousePressed(). This is because redraw() does not run draw() immediately (it only sets a flag that indicates an update is needed). +redraw__description__2 = The redraw() function does not work properly when called inside draw().To enable/disable animations, use loop() and noLoop(). +redraw__description__3 = In addition you can set the number of redraws per method call. Just add an integer as single parameter for the number of redraws. +redraw__params__n = Integer: (Optional) Redraw for n-times. The default value is 1. +p5__description__0 = The p5() constructor enables you to activate "instance mode" instead of normal "global mode". This is an advanced topic. A short description and example is included below. Please see Dan Shiffman's Coding Train video tutorial or this tutorial page for more info. +p5__description__1 = By default, all p5.js functions are in the global namespace (i.e. bound to the window object), meaning you can call them simply ellipse(), fill(), etc. However, this might be inconvenient if you are mixing with other JS libraries (synchronously or asynchronously) or writing long programs of your own. p5.js currently supports a way around this problem called "instance mode". In instance mode, all p5 functions are bound up in a single variable instead of polluting your global namespace. +p5__description__2 = Optionally, you can specify a default container for the canvas and any other elements to append to with a second argument. You can give the ID of an element in your html, or an html node itself. +p5__description__3 = Note that creating instances like this also allows you to have more than one p5 sketch on a single web page, as they will each be wrapped up with their own set up variables. Of course, you could also use iframes to have multiple sketches in global mode. +p5__params__sketch = Object: a function containing a p5.js sketch +p5__params__node = String|Object: ID or pointer to HTML DOM node to contain sketch in +applyMatrix__description__0 = Multiplies the current matrix by the one specified through the parameters. This is a powerful operation that can perform the equivalent of translate, scale, shear and rotate all at once. You can learn more about transformation matrices on Wikipedia. +applyMatrix__description__1 = The naming of the arguments here follows the naming of the WHATWG specification and corresponds to a transformation matrix of the form:
        +applyMatrix__description__2 = The transformation matrix used when applyMatrix is called
        +applyMatrix__params__a = Number|Array: numbers which define the 2×3 matrix to be multiplied, or an array of numbers +applyMatrix__params__b = Number: numbers which define the 2×3 matrix to be multiplied +applyMatrix__params__c = Number: numbers which define the 2×3 matrix to be multiplied +applyMatrix__params__d = Number: numbers which define the 2×3 matrix to be multiplied +applyMatrix__params__e = Number: numbers which define the 2×3 matrix to be multiplied +applyMatrix__params__f = Number: numbers which define the 2×3 matrix to be multiplied +resetMatrix__description__0 = Replaces the current matrix with the identity matrix. +rotate__description__0 = Rotates a shape by the amount specified by the angle parameter. This function accounts for angleMode, so angles can be entered in either RADIANS or DEGREES. +rotate__description__1 = Objects are always rotated around their relative position to the origin and positive numbers rotate objects in a clockwise direction. Transformations apply to everything that happens after and subsequent calls to the function accumulates the effect. For example, calling rotate(HALF_PI) and then rotate(HALF_PI) is the same as rotate(PI). All transformations are reset when draw() begins again. +rotate__description__2 = Technically, rotate() multiplies the current transformation matrix by a rotation matrix. This function can be further controlled by the push() and pop(). +rotate__params__angle = Number: the angle of rotation, specified in radians or degrees, depending on current angleMode +rotate__params__axis = p5.Vector|Number[]: (Optional) (in 3d) the axis to rotate around +rotateX__description__0 = Rotates a shape around X axis by the amount specified in angle parameter. The angles can be entered in either RADIANS or DEGREES. +rotateX__description__1 = Objects are always rotated around their relative position to the origin and positive numbers rotate objects in a clockwise direction. All transformations are reset when draw() begins again. +rotateX__params__angle = Number: the angle of rotation, specified in radians or degrees, depending on current angleMode +rotateY__description__0 = Rotates a shape around Y axis by the amount specified in angle parameter. The angles can be entered in either RADIANS or DEGREES. +rotateY__description__1 = Objects are always rotated around their relative position to the origin and positive numbers rotate objects in a clockwise direction. All transformations are reset when draw() begins again. +rotateY__params__angle = Number: the angle of rotation, specified in radians or degrees, depending on current angleMode +rotateZ__description__0 = Rotates a shape around Z axis by the amount specified in angle parameter. The angles can be entered in either RADIANS or DEGREES. +rotateZ__description__1 = This method works in WEBGL mode only. +rotateZ__description__2 = Objects are always rotated around their relative position to the origin and positive numbers rotate objects in a clockwise direction. All transformations are reset when draw() begins again. +rotateZ__params__angle = Number: the angle of rotation, specified in radians or degrees, depending on current angleMode +scale__description__0 = Increases or decreases the size of a shape by expanding or contracting vertices. Objects always scale from their relative origin to the coordinate system. Scale values are specified as decimal percentages. For example, the function call scale(2.0) increases the dimension of a shape by 200%. +scale__description__1 = Transformations apply to everything that happens after and subsequent calls to the function multiply the effect. For example, calling scale(2.0) and then scale(1.5) is the same as scale(3.0). If scale() is called within draw(), the transformation is reset when the loop begins again. +scale__description__2 = Using this function with the z parameter is only available in WEBGL mode. This function can be further controlled with push() and pop(). +scale__params__s = Number|p5.Vector|Number[]: percent to scale the object, or percentage to scale the object in the x-axis if multiple arguments are given +scale__params__y = Number: (Optional) percent to scale the object in the y-axis +scale__params__z = Number: (Optional) percent to scale the object in the z-axis (webgl only) +scale__params__scales = p5.Vector|Number[]: per-axis percents to scale the object +shearX__description__0 = Shears a shape around the x-axis by the amount specified by the angle parameter. Angles should be specified in the current angleMode. Objects are always sheared around their relative position to the origin and positive numbers shear objects in a clockwise direction. +shearX__description__1 = Transformations apply to everything that happens after and subsequent calls to the function accumulates the effect. For example, calling shearX(PI/2) and then shearX(PI/2) is the same as shearX(PI). If shearX() is called within the draw(), the transformation is reset when the loop begins again. +shearX__description__2 = Technically, shearX() multiplies the current transformation matrix by a rotation matrix. This function can be further controlled by the push() and pop() functions. +shearX__params__angle = Number: angle of shear specified in radians or degrees, depending on current angleMode +shearY__description__0 = Shears a shape around the y-axis the amount specified by the angle parameter. Angles should be specified in the current angleMode. Objects are always sheared around their relative position to the origin and positive numbers shear objects in a clockwise direction. +shearY__description__1 = Transformations apply to everything that happens after and subsequent calls to the function accumulates the effect. For example, calling shearY(PI/2) and then shearY(PI/2) is the same as shearY(PI). If shearY() is called within the draw(), the transformation is reset when the loop begins again. +shearY__description__2 = Technically, shearY() multiplies the current transformation matrix by a rotation matrix. This function can be further controlled by the push() and pop() functions. +shearY__params__angle = Number: angle of shear specified in radians or degrees, depending on current angleMode +translate__description__0 = Specifies an amount to displace objects within the display window. The x parameter specifies left/right translation, the y parameter specifies up/down translation. +translate__description__1 = Transformations are cumulative and apply to everything that happens after and subsequent calls to the function accumulates the effect. For example, calling translate(50, 0) and then translate(20, 0) is the same as translate(70, 0). If translate() is called within draw(), the transformation is reset when the loop begins again. This function can be further controlled by using push() and pop(). +translate__params__x = Number: left/right translation +translate__params__y = Number: up/down translation +translate__params__z = Number: (Optional) forward/backward translation (webgl only) +translate__params__vector = p5.Vector: the vector to translate by +storeItem__description__0 = Stores a value in local storage under the key name. Local storage is saved in the browser and persists between browsing sessions and page reloads. The key can be the name of the variable but doesn't have to be. To retrieve stored items see getItem. Sensitive data such as passwords or personal information should not be stored in local storage. +storeItem__params__key = String +storeItem__params__value = String|Number|Object|Boolean|p5.Color|p5.Vector +getItem__description__0 = Returns the value of an item that was stored in local storage using storeItem() +getItem__returns = Number|Object|String|Boolean|p5.Color|p5.Vector: Value of stored item +getItem__params__key = String: name that you wish to use to store in local storage +clearStorage__description__0 = Clears all local storage items set with storeItem() for the current domain. +removeItem__description__0 = Removes an item that was stored with storeItem() +removeItem__params__key = String +createStringDict__description__0 = Creates a new instance of p5.StringDict using the key-value pair or the object you provide. +createStringDict__returns = p5.StringDict: +createStringDict__params__key = String +createStringDict__params__value = String +createStringDict__params__object = Object: object +createNumberDict__description__0 = Creates a new instance of p5.NumberDict using the key-value pair or object you provide. +createNumberDict__returns = p5.NumberDict: +createNumberDict__params__key = Number +createNumberDict__params__value = Number +createNumberDict__params__object = Object: object +select__description__0 = Searches the page for the first element that matches the given CSS selector string (can be an ID, class, tag name or a combination) and returns it as a p5.Element. The DOM node itself can be accessed with .elt. Returns null if none found. You can also specify a container to search within. +select__returns = p5.Element|null: p5.Element containing node found +select__params__selectors = String: CSS selector string of element to search for +select__params__container = String|p5.Element|HTMLElement: (Optional) CSS selector string, p5.Element, or HTML element to search within +selectAll__description__0 = Searches the page for elements that match the given CSS selector string (can be an ID a class, tag name or a combination) and returns them as p5.Elements in an array. The DOM node itself can be accessed with .elt. Returns an empty array if none found. You can also specify a container to search within. +selectAll__returns = p5.Element[]: Array of p5.Elements containing nodes found +selectAll__params__selectors = String: CSS selector string of elements to search for +selectAll__params__container = String|p5.Element|HTMLElement: (Optional) CSS selector string, p5.Element , or HTML element to search within +removeElements__description__0 = Removes all elements created by p5, except any canvas / graphics elements created by createCanvas or createGraphics. Event handlers are removed, and element is removed from the DOM. +changed__description__0 = The .changed() function is called when the value of an element changes. This can be used to attach an element specific event listener. +changed__params__fxn = Function|Boolean: function to be fired when the value of an element changes. if false is passed instead, the previously firing function will no longer fire. +input__description__0 = The .input() function is called when any user input is detected with an element. The input event is often used to detect keystrokes in a input element, or changes on a slider element. This can be used to attach an element specific event listener. +input__params__fxn = Function|Boolean: function to be fired when any user input is detected within the element. if false is passed instead, the previously firing function will no longer fire. +createDiv__description__0 = Creates a <div></div> element in the DOM with given inner HTML. +createDiv__returns = p5.Element: pointer to p5.Element holding created node +createDiv__params__html = String: (Optional) inner HTML for element created +createP__description__0 = Creates a <p></p> element in the DOM with given inner HTML. Used for paragraph length text. +createP__returns = p5.Element: pointer to p5.Element holding created node +createP__params__html = String: (Optional) inner HTML for element created +createSpan__description__0 = Creates a <span></span> element in the DOM with given inner HTML. +createSpan__returns = p5.Element: pointer to p5.Element holding created node +createSpan__params__html = String: (Optional) inner HTML for element created +createImg__description__0 = Creates an <img> element in the DOM with given src and alternate text. +createImg__returns = p5.Element: pointer to p5.Element holding created node +createImg__params__src = String: src path or url for image +createImg__params__alt = String: alternate text to be used if image does not load. You can use also an empty string ("") if that an image is not intended to be viewed. +createImg__params__crossOrigin = String: crossOrigin property of the img element; use either 'anonymous' or 'use-credentials' to retrieve the image with cross-origin access (for later use with canvas. if an empty string("") is passed, CORS is not used +createImg__params__successCallback = Function: (Optional) callback to be called once image data is loaded with the p5.Element as argument +createA__description__0 = Creates an <a></a> element in the DOM for including a hyperlink. +createA__returns = p5.Element: pointer to p5.Element holding created node +createA__params__href = String: url of page to link to +createA__params__html = String: inner html of link element to display +createA__params__target = String: (Optional) target where new link should open, could be _blank, _self, _parent, _top. +createSlider__description__0 = Creates a slider <input></input> element in the DOM. Use .size() to set the display length of the slider. +createSlider__returns = p5.Element: pointer to p5.Element holding created node +createSlider__params__min = Number: minimum value of the slider +createSlider__params__max = Number: maximum value of the slider +createSlider__params__value = Number: (Optional) default value of the slider +createSlider__params__step = Number: (Optional) step size for each tick of the slider (if step is set to 0, the slider will move continuously from the minimum to the maximum value) +createButton__description__0 = Creates a <button></button> element in the DOM. Use .size() to set the display size of the button. Use .mousePressed() to specify behavior on press. +createButton__returns = p5.Element: pointer to p5.Element holding created node +createButton__params__label = String: label displayed on the button +createButton__params__value = String: (Optional) value of the button +createCheckbox__description__0 = Creates a checkbox <input></input> element in the DOM. Calling .checked() on a checkbox returns if it is checked or not +createCheckbox__returns = p5.Element: pointer to p5.Element holding created node +createCheckbox__params__label = String: (Optional) label displayed after checkbox +createCheckbox__params__value = Boolean: (Optional) value of the checkbox; checked is true, unchecked is false +createSelect__description__0 = Creates a dropdown menu <select></select> element in the DOM. It also helps to assign select-box methods to p5.Element when selecting existing select box.
        • .option(name, [value]) can be used to set options for the select after it is created.
        • .value() will return the currently selected option.
        • .selected() will return current dropdown element which is an instance of p5.Element
        • .selected(value) can be used to make given option selected by default when the page first loads.
        • .disable() marks whole of dropdown element as disabled.
        • .disable(value) marks given option as disabled
        +createSelect__returns = p5.Element: +createSelect__params__multiple = Boolean: (Optional) true if dropdown should support multiple selections +createSelect__params__existing = Object: DOM select element +createRadio__description__0 = Creates a radio button element in the DOM.It also helps existing radio buttons assign methods of p5.Element.
        • .option(value, [label]) can be used to create a new option for the element. If an option with a value already exists, it will be returned. It is recommended to use string values as input for value. Optionally, a label can be provided as second argument for the option.
        • .remove(value) can be used to remove an option for the element. String values recommended as input for value.
        • .value() method will return the currently selected value.
        • .selected() method will return the currently selected input element.
        • .selected(value) method will select the option and return it. String values recommended as input for value.
        • .disable(Boolean) method will enable/disable the whole radio button element.
        +createRadio__returns = p5.Element: pointer to p5.Element holding created node +createRadio__params__containerElement = Object: An container HTML Element either a div or span inside which all existing radio inputs will be considered as options. +createRadio__params__name = String: (Optional) A name parameter for each Input Element. +createColorPicker__description__0 = Creates a colorPicker element in the DOM for color input. The .value() method will return a hex string (#rrggbb) of the color. The .color() method will return a p5.Color object with the current chosen color. +createColorPicker__returns = p5.Element: pointer to p5.Element holding created node +createColorPicker__params__value = String|p5.Color: (Optional) default color of element +createInput__description__0 = Creates an <input></input> element in the DOM for text input. Use .size() to set the display length of the box. +createInput__returns = p5.Element: pointer to p5.Element holding created node +createInput__params__value = String: default value of the input box +createInput__params__type = String: (Optional) type of text, ie text, password etc. Defaults to text. Needs a value to be specified first. +createFileInput__description__0 = Creates an <input></input> element in the DOM of type 'file'. This allows users to select local files for use in a sketch. +createFileInput__returns = p5.Element: pointer to p5.Element holding created DOM element +createFileInput__params__callback = Function: callback function for when a file is loaded +createFileInput__params__multiple = Boolean: (Optional) optional, to allow multiple files to be selected +createVideo__description__0 = Creates an HTML5 <video> element in the DOM for simple playback of audio/video. Shown by default, can be hidden with .hide() and drawn into canvas using image(). The first parameter can be either a single string path to a video file, or an array of string paths to different formats of the same video. This is useful for ensuring that your video can play across different browsers, as each supports different formats. See this page for further information about supported formats. +createVideo__returns = p5.MediaElement: pointer to video p5.MediaElement +createVideo__params__src = String|String[]: path to a video file, or array of paths for supporting different browsers +createVideo__params__callback = Function: (Optional) callback function to be called upon 'canplaythrough' event fire, that is, when the browser can play the media, and estimates that enough data has been loaded to play the media up to its end without having to stop for further buffering of content +createAudio__description__0 = Creates a hidden HTML5 <audio> element in the DOM for simple audio playback. The first parameter can be either a single string path to a audio file, or an array of string paths to different formats of the same audio. This is useful for ensuring that your audio can play across different browsers, as each supports different formats. See this page for further information about supported formats. +createAudio__returns = p5.MediaElement: pointer to audio p5.MediaElement +createAudio__params__src = String|String[]: (Optional) path to an audio file, or array of paths for supporting different browsers +createAudio__params__callback = Function: (Optional) callback function to be called upon 'canplaythrough' event fire, that is, when the browser can play the media, and estimates that enough data has been loaded to play the media up to its end without having to stop for further buffering of content +createCapture__description__0 = Creates a new HTML5 <video> element that contains the audio/video feed from a webcam. The element is separate from the canvas and is displayed by default. The element can be hidden using .hide(). The feed can be drawn onto the canvas using image(). The loadedmetadata property can be used to detect when the element has fully loaded (see second example). +createCapture__description__1 = More specific properties of the feed can be passing in a Constraints object. See the W3C spec for possible properties. Note that not all of these are supported by all browsers. +createCapture__description__2 = Security note: A new browser security specification requires that getUserMedia, which is behind createCapture(), only works when you're running the code locally, or on HTTPS. Learn more here and here. +createCapture__returns = p5.Element: capture video p5.Element +createCapture__params__type = String|Constant|Object: type of capture, either VIDEO or AUDIO if none specified, default both, or a Constraints object +createCapture__params__callback = Function: (Optional) function to be called once stream has loaded +createElement__description__0 = Creates element with given tag in the DOM with given content. +createElement__returns = p5.Element: pointer to p5.Element holding created node +createElement__params__tag = String: tag for the new element +createElement__params__content = String: (Optional) html content to be inserted into the element +deviceOrientation__description__0 = The system variable deviceOrientation always contains the orientation of the device. The value of this variable will either be set 'landscape' or 'portrait'. If no data is available it will be set to 'undefined'. either LANDSCAPE or PORTRAIT. +accelerationX__description__0 = The system variable accelerationX always contains the acceleration of the device along the x axis. Value is represented as meters per second squared. +accelerationY__description__0 = The system variable accelerationY always contains the acceleration of the device along the y axis. Value is represented as meters per second squared. +accelerationZ__description__0 = The system variable accelerationZ always contains the acceleration of the device along the z axis. Value is represented as meters per second squared. +pAccelerationX__description__0 = The system variable pAccelerationX always contains the acceleration of the device along the x axis in the frame previous to the current frame. Value is represented as meters per second squared. +pAccelerationY__description__0 = The system variable pAccelerationY always contains the acceleration of the device along the y axis in the frame previous to the current frame. Value is represented as meters per second squared. +pAccelerationZ__description__0 = The system variable pAccelerationZ always contains the acceleration of the device along the z axis in the frame previous to the current frame. Value is represented as meters per second squared. +rotationX__description__0 = The system variable rotationX always contains the rotation of the device along the x axis. If the sketch angleMode() is set to DEGREES, the value will be -180 to 180. If it is set to RADIANS, the value will be -PI to PI. +rotationX__description__1 = Note: The order the rotations are called is important, ie. if used together, it must be called in the order Z-X-Y or there might be unexpected behaviour. +rotationY__description__0 = The system variable rotationY always contains the rotation of the device along the y axis. If the sketch angleMode() is set to DEGREES, the value will be -90 to 90. If it is set to RADIANS, the value will be -PI/2 to PI/2. +rotationY__description__1 = Note: The order the rotations are called is important, ie. if used together, it must be called in the order Z-X-Y or there might be unexpected behaviour. +rotationZ__description__0 = The system variable rotationZ always contains the rotation of the device along the z axis. If the sketch angleMode() is set to DEGREES, the value will be 0 to 360. If it is set to RADIANS, the value will be 0 to 2*PI. +rotationZ__description__1 = Unlike rotationX and rotationY, this variable is available for devices with a built-in compass only. +rotationZ__description__2 = Note: The order the rotations are called is important, ie. if used together, it must be called in the order Z-X-Y or there might be unexpected behaviour. +pRotationX__description__0 = The system variable pRotationX always contains the rotation of the device along the x axis in the frame previous to the current frame. If the sketch angleMode() is set to DEGREES, the value will be -180 to 180. If it is set to RADIANS, the value will be -PI to PI. +pRotationX__description__1 = pRotationX can also be used with rotationX to determine the rotate direction of the device along the X-axis. +pRotationY__description__0 = The system variable pRotationY always contains the rotation of the device along the y axis in the frame previous to the current frame. If the sketch angleMode() is set to DEGREES, the value will be -90 to 90. If it is set to RADIANS, the value will be -PI/2 to PI/2. +pRotationY__description__1 = pRotationY can also be used with rotationY to determine the rotate direction of the device along the Y-axis. +pRotationZ__description__0 = The system variable pRotationZ always contains the rotation of the device along the z axis in the frame previous to the current frame. If the sketch angleMode() is set to DEGREES, the value will be 0 to 360. If it is set to RADIANS, the value will be 0 to 2*PI. +pRotationZ__description__1 = pRotationZ can also be used with rotationZ to determine the rotate direction of the device along the Z-axis. +turnAxis__description__0 = When a device is rotated, the axis that triggers the deviceTurned() method is stored in the turnAxis variable. The turnAxis variable is only defined within the scope of deviceTurned(). +setMoveThreshold__description__0 = The setMoveThreshold() function is used to set the movement threshold for the deviceMoved() function. The default threshold is set to 0.5. +setMoveThreshold__params__value = Number: The threshold value +setShakeThreshold__description__0 = The setShakeThreshold() function is used to set the movement threshold for the deviceShaken() function. The default threshold is set to 30. +setShakeThreshold__params__value = Number: The threshold value +deviceMoved__description__0 = The deviceMoved() function is called when the device is moved by more than the threshold value along X, Y or Z axis. The default threshold is set to 0.5. The threshold value can be changed using setMoveThreshold(). +deviceTurned__description__0 = The deviceTurned() function is called when the device rotates by more than 90 degrees continuously. +deviceTurned__description__1 = The axis that triggers the deviceTurned() method is stored in the turnAxis variable. The deviceTurned() method can be locked to trigger on any axis: X, Y or Z by comparing the turnAxis variable to 'X', 'Y' or 'Z'. +deviceShaken__description__0 = The deviceShaken() function is called when the device total acceleration changes of accelerationX and accelerationY values is more than the threshold value. The default threshold is set to 30. The threshold value can be changed using setShakeThreshold(). +keyIsPressed__description__0 = The boolean system variable keyIsPressed is true if any key is pressed and false if no keys are pressed. +key__description__0 = The system variable key always contains the value of the most recent key on the keyboard that was typed. To get the proper capitalization, it is best to use it within keyTyped(). For non-ASCII keys, use the keyCode variable. +keyCode__description__0 = The variable keyCode is used to detect special keys such as BACKSPACE, DELETE, ENTER, RETURN, TAB, ESCAPE, SHIFT, CONTROL, OPTION, ALT, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW. You can also check for custom keys by looking up the keyCode of any key on a site like this: keycode.info. +keyPressed__description__0 = The keyPressed() function is called once every time a key is pressed. The keyCode for the key that was pressed is stored in the keyCode variable. +keyPressed__description__1 = For non-ASCII keys, use the keyCode variable. You can check if the keyCode equals BACKSPACE, DELETE, ENTER, RETURN, TAB, ESCAPE, SHIFT, CONTROL, OPTION, ALT, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW. +keyPressed__description__2 = For ASCII keys, the key that was pressed is stored in the key variable. However, it does not distinguish between uppercase and lowercase. For this reason, it is recommended to use keyTyped() to read the key variable, in which the case of the variable will be distinguished. +keyPressed__description__3 = Because of how operating systems handle key repeats, holding down a key may cause multiple calls to keyTyped() (and keyReleased() as well). The rate of repeat is set by the operating system and how each computer is configured. Browsers may have different default behaviors attached to various key events. To prevent any default behavior for this event, add "return false" to the end of the method. +keyPressed__params__event = Object: (Optional) optional KeyboardEvent callback argument. +keyReleased__description__0 = The keyReleased() function is called once every time a key is released. See key and keyCode for more information. Browsers may have different default behaviors attached to various key events. To prevent any default behavior for this event, add "return false" to the end of the method. +keyReleased__params__event = Object: (Optional) optional KeyboardEvent callback argument. +keyTyped__description__0 = The keyTyped() function is called once every time a key is pressed, but action keys such as Backspace, Delete, Ctrl, Shift, and Alt are ignored. If you are trying to detect a keyCode for one of these keys, use the keyPressed() function instead. The most recent key typed will be stored in the key variable. +keyTyped__description__1 = Because of how operating systems handle key repeats, holding down a key will cause multiple calls to keyTyped() (and keyReleased() as well). The rate of repeat is set by the operating system and how each computer is configured. Browsers may have different default behaviors attached to various key events. To prevent any default behavior for this event, add "return false" to the end of the method. +keyTyped__params__event = Object: (Optional) optional KeyboardEvent callback argument. +keyIsDown__description__0 = The keyIsDown() function checks if the key is currently down, i.e. pressed. It can be used if you have an object that moves, and you want several keys to be able to affect its behaviour simultaneously, such as moving a sprite diagonally. You can put in any number representing the keyCode of the key, or use any of the variable keyCode names listed here. +keyIsDown__returns = Boolean: whether key is down or not +keyIsDown__params__code = Number: The key to check for. +movedX__description__0 = The variable movedX contains the horizontal movement of the mouse since the last frame +movedY__description__0 = The variable movedY contains the vertical movement of the mouse since the last frame +mouseX__description__0 = The system variable mouseX always contains the current horizontal position of the mouse, relative to (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL. If touch is used instead of mouse input, mouseX will hold the x value of the most recent touch point. +mouseY__description__0 = The system variable mouseY always contains the current vertical position of the mouse, relative to (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL. If touch is used instead of mouse input, mouseY will hold the y value of the most recent touch point. +pmouseX__description__0 = The system variable pmouseX always contains the horizontal position of the mouse or finger in the frame previous to the current frame, relative to (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL. Note: pmouseX will be reset to the current mouseX value at the start of each touch event. +pmouseY__description__0 = The system variable pmouseY always contains the vertical position of the mouse or finger in the frame previous to the current frame, relative to (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL. Note: pmouseY will be reset to the current mouseY value at the start of each touch event. +winMouseX__description__0 = The system variable winMouseX always contains the current horizontal position of the mouse, relative to (0, 0) of the window. +winMouseY__description__0 = The system variable winMouseY always contains the current vertical position of the mouse, relative to (0, 0) of the window. +pwinMouseX__description__0 = The system variable pwinMouseX always contains the horizontal position of the mouse in the frame previous to the current frame, relative to (0, 0) of the window. Note: pwinMouseX will be reset to the current winMouseX value at the start of each touch event. +pwinMouseY__description__0 = The system variable pwinMouseY always contains the vertical position of the mouse in the frame previous to the current frame, relative to (0, 0) of the window. Note: pwinMouseY will be reset to the current winMouseY value at the start of each touch event. +mouseButton__description__0 = p5 automatically tracks if the mouse button is pressed and which button is pressed. The value of the system variable mouseButton is either LEFT, RIGHT, or CENTER depending on which button was pressed last. Warning: different browsers may track mouseButton differently. +mouseIsPressed__description__0 = The boolean system variable mouseIsPressed is true if the mouse is pressed and false if not. +mouseMoved__description__0 = The mouseMoved() function is called every time the mouse moves and a mouse button is not pressed. Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. +mouseMoved__params__event = Object: (Optional) optional MouseEvent callback argument. +mouseDragged__description__0 = The mouseDragged() function is called once every time the mouse moves and a mouse button is pressed. If no mouseDragged() function is defined, the touchMoved() function will be called instead if it is defined. Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. +mouseDragged__params__event = Object: (Optional) optional MouseEvent callback argument. +mousePressed__description__0 = The mousePressed() function is called once after every time a mouse button is pressed. The mouseButton variable (see the related reference entry) can be used to determine which button has been pressed. If no mousePressed() function is defined, the touchStarted() function will be called instead if it is defined. Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. +mousePressed__params__event = Object: (Optional) optional MouseEvent callback argument. +mouseReleased__description__0 = The mouseReleased() function is called every time a mouse button is released. If no mouseReleased() function is defined, the touchEnded() function will be called instead if it is defined. Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. +mouseReleased__params__event = Object: (Optional) optional MouseEvent callback argument. +mouseClicked__description__0 = The mouseClicked() function is called once after a mouse button has been pressed and then released. Browsers handle clicks differently, so this function is only guaranteed to be run when the left mouse button is clicked. To handle other mouse buttons being pressed or released, see mousePressed() or mouseReleased(). Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. +mouseClicked__params__event = Object: (Optional) optional MouseEvent callback argument. +doubleClicked__description__0 = The doubleClicked() function is executed every time a event listener has detected a dblclick event which is a part of the DOM L3 specification. The doubleClicked event is fired when a pointing device button (usually a mouse's primary button) is clicked twice on a single element. For more info on the dblclick event refer to mozilla's documentation here: https://developer.mozilla.org/en-US/docs/Web/Events/dblclick +doubleClicked__params__event = Object: (Optional) optional MouseEvent callback argument. +mouseWheel__description__0 = The function mouseWheel() is executed every time a vertical mouse wheel event is detected either triggered by an actual mouse wheel or by a touchpad. The event.delta property returns the amount the mouse wheel have scrolled. The values can be positive or negative depending on the scroll direction (on OS X with "natural" scrolling enabled, the signs are inverted). Browsers may have different default behaviors attached to various mouse events. To prevent any default behavior for this event, add "return false" to the end of the method. Due to the current support of the "wheel" event on Safari, the function may only work as expected if "return false" is included while using Safari. +mouseWheel__params__event = Object: (Optional) optional WheelEvent callback argument. +requestPointerLock__description__0 = The function requestPointerLock() locks the pointer to its current position and makes it invisible. Use movedX and movedY to get the difference the mouse was moved since the last call of draw. Note that not all browsers support this feature. This enables you to create experiences that aren't limited by the mouse moving out of the screen even if it is repeatedly moved into one direction. For example, a first person perspective experience. +exitPointerLock__description__0 = The function exitPointerLock() exits a previously triggered pointer Lock for example to make ui elements usable etc +touches__description__0 = The system variable touches[] contains an array of the positions of all current touch points, relative to (0, 0) of the canvas, and IDs identifying a unique touch as it moves. Each element in the array is an object with x, y, and id properties. +touches__description__1 = The touches[] array is not supported on Safari and IE on touch-based desktops (laptops). +touchStarted__description__0 = The touchStarted() function is called once after every time a touch is registered. If no touchStarted() function is defined, the mousePressed() function will be called instead if it is defined. Browsers may have different default behaviors attached to various touch events. To prevent any default behavior for this event, add "return false" to the end of the method. +touchStarted__params__event = Object: (Optional) optional TouchEvent callback argument. +touchMoved__description__0 = The touchMoved() function is called every time a touch move is registered. If no touchMoved() function is defined, the mouseDragged() function will be called instead if it is defined. Browsers may have different default behaviors attached to various touch events. To prevent any default behavior for this event, add "return false" to the end of the method. +touchMoved__params__event = Object: (Optional) optional TouchEvent callback argument. +touchEnded__description__0 = The touchEnded() function is called every time a touch ends. If no touchEnded() function is defined, the mouseReleased() function will be called instead if it is defined. Browsers may have different default behaviors attached to various touch events. To prevent any default behavior for this event, add "return false" to the end of the method. +touchEnded__params__event = Object: (Optional) optional TouchEvent callback argument. +createImage__description__0 = Creates a new p5.Image (the datatype for storing images). This provides a fresh buffer of pixels to play with. Set the size of the buffer with the width and height parameters. +createImage__description__1 = .pixels gives access to an array containing the values for all the pixels in the display window. These values are numbers. This array is the size (including an appropriate factor for the pixelDensity) of the display window x4, representing the R, G, B, A values in order for each pixel, moving from left to right across each row, then down each column. See .pixels for more info. It may also be simpler to use set() or get(). +createImage__description__2 = Before accessing the pixels of an image, the data must loaded with the loadPixels() function. After the array data has been modified, the updatePixels() function must be run to update the changes. +createImage__returns = p5.Image: the p5.Image object +createImage__params__width = Integer: width in pixels +createImage__params__height = Integer: height in pixels +saveCanvas__description__0 = Save the current canvas as an image. The browser will either save the file immediately, or prompt the user with a dialogue window. +saveCanvas__params__selectedCanvas = p5.Element|HTMLCanvasElement: a variable representing a specific html5 canvas (optional) +saveCanvas__params__filename = String (Optional) +saveCanvas__params__extension = String: (Optional) 'jpg' or 'png' +saveFrames__description__0 = Capture a sequence of frames that can be used to create a movie. Accepts a callback. For example, you may wish to send the frames to a server where they can be stored or converted into a movie. If no callback is provided, the browser will pop up save dialogues in an attempt to download all of the images that have just been created. With the callback provided the image data isn't saved by default but instead passed as an argument to the callback function as an array of objects, with the size of array equal to the total number of frames. +saveFrames__description__1 = Note that saveFrames() will only save the first 15 frames of an animation. To export longer animations, you might look into a library like ccapture.js. +saveFrames__params__filename = String +saveFrames__params__extension = String: 'jpg' or 'png' +saveFrames__params__duration = Number: Duration in seconds to save the frames for. +saveFrames__params__framerate = Number: Framerate to save the frames in. +saveFrames__params__callback = Function(Array): (Optional) A callback function that will be executed to handle the image data. This function should accept an array as argument. The array will contain the specified number of frames of objects. Each object has three properties: imageData - an image/octet-stream, filename and extension. +loadImage__description__0 = Loads an image from a path and creates a p5.Image from it. +loadImage__description__1 = The image may not be immediately available for rendering. If you want to ensure that the image is ready before doing anything with it, place the loadImage() call in preload(). You may also supply a callback function to handle the image when it's ready. +loadImage__description__2 = The path to the image should be relative to the HTML file that links in your sketch. Loading an image from a URL or other remote location may be blocked due to your browser's built-in security. +loadImage__description__3 = You can also pass in a string of a base64 encoded image as an alternative to the file path. Remember to add "data:image/png;base64," in front of the string. +loadImage__returns = p5.Image: the p5.Image object +loadImage__params__path = String: Path of the image to be loaded +loadImage__params__successCallback = function(p5.Image): (Optional) Function to be called once the image is loaded. Will be passed the p5.Image. +loadImage__params__failureCallback = Function(Event): (Optional) called with event error if the image fails to load. +image__description__0 = Draw an image to the p5.js canvas. +image__description__1 = This function can be used with different numbers of parameters. The simplest use requires only three parameters: img, x, and y—where (x, y) is the position of the image. Two more parameters can optionally be added to specify the width and height of the image. +image__description__2 = This function can also be used with all eight Number parameters. To differentiate between all these parameters, p5.js uses the language of "destination rectangle" (which corresponds to "dx", "dy", etc.) and "source image" (which corresponds to "sx", "sy", etc.) below. Specifying the "source image" dimensions can be useful when you want to display a subsection of the source image instead of the whole thing. Here's a diagram to explain further: +image__params__img = p5.Image|p5.Element|p5.Texture: the image to display +image__params__x = Number: the x-coordinate of the top-left corner of the image +image__params__y = Number: the y-coordinate of the top-left corner of the image +image__params__width = Number: (Optional) the width to draw the image +image__params__height = Number: (Optional) the height to draw the image +image__params__dx = Number: the x-coordinate of the destination rectangle in which to draw the source image +image__params__dy = Number: the y-coordinate of the destination rectangle in which to draw the source image +image__params__dWidth = Number: the width of the destination rectangle +image__params__dHeight = Number: the height of the destination rectangle +image__params__sx = Number: the x-coordinate of the subsection of the source image to draw into the destination rectangle +image__params__sy = Number: the y-coordinate of the subsection of the source image to draw into the destination rectangle +image__params__sWidth = Number: (Optional) the width of the subsection of the source image to draw into the destination rectangle +image__params__sHeight = Number: (Optional) the height of the subsection of the source image to draw into the destination rectangle +tint__description__0 = Sets the fill value for displaying images. Images can be tinted to specified colors or made transparent by including an alpha value. +tint__description__1 = To apply transparency to an image without affecting its color, use white as the tint color and specify an alpha value. For instance, tint(255, 128) will make an image 50% transparent (assuming the default alpha range of 0-255, which can be changed with colorMode()). +tint__description__2 = The value for the gray parameter must be less than or equal to the current maximum value as specified by colorMode(). The default maximum value is 255. +tint__params__v1 = Number: red or hue value relative to the current color range +tint__params__v2 = Number: green or saturation value relative to the current color range +tint__params__v3 = Number: blue or brightness value relative to the current color range +tint__params__alpha = Number (Optional) +tint__params__value = String: a color string +tint__params__gray = Number: a gray value +tint__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +tint__params__color = p5.Color: the tint color +noTint__description__0 = Removes the current fill value for displaying images and reverts to displaying images with their original hues. +imageMode__description__0 = Set image mode. Modifies the location from which images are drawn by changing the way in which parameters given to image() are interpreted. The default mode is imageMode(CORNER), which interprets the second and third parameters of image() as the upper-left corner of the image. If two additional parameters are specified, they are used to set the image's width and height. +imageMode__description__1 = imageMode(CORNERS) interprets the second and third parameters of image() as the location of one corner, and the fourth and fifth parameters as the opposite corner. +imageMode__description__2 = imageMode(CENTER) interprets the second and third parameters of image() as the image's center point. If two additional parameters are specified, they are used to set the image's width and height. +imageMode__params__mode = Constant: either CORNER, CORNERS, or CENTER +pixels__description__0 = Uint8ClampedArray containing the values for all the pixels in the display window. These values are numbers. This array is the size (include an appropriate factor for pixelDensity) of the display window x4, representing the R, G, B, A values in order for each pixel, moving from left to right across each row, then down each column. Retina and other high density displays will have more pixels[] (by a factor of pixelDensity^2). For example, if the image is 100×100 pixels, there will be 40,000. On a retina display, there will be 160,000. +pixels__description__1 = The first four values (indices 0-3) in the array will be the R, G, B, A values of the pixel at (0, 0). The second four values (indices 4-7) will contain the R, G, B, A values of the pixel at (1, 0). More generally, to set values for a pixel at (x, y):
        let d = pixelDensity(); for (let i = 0; i < d; i++) {"{"}  for (let j = 0; j < d; j++) {"{"}  // loop over  index = 4 * ((y * d + j) * width * d + (x * d + i));  pixels[index] = r;  pixels[index+1] = g;  pixels[index+2] = b;  pixels[index+3] = a;  {"}"} {"}"}
        +pixels__description__2 = While the above method is complex, it is flexible enough to work with any pixelDensity. Note that set() will automatically take care of setting all the appropriate values in pixels[] for a given (x, y) at any pixelDensity, but the performance may not be as fast when lots of modifications are made to the pixel array. +pixels__description__3 = Before accessing this array, the data must loaded with the loadPixels() function. After the array data has been modified, the updatePixels() function must be run to update the changes. +pixels__description__4 = Note that this is not a standard javascript array. This means that standard javascript functions such as slice() or arrayCopy() do not work. +blend__description__0 = Copies a region of pixels from one image to another, using a specified blend mode to do the operation. +blend__params__srcImage = p5.Image: source image +blend__params__sx = Integer: X coordinate of the source's upper left corner +blend__params__sy = Integer: Y coordinate of the source's upper left corner +blend__params__sw = Integer: source image width +blend__params__sh = Integer: source image height +blend__params__dx = Integer: X coordinate of the destination's upper left corner +blend__params__dy = Integer: Y coordinate of the destination's upper left corner +blend__params__dw = Integer: destination image width +blend__params__dh = Integer: destination image height +blend__params__blendMode = Constant: the blend mode. either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, SOFT_LIGHT, DODGE, BURN, ADD or NORMAL. +copy__description__0 = Copies a region of the canvas to another region of the canvas and copies a region of pixels from an image used as the srcImg parameter into the canvas srcImage is specified this is used as the source. If the source and destination regions aren't the same size, it will automatically resize source pixels to fit the specified target region. +copy__params__srcImage = p5.Image|p5.Element: source image +copy__params__sx = Integer: X coordinate of the source's upper left corner +copy__params__sy = Integer: Y coordinate of the source's upper left corner +copy__params__sw = Integer: source image width +copy__params__sh = Integer: source image height +copy__params__dx = Integer: X coordinate of the destination's upper left corner +copy__params__dy = Integer: Y coordinate of the destination's upper left corner +copy__params__dw = Integer: destination image width +copy__params__dh = Integer: destination image height +filter__description__0 = Applies a filter to the canvas. The presets options are: +filter__description__1 = THRESHOLD Converts the image to black and white pixels depending if they are above or below the threshold defined by the level parameter. The parameter must be between 0.0 (black) and 1.0 (white). If no level is specified, 0.5 is used. +filter__description__2 = GRAY Converts any colors in the image to grayscale equivalents. No parameter is used. +filter__description__3 = OPAQUE Sets the alpha channel to entirely opaque. No parameter is used. +filter__description__4 = INVERT Sets each pixel to its inverse value. No parameter is used. +filter__description__5 = POSTERIZE Limits each channel of the image to the number of colors specified as the parameter. The parameter can be set to values between 2 and 255, but results are most noticeable in the lower ranges. +filter__description__6 = BLUR Executes a Gaussian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Gaussian blur of radius 1. Larger values increase the blur. +filter__description__7 = ERODE Reduces the light areas. No parameter is used. +filter__description__8 = DILATE Increases the light areas. No parameter is used. +filter__description__9 = filter() does not work in WEBGL mode. A similar effect can be achieved in WEBGL mode using custom shaders. Adam Ferriss has written a selection of shader examples that contains many of the effects present in the filter examples. +filter__params__filterType = Constant: either THRESHOLD, GRAY, OPAQUE, INVERT, POSTERIZE, BLUR, ERODE, DILATE or BLUR. See Filters.js for docs on each available filter +filter__params__filterParam = Number: (Optional) an optional parameter unique to each filter, see above +get__description__0 = Get a region of pixels, or a single pixel, from the canvas. +get__description__1 = Returns an array of [R,G,B,A] values for any pixel or grabs a section of an image. If no parameters are specified, the entire image is returned. Use the x and y parameters to get the value of one pixel. Get a section of the display window by specifying additional w and h parameters. When getting an image, the x and y parameters define the coordinates for the upper-left corner of the image, regardless of the current imageMode(). +get__description__2 = Getting the color of a single pixel with get(x, y) is easy, but not as fast as grabbing the data directly from pixels[]. The equivalent statement to get(x, y) using pixels[] with pixel density d is
        let x, y, d; // set these to the coordinates let off = (y * width + x) * d * 4; let components = [  pixels[off],  pixels[off + 1],  pixels[off + 2],  pixels[off + 3] ]; print(components);
        +get__description__3 = See the reference for pixels[] for more information. +get__description__4 = If you want to extract an array of colors or a subimage from an p5.Image object, take a look at p5.Image.get() +get__returns = p5.Image: the rectangle p5.Image +get__params__x = Number: x-coordinate of the pixel +get__params__y = Number: y-coordinate of the pixel +get__params__w = Number: width +get__params__h = Number: height +loadPixels__description__0 = Loads the pixel data for the display window into the pixels[] array. This function must always be called before reading from or writing to pixels[]. Note that only changes made with set() or direct manipulation of pixels[] will occur. +set__description__0 = Changes the color of any pixel, or writes an image directly to the display window. The x and y parameters specify the pixel to change and the c parameter specifies the color value. This can be a p5.Color object, or [R, G, B, A] pixel array. It can also be a single grayscale value. When setting an image, the x and y parameters define the coordinates for the upper-left corner of the image, regardless of the current imageMode(). +set__description__1 = After using set(), you must call updatePixels() for your changes to appear. This should be called once all pixels have been set, and must be called before calling .get() or drawing the image. +set__description__2 = Setting the color of a single pixel with set(x, y) is easy, but not as fast as putting the data directly into pixels[]. Setting the pixels[] values directly may be complicated when working with a retina display, but will perform better when lots of pixels need to be set directly on every loop. See the reference for pixels[] for more information. +set__params__x = Number: x-coordinate of the pixel +set__params__y = Number: y-coordinate of the pixel +set__params__c = Number|Number[]|Object: insert a grayscale value | a pixel array | a p5.Color object | a p5.Image to copy +updatePixels__description__0 = Updates the display window with the data in the pixels[] array. Use in conjunction with loadPixels(). If you're only reading pixels from the array, there's no need to call updatePixels() — updating is only necessary to apply changes. updatePixels() should be called anytime the pixels array is manipulated or set() is called, and only changes made with set() or direct changes to pixels[] will occur. +updatePixels__params__x = Number: (Optional) x-coordinate of the upper-left corner of region to update +updatePixels__params__y = Number: (Optional) y-coordinate of the upper-left corner of region to update +updatePixels__params__w = Number: (Optional) width of region to update +updatePixels__params__h = Number: (Optional) height of region to update +loadJSON__description__0 = Loads a JSON file from a file or a URL, and returns an Object. Note that even if the JSON file contains an Array, an Object will be returned with index numbers as keys. +loadJSON__description__1 = This method is asynchronous, meaning it may not finish before the next line in your sketch is executed. JSONP is supported via a polyfill and you can pass in as the second argument an object with definitions of the json callback following the syntax specified here. +loadJSON__description__2 = This method is suitable for fetching files up to size of 64MB. +loadJSON__returns = Object|Array: JSON data +loadJSON__params__path = String: name of the file or url to load +loadJSON__params__jsonpOptions = Object: (Optional) options object for jsonp related settings +loadJSON__params__datatype = String: (Optional) "json" or "jsonp" +loadJSON__params__callback = Function: (Optional) function to be executed after loadJSON() completes, data is passed in as first argument +loadJSON__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +loadStrings__description__0 = Reads the contents of a file and creates a String array of its individual lines. If the name of the file is used as the parameter, as in the above example, the file must be located in the sketch directory/folder. +loadStrings__description__1 = Alternatively, the file maybe be loaded from anywhere on the local computer using an absolute path (something that starts with / on Unix and Linux, or a drive letter on Windows), or the filename parameter can be a URL for a file found on a network. +loadStrings__description__2 = This method is asynchronous, meaning it may not finish before the next line in your sketch is executed. +loadStrings__description__3 = This method is suitable for fetching files up to size of 64MB. +loadStrings__returns = String[]: Array of Strings +loadStrings__params__filename = String: name of the file or url to load +loadStrings__params__callback = Function: (Optional) function to be executed after loadStrings() completes, Array is passed in as first argument +loadStrings__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +loadTable__description__0 = Reads the contents of a file or URL and creates a p5.Table object with its values. If a file is specified, it must be located in the sketch's "data" folder. The filename parameter can also be a URL to a file found online. By default, the file is assumed to be comma-separated (in CSV format). Table only looks for a header row if the 'header' option is included. +loadTable__description__1 = This method is asynchronous, meaning it may not finish before the next line in your sketch is executed. Calling loadTable() inside preload() guarantees to complete the operation before setup() and draw() are called. Outside of preload(), you may supply a callback function to handle the object: +loadTable__description__2 = All files loaded and saved use UTF-8 encoding. This method is suitable for fetching files up to size of 64MB. +loadTable__returns = Object: Table object containing data +loadTable__params__filename = String: name of the file or URL to load +loadTable__params__extension = String: (Optional) parse the table by comma-separated values "csv", semicolon-separated values "ssv", or tab-separated values "tsv" +loadTable__params__header = String: (Optional) "header" to indicate table has header row +loadTable__params__callback = Function: (Optional) function to be executed after loadTable() completes. On success, the Table object is passed in as the first argument. +loadTable__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +loadXML__description__0 = Reads the contents of a file and creates an XML object with its values. If the name of the file is used as the parameter, as in the above example, the file must be located in the sketch directory/folder. +loadXML__description__1 = Alternatively, the file maybe be loaded from anywhere on the local computer using an absolute path (something that starts with / on Unix and Linux, or a drive letter on Windows), or the filename parameter can be a URL for a file found on a network. +loadXML__description__2 = This method is asynchronous, meaning it may not finish before the next line in your sketch is executed. Calling loadXML() inside preload() guarantees to complete the operation before setup() and draw() are called. +loadXML__description__3 = Outside of preload(), you may supply a callback function to handle the object. +loadXML__description__4 = This method is suitable for fetching files up to size of 64MB. +loadXML__returns = Object: XML object containing data +loadXML__params__filename = String: name of the file or URL to load +loadXML__params__callback = Function: (Optional) function to be executed after loadXML() completes, XML object is passed in as first argument +loadXML__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +loadBytes__description__0 = This method is suitable for fetching files up to size of 64MB. +loadBytes__returns = Object: an object whose 'bytes' property will be the loaded buffer +loadBytes__params__file = String: name of the file or URL to load +loadBytes__params__callback = Function: (Optional) function to be executed after loadBytes() completes +loadBytes__params__errorCallback = Function: (Optional) function to be executed if there is an error +httpGet__description__0 = Method for executing an HTTP GET request. If data type is not specified, p5 will try to guess based on the URL, defaulting to text. This is equivalent to calling httpDo(path, 'GET'). The 'binary' datatype will return a Blob object, and the 'arrayBuffer' datatype will return an ArrayBuffer which can be used to initialize typed arrays (such as Uint8Array). +httpGet__returns = Promise: A promise that resolves with the data when the operation completes successfully or rejects with the error after one occurs. +httpGet__params__path = String: name of the file or url to load +httpGet__params__datatype = String: (Optional) "json", "jsonp", "binary", "arrayBuffer", "xml", or "text" +httpGet__params__data = Object|Boolean: (Optional) param data passed sent with request +httpGet__params__callback = Function: (Optional) function to be executed after httpGet() completes, data is passed in as first argument +httpGet__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +httpPost__description__0 = Method for executing an HTTP POST request. If data type is not specified, p5 will try to guess based on the URL, defaulting to text. This is equivalent to calling httpDo(path, 'POST'). +httpPost__returns = Promise: A promise that resolves with the data when the operation completes successfully or rejects with the error after one occurs. +httpPost__params__path = String: name of the file or url to load +httpPost__params__datatype = String: (Optional) "json", "jsonp", "xml", or "text". If omitted, httpPost() will guess. +httpPost__params__data = Object|Boolean: (Optional) param data passed sent with request +httpPost__params__callback = Function: (Optional) function to be executed after httpPost() completes, data is passed in as first argument +httpPost__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +httpDo__description__0 = Method for executing an HTTP request. If data type is not specified, p5 will try to guess based on the URL, defaulting to text. For more advanced use, you may also pass in the path as the first argument and a object as the second argument, the signature follows the one specified in the Fetch API specification. This method is suitable for fetching files up to size of 64MB when "GET" is used. +httpDo__returns = Promise: A promise that resolves with the data when the operation completes successfully or rejects with the error after one occurs. +httpDo__params__path = String: name of the file or url to load +httpDo__params__method = String: (Optional) either "GET", "POST", or "PUT", defaults to "GET" +httpDo__params__datatype = String: (Optional) "json", "jsonp", "xml", or "text" +httpDo__params__data = Object: (Optional) param data passed sent with request +httpDo__params__callback = Function: (Optional) function to be executed after httpGet() completes, data is passed in as first argument +httpDo__params__errorCallback = Function: (Optional) function to be executed if there is an error, response is passed in as first argument +httpDo__params__options = Object: Request object options as documented in the "fetch" API reference +createWriter__returns = p5.PrintWriter: +createWriter__params__name = String: name of the file to be created +createWriter__params__extension = String (Optional) +save__description__0 = Saves a given element(image, text, json, csv, wav, or html) to the client's computer. The first parameter can be a pointer to element we want to save. The element can be one of p5.Element,an Array of Strings, an Array of JSON, a JSON object, a p5.Table , a p5.Image, or a p5.SoundFile (requires p5.sound). The second parameter is a filename (including extension).The third parameter is for options specific to this type of object. This method will save a file that fits the given parameters. If it is called without specifying an element, by default it will save the whole canvas as an image file. You can optionally specify a filename as the first parameter in such a case. Note that it is not recommended to call this method within draw, as it will open a new save dialog on every render. +save__params__objectOrFilename = Object|String: (Optional) If filename is provided, will save canvas as an image with either png or jpg extension depending on the filename. If object is provided, will save depending on the object and filename (see examples above). +save__params__filename = String: (Optional) If an object is provided as the first parameter, then the second parameter indicates the filename, and should include an appropriate file extension (see examples above). +save__params__options = Boolean|String: (Optional) Additional options depend on filetype. For example, when saving JSON, true indicates that the output will be optimized for filesize, rather than readability. +saveJSON__description__0 = Writes the contents of an Array or a JSON object to a .json file. The file saving process and location of the saved file will vary between web browsers. +saveJSON__params__json = Array|Object +saveJSON__params__filename = String +saveJSON__params__optimize = Boolean: (Optional) If true, removes line breaks and spaces from the output file to optimize filesize (but not readability). +saveStrings__description__0 = Writes an array of Strings to a text file, one line per String. The file saving process and location of the saved file will vary between web browsers. +saveStrings__params__list = String[]: string array to be written +saveStrings__params__filename = String: filename for output +saveStrings__params__extension = String: (Optional) the filename's extension +saveStrings__params__isCRLF = Boolean: (Optional) if true, change line-break to CRLF +saveTable__description__0 = Writes the contents of a Table object to a file. Defaults to a text file with comma-separated-values ('csv') but can also use tab separation ('tsv'), or generate an HTML table ('html'). The file saving process and location of the saved file will vary between web browsers. +saveTable__params__Table = p5.Table: the Table object to save to a file +saveTable__params__filename = String: the filename to which the Table should be saved +saveTable__params__options = String: (Optional) can be one of "tsv", "csv", or "html" +abs__description__0 = Calculates the absolute value (magnitude) of a number. Maps to Math.abs(). The absolute value of a number is always positive. +abs__returns = Number: absolute value of given number +abs__params__n = Number: number to compute +ceil__description__0 = Calculates the closest int value that is greater than or equal to the value of the parameter. Maps to Math.ceil(). For example, ceil(9.03) returns the value 10. +ceil__returns = Integer: rounded up number +ceil__params__n = Number: number to round up +constrain__description__0 = Constrains a value between a minimum and maximum value. +constrain__returns = Number: constrained number +constrain__params__n = Number: number to constrain +constrain__params__low = Number: minimum limit +constrain__params__high = Number: maximum limit +dist__description__0 = Calculates the distance between two points, in either two or three dimensions. If you looking for distance between two vectors see dist() +dist__returns = Number: distance between the two points +dist__params__x1 = Number: x-coordinate of the first point +dist__params__y1 = Number: y-coordinate of the first point +dist__params__x2 = Number: x-coordinate of the second point +dist__params__y2 = Number: y-coordinate of the second point +dist__params__z1 = Number: z-coordinate of the first point +dist__params__z2 = Number: z-coordinate of the second point +exp__description__0 = Returns Euler's number e (2.71828...) raised to the power of the n parameter. Maps to Math.exp(). +exp__returns = Number: e^n +exp__params__n = Number: exponent to raise +floor__description__0 = Calculates the closest int value that is less than or equal to the value of the parameter. Maps to Math.floor(). +floor__returns = Integer: rounded down number +floor__params__n = Number: number to round down +lerp__description__0 = Calculates a number between two numbers at a specific increment. The amt parameter is the amount to interpolate between the two values where 0.0 equal to the first point, 0.1 is very near the first point, 0.5 is half-way in between, and 1.0 is equal to the second point. If the value of amt is more than 1.0 or less than 0.0, the number will be calculated accordingly in the ratio of the two given numbers. The lerp function is convenient for creating motion along a straight path and for drawing dotted lines. +lerp__returns = Number: lerped value +lerp__params__start = Number: first value +lerp__params__stop = Number: second value +lerp__params__amt = Number: number +log__description__0 = Calculates the natural logarithm (the base-e logarithm) of a number. This function expects the n parameter to be a value greater than 0.0. Maps to Math.log(). +log__returns = Number: natural logarithm of n +log__params__n = Number: number greater than 0 +mag__description__0 = Calculates the magnitude (or length) of a vector. A vector is a direction in space commonly used in computer graphics and linear algebra. Because it has no "start" position, the magnitude of a vector can be thought of as the distance from the coordinate 0,0 to its x,y value. Therefore, mag() is a shortcut for writing dist(0, 0, x, y). +mag__returns = Number: magnitude of vector from (0,0) to (a,b) +mag__params__a = Number: first value +mag__params__b = Number: second value +map__description__0 = Re-maps a number from one range to another. +map__description__1 = In the first example above, the number 25 is converted from a value in the range of 0 to 100 into a value that ranges from the left edge of the window (0) to the right edge (width). +map__returns = Number: remapped number +map__params__value = Number: the incoming value to be converted +map__params__start1 = Number: lower bound of the value's current range +map__params__stop1 = Number: upper bound of the value's current range +map__params__start2 = Number: lower bound of the value's target range +map__params__stop2 = Number: upper bound of the value's target range +map__params__withinBounds = Boolean: (Optional) constrain the value to the newly mapped range +max__description__0 = Determines the largest value in a sequence of numbers, and then returns that value. max() accepts any number of Number parameters, or an Array of any length. +max__returns = Number: maximum Number +max__params__n0 = Number: Number to compare +max__params__n1 = Number: Number to compare +max__params__nums = Number[]: Numbers to compare +min__description__0 = Determines the smallest value in a sequence of numbers, and then returns that value. min() accepts any number of Number parameters, or an Array of any length. +min__returns = Number: minimum Number +min__params__n0 = Number: Number to compare +min__params__n1 = Number: Number to compare +min__params__nums = Number[]: Numbers to compare +norm__description__0 = Normalizes a number from another range into a value between 0 and 1. Identical to map(value, low, high, 0, 1). Numbers outside of the range are not clamped to 0 and 1, because out-of-range values are often intentional and useful. (See the example above.) +norm__returns = Number: normalized number +norm__params__value = Number: incoming value to be normalized +norm__params__start = Number: lower bound of the value's current range +norm__params__stop = Number: upper bound of the value's current range +pow__description__0 = Facilitates exponential expressions. The pow() function is an efficient way of multiplying numbers by themselves (or their reciprocals) in large quantities. For example, pow(3, 5) is equivalent to the expression 3 × 3 × 3 × 3 × 3 and pow(3, -5) is equivalent to 1 / 3 × 3 × 3 × 3 × 3. Maps to Math.pow(). +pow__returns = Number: n^e +pow__params__n = Number: base of the exponential expression +pow__params__e = Number: power by which to raise the base +round__description__0 = Calculates the integer closest to the n parameter. For example, round(133.8) returns the value 134. Maps to Math.round(). +round__returns = Integer: rounded number +round__params__n = Number: number to round +round__params__decimals = Number: (Optional) number of decimal places to round to, default is 0 +sq__description__0 = Squares a number (multiplies a number by itself). The result is always a positive number, as multiplying two negative numbers always yields a positive result. For example, -1 * -1 = 1. +sq__returns = Number: squared number +sq__params__n = Number: number to square +sqrt__description__0 = Calculates the square root of a number. The square root of a number is always positive, even though there may be a valid negative root. The square root s of number a is such that s*s = a. It is the opposite of squaring. Maps to Math.sqrt(). +sqrt__returns = Number: square root of number +sqrt__params__n = Number: non-negative number to square root +fract__description__0 = Calculates the fractional part of a number. +fract__returns = Number: fractional part of x, i.e, {"{"}x{"}"} +fract__params__num = Number: Number whose fractional part needs to be found out +createVector__description__0 = Creates a new p5.Vector (the datatype for storing vectors). This provides a two or three dimensional vector, specifically a Euclidean (also known as geometric) vector. A vector is an entity that has both magnitude and direction. +createVector__returns = p5.Vector: +createVector__params__x = Number: (Optional) x component of the vector +createVector__params__y = Number: (Optional) y component of the vector +createVector__params__z = Number: (Optional) z component of the vector +noise__description__0 = Returns the Perlin noise value at specified coordinates. Perlin noise is a random sequence generator producing a more naturally ordered, harmonic succession of numbers compared to the standard random() function. It was invented by Ken Perlin in the 1980s and been used since in graphical applications to produce procedural textures, natural motion, shapes, terrains etc.

        The main difference to the random() function is that Perlin noise is defined in an infinite n-dimensional space where each pair of coordinates corresponds to a fixed semi-random value (fixed only for the lifespan of the program; see the noiseSeed() function). p5.js can compute 1D, 2D and 3D noise, depending on the number of coordinates given. The resulting value will always be between 0.0 and 1.0. The noise value can be animated by moving through the noise space as demonstrated in the example above. The 2nd and 3rd dimension can also be interpreted as time.

        The actual noise is structured similar to an audio signal, in respect to the function's use of frequencies. Similar to the concept of harmonics in physics, perlin noise is computed over several octaves which are added together for the final result.

        Another way to adjust the character of the resulting sequence is the scale of the input coordinates. As the function works within an infinite space the value of the coordinates doesn't matter as such, only the distance between successive coordinates does (eg. when using noise() within a loop). As a general rule the smaller the difference between coordinates, the smoother the resulting noise sequence will be. Steps of 0.005-0.03 work best for most applications, but this will differ depending on use. +noise__returns = Number: Perlin noise value (between 0 and 1) at specified coordinates +noise__params__x = Number: x-coordinate in noise space +noise__params__y = Number: (Optional) y-coordinate in noise space +noise__params__z = Number: (Optional) z-coordinate in noise space +noiseDetail__description__0 = Adjusts the character and level of detail produced by the Perlin noise function. Similar to harmonics in physics, noise is computed over several octaves. Lower octaves contribute more to the output signal and as such define the overall intensity of the noise, whereas higher octaves create finer grained details in the noise sequence. By default, noise is computed over 4 octaves with each octave contributing exactly half than its predecessor, starting at 50% strength for the 1st octave. This falloff amount can be changed by adding an additional function parameter. Eg. a falloff factor of 0.75 means each octave will now have 75% impact (25% less) of the previous lower octave. Any value between 0.0 and 1.0 is valid, however note that values greater than 0.5 might result in greater than 1.0 values returned by noise(). By changing these parameters, the signal created by the noise() function can be adapted to fit very specific needs and characteristics. +noiseDetail__params__lod = Number: number of octaves to be used by the noise +noiseDetail__params__falloff = Number: falloff factor for each octave +noiseSeed__description__0 = Sets the seed value for noise(). By default, noise() produces different results each time the program is run. Set the value parameter to a constant to return the same pseudo-random numbers each time the software is run. +noiseSeed__params__seed = Number: the seed value +randomSeed__description__0 = Sets the seed value for random(). +randomSeed__description__1 = By default, random() produces different results each time the program is run. Set the seed parameter to a constant to return the same pseudo-random numbers each time the software is run. +randomSeed__params__seed = Number: the seed value +random__description__0 = Return a random floating-point number. +random__description__1 = Takes either 0, 1 or 2 arguments. +random__description__2 = If no argument is given, returns a random number from 0 up to (but not including) 1. +random__description__3 = If one argument is given and it is a number, returns a random number from 0 up to (but not including) the number. +random__description__4 = If one argument is given and it is an array, returns a random element from that array. +random__description__5 = If two arguments are given, returns a random number from the first argument up to (but not including) the second argument. +random__returns = Number: the random number +random__params__min = Number: (Optional) the lower bound (inclusive) +random__params__max = Number: (Optional) the upper bound (exclusive) +random__params__choices = Array: the array to choose from +randomGaussian__description__0 = Returns a random number fitting a Gaussian, or normal, distribution. There is theoretically no minimum or maximum value that randomGaussian() might return. Rather, there is just a very low probability that values far from the mean will be returned; and a higher probability that numbers near the mean will be returned. Takes either 0, 1 or 2 arguments. If no args, returns a mean of 0 and standard deviation of 1. If one arg, that arg is the mean (standard deviation is 1). If two args, first is mean, second is standard deviation. +randomGaussian__returns = Number: the random number +randomGaussian__params__mean = Number: (Optional) the mean +randomGaussian__params__sd = Number: (Optional) the standard deviation +acos__description__0 = The inverse of cos(), returns the arc cosine of a value. This function expects the values in the range of -1 to 1 and values are returned in the range 0 to PI (3.1415927) if the angleMode is RADIANS or 0 to 180 if the angle mode is DEGREES. +acos__returns = Number: the arc cosine of the given value +acos__params__value = Number: the value whose arc cosine is to be returned +asin__description__0 = The inverse of sin(), returns the arc sine of a value. This function expects the values in the range of -1 to 1 and values are returned in the range -PI/2 to PI/2 if the angleMode is RADIANS or -90 to 90 if the angle mode is DEGREES. +asin__returns = Number: the arc sine of the given value +asin__params__value = Number: the value whose arc sine is to be returned +atan__description__0 = The inverse of tan(), returns the arc tangent of a value. This function expects the values in the range of -Infinity to Infinity (exclusive) and values are returned in the range -PI/2 to PI/2 if the angleMode is RADIANS or -90 to 90 if the angle mode is DEGREES. +atan__returns = Number: the arc tangent of the given value +atan__params__value = Number: the value whose arc tangent is to be returned +atan2__description__0 = Calculates the angle (in radians) from a specified point to the coordinate origin as measured from the positive x-axis. Values are returned as a float in the range from PI to -PI if the angleMode is RADIANS or 180 to -180 if the angleMode is DEGREES. The atan2() function is most often used for orienting geometry to the position of the cursor. +atan2__description__1 = Note: The y-coordinate of the point is the first parameter, and the x-coordinate is the second parameter, due the the structure of calculating the tangent. +atan2__returns = Number: the arc tangent of the given point +atan2__params__y = Number: y-coordinate of the point +atan2__params__x = Number: x-coordinate of the point +cos__description__0 = Calculates the cosine of an angle. This function takes into account the current angleMode. Values are returned in the range -1 to 1. +cos__returns = Number: the cosine of the angle +cos__params__angle = Number: the angle +sin__description__0 = Calculates the sine of an angle. This function takes into account the current angleMode. Values are returned in the range -1 to 1. +sin__returns = Number: the sine of the angle +sin__params__angle = Number: the angle +tan__description__0 = Calculates the tangent of an angle. This function takes into account the current angleMode. Values are returned in the range of all real numbers. +tan__returns = Number: the tangent of the angle +tan__params__angle = Number: the angle +degrees__description__0 = Converts a radian measurement to its corresponding value in degrees. Radians and degrees are two ways of measuring the same thing. There are 360 degrees in a circle and 2*PI radians in a circle. For example, 90° = PI/2 = 1.5707964. This function does not take into account the current angleMode. +degrees__returns = Number: the converted angle +degrees__params__radians = Number: the radians value to convert to degrees +radians__description__0 = Converts a degree measurement to its corresponding value in radians. Radians and degrees are two ways of measuring the same thing. There are 360 degrees in a circle and 2*PI radians in a circle. For example, 90° = PI/2 = 1.5707964. This function does not take into account the current angleMode. +radians__returns = Number: the converted angle +radians__params__degrees = Number: the degree value to convert to radians +angleMode__description__0 = Sets the current mode of p5 to given mode. Default mode is RADIANS. +angleMode__params__mode = Constant: either RADIANS or DEGREES +textAlign__description__0 = Sets the current alignment for drawing text. Accepts two arguments: horizAlign (LEFT, CENTER, or RIGHT) and vertAlign (TOP, BOTTOM, CENTER, or BASELINE). +textAlign__description__1 = The horizAlign parameter is in reference to the x value of the text() function, while the vertAlign parameter is in reference to the y value. +textAlign__description__2 = So if you write textAlign(LEFT), you are aligning the left edge of your text to the x value you give in text(). If you write textAlign(RIGHT, TOP), you are aligning the right edge of your text to the x value and the top of edge of the text to the y value. +textAlign__params__horizAlign = Constant: horizontal alignment, either LEFT, CENTER, or RIGHT +textAlign__params__vertAlign = Constant: (Optional) vertical alignment, either TOP, BOTTOM, CENTER, or BASELINE +textLeading__description__0 = Sets/gets the spacing, in pixels, between lines of text. This setting will be used in all subsequent calls to the text() function. +textLeading__params__leading = Number: the size in pixels for spacing between lines +textSize__description__0 = Sets/gets the current font size. This size will be used in all subsequent calls to the text() function. Font size is measured in pixels. +textSize__params__theSize = Number: the size of the letters in units of pixels +textStyle__description__0 = Sets/gets the style of the text for system fonts to NORMAL, ITALIC, BOLD or BOLDITALIC. Note: this may be is overridden by CSS styling. For non-system fonts (opentype, truetype, etc.) please load styled fonts instead. +textStyle__params__theStyle = Constant: styling for text, either NORMAL, ITALIC, BOLD or BOLDITALIC +textWidth__description__0 = Calculates and returns the width of any character or text string. +textWidth__returns = Number: the calculated width +textWidth__params__theText = String: the String of characters to measure +textAscent__description__0 = Returns the ascent of the current font at its current size. The ascent represents the distance, in pixels, of the tallest character above the baseline. +textAscent__returns = Number: +textDescent__description__0 = Returns the descent of the current font at its current size. The descent represents the distance, in pixels, of the character with the longest descender below the baseline. +textDescent__returns = Number: +textWrap__description__0 = Specifies how lines of text are wrapped within a text box. This requires a max-width set on the text area, specified in text() as parameter x2. +textWrap__description__1 = WORD wrap style only breaks lines at spaces. A single string without spaces that exceeds the boundaries of the canvas or text area is not truncated, and will overflow the desired area, disappearing at the canvas edge. +textWrap__description__2 = CHAR wrap style breaks lines wherever needed to stay within the text box. +textWrap__description__3 = WORD is the default wrap style, and both styles will still break lines at any line breaks (\n) specified in the original text. The text area max-height parameter (y2) also still applies to wrapped text in both styles, lines of text that do not fit within the text area will not be drawn to the screen. +textWrap__returns = String: wrapStyle +textWrap__params__wrapStyle = Constant: text wrapping style, either WORD or CHAR +loadFont__description__0 = Loads an opentype font file (.otf, .ttf) from a file or a URL, and returns a PFont Object. This method is asynchronous, meaning it may not finish before the next line in your sketch is executed. +loadFont__description__1 = The path to the font should be relative to the HTML file that links in your sketch. Loading fonts from a URL or other remote location may be blocked due to your browser's built-in security. +loadFont__returns = p5.Font: p5.Font object +loadFont__params__path = String: name of the file or url to load +loadFont__params__callback = Function: (Optional) function to be executed after loadFont() completes +loadFont__params__onError = Function: (Optional) function to be executed if an error occurs +text__description__0 = Draws text to the screen. Displays the information specified in the first parameter on the screen in the position specified by the additional parameters. A default font will be used unless a font is set with the textFont() function and a default size will be used unless a font is set with textSize(). Change the color of the text with the fill() function. Change the outline of the text with the stroke() and strokeWeight() functions. +text__description__1 = The text displays in relation to the textAlign() function, which gives the option to draw to the left, right, and center of the coordinates. +text__description__2 = The x2 and y2 parameters define a rectangular area to display within and may only be used with string data. When these parameters are specified, they are interpreted based on the current rectMode() setting. Text that does not fit completely within the rectangle specified will not be drawn to the screen. If x2 and y2 are not specified, the baseline alignment is the default, which means that the text will be drawn upwards from x and y. +text__description__3 = WEBGL: Only opentype/truetype fonts are supported. You must load a font using the loadFont() method (see the example above). stroke() currently has no effect in webgl mode. Learn more about working with text in webgl mode on the wiki. +text__params__str = String|Object|Array|Number|Boolean: the alphanumeric symbols to be displayed +text__params__x = Number: x-coordinate of text +text__params__y = Number: y-coordinate of text +text__params__x2 = Number: (Optional) by default, the width of the text box, see rectMode() for more info +text__params__y2 = Number: (Optional) by default, the height of the text box, see rectMode() for more info +textFont__description__0 = Sets the current font that will be drawn with the text() function. If textFont() is called without any argument, it will return the current font if one has been set already. If not, it will return the name of the default font as a string. If textFont() is called with a font to use, it will return the p5 object. +textFont__description__1 = WEBGL: Only fonts loaded via loadFont() are supported. +textFont__returns = Object: the current font / p5 Object +textFont__params__font = Object|String: a font loaded via loadFont(), or a String representing a web safe font (a font that is generally available across all systems) +textFont__params__size = Number: (Optional) the font size to use +append__description__0 = Adds a value to the end of an array. Extends the length of the array by one. Maps to Array.push(). +append__returns = Array: the array that was appended to +append__params__array = Array: Array to append +append__params__value = Any: to be added to the Array +arrayCopy__description__0 = Copies an array (or part of an array) to another array. The src array is copied to the dst array, beginning at the position specified by srcPosition and into the position specified by dstPosition. The number of elements to copy is determined by length. Note that copying values overwrites existing values in the destination array. To append values instead of overwriting them, use concat(). +arrayCopy__description__1 = The simplified version with only two arguments, arrayCopy(src, dst), copies an entire array to another of the same size. It is equivalent to arrayCopy(src, 0, dst, 0, src.length). +arrayCopy__description__2 = Using this function is far more efficient for copying array data than iterating through a for() loop and copying each element individually. +arrayCopy__params__src = Array: the source Array +arrayCopy__params__srcPosition = Integer: starting position in the source Array +arrayCopy__params__dst = Array: the destination Array +arrayCopy__params__dstPosition = Integer: starting position in the destination Array +arrayCopy__params__length = Integer: number of Array elements to be copied +concat__description__0 = Concatenates two arrays, maps to Array.concat(). Does not modify the input arrays. +concat__returns = Array: concatenated array +concat__params__a = Array: first Array to concatenate +concat__params__b = Array: second Array to concatenate +reverse__description__0 = Reverses the order of an array, maps to Array.reverse() +reverse__returns = Array: the reversed list +reverse__params__list = Array: Array to reverse +shorten__description__0 = Decreases an array by one element and returns the shortened array, maps to Array.pop(). +shorten__returns = Array: shortened Array +shorten__params__list = Array: Array to shorten +shuffle__description__0 = Randomizes the order of the elements of an array. Implements Fisher-Yates Shuffle Algorithm. +shuffle__returns = Array: shuffled Array +shuffle__params__array = Array: Array to shuffle +shuffle__params__bool = Boolean: (Optional) modify passed array +sort__description__0 = Sorts an array of numbers from smallest to largest, or puts an array of words in alphabetical order. The original array is not modified; a re-ordered array is returned. The count parameter states the number of elements to sort. For example, if there are 12 elements in an array and count is set to 5, only the first 5 elements in the array will be sorted. +sort__returns = Array: the sorted list +sort__params__list = Array: Array to sort +sort__params__count = Integer: (Optional) number of elements to sort, starting from 0 +splice__description__0 = Inserts a value or an array of values into an existing array. The first parameter specifies the initial array to be modified, and the second parameter defines the data to be inserted. The third parameter is an index value which specifies the array position from which to insert data. (Remember that array index numbering starts at zero, so the first position is 0, the second position is 1, and so on.) +splice__returns = Array: the list +splice__params__list = Array: Array to splice into +splice__params__value = Any: value to be spliced in +splice__params__position = Integer: in the array from which to insert data +subset__description__0 = Extracts an array of elements from an existing array. The list parameter defines the array from which the elements will be copied, and the start and count parameters specify which elements to extract. If no count is given, elements will be extracted from the start to the end of the array. When specifying the start, remember that the first array element is 0. This function does not change the source array. +subset__returns = Array: Array of extracted elements +subset__params__list = Array: Array to extract from +subset__params__start = Integer: position to begin +subset__params__count = Integer: (Optional) number of values to extract +float__description__0 = Converts a string to its floating point representation. The contents of a string must resemble a number, or NaN (not a number) will be returned. For example, float("1234.56") evaluates to 1234.56, but float("giraffe") will return NaN. +float__description__1 = When an array of values is passed in, then an array of floats of the same length is returned. +float__returns = Number: floating point representation of string +float__params__str = String: float string to parse +int__description__0 = Converts a boolean, string, or float to its integer representation. When an array of values is passed in, then an int array of the same length is returned. +int__returns = Number: integer representation of value +int__params__n = String|Boolean|Number: value to parse +int__params__radix = Integer: (Optional) the radix to convert to (default: 10) +int__params__ns = Array: values to parse +str__description__0 = Converts a boolean, string or number to its string representation. When an array of values is passed in, then an array of strings of the same length is returned. +str__returns = String: string representation of value +str__params__n = String|Boolean|Number|Array: value to parse +byte__description__0 = Converts a number, string representation of a number, or boolean to its byte representation. A byte can be only a whole number between -128 and 127, so when a value outside of this range is converted, it wraps around to the corresponding byte representation. When an array of number, string or boolean values is passed in, then an array of bytes the same length is returned. +byte__returns = Number: byte representation of value +byte__params__n = String|Boolean|Number: value to parse +byte__params__ns = Array: values to parse +char__description__0 = Converts a number or string to its corresponding single-character string representation. If a string parameter is provided, it is first parsed as an integer and then translated into a single-character string. When an array of number or string values is passed in, then an array of single-character strings of the same length is returned. +char__returns = String: string representation of value +char__params__n = String|Number: value to parse +char__params__ns = Array: values to parse +unchar__description__0 = Converts a single-character string to its corresponding integer representation. When an array of single-character string values is passed in, then an array of integers of the same length is returned. +unchar__returns = Number: integer representation of value +unchar__params__n = String: value to parse +unchar__params__ns = Array: values to parse +hex__description__0 = Converts a number to a string in its equivalent hexadecimal notation. If a second parameter is passed, it is used to set the number of characters to generate in the hexadecimal notation. When an array is passed in, an array of strings in hexadecimal notation of the same length is returned. +hex__returns = String: hexadecimal string representation of value +hex__params__n = Number: value to parse +hex__params__digits = Number (Optional) +hex__params__ns = Number[]: array of values to parse +unhex__description__0 = Converts a string representation of a hexadecimal number to its equivalent integer value. When an array of strings in hexadecimal notation is passed in, an array of integers of the same length is returned. +unhex__returns = Number: integer representation of hexadecimal value +unhex__params__n = String: value to parse +unhex__params__ns = Array: values to parse +join__description__0 = Combines an array of Strings into one String, each separated by the character(s) used for the separator parameter. To join arrays of ints or floats, it's necessary to first convert them to Strings using nf() or nfs(). +join__returns = String: joined String +join__params__list = Array: array of Strings to be joined +join__params__separator = String: String to be placed between each item +match__description__0 = This function is used to apply a regular expression to a piece of text, and return matching groups (elements found inside parentheses) as a String array. If there are no matches, a null value will be returned. If no groups are specified in the regular expression, but the sequence matches, an array of length 1 (with the matched text as the first element of the array) will be returned. +match__description__1 = To use the function, first check to see if the result is null. If the result is null, then the sequence did not match at all. If the sequence did match, an array is returned. +match__description__2 = If there are groups (specified by sets of parentheses) in the regular expression, then the contents of each will be returned in the array. Element [0] of a regular expression match returns the entire matching string, and the match groups start at element [1] (the first group is [1], the second [2], and so on). +match__returns = String[]: Array of Strings found +match__params__str = String: the String to be searched +match__params__regexp = String: the regexp to be used for matching +matchAll__description__0 = This function is used to apply a regular expression to a piece of text, and return a list of matching groups (elements found inside parentheses) as a two-dimensional String array. If there are no matches, a null value will be returned. If no groups are specified in the regular expression, but the sequence matches, a two dimensional array is still returned, but the second dimension is only of length one. +matchAll__description__1 = To use the function, first check to see if the result is null. If the result is null, then the sequence did not match at all. If the sequence did match, a 2D array is returned. +matchAll__description__2 = If there are groups (specified by sets of parentheses) in the regular expression, then the contents of each will be returned in the array. Assuming a loop with counter variable i, element [i][0] of a regular expression match returns the entire matching string, and the match groups start at element [i][1] (the first group is [i][1], the second [i][2], and so on). +matchAll__returns = String[]: 2d Array of Strings found +matchAll__params__str = String: the String to be searched +matchAll__params__regexp = String: the regexp to be used for matching +nf__description__0 = Utility function for formatting numbers into strings. There are two versions: one for formatting floats, and one for formatting ints. +nf__description__1 = The values for the digits, left, and right parameters should always be positive integers. +nf__description__2 = (NOTE): Be cautious when using left and right parameters as it prepends numbers of 0's if the parameter if greater than the current length of the number. +nf__description__3 = For example if number is 123.2 and left parameter passed is 4 which is greater than length of 123 (integer part) i.e 3 than result will be 0123.2. Same case for right parameter i.e. if right is 3 than the result will be 123.200. +nf__returns = String: formatted String +nf__params__num = Number|String: the Number to format +nf__params__left = Integer|String: (Optional) number of digits to the left of the decimal point +nf__params__right = Integer|String: (Optional) number of digits to the right of the decimal point +nf__params__nums = Array: the Numbers to format +nfc__description__0 = Utility function for formatting numbers into strings and placing appropriate commas to mark units of 1000. There are two versions: one for formatting ints, and one for formatting an array of ints. The value for the right parameter should always be a positive integer. +nfc__returns = String: formatted String +nfc__params__num = Number|String: the Number to format +nfc__params__right = Integer|String: (Optional) number of digits to the right of the decimal point +nfc__params__nums = Array: the Numbers to format +nfp__description__0 = Utility function for formatting numbers into strings. Similar to nf() but puts a "+" in front of positive numbers and a "-" in front of negative numbers. There are two versions: one for formatting floats, and one for formatting ints. The values for left, and right parameters should always be positive integers. +nfp__returns = String: formatted String +nfp__params__num = Number: the Number to format +nfp__params__left = Integer: (Optional) number of digits to the left of the decimal point +nfp__params__right = Integer: (Optional) number of digits to the right of the decimal point +nfp__params__nums = Number[]: the Numbers to format +nfs__description__0 = Utility function for formatting numbers into strings. Similar to nf() but puts an additional "_" (space) in front of positive numbers just in case to align it with negative numbers which includes "-" (minus) sign. +nfs__description__1 = The main usecase of nfs() can be seen when one wants to align the digits (place values) of a non-negative number with some negative number (See the example to get a clear picture). There are two versions: one for formatting float, and one for formatting int. +nfs__description__2 = The values for the digits, left, and right parameters should always be positive integers. +nfs__description__3 = (IMP): The result on the canvas basically the expected alignment can vary based on the typeface you are using. +nfs__description__4 = (NOTE): Be cautious when using left and right parameters as it prepends numbers of 0's if the parameter if greater than the current length of the number. +nfs__description__5 = For example if number is 123.2 and left parameter passed is 4 which is greater than length of 123 (integer part) i.e 3 than result will be 0123.2. Same case for right parameter i.e. if right is 3 than the result will be 123.200. +nfs__returns = String: formatted String +nfs__params__num = Number: the Number to format +nfs__params__left = Integer: (Optional) number of digits to the left of the decimal point +nfs__params__right = Integer: (Optional) number of digits to the right of the decimal point +nfs__params__nums = Array: the Numbers to format +split__description__0 = The split() function maps to String.split(), it breaks a String into pieces using a character or string as the delimiter. The delim parameter specifies the character or characters that mark the boundaries between each piece. A String[] array is returned that contains each of the pieces. +split__description__1 = The splitTokens() function works in a similar fashion, except that it splits using a range of characters instead of a specific character or sequence. +split__returns = String[]: Array of Strings +split__params__value = String: the String to be split +split__params__delim = String: the String used to separate the data +splitTokens__description__0 = The splitTokens() function splits a String at one or many character delimiters or "tokens." The delim parameter specifies the character or characters to be used as a boundary. +splitTokens__description__1 = If no delim characters are specified, any whitespace character is used to split. Whitespace characters include tab (\t), line feed (\n), carriage return (\r), form feed (\f), and space. +splitTokens__returns = String[]: Array of Strings +splitTokens__params__value = String: the String to be split +splitTokens__params__delim = String: (Optional) list of individual Strings that will be used as separators +trim__description__0 = Removes whitespace characters from the beginning and end of a String. In addition to standard whitespace characters such as space, carriage return, and tab, this function also removes the Unicode "nbsp" character. +trim__returns = String: a trimmed String +trim__params__str = String: a String to be trimmed +trim__params__strs = Array: an Array of Strings to be trimmed +day__description__0 = p5.js communicates with the clock on your computer. The day() function returns the current day as a value from 1 - 31. +day__returns = Integer: the current day +hour__description__0 = p5.js communicates with the clock on your computer. The hour() function returns the current hour as a value from 0 - 23. +hour__returns = Integer: the current hour +minute__description__0 = p5.js communicates with the clock on your computer. The minute() function returns the current minute as a value from 0 - 59. +minute__returns = Integer: the current minute +millis__description__0 = Returns the number of milliseconds (thousandths of a second) since starting the sketch (when setup() is called). This information is often used for timing events and animation sequences. +millis__returns = Number: the number of milliseconds since starting the sketch +month__description__0 = p5.js communicates with the clock on your computer. The month() function returns the current month as a value from 1 - 12. +month__returns = Integer: the current month +second__description__0 = p5.js communicates with the clock on your computer. The second() function returns the current second as a value from 0 - 59. +second__returns = Integer: the current second +year__description__0 = p5.js communicates with the clock on your computer. The year() function returns the current year as an integer (2014, 2015, 2016, etc). +year__returns = Integer: the current year +plane__description__0 = Draw a plane with given a width and height +plane__params__width = Number: (Optional) width of the plane +plane__params__height = Number: (Optional) height of the plane +plane__params__detailX = Integer: (Optional) Optional number of triangle subdivisions in x-dimension +plane__params__detailY = Integer: (Optional) Optional number of triangle subdivisions in y-dimension +box__description__0 = Draw a box with given width, height and depth +box__params__width = Number: (Optional) width of the box +box__params__Height = Number: (Optional) height of the box +box__params__depth = Number: (Optional) depth of the box +box__params__detailX = Integer: (Optional) Optional number of triangle subdivisions in x-dimension +box__params__detailY = Integer: (Optional) Optional number of triangle subdivisions in y-dimension +sphere__description__0 = Draw a sphere with given radius. +sphere__description__1 = DetailX and detailY determines the number of subdivisions in the x-dimension and the y-dimension of a sphere. More subdivisions make the sphere seem smoother. The recommended maximum values are both 24. Using a value greater than 24 may cause a warning or slow down the browser. +sphere__params__radius = Number: (Optional) radius of circle +sphere__params__detailX = Integer: (Optional) optional number of subdivisions in x-dimension +sphere__params__detailY = Integer: (Optional) optional number of subdivisions in y-dimension +cylinder__description__0 = Draw a cylinder with given radius and height +cylinder__description__1 = DetailX and detailY determines the number of subdivisions in the x-dimension and the y-dimension of a cylinder. More subdivisions make the cylinder seem smoother. The recommended maximum value for detailX is 24. Using a value greater than 24 may cause a warning or slow down the browser. +cylinder__params__radius = Number: (Optional) radius of the surface +cylinder__params__height = Number: (Optional) height of the cylinder +cylinder__params__detailX = Integer: (Optional) number of subdivisions in x-dimension; default is 24 +cylinder__params__detailY = Integer: (Optional) number of subdivisions in y-dimension; default is 1 +cylinder__params__bottomCap = Boolean: (Optional) whether to draw the bottom of the cylinder +cylinder__params__topCap = Boolean: (Optional) whether to draw the top of the cylinder +cone__description__0 = Draw a cone with given radius and height +cone__description__1 = DetailX and detailY determine the number of subdivisions in the x-dimension and the y-dimension of a cone. More subdivisions make the cone seem smoother. The recommended maximum value for detailX is 24. Using a value greater than 24 may cause a warning or slow down the browser. +cone__params__radius = Number: (Optional) radius of the bottom surface +cone__params__height = Number: (Optional) height of the cone +cone__params__detailX = Integer: (Optional) number of segments, the more segments the smoother geometry default is 24 +cone__params__detailY = Integer: (Optional) number of segments, the more segments the smoother geometry default is 1 +cone__params__cap = Boolean: (Optional) whether to draw the base of the cone +ellipsoid__description__0 = Draw an ellipsoid with given radius +ellipsoid__description__1 = DetailX and detailY determine the number of subdivisions in the x-dimension and the y-dimension of a cone. More subdivisions make the ellipsoid appear to be smoother. Avoid detail number above 150, it may crash the browser. +ellipsoid__params__radiusx = Number: (Optional) x-radius of ellipsoid +ellipsoid__params__radiusy = Number: (Optional) y-radius of ellipsoid +ellipsoid__params__radiusz = Number: (Optional) z-radius of ellipsoid +ellipsoid__params__detailX = Integer: (Optional) number of segments, the more segments the smoother geometry default is 24. Avoid detail number above 150, it may crash the browser. +ellipsoid__params__detailY = Integer: (Optional) number of segments, the more segments the smoother geometry default is 16. Avoid detail number above 150, it may crash the browser. +torus__description__0 = Draw a torus with given radius and tube radius +torus__description__1 = DetailX and detailY determine the number of subdivisions in the x-dimension and the y-dimension of a torus. More subdivisions make the torus appear to be smoother. The default and maximum values for detailX and detailY are 24 and 16, respectively. Setting them to relatively small values like 4 and 6 allows you to create new shapes other than a torus. +torus__params__radius = Number: (Optional) radius of the whole ring +torus__params__tubeRadius = Number: (Optional) radius of the tube +torus__params__detailX = Integer: (Optional) number of segments in x-dimension, the more segments the smoother geometry default is 24 +torus__params__detailY = Integer: (Optional) number of segments in y-dimension, the more segments the smoother geometry default is 16 +orbitControl__description__0 = Allows movement around a 3D sketch using a mouse or trackpad. Left-clicking and dragging will rotate the camera position about the center of the sketch, right-clicking and dragging will pan the camera position without rotation, and using the mouse wheel (scrolling) will move the camera closer or further from the center of the sketch. This function can be called with parameters dictating sensitivity to mouse movement along the X and Y axes. Calling this function without parameters is equivalent to calling orbitControl(1,1). To reverse direction of movement in either axis, enter a negative number for sensitivity. +orbitControl__params__sensitivityX = Number: (Optional) sensitivity to mouse movement along X axis +orbitControl__params__sensitivityY = Number: (Optional) sensitivity to mouse movement along Y axis +orbitControl__params__sensitivityZ = Number: (Optional) sensitivity to scroll movement along Z axis +debugMode__description__0 = debugMode() helps visualize 3D space by adding a grid to indicate where the ‘ground’ is in a sketch and an axes icon which indicates the +X, +Y, and +Z directions. This function can be called without parameters to create a default grid and axes icon, or it can be called according to the examples above to customize the size and position of the grid and/or axes icon. The grid is drawn using the most recently set stroke color and weight. To specify these parameters, add a call to stroke() and strokeWeight() just before the end of the draw() loop. +debugMode__description__1 = By default, the grid will run through the origin (0,0,0) of the sketch along the XZ plane and the axes icon will be offset from the origin. Both the grid and axes icon will be sized according to the current canvas size. Note that because the grid runs parallel to the default camera view, it is often helpful to use debugMode along with orbitControl to allow full view of the grid. +debugMode__params__mode = Constant: either GRID or AXES +debugMode__params__gridSize = Number: (Optional) size of one side of the grid +debugMode__params__gridDivisions = Number: (Optional) number of divisions in the grid +debugMode__params__xOff = Number: (Optional) X axis offset from origin (0,0,0) +debugMode__params__yOff = Number: (Optional) Y axis offset from origin (0,0,0) +debugMode__params__zOff = Number: (Optional) Z axis offset from origin (0,0,0) +debugMode__params__axesSize = Number: (Optional) size of axes icon +debugMode__params__gridXOff = Number (Optional) +debugMode__params__gridYOff = Number (Optional) +debugMode__params__gridZOff = Number (Optional) +debugMode__params__axesXOff = Number (Optional) +debugMode__params__axesYOff = Number (Optional) +debugMode__params__axesZOff = Number (Optional) +noDebugMode__description__0 = Turns off debugMode() in a 3D sketch. +ambientLight__description__0 = Creates an ambient light with a color. Ambient light is light that comes from everywhere on the canvas. It has no particular source. +ambientLight__params__v1 = Number: red or hue value relative to the current color range +ambientLight__params__v2 = Number: green or saturation value relative to the current color range +ambientLight__params__v3 = Number: blue or brightness value relative to the current color range +ambientLight__params__alpha = Number: (Optional) the alpha value +ambientLight__params__value = String: a color string +ambientLight__params__gray = Number: a gray value +ambientLight__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +ambientLight__params__color = p5.Color: the ambient light color +specularColor__description__0 = Set's the color of the specular highlight when using a specular material and specular light. +specularColor__description__1 = This method can be combined with specularMaterial() and shininess() functions to set specular highlights. The default color is white, ie (255, 255, 255), which is used if this method is not called before specularMaterial(). If this method is called without specularMaterial(), There will be no effect. +specularColor__description__2 = Note: specularColor is equivalent to the processing function lightSpecular. +specularColor__params__v1 = Number: red or hue value relative to the current color range +specularColor__params__v2 = Number: green or saturation value relative to the current color range +specularColor__params__v3 = Number: blue or brightness value relative to the current color range +specularColor__params__value = String: a color string +specularColor__params__gray = Number: a gray value +specularColor__params__values = Number[]: an array containing the red,green,blue & and alpha components of the color +specularColor__params__color = p5.Color: the ambient light color +directionalLight__description__0 = Creates a directional light with a color and a direction +directionalLight__description__1 = A maximum of 5 directionalLight can be active at one time +directionalLight__params__v1 = Number: red or hue value (depending on the current color mode), +directionalLight__params__v2 = Number: green or saturation value +directionalLight__params__v3 = Number: blue or brightness value +directionalLight__params__position = p5.Vector: the direction of the light +directionalLight__params__color = Number[]|String|p5.Color: color Array, CSS color string, or p5.Color value +directionalLight__params__x = Number: x axis direction +directionalLight__params__y = Number: y axis direction +directionalLight__params__z = Number: z axis direction +pointLight__description__0 = Creates a point light with a color and a light position +pointLight__description__1 = A maximum of 5 pointLight can be active at one time +pointLight__params__v1 = Number: red or hue value (depending on the current color mode), +pointLight__params__v2 = Number: green or saturation value +pointLight__params__v3 = Number: blue or brightness value +pointLight__params__x = Number: x axis position +pointLight__params__y = Number: y axis position +pointLight__params__z = Number: z axis position +pointLight__params__position = p5.Vector: the position of the light +pointLight__params__color = Number[]|String|p5.Color: color Array, CSS color string, or p5.Color value +lights__description__0 = Sets the default ambient and directional light. The defaults are ambientLight(128, 128, 128) and directionalLight(128, 128, 128, 0, 0, -1). Lights need to be included in the draw() to remain persistent in a looping program. Placing them in the setup() of a looping program will cause them to only have an effect the first time through the loop. +lightFalloff__description__0 = Sets the falloff rates for point lights. It affects only the elements which are created after it in the code. The default value is lightFalloff(1.0, 0.0, 0.0), and the parameters are used to calculate the falloff with the following equation: +lightFalloff__description__1 = d = distance from light position to vertex position +lightFalloff__description__2 = falloff = 1 / (CONSTANT + d * LINEAR + ( d * d ) * QUADRATIC) +lightFalloff__params__constant = Number: constant value for determining falloff +lightFalloff__params__linear = Number: linear value for determining falloff +lightFalloff__params__quadratic = Number: quadratic value for determining falloff +spotLight__description__0 = Creates a spotlight with a given color, position, direction of light, angle and concentration. Here, angle refers to the opening or aperture of the cone of the spotlight, and concentration is used to focus the light towards the center. Both angle and concentration are optional, but if you want to provide concentration, you will also have to specify the angle. +spotLight__description__1 = A maximum of 5 spotLight can be active at one time +spotLight__params__v1 = Number: red or hue value (depending on the current color mode), +spotLight__params__v2 = Number: green or saturation value +spotLight__params__v3 = Number: blue or brightness value +spotLight__params__x = Number: x axis position +spotLight__params__y = Number: y axis position +spotLight__params__z = Number: z axis position +spotLight__params__rx = Number: x axis direction of light +spotLight__params__ry = Number: y axis direction of light +spotLight__params__rz = Number: z axis direction of light +spotLight__params__angle = Number: (Optional) optional parameter for angle. Defaults to PI/3 +spotLight__params__conc = Number: (Optional) optional parameter for concentration. Defaults to 100 +spotLight__params__color = Number[]|String|p5.Color: color Array, CSS color string, or p5.Color value +spotLight__params__position = p5.Vector: the position of the light +spotLight__params__direction = p5.Vector: the direction of the light +noLights__description__0 = This function will remove all the lights from the sketch for the subsequent materials rendered. It affects all the subsequent methods. Calls to lighting methods made after noLights() will re-enable lights in the sketch. +loadModel__description__0 = Load a 3d model from an OBJ or STL file. +loadModel__description__1 = loadModel() should be placed inside of preload(). This allows the model to load fully before the rest of your code is run. +loadModel__description__2 = One of the limitations of the OBJ and STL format is that it doesn't have a built-in sense of scale. This means that models exported from different programs might be very different sizes. If your model isn't displaying, try calling loadModel() with the normalized parameter set to true. This will resize the model to a scale appropriate for p5. You can also make additional changes to the final size of your model with the scale() function. +loadModel__description__3 = Also, the support for colored STL files is not present. STL files with color will be rendered without color properties. +loadModel__returns = p5.Geometry: the p5.Geometry object +loadModel__params__path = String: Path of the model to be loaded +loadModel__params__normalize = Boolean: If true, scale the model to a standardized size when loading +loadModel__params__successCallback = function(p5.Geometry): (Optional) Function to be called once the model is loaded. Will be passed the 3D model object. +loadModel__params__failureCallback = Function(Event): (Optional) called with event error if the model fails to load. +loadModel__params__fileType = String: (Optional) The file extension of the model (.stl, .obj). +model__description__0 = Render a 3d model to the screen. +model__params__model = p5.Geometry: Loaded 3d model to be rendered +loadShader__description__0 = Creates a new p5.Shader object from the provided vertex and fragment shader files. +loadShader__description__1 = The shader files are loaded asynchronously in the background, so this method should be used in preload(). +loadShader__description__2 = Note, shaders can only be used in WEBGL mode. +loadShader__returns = p5.Shader: a shader object created from the provided vertex and fragment shader files. +loadShader__params__vertFilename = String: path to file containing vertex shader source code +loadShader__params__fragFilename = String: path to file containing fragment shader source code +loadShader__params__callback = Function: (Optional) callback to be executed after loadShader completes. On success, the p5.Shader object is passed as the first argument. +loadShader__params__errorCallback = Function: (Optional) callback to be executed when an error occurs inside loadShader. On error, the error is passed as the first argument. +createShader__description__0 = Creates a new p5.Shader object from the provided vertex and fragment shader code. +createShader__description__1 = Note, shaders can only be used in WEBGL mode. +createShader__returns = p5.Shader: a shader object created from the provided vertex and fragment shaders. +createShader__params__vertSrc = String: source code for the vertex shader +createShader__params__fragSrc = String: source code for the fragment shader +shader__description__0 = Sets the p5.Shader object to be used to render subsequent shapes. +shader__description__1 = Custom shaders can be created using the createShader() and loadShader() functions. +shader__description__2 = Use resetShader() to restore the default shaders. +shader__description__3 = Note, shaders can only be used in WEBGL mode. +shader__params__s = p5.Shader: the p5.Shader object to use for rendering shapes. +resetShader__description__0 = Restores the default shaders. Code that runs after resetShader() will not be affected by the shader previously set by shader() +texture__description__0 = Sets the texture that will be used to render subsequent shapes. +texture__description__1 = A texture is like a "skin" that wraps around a 3D geometry. Currently supported textures are images, video, and offscreen renders. +texture__description__2 = To texture a geometry created with beginShape(), you will need to specify uv coordinates in vertex(). +texture__description__3 = Note, texture() can only be used in WEBGL mode. +texture__description__4 = You can view more materials in this example. +texture__params__tex = p5.Image|p5.MediaElement|p5.Graphics|p5.Texture: image to use as texture +textureMode__description__0 = Sets the coordinate space for texture mapping. The default mode is IMAGE which refers to the actual coordinates of the image. NORMAL refers to a normalized space of values ranging from 0 to 1. +textureMode__description__1 = With IMAGE, if an image is 100×200 pixels, mapping the image onto the entire size of a quad would require the points (0,0) (100, 0) (100,200) (0,200). The same mapping in NORMAL is (0,0) (1,0) (1,1) (0,1). +textureMode__params__mode = Constant: either IMAGE or NORMAL +textureWrap__description__0 = Sets the global texture wrapping mode. This controls how textures behave when their uv's go outside of the 0 to 1 range. There are three options: CLAMP, REPEAT, and MIRROR. +textureWrap__description__1 = CLAMP causes the pixels at the edge of the texture to extend to the bounds. REPEAT causes the texture to tile repeatedly until reaching the bounds. MIRROR works similarly to REPEAT but it flips the texture with every new tile. +textureWrap__description__2 = REPEAT & MIRROR are only available if the texture is a power of two size (128, 256, 512, 1024, etc.). +textureWrap__description__3 = This method will affect all textures in your sketch until a subsequent textureWrap() call is made. +textureWrap__description__4 = If only one argument is provided, it will be applied to both the horizontal and vertical axes. +textureWrap__params__wrapX = Constant: either CLAMP, REPEAT, or MIRROR +textureWrap__params__wrapY = Constant: (Optional) either CLAMP, REPEAT, or MIRROR +normalMaterial__description__0 = Normal material for geometry is a material that is not affected by light. It is not reflective and is a placeholder material often used for debugging. Surfaces facing the X-axis, become red, those facing the Y-axis, become green and those facing the Z-axis, become blue. You can view all possible materials in this example. +ambientMaterial__description__0 = Ambient material for geometry with a given color. Ambient material defines the color the object reflects under any lighting. For example, if the ambient material of an object is pure red, but the ambient lighting only contains green, the object will not reflect any light. Here's an example containing all possible materials. +ambientMaterial__params__v1 = Number: gray value, red or hue value (depending on the current color mode), +ambientMaterial__params__v2 = Number: (Optional) green or saturation value +ambientMaterial__params__v3 = Number: (Optional) blue or brightness value +ambientMaterial__params__color = Number[]|String|p5.Color: color, color Array, or CSS color string +emissiveMaterial__description__0 = Sets the emissive color of the material used for geometry drawn to the screen. This is a misnomer in the sense that the material does not actually emit light that effects surrounding polygons. Instead, it gives the appearance that the object is glowing. An emissive material will display at full strength even if there is no light for it to reflect. +emissiveMaterial__params__v1 = Number: gray value, red or hue value (depending on the current color mode), +emissiveMaterial__params__v2 = Number: (Optional) green or saturation value +emissiveMaterial__params__v3 = Number: (Optional) blue or brightness value +emissiveMaterial__params__a = Number: (Optional) opacity +emissiveMaterial__params__color = Number[]|String|p5.Color: color, color Array, or CSS color string +specularMaterial__description__0 = Specular material for geometry with a given color. Specular material is a shiny reflective material. Like ambient material it also defines the color the object reflects under ambient lighting. For example, if the specular material of an object is pure red, but the ambient lighting only contains green, the object will not reflect any light. For all other types of light like point and directional light, a specular material will reflect the color of the light source to the viewer. Here's an example containing all possible materials. +specularMaterial__params__gray = Number: number specifying value between white and black. +specularMaterial__params__alpha = Number: (Optional) alpha value relative to current color range (default is 0-255) +specularMaterial__params__v1 = Number: red or hue value relative to the current color range +specularMaterial__params__v2 = Number: green or saturation value relative to the current color range +specularMaterial__params__v3 = Number: blue or brightness value relative to the current color range +specularMaterial__params__color = Number[]|String|p5.Color: color Array, or CSS color string +shininess__description__0 = Sets the amount of gloss in the surface of shapes. Used in combination with specularMaterial() in setting the material properties of shapes. The default and minimum value is 1. +shininess__params__shine = Number: Degree of Shininess. Defaults to 1. +camera__description__0 = Sets the position of the current camera in a 3D sketch. Parameters for this function define the camera's position, the center of the sketch (where the camera is pointing), and an up direction (the orientation of the camera). +camera__description__1 = This function simulates the movements of the camera, allowing objects to be viewed from various angles. Remember, it does not move the objects themselves but the camera instead. For example when the centerX value is positive, and the camera is rotating to the right side of the sketch, the object will seem like it's moving to the left. +camera__description__2 = See this example to view the position of your camera. +camera__description__3 = If no parameters are given, the following default is used: camera(0, 0, (height/2) / tan(PI/6), 0, 0, 0, 0, 1, 0) +camera__params__x = Number: (Optional) camera position value on x axis +camera__params__y = Number: (Optional) camera position value on y axis +camera__params__z = Number: (Optional) camera position value on z axis +camera__params__centerX = Number: (Optional) x coordinate representing center of the sketch +camera__params__centerY = Number: (Optional) y coordinate representing center of the sketch +camera__params__centerZ = Number: (Optional) z coordinate representing center of the sketch +camera__params__upX = Number: (Optional) x component of direction 'up' from camera +camera__params__upY = Number: (Optional) y component of direction 'up' from camera +camera__params__upZ = Number: (Optional) z component of direction 'up' from camera +perspective__description__0 = Sets a perspective projection for the current camera in a 3D sketch. This projection represents depth through foreshortening: objects that are close to the camera appear their actual size while those that are further away from the camera appear smaller. +perspective__description__1 = The parameters to this function define the viewing frustum (the truncated pyramid within which objects are seen by the camera) through vertical field of view, aspect ratio (usually width/height), and near and far clipping planes. +perspective__description__2 = If no parameters are given, the following default is used: perspective(PI/3, width/height, eyeZ/10, eyeZ*10), where eyeZ is equal to ((height/2) / tan(PI/6)). +perspective__params__fovy = Number: (Optional) camera frustum vertical field of view, from bottom to top of view, in angleMode units +perspective__params__aspect = Number: (Optional) camera frustum aspect ratio +perspective__params__near = Number: (Optional) frustum near plane length +perspective__params__far = Number: (Optional) frustum far plane length +ortho__description__0 = Sets an orthographic projection for the current camera in a 3D sketch and defines a box-shaped viewing frustum within which objects are seen. In this projection, all objects with the same dimension appear the same size, regardless of whether they are near or far from the camera. +ortho__description__1 = The parameters to this function specify the viewing frustum where left and right are the minimum and maximum x values, top and bottom are the minimum and maximum y values, and near and far are the minimum and maximum z values. +ortho__description__2 = If no parameters are given, the following default is used: ortho(-width/2, width/2, -height/2, height/2). +ortho__params__left = Number: (Optional) camera frustum left plane +ortho__params__right = Number: (Optional) camera frustum right plane +ortho__params__bottom = Number: (Optional) camera frustum bottom plane +ortho__params__top = Number: (Optional) camera frustum top plane +ortho__params__near = Number: (Optional) camera frustum near plane +ortho__params__far = Number: (Optional) camera frustum far plane +frustum__description__0 = Sets the frustum of the current camera as defined by the parameters. +frustum__description__1 = A frustum is a geometric form: a pyramid with its top cut off. With the viewer's eye at the imaginary top of the pyramid, the six planes of the frustum act as clipping planes when rendering a 3D view. Thus, any form inside the clipping planes is visible; anything outside those planes is not visible. +frustum__description__2 = Setting the frustum changes the perspective of the scene being rendered. This can be achieved more simply in many cases by using perspective(). +frustum__description__3 = If no parameters are given, the following default is used: frustum(-width/2, width/2, -height/2, height/2, 0, max(width, height)). +frustum__params__left = Number: (Optional) camera frustum left plane +frustum__params__right = Number: (Optional) camera frustum right plane +frustum__params__bottom = Number: (Optional) camera frustum bottom plane +frustum__params__top = Number: (Optional) camera frustum top plane +frustum__params__near = Number: (Optional) camera frustum near plane +frustum__params__far = Number: (Optional) camera frustum far plane +createCamera__description__0 = Creates a new p5.Camera object and sets it as the current (active) camera. +createCamera__description__1 = The new camera is initialized with a default position (see camera()) and a default perspective projection (see perspective()). Its properties can be controlled with the p5.Camera methods. +createCamera__description__2 = Note: Every 3D sketch starts with a default camera initialized. This camera can be controlled with the global methods camera(), perspective(), ortho(), and frustum() if it is the only camera in the scene. +createCamera__returns = p5.Camera: The newly created camera object. +setCamera__description__0 = Sets the current (active) camera of a 3D sketch. Allows for switching between multiple cameras. +setCamera__params__cam = p5.Camera: p5.Camera object +setAttributes__description__0 = Set attributes for the WebGL Drawing context. This is a way of adjusting how the WebGL renderer works to fine-tune the display and performance. +setAttributes__description__1 = Note that this will reinitialize the drawing context if called after the WebGL canvas is made. +setAttributes__description__2 = If an object is passed as the parameter, all attributes not declared in the object will be set to defaults. +setAttributes__description__3 = The available attributes are: alpha - indicates if the canvas contains an alpha buffer default is false +setAttributes__description__4 = depth - indicates whether the drawing buffer has a depth buffer of at least 16 bits - default is true +setAttributes__description__5 = stencil - indicates whether the drawing buffer has a stencil buffer of at least 8 bits +setAttributes__description__6 = antialias - indicates whether or not to perform anti-aliasing default is false (true in Safari) +setAttributes__description__7 = premultipliedAlpha - indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha default is false +setAttributes__description__8 = preserveDrawingBuffer - if true the buffers will not be cleared and and will preserve their values until cleared or overwritten by author (note that p5 clears automatically on draw loop) default is true +setAttributes__description__9 = perPixelLighting - if true, per-pixel lighting will be used in the lighting shader otherwise per-vertex lighting is used. default is true. +setAttributes__params__key = String: Name of attribute +setAttributes__params__value = Boolean: New value of named attribute +setAttributes__params__obj = Object: object with key-value pairs +getAudioContext__description__0 = Returns the Audio Context for this sketch. Useful for users who would like to dig deeper into the Web Audio API . +getAudioContext__description__1 = Some browsers require users to startAudioContext with a user gesture, such as touchStarted in the example below. +getAudioContext__returns = Object: AudioContext for this sketch +userStartAudio__description__0 = It is not only a good practice to give users control over starting audio. This policy is enforced by many web browsers, including iOS and Google Chrome, which create the Web Audio API's Audio Context in a suspended state. +userStartAudio__description__1 = In these browser-specific policies, sound will not play until a user interaction event (i.e. mousePressed()) explicitly resumes the AudioContext, or starts an audio node. This can be accomplished by calling start() on a p5.Oscillator, play() on a p5.SoundFile, or simply userStartAudio(). +userStartAudio__description__2 = userStartAudio() starts the AudioContext on a user gesture. The default behavior will enable audio on any mouseUp or touchEnd event. It can also be placed in a specific interaction function, such as mousePressed() as in the example below. This method utilizes StartAudioContext , a library by Yotam Mann (MIT Licence, 2016). +userStartAudio__returns = Promise: Returns a Promise that resolves when the AudioContext state is 'running' +userStartAudio__params__element-_leftBracket_-s-_rightBracket_- = Element|Array: (Optional) This argument can be an Element, Selector String, NodeList, p5.Element, jQuery Element, or an Array of any of those. +userStartAudio__params__callback = Function: (Optional) Callback to invoke when the AudioContext has started +getOutputVolume__description__0 = Returns a number representing the output volume for sound in this sketch. +getOutputVolume__returns = Number: Output volume for sound in this sketch. Should be between 0.0 (silence) and 1.0. +outputVolume__description__0 = Scale the output of all sound in this sketch Scaled between 0.0 (silence) and 1.0 (full volume). 1.0 is the maximum amplitude of a digital sound, so multiplying by greater than 1.0 may cause digital distortion. To fade, provide a rampTime parameter. For more complex fades, see the Envelope class. +outputVolume__description__1 = Alternately, you can pass in a signal source such as an oscillator to modulate the amplitude with an audio signal. +outputVolume__description__2 = How This Works: When you load the p5.sound module, it creates a single instance of p5sound. All sound objects in this module output to p5sound before reaching your computer's output. So if you change the amplitude of p5sound, it impacts all of the sound in this module. +outputVolume__description__3 = If no value is provided, returns a Web Audio API Gain Node +outputVolume__params__volume = Number|Object: Volume (amplitude) between 0.0 and 1.0 or modulating signal/oscillator +outputVolume__params__rampTime = Number: (Optional) Fade for t seconds +outputVolume__params__timeFromNow = Number: (Optional) Schedule this event to happen at t seconds in the future +soundOut__description__0 = p5.soundOut is the p5.sound final output bus. It sends output to the destination of this window's web audio context. It contains Web Audio API nodes including a dyanmicsCompressor (.limiter), and Gain Nodes for .input and .output. +sampleRate__description__0 = Returns a number representing the sample rate, in samples per second, of all sound objects in this audio context. It is determined by the sampling rate of your operating system's sound card, and it is not currently possile to change. It is often 44100, or twice the range of human hearing. +sampleRate__returns = Number: samplerate samples per second +freqToMidi__description__0 = Returns the closest MIDI note value for a given frequency. +freqToMidi__returns = Number: MIDI note value +freqToMidi__params__frequency = Number: A freqeuncy, for example, the "A" above Middle C is 440Hz +midiToFreq__description__0 = Returns the frequency value of a MIDI note value. General MIDI treats notes as integers where middle C is 60, C# is 61, D is 62 etc. Useful for generating musical frequencies with oscillators. +midiToFreq__returns = Number: Frequency value of the given MIDI note +midiToFreq__params__midiNote = Number: The number of a MIDI note +soundFormats__description__0 = List the SoundFile formats that you will include. LoadSound will search your directory for these extensions, and will pick a format that is compatable with the client's web browser. Here is a free online file converter. +soundFormats__params__formats = String: (Optional) i.e. 'mp3', 'wav', 'ogg' +saveSound__description__0 = Save a p5.SoundFile as a .wav file. The browser will prompt the user to download the file to their device. For uploading audio to a server, use p5.SoundFile.saveBlob. +saveSound__params__soundFile = p5.SoundFile: p5.SoundFile that you wish to save +saveSound__params__fileName = String: name of the resulting .wav file. +loadSound__description__0 = loadSound() returns a new p5.SoundFile from a specified path. If called during preload(), the p5.SoundFile will be ready to play in time for setup() and draw(). If called outside of preload, the p5.SoundFile will not be ready immediately, so loadSound accepts a callback as the second parameter. Using a local server is recommended when loading external files. +loadSound__returns = SoundFile: Returns a p5.SoundFile +loadSound__params__path = String|Array: Path to the sound file, or an array with paths to soundfiles in multiple formats i.e. ['sound.ogg', 'sound.mp3']. Alternately, accepts an object: either from the HTML5 File API, or a p5.File. +loadSound__params__successCallback = Function: (Optional) Name of a function to call once file loads +loadSound__params__errorCallback = Function: (Optional) Name of a function to call if there is an error loading the file. +loadSound__params__whileLoading = Function: (Optional) Name of a function to call while file is loading. This function will receive the percentage loaded so far, from 0.0 to 1.0. +createConvolver__description__0 = Create a p5.Convolver. Accepts a path to a soundfile that will be used to generate an impulse response. +createConvolver__returns = p5.Convolver: +createConvolver__params__path = String: path to a sound file +createConvolver__params__callback = Function: (Optional) function to call if loading is successful. The object will be passed in as the argument to the callback function. +createConvolver__params__errorCallback = Function: (Optional) function to call if loading is not successful. A custom error will be passed in as the argument to the callback function. +setBPM__description__0 = Set the global tempo, in beats per minute, for all p5.Parts. This method will impact all active p5.Parts. +setBPM__params__BPM = Number: Beats Per Minute +setBPM__params__rampTime = Number: Seconds from now diff --git a/src/data/localization/en/p5.sound.ftl b/src/data/localization/en/p5.sound.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/en/root.ftl b/src/data/localization/en/root.ftl new file mode 100644 index 0000000000..76c9ab6237 --- /dev/null +++ b/src/data/localization/en/root.ftl @@ -0,0 +1,63 @@ +h1 = Reference +reference-search = Search reference +reference-description1 = Can't find what you're looking for? You may want to check out +reference-description3 = You can also download an offline version of the reference. +reference-contribute2 = Please let us know. +reference-error1 = Notice any errors or typos? +reference-error3 = Please feel free to edit +reference-error5 = and issue a pull request! +reference-example = Example +reference-description = Description +reference-extends = Extends +reference-parameters = Parameters +reference-syntax = Syntax +reference-returns = Returns +Environment = Environment +Color = Color +Color Conversion = Color Conversion +Creating & Reading = Creating & Reading +Setting = Setting +Shape = Shape +2D Primitives = 2D Primitives +Attributes = Attributes +Curves = Curves +Vertex = Vertex +Constants = Constants +Structure = Structure +DOM = DOM +Rendering = Rendering +Foundation = Foundation +Transform = Transform +Data = Data +LocalStorage = LocalStorage +Dictionary = Dictionary +Events = Events +Acceleration = Acceleration +Keyboard = Keyboard +Mouse = Mouse +Touch = Touch +Image = Image +Loading & Displaying = Loading & Displaying +Pixels = Pixels +IO = IO +Input = Input +Output = Output +Table = Table +Math = Math +Calculation = Calculation +Vector = Vector +Noise = Noise +Random = Random +Trigonometry = Trigonometry +Typography = Typography +Array Functions = Array Functions +Conversion = Conversion +String Functions = String Functions +Time & Date = Time & Date +3D Primitives = 3D Primitives +3D = 3D +Interaction = Interaction +Lights = Lights +3D Models = 3D Models +Material = Material +Camera = Camera diff --git a/src/data/localization/es/JSON.ftl b/src/data/localization/es/JSON.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/console.ftl b/src/data/localization/es/console.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Amplitude.ftl b/src/data/localization/es/p5.Amplitude.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.AudioIn.ftl b/src/data/localization/es/p5.AudioIn.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.AudioVoice.ftl b/src/data/localization/es/p5.AudioVoice.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.BandPass.ftl b/src/data/localization/es/p5.BandPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Camera.ftl b/src/data/localization/es/p5.Camera.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Color.ftl b/src/data/localization/es/p5.Color.ftl new file mode 100644 index 0000000000..e0050de46a --- /dev/null +++ b/src/data/localization/es/p5.Color.ftl @@ -0,0 +1,11 @@ +description__0 = Cada color almacena el modo de color y los niveles máximos que se aplicaron en el momento de su construcción. Estos se utilizan para interpretar los argumentos de entrada (en la construcción y más tarde para esa instancia de color) y para formatear el output, p. ej. cuando se solicita la saturation(). +description__1 = Internamente almacenamos una matriz que representa los valores ideales de RGBA en forma de coma flotante, normalizada de 0 a 1. A partir de esto, calculamos el color de pantalla más cercano (niveles de RGBA de 0 a 255) y lo exponemos al renderizador. +description__2 = También almacenamos en caché normalizado, componentes de coma flotante de color flotante del color en varias representaciones a medida que se calculan. Esto se hace para evitar repetir una conversión que ya se ha realizado. +setRed__description__0 = La función setRed establece el componente rojo de un color. El rango depende de su modo de color, en el modo RGB predeterminado está entre 0 y 255. +setRed__params__red = Number: the new red value +setGreen__description__0 = La función setGreen establece el componente verde de un color. El rango depende de su modo de color, en el modo RGB predeterminado está entre 0 y 255. +setGreen__params__green = Number: the new green value +setBlue__description__0 = La función setBlue establece el componente azul de un color. El rango depende de su modo de color, en el modo RGB predeterminado está entre 0 y 255. +setBlue__params__blue = Number: the new blue value +setAlpha__description__0 = La función setAlpha establece el valor de transparencia (alfa) de un color. El rango depende de su modo de color, en el modo RGB predeterminado está entre 0 y 255. +setAlpha__params__alpha = Number: the new alpha value diff --git a/src/data/localization/es/p5.Compressor.ftl b/src/data/localization/es/p5.Compressor.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Convolver.ftl b/src/data/localization/es/p5.Convolver.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Delay.ftl b/src/data/localization/es/p5.Delay.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Distortion.ftl b/src/data/localization/es/p5.Distortion.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.EQ.ftl b/src/data/localization/es/p5.EQ.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Effect.ftl b/src/data/localization/es/p5.Effect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Element.ftl b/src/data/localization/es/p5.Element.ftl new file mode 100644 index 0000000000..3d01163ee3 --- /dev/null +++ b/src/data/localization/es/p5.Element.ftl @@ -0,0 +1,3 @@ +description__0 = Clase base para todos los elementos añadidos al bosuqejo, incluyendo lienzo, buffers de gráficas, y otros elementos HTML. Los métodos en azul están incluidos en la funcionalidad base, los métodos en marrón son añadidos con la biblioteca p5.dom. No se ejecutan directamente, pero los objetos p5.Element son creados llamando a las funciones createCanvas(), createGraphics(), o en la biblioteca p5.dom, createDiv, createImg, createInput, etc. +params__elt = String: node DOM envolvente. +params__pInst = Objeto: puntero a instancia p5. diff --git a/src/data/localization/es/p5.Envelope.ftl b/src/data/localization/es/p5.Envelope.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.FFT.ftl b/src/data/localization/es/p5.FFT.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.File.ftl b/src/data/localization/es/p5.File.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Filter.ftl b/src/data/localization/es/p5.Filter.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Font.ftl b/src/data/localization/es/p5.Font.ftl new file mode 100644 index 0000000000..ff926a3318 --- /dev/null +++ b/src/data/localization/es/p5.Font.ftl @@ -0,0 +1,2 @@ +description__0 = Clase base para manipulación de tipografía +params__pInst = Objeto: puntero a la instancia p5 diff --git a/src/data/localization/es/p5.Gain.ftl b/src/data/localization/es/p5.Gain.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Geometry.ftl b/src/data/localization/es/p5.Geometry.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Graphics.ftl b/src/data/localization/es/p5.Graphics.ftl new file mode 100644 index 0000000000..04da39ad9c --- /dev/null +++ b/src/data/localization/es/p5.Graphics.ftl @@ -0,0 +1,7 @@ +description__0 = Contenedor fino alrededor de un renderizador, que se utilizará para crear un objeto de búfer de gráficos. Use esta clase si necesita dibujar en un búfer de gráficos fuera de la pantalla. Los dos parámetros definen el ancho y el alto en píxeles. Los campos y métodos para esta clase son extensos, pero reflejan la API de dibujo normal para p5. +params__w = Número: ancho +params__h = Número: altura +params__renderer = Constant: renderer el renderizador a utilizar, ya sea P2D o WEBGL +params__pInst = P5: pointer a una instancia p5 (Opcional) +reset__description__0 = Restablece ciertos valores, como los modificados por funciones en la categoría Transformar y en la categoría Luces que no se restablecen automáticamente con objetos gráficos de búfer. Llamando a esto en draw() copiará el comportamiento del canvas estándar. +remove__description__0 = Elimina un objeto Graphics de la página y libera todos los recursos asociados con él. diff --git a/src/data/localization/es/p5.HighPass.ftl b/src/data/localization/es/p5.HighPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Image.ftl b/src/data/localization/es/p5.Image.ftl new file mode 100644 index 0000000000..5a0cdf827a --- /dev/null +++ b/src/data/localization/es/p5.Image.ftl @@ -0,0 +1,30 @@ +description__0 = Crea un nuevo p5.Image. Un p5.Image es una representación de una imagen respaldada por un canvas. +description__1 = p5 puede mostrar imágenes .gif, .jpg y .png. Las imágenes pueden mostrarse en espacio 2D y 3D. Antes de usar una imagen, debe cargarse con la función loadImage(). La clase p5.Image contiene campos para el ancho y alto de la imagen, así como una matriz llamada pixels[] que contiene los valores para cada píxel en la imagen. +description__2 = Los métodos descritos a continuación permiten un fácil acceso a los píxeles de la imagen y al canal alfa y simplifican el proceso de composición. +description__3 = Antes de usar la matriz de pixels[], asegúrese de usar el método loadPixels() en la imagen para asegurarse de que los datos de píxeles estén cargados correctamente. +params__width = Número de ancho: +params__height = Número de altura: +width__description__0 = Ancho de la imagen. +height__description__0 = Altura de imagen. +pixels__description__0 = Matriz que contiene los valores para todos los píxeles en la ventana de visualización. Estos valores son números. Esta matriz es el tamaño (incluya un factor apropiado para la densidad de píxeles) de la ventana de visualización x4, que representa los valores R, G, B, A en orden para cada píxel, moviéndose de izquierda a derecha a través de cada fila, luego hacia abajo en cada columna. La retina y otras pantallas de alta densidad pueden tener más píxeles (por un factor de densidad de píxeles ^ 2). Por ejemplo, si la imagen es de 100x100 píxeles, habrá 40,000. Con pixelDensity = 2, habrá 160,000. Los primeros cuatro valores (índices 0-3) en la matriz serán los valores R, G, B, A del píxel en (0, 0). Los segundos cuatro valores (índices 4-7) contendrán los valores R, G, B, A del píxel en (1, 0). Más generalmente, para establecer valores para un píxel en (x, y):
        let d = pixelDensity(); for (let i = 0; i < d; i++) {"{"}  for (let j = 0; j < d; j++) {"{"}  // loop over  index = 4 * ((y * d + j) * width * d + (x * d + i));  pixels[index] = r;  pixels[index+1] = g;  pixels[index+2] = b;  pixels[index+3] = a;  {"}"} {"}"}
        +pixels__description__1 = Antes de acceder a esta matriz, los datos deben cargarse con la función loadPixels(). Después de que se hayan modificado los datos de la matriz, se debe ejecutar la función updatePixels() para actualizar los cambios. +loadPixels__description__0 = Carga los datos de píxeles para esta imagen en el atributo [píxeles]. +updatePixels__description__0 = Actualiza el canvas de respaldo para esta imagen con el contenido de la matriz [píxeles]. +updatePixels__description__1 = Si esta imagen es un GIF animado, los píxeles se actualizarán en el cuadro que se muestra actualmente +get__description__0 = Obtiene una región de píxeles de una imagen. +get__description__1 = Si no se pasan parámetros, se devuelve toda la imagen. Si x e y son los únicos parámetros pasados, se extrae un solo píxel. Si se pasan todos los parámetros, se extrae una región rectangular y se devuelve un p5.Image. +set__description__0 = Establece el color de un solo píxel o escribe una imagen en este p5.Image. +set__description__1 = Tenga en cuenta que para una gran cantidad de píxeles esto será más lento que manipular directamente la matriz de píxeles y luego llamar a updatePixels(). +resize__description__0 = Cambiar el tamaño de la imagen a un nuevo ancho y alto. Para hacer que la imagen escale proporcionalmente, use 0 como valor para el parámetro ancho o alto. Por ejemplo, para hacer que el ancho de una imagen sea de 150 píxeles y cambiar la altura con la misma proporción, use cambiar el tamaño (150, 0). +copy__description__0 = Copia una región de píxeles de una imagen a otra. Si no se especifica srcImage, se usa como fuente. Si las regiones de origen y destino no son del mismo tamaño, automáticamente redimensionará los píxeles de origen para que se ajusten a la región de destino especificada. +mask__description__0 = Enmascara parte de una imagen para que no se muestre cargando otra imagen y usando su canal alfa como canal alfa para esta imagen. +filter__description__0 = Aplica un filtro de imagen a un p5.Image +blend__description__0 = Copia una región de píxeles de una imagen a otra, utilizando un modo de blend específico para realizar la operación. +save__description__0 = Guarda la imagen en un archivo y obliga al navegador a descargarla. Acepta dos cadenas para nombre de archivo y extensión de archivo Admite png (predeterminado), jpg y gif Tenga en cuenta que el archivo solo se descargará como un GIF animado si la p5.Image se cargó desde un archivo GIF. +reset__description__0 = Inicia un GIF animado en el estado inicial. +getCurrentFrame__description__0 = Obtiene el índice del marco que está visible actualmente en un GIF animado. +setFrame__description__0 = Establece el índice del marco que está visible actualmente en un GIF animado +numFrames__description__0 = Devuelve el número de fotogramas en un GIF animado +play__description__0 = Reproduce un GIF animado que se detuvo con pause() +pause__description__0 = Pausa un GIF animado. +delay__description__0 = Cambia el retraso entre fotogramas en un GIF animado. Hay un segundo parámetro opcional que indica un índice para una trama específica que debería tener su retraso modificado. Si no se proporciona ningún índice, todos los cuadros tendrán el nuevo retraso. diff --git a/src/data/localization/es/p5.LowPass.ftl b/src/data/localization/es/p5.LowPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.MediaElement.ftl b/src/data/localization/es/p5.MediaElement.ftl new file mode 100644 index 0000000000..98dc6d5336 --- /dev/null +++ b/src/data/localization/es/p5.MediaElement.ftl @@ -0,0 +1,24 @@ +description__0 = Extiende p5.Element para manejar audio y video. Además de los métodos de p5.Element, también contiene métodos para controlar los medios. No se llama directamente, pero p5.MediaElements se crea llamando a createVideo, createAudio y createCapture. +params__elt = String: nodo DOM que está envuelto +src__description__0 = Ruta a la fuente del elemento multimedia. +src__returns = String: src +play__description__0 = Reproduce un elemento multimedia HTML5. +stop__description__0 = Detiene un elemento multimedia HTML5 (establece la hora actual en cero) +pause__description__0 = Pausa un elemento multimedia HTML5. +loop__description__0 = Establezca 'loop' en verdadero para un elemento multimedia HTML5 y comienza a reproducir. +autoplay__description__0 = Establezca 'loop' en falso para un elemento multimedia HTML5. El elemento se detendrá cuando llegue al final. +volume__description__0 = Establece el volumen para este elemento multimedia HTML5. Si no se proporciona ningún argumento, devuelve el volumen actual. +speed__description__0 = Si no se dan argumentos, devuelve la velocidad de reproducción actual del elemento. El parámetro de velocidad establece la velocidad donde 2.0 reproducirá el elemento dos veces más rápido, 0.5 reproducirá a la mitad de la velocidad y -1 reproducirá el elemento a velocidad normal en reversa (tenga en cuenta que no todos los navegadores admiten la reproducción hacia atrás e incluso si lo hacen, la reproducción podría no ser fluido.) +time__description__0 = Si no se dan argumentos, devuelve la hora actual del elemento. Si se proporciona un argumento, la hora actual del elemento se establece a la indicada. +duration__description__0 = Devuelve la duración del elemento multimedia HTML5. +onended__description__0 = Programe un evento para ser llamado cuando el elemento de audio o video llegue al final. Si el elemento está looping, esto no se llamará. El elemento se pasa como argumento para el onended callback. +connect__description__0 = Envíe la salida de audio de este elemento a un objeto audioNode o p5.sound especificado. Si no se proporciona ningún elemento, se conecta a la salida maestra de p5. Esa conexión se establece cuando este método se llama por primera vez. Todas las conexiones se eliminan mediante el método .disconnect (). +connect__description__1 = Este método está destinado a ser utilizado con la biblioteca de complementos p5.sound.js. +disconnect__description__0 = Desconecta todo el enrutamiento de audio web, incluso a la salida maestra. Esto es útil si desea redirigir la salida a través de efectos de audio, por ejemplo. +showControls__description__0 = Muestra los controles de MediaElement predeterminados, según lo determine el navegador web. +hideControls__description__0 = Ocultar los controles predeterminados de mediaElement. +addCue__description__0 = Programe eventos para que se activen cada vez que un MediaElement (audio / video) llegue a un punto de referencia de reproducción. +addCue__description__1 = Acepta una función de devolución de llamada, un tiempo (en segundos) para activar el callback y un parámetro opcional para el callback. +addCue__description__2 = El tiempo pasará como primer parámetro a la función de callback, y param será el segundo parámetro. +removeCue__description__0 = Eliminar una devolución de llamada en función de su ID. La identificación es devuelta por el método addCue. +clearCues__description__0 = Elimine todos los callbacks que originalmente se habían programado mediante el método addCue. diff --git a/src/data/localization/es/p5.MonoSynth.ftl b/src/data/localization/es/p5.MonoSynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Noise.ftl b/src/data/localization/es/p5.Noise.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.NumberDict.ftl b/src/data/localization/es/p5.NumberDict.ftl new file mode 100644 index 0000000000..b721e45ba1 --- /dev/null +++ b/src/data/localization/es/p5.NumberDict.ftl @@ -0,0 +1,8 @@ +description__0 = Una simple clase de Diccionario para Números. +add__description__0 = Agregue el número dado al valor actualmente almacenado en la clave dada. La suma luego reemplaza el valor previamente almacenado en el Diccionario. +mult__description__0 = Resta el número dado del valor actualmente almacenado en la clave dada. La diferencia luego reemplaza el valor previamente almacenado en el Diccionario. +div__description__0 = Divida el número dado con el valor actualmente almacenado en la clave dada. El cociente luego reemplaza el valor previamente almacenado en el Diccionario. +minValue__description__0 = Devuelve el número más bajo actualmente almacenado en el Diccionario. +maxValue__description__0 = Devuelve el número más alto actualmente almacenado en el Diccionario. +minKey__description__0 = Devuelve la clave más baja utilizada actualmente en el Diccionario. +maxKey__description__0 = Devuelve la clave más alta utilizada actualmente en el Diccionario. diff --git a/src/data/localization/es/p5.OnsetDetect.ftl b/src/data/localization/es/p5.OnsetDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Oscillator.ftl b/src/data/localization/es/p5.Oscillator.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Panner3D.ftl b/src/data/localization/es/p5.Panner3D.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Part.ftl b/src/data/localization/es/p5.Part.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.PeakDetect.ftl b/src/data/localization/es/p5.PeakDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Phrase.ftl b/src/data/localization/es/p5.Phrase.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.PolySynth.ftl b/src/data/localization/es/p5.PolySynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.PrintWriter.ftl b/src/data/localization/es/p5.PrintWriter.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Pulse.ftl b/src/data/localization/es/p5.Pulse.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Renderer.ftl b/src/data/localization/es/p5.Renderer.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Reverb.ftl b/src/data/localization/es/p5.Reverb.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.SawOsc.ftl b/src/data/localization/es/p5.SawOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Score.ftl b/src/data/localization/es/p5.Score.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Shader.ftl b/src/data/localization/es/p5.Shader.ftl new file mode 100644 index 0000000000..d139b92db2 --- /dev/null +++ b/src/data/localization/es/p5.Shader.ftl @@ -0,0 +1,5 @@ +description__0 = Clase Shader para el modo WEBGL +params__renderer = p5.RendererGL: una instancia de p5.RendererGL que servirá de contexto GL para este nuevo p5.Shader +params__vertSrc = String: código fuente para el vertex shader (en forma de string) +params__fragSrc = String: código fuente para el fragment shader (en forma de string) +setUniform__description__0 = Wrapper de las funciones gl.uniform. Como almacenamos información de uniform en el shader, la podemos usar para revisar los datos provistos y llamar a la función apropiada. diff --git a/src/data/localization/es/p5.SinOsc.ftl b/src/data/localization/es/p5.SinOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.SoundFile.ftl b/src/data/localization/es/p5.SoundFile.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.SoundLoop.ftl b/src/data/localization/es/p5.SoundLoop.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.SoundRecorder.ftl b/src/data/localization/es/p5.SoundRecorder.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.SqrOsc.ftl b/src/data/localization/es/p5.SqrOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.StringDict.ftl b/src/data/localization/es/p5.StringDict.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Table.ftl b/src/data/localization/es/p5.Table.ftl new file mode 100644 index 0000000000..9896423d7e --- /dev/null +++ b/src/data/localization/es/p5.Table.ftl @@ -0,0 +1,29 @@ +description__0 = Los objetos Table almacenan datos con múltiples filas y columnas, tal como una hoja de cálculo tradicional. Los objetos Table pueden ser generados desde cero, dinámicamente, o usando datos desde un archivo existente. +params__rows = Arreglo: un arreglo de objetos p5.TableRow +columns__description__0 = Una matriz que contiene los nombres de las columnas en la tabla, si el "header" la tabla se carga con el parámetro "header". +rows__description__0 = Una matriz que contiene los objetos p5.TableRow que forman las filas de la tabla. El mismo resultado que llamar getRows() +addRow__description__0 = Use addRow() para agregar una nueva fila de datos a un objeto p5.Table. Por defecto, se crea una fila vacía. Por lo general, almacenaría una referencia a la nueva fila en un objeto TableRow (consulte newRow en el ejemplo anterior) y luego establecería valores individuales usando set(). +addRow__description__1 = Si se incluye un objeto p5.TableRow como parámetro, entonces esa fila se duplica y se agrega a la tabla. +removeRow__description__0 = Elimina una fila del objeto de tabla. +getRow__description__0 = Devuelve una referencia al p5.TableRow especificado. La referencia se puede utilizar para obtener y establecer valores de la fila seleccionada. +getRows__description__0 = Obtiene todas las filas de la tabla. Devuelve una matriz de p5.TableRows. +findRow__description__0 = Encuentra la primera fila de la tabla que contiene el valor proporcionado y devuelve una referencia a esa fila. Incluso si varias filas son posibles coincidencias, solo se devuelve la primera fila coincidente. La columna a buscar puede especificarse por su ID o título. +findRow__returns = p5.TableRow: +findRows__description__0 = Encuentra las filas en la tabla que contienen el valor proporcionado y devuelve referencias a esas filas. Devuelve una matriz, por lo que debe usarse para recorrer en iteración todas las filas, como se muestra en el ejemplo anterior. La columna a buscar puede especificarse por su ID o título. +matchRow__description__0 = Encuentra la primera fila de la tabla que coincide con la expresión regular proporcionada y devuelve una referencia a esa fila. Incluso si varias filas son posibles coincidencias, solo se devuelve la primera fila coincidente. La columna a buscar puede especificarse por su ID o título. +matchRows__description__0 = Encuentra las filas en la tabla que coinciden con la expresión regular proporcionada y devuelve referencias a esas filas. Devuelve una matriz, por lo que debe usarse para recorrer en iteración todas las filas, como se muestra en el ejemplo. La columna a buscar puede especificarse por su ID o título. +getColumn__description__0 = Recupera todos los valores en la columna especificada y los devuelve como una matriz. La columna se puede especificar por su ID o título. +clearRows__description__0 = Elimina todas las filas de una tabla. Mientras se eliminan todas las filas, se mantienen las columnas y los títulos de las columnas. +getColumnCount__description__0 = Devuelve el número total de columnas en una tabla. +getRowCount__description__0 = Devuelve el número total de filas en una tabla. +removeTokens__description__0 = Elimina cualquiera de los caracteres especificados (o "tokens"). +removeTokens__description__1 = Si no se especifica ninguna columna, se procesan los valores en todas las columnas y filas. Se puede hacer referencia a una columna específica por su ID o título. +trim__description__0 = Recorta los espacios en blanco iniciales y finales, como los espacios y las pestañas, a partir de los valores de la tabla de cadenas. Si no se especifica ninguna columna, los valores en todas las columnas y filas se recortan. Se puede hacer referencia a una columna específica por su ID o título. +set__description__0 = Almacena un valor en la fila y columna especificadas de la tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +setNum__description__0 = Almacena un valor flotante en la fila y columna especificadas de la tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +setString__description__0 = Almacena un valor de cadena en la fila y columna especificadas de la tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +get__description__0 = Recupera un valor de la fila y columna especificadas en la Tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +getNum__description__0 = Recupera un valor flotante de la fila y columna especificadas en la tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +getString__description__0 = Recupera un valor de cadena de la fila y columna especificadas en la tabla. La fila se especifica por su ID, mientras que la columna se puede especificar por su ID o título. +getObject__description__0 = Recupera todos los datos de la tabla y los devuelve como un objeto. Si se pasa un nombre de columna, cada objeto de fila se almacenará con ese atributo como título. +getArray__description__0 = Recupera todos los datos de la tabla y los devuelve como una matriz multidimensional. diff --git a/src/data/localization/es/p5.TableRow.ftl b/src/data/localization/es/p5.TableRow.ftl new file mode 100644 index 0000000000..8745e31130 --- /dev/null +++ b/src/data/localization/es/p5.TableRow.ftl @@ -0,0 +1,3 @@ +description__0 = Un objeto TableRow representa una única fila de datos, grabados en columnas, de una tabla. Un objeto TableRow contiene tanto un arreglo ordenado, como un objeto JSON desordenado. +params__str = String: opcional, puebla la fila con una serie de valores, separados por el separador +params__separator = String: por defecto, valores separados por coma (csv) diff --git a/src/data/localization/es/p5.TriOsc.ftl b/src/data/localization/es/p5.TriOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.TypedDict.ftl b/src/data/localization/es/p5.TypedDict.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/p5.Vector.ftl b/src/data/localization/es/p5.Vector.ftl new file mode 100644 index 0000000000..591751b243 --- /dev/null +++ b/src/data/localization/es/p5.Vector.ftl @@ -0,0 +1,11 @@ +description__0 = Una clase para describir un vector de dos o tres dimensiones, específicamente un vector euclideano (también conocido como geométrico). Un vector es una entidad que tiene tanto magnitud como dirección. El tipo de datos, sin embargo, graba los componentes del vector (x, y para 2D y x,y,z para 3D). La magnitud y la dirección pueden ser calculados con los métodos mag() y heading(). En muchos de los ejemplos de p5.js, verás que p5.Vector es usado para describir una posición, velocidad o aceleración. Por ejemplo, si consideras un rectángulo moviéndose a lo largo de la pantalla, en cada instante tiene una posición (un vector que apunta desde el origen hasta su ubicación), una velocidad(la tasa a la que la posición del objeto cambia por unidad de tiempo, expresada como vector), y aceleración (la tasa a la que la velocidad del objeto cambia por unidad de tiempo, expresada como vector). Como los vectores representan grupos de valores, no podemos simplemente usar las operaciones tradicionales de adición, multiplicación, etc. En vez de eso, necesitaremos hacer matemática de vectores, lo que es simplificado con los métodos dentro de la clase p5.Vector. +params__x = Número: componente x del vector +params__y = Número: componente y del vector +params__z = Número: componente z del vector +mult__params__v0 = p5.Vector +mult__params__v1 = p5.Vector +div__params__v0 = p5.Vector +div__params__v1 = p5.Vector +rotate__params__v = p5.Vector +lerp__params__v1 = p5.Vector +lerp__params__v2 = p5.Vector diff --git a/src/data/localization/es/p5.XML.ftl b/src/data/localization/es/p5.XML.ftl new file mode 100644 index 0000000000..630e0e876a --- /dev/null +++ b/src/data/localization/es/p5.XML.ftl @@ -0,0 +1 @@ +description__0 = XML es una representación de un objeto XML, capaz de procesar código XML. Usa loadXML() para cargar archivos externos XML y crear objetos XML diff --git a/src/data/localization/es/p5.ftl b/src/data/localization/es/p5.ftl new file mode 100644 index 0000000000..bc5f05a203 --- /dev/null +++ b/src/data/localization/es/p5.ftl @@ -0,0 +1,864 @@ +description__0 = This is the p5 instance constructor. +description__1 = A p5 instance holds all the properties and methods related to a p5 sketch. It expects an incoming sketch closure and it can also take an optional node parameter for attaching the generated p5 canvas to a node. The sketch closure takes the newly created p5 instance as its sole argument and may optionally set preload(), setup(), and/or draw() properties on it for running a sketch. +description__2 = A p5 sketch can run in "global" or "instance" mode: "global" - all properties and methods are attached to the window "instance" - all properties and methods are bound to this p5 object +alpha__description__0 = Extrae el valor de alpha de un color o de un arreglo de pixeles. +alpha__returns = el objeto p5 +alpha__params__color = Objeto: objeto p5.Color o arreglo de pixeles +blue__description__0 = Extrae el valor de azul de un color o de un arreglo de pixeles. +blue__returns = el objeto p5 +blue__params__color = Objeto: objeto p5.Color o arreglo de pixeles +brightness__description__0 = Extrae el valor de brillo HSB de un color o de un arreglo de pixeles. +brightness__returns = el objeto p5 +brightness__params__color = Objeto: objeto p5.Color o arreglo de pixeles +color__description__0 = Crea colores para ser almacenados en variables del tipo color. Los parámetros son interpretados como valores RGB o HSB, dependiendo del modo actual de color según colorMode)(). El modo por defecto es RGB con valores entre 0 y 255 y, por lo tanto, la función color(255, 204, 0) retorna un color amarillo brillante. Nota que si solo se provee un valor a la función color(), será interpretado como un valor en escala de grises. Añade un segundo valor, y será usado como transparencia alpha. Cuando se especifican tres valores, son interpretados como valores RGB o HSB. Al añadir un cuarto valor se aplica transparencia alpha. Si se provee solo un parámetro de tipo string, será interpretado como un string de color compatible con CSS.Los colores son almacenados como números o arreglos. +color__returns = Arreglo: color resultante +color__params__gray = Número|String: número especificando el valor entre blanco y negro. +color__params__alpha = Número: valor de alpha relativo al rango de color actual (por defecto es 0-255) +color__params__v1 = Número|String: valor de rojo o tinte relativo al rango de color actual, o un string de color +color__params__v2 = Número: valor de verde o saturación relativo al rango de color actual +color__params__v3 = Número: valor de azul o brillo relativo al rango de color actual +color__params__color = p5.Color +green__description__0 = Extrae el valor de verde de un color o de un arreglo de pixeles. +green__returns = el objeto p5 +green__params__color = Objeto: objeto p5.Color o arreglo de pixeles +hue__description__0 = Extrae el valor de tinte de un color o de un arreglo de pixeles. El tinte (hue) existe en HSB y HSL. Esta función retorna el tinte normalizado HSB que cuando se le provee un objeto de color HSB (o cuando se le provee un arreglo de pixeles mientras el modo de color es HSB), pero por defecto retornará el tinte normalizado según HSB en otro caso. (Estos valores solo son diferentes si la configuración de valor de tinte máximo de cada sistema es diferente.) +hue__returns = el objeto p5 +hue__params__color = Objeto: objeto p5.Color o arreglo de pixeles +lerpColor__description__0 = Mezcla dos colores para encontrar un tercer color según la combinación de ambos. El parámetro amt es la cantidad a interpolar entre los dos valores, donde 0.0 es igual al primer color, 0.1 es muy cercano al primer color, 0.5 está a medio camino entre ambos, etc. Un valor menor que 0 será tratado como 0. Del mismo modo, valores sobre 1 serán tratados como 1. Esto es distinto al comportamiento de lerp(), pero necesario porque de otra manera los números fuera de rango producirían colores no esperados y extraños. La manera en que los colores son interpolados depende del modo de color actual. +lerpColor__returns = Arreglo/Número: color interpolado +lerpColor__params__c1 = Arreglo/Número: interpola desde este color +lerpColor__params__c2 = Arreglo/Número: interpola hacia este color +lerpColor__params__amt = Número: número entre 0 y 1 +lightness__description__0 = Extrae el valor de luminosidad HSL de un color o de un arreglo de pixeles. +lightness__returns = el objeto p5 +lightness__params__color = Objeto: objeto p5.Color o arreglo de pixeles +red__description__0 = Extrae el valor de rojo de un color o de un arreglo de pixeles. +red__returns = el objeto p5 +red__params__color = Objeto: objeto p5.Color o arreglo de pixeles +saturation__description__0 = Extrae el valor de saturación de un color o de un arreglo de pixeles. La saturación es escalada en HSB y HSL de forma distinta. Esta función retornará la saturación HSB cuando le sea provisto un objeto de color HSB (o cuando le sea provisto un arreglo de pixeles mientras el modo de color es HSB), pero por defecto retornará saturación HSL. +saturation__returns = el objeto p5 +saturation__params__color = Objeto: objeto p5.Color o arreglo de pixeles +background__description__0 = La función background() define el color usado como fondo del lienzo p5.js. El fondo por defecto es gris claro. Esta función es típicamente usada dentro de draw() para despejar o borrar la ventana mostrada al inicio de cada cuadro, pero puede ser usada dentro de setup() para definir el fondo en el primer cuadro de la animación o si el fondo solo necesita ser definido una vez. +background__params__color = Color: cualquier valor creado con la función color() +background__params__colorstring = colorstring: string de color, formatos posibles: enteros rgb() o rgba(), porcentajes rgb() o rgba(), hex 3 dígitos, hex 6 dígitos +background__params__a = Número: opacidad del fondo relativo al rango de color actual (por defecto es 0-255) +background__params__gray = Número: especifica un valor entre blanco y negro +background__params__v1 = Número: valor de rojo o hue (dependiendo del modo de color actual) +background__params__v2 = Número: valor de verde o saturación (dependiendo del modo de color actual) +background__params__v3 = Número: valor de azul o brillo (dependiendo del modo de color actual) +background__params__image = p5.Image: imagen creada con loadImage() o createImage(), para ser definida como fondo (debe ser del mismo tamaño que la ventana del bosquejo) +clear__description__0 = Borra los pixeles del buffer. Esta función solo funciona en objetos p5.Canvas creados con la función createCanvas(); no funcionará con la ventana principal. A diferencia del contexto principal de gráficas, los pixeles en las áreas gráficas adicionales creadas con createGraphics() pueden ser entera o parcialmente transparentes. Esta función borra todo para hacer los pixeles 100% transparentes. +colorMode__description__0 = colorMode() cambia la manera en que p5.js interpreta los datos de color. Por defecto, los parámetros de fill(), stroke(), background() y color() son definidos por valores entre 0 y 255 en modo RGB. Esto es equivalente a definir el modo de color según colorMode(RGB, 255). Definir el modo de color en colorMode(HSB) permite usar el sistema HSB. Por defecto, este modo de color es colorMode(HSB, 360, 100, 100, 1). También se puede usar HSL. Nota: los objetos de color existentes recuerdan el modo en que fueron creados, por lo que puedes cambiar el modo como quieras, sin afectar su apariencia. +colorMode__params__mode = Constante: RGB o HSB, correspondiente a Rojo/Verde/Azul o tinte/saturación/brillo (o luminosidad) +colorMode__params__max1 = Número: rango de rojo o tinte, dependiendo del modo de color actual, o rango para todos los valores +colorMode__params__max2 = Número: rango de verde o saturación, dependiendo del modo de color actual. +colorMode__params__max3 = Número: rango de azul o brillo/luminosidad, dependiendo del modo de color actual. +colorMode__params__maxA = Número: rango de transparencia alpha +fill__description__0 = Define el color usado para el relleno de figuras geométricas. Por ejemplo, si ejecutas fill(204, 102, 0), todas las figuras a continuación tendrán relleno naranja. Este color es especificado en términos de color RGB o HSB, dependiendo del modo de color según colorMode() (el dominio de color por defecto es RGB, con cada valor en el rango entre 0 y 255). Si se provee un argumento tipo string, los tipos RGB, RGBA y CSS hexadecimal están soportados. Un objeto Color p5 puede ser provisto para definir el color del relleno. +fill__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo, tinte (dependiendo del modo de color actual), o arreglo de color, o string de color CSS. +fill__params__v2 = Número: valor de verde o saturación (dependiendo del modo de color actual) +fill__params__v3 = Número: valor de azul o brillo (dependiendo del modo de color actual) +fill__params__alpha = Número: opacidad del fondo +noFill__description__0 = Deshabilita el relleno de figuras geométricas. Si tanto noStroke() como noFill() son ejecutados, nada será dibujado en pantalla. +noStroke__description__0 = Deshabilita el dibujo de los trazos (bordes). Si tanto noStroke() como noFill() son ejecutados, nada será dibujado en pantalla. +stroke__description__0 = Define el color usado para dibujar líneas y bordes de figuras. Este color especificado en términos de color RGB o HSB, dependiendo del modo de color actual según colorMode() (el dominio de color por defecto es RGB, con cada valor en el rango entre 0 y 255). Si se provee un argumento tipo string, los tipos RGB, RGBA y CSS hexadecimal están soportados. Un objeto Color p5 puede ser provisto para definir el color del trazado. +stroke__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo, tinte (dependiendo del modo de color actual), o arreglo de color, o string de color CSS. +stroke__params__v2 = Número: valor de verde o saturación (dependiendo del modo de color actual) +stroke__params__v3 = Número: valor de azul o brillo (dependiendo del modo de color actual) +stroke__params__alpha = Número: opacidad del fondo +arc__description__0 = Dibuja un arco en la pantalla. Si se llama con solo a, b, c, d, start y stop, el arco se dibuja como un pastel abierto. Si el modo se provee, el arco será dibujado abierto, o como acorde, o como pastel, según lo especificado. El origen puede ser cambiado con la función ellipseMode(). Nota que si dibujas un círculo completo (ej: 0 a TWO_PI) aparecerá en blanco, porque 0 y TWO_PI son la misma posición en el círculo unitario. La mejor manera de manejar esto es usar la función ellipse() para una elipse cerrada, y la función arc() para generar solo secciones de una elipse. +arc__params__x = Número: coordenada x del arco de elipse. +arc__params__y = Número: coordenada y del arco de elipse. +arc__params__w = Número: ancho del arco de elipse. +arc__params__h = Número: altura del arco de elipse. +arc__params__start = Número: ángulo inicial del arco de elipse. +arc__params__stop = Número: ángulo final del arco de elipse. +arc__params__mode = Constante: parámetro opcional para determinar la manera de dibujar el arco. +arc__params__detail = Number: (Optional) optional parameter for WebGL mode only. This is to specify the number of vertices that makes up the perimeter of the arc. Default value is 25. +ellipse__description__0 = Dibuja una elipse (óvalo) en la pantalla. Una elipse con igual ancho y altura es un círculo. Por defecto, los primeros dos parámetros definen la ubicación, y el tercero y cuarto definen el ancho y altura de la figura. Si no especifica una altura, el valor del ancho es usado como ancho y altura. El origen puede ser cambiado con la función ellipseMode(). +ellipse__description__1 = An ellipse with equal width and height is a circle. The origin may be changed with the ellipseMode() function. +ellipse__params__x = Número: coordenada x de la elipse. +ellipse__params__y = Número: coordenada y de la elipse. +ellipse__params__w = Número: ancho de la elipse. +ellipse__params__h = Número: altura de la elipse. +line__description__0 = Dibuja una línea (un camino directo entre dos puntos) en la pantalla. La versión de line() con cuatro parámetros dibuja la línea en 2D. Para darle color a una línea, usa la función stroke(). Una línea no puede ser rellenada, por lo que la función fill() no afectará el color de una línea. Las líneas 2D son dibujadas con una ancho de un pixel por defecto, pero esto puede ser cambiado con la función strokeWeight(). +line__params__x1 = Número: coordenada x del primer punto. +line__params__y1 = Número: coordenada y del primer punto. +line__params__x2 = Número: coordenada x del segundo punto. +line__params__y2 = Número: coordenada y del segundo punto. +point__description__0 = Dibuja un punto, una coordenada en el espacio de un pixel de dimensión. El primer parámetro es la coordenada horizontal del punto, el segundo valor es la coordenada vertical del punto. El color del punto es determinado por el trazado actual con la función stroke(). +point__params__x = Número: coordenada x. +point__params__y = Número: coordenada y . +quad__description__0 = Dibuja un cuadrilátero, un polígono de cuatro lados. Es similar a un rectángulo, pero los ángulos entre sus bordes no están limitados a noventa grados. El primer par de parámetros (x1, y1) corresponde a las coordenadas del primer vértice y los pares siguientes deben seguir en el mismo orden, según las manecillas del reloj o en contra, alrededor de la figura a definir. +quad__params__x1 = Número: coordenada x del primer punto. +quad__params__y1 = Número: coordenada y del primer punto. +quad__params__x2 = Número: coordenada x del segundo punto. +quad__params__y2 = Número: coordenada y del segundo punto. +quad__params__x3 = Número: coordenada x del tercer punto. +quad__params__y3 = Número: coordenada y del tercer punto. +quad__params__x4 = Número: coordenada x del cuarto punto. +quad__params__y4 = Número: coordenada y del cuarto punto. +rect__description__0 = Dibuja un rectángulo en la pantalla. Un rectángulo es una figura de cuatro lados con cada ángulo interior de noventa grados. Por defecto, los dos primeros parámetros definen la ubicación de la esquina superior izquierda, el tercero el ancho y el cuarto la altura. La manera en que estos parámetros son interpretados, sin embargo, puede ser cambiado con la función rectMode(). Los parámetros quinto, sexto, séptimo y octavo, si son especificados, determinan el radio de la esquina superior derecha, superior izquierda, inferior derecha e inferior izquierda, respectivamente. Si se omite un parámetro de radio de esquina, se usa el radio especificado por el valor anterior en la lista. +rect__params__x = Número: coordenada x del rectángulo. +rect__params__y = Número: coordenada y del rectángulo. +rect__params__w = Número: ancho del rectángulo. +rect__params__h = Número: altura del rectángulo. +rect__params__tl = Número: radio opcional de la esquina superior izquierda. +rect__params__tr = Número: radio opcional de la esquina superior derecha. +rect__params__br = Número: radio opcional de la esquina inferior derecha. +rect__params__bl = Número: radio opcional de la esquina inferior izquierda. +rect__params__detailX = Número: +rect__params__detailY = Número: +triangle__description__0 = Un triángulo es un plano creado por la conexión de tres puntos. Los primeros dos argumentos especifican el primer punto, los parámetros centrales especifican el segundo punto, y los dos últimos parámetros especifican el tercer punto. +triangle__params__x1 = Número: coordenada x del primer punto. +triangle__params__y1 = Número: coordenada y del primer punto. +triangle__params__x2 = Número: coordenada x del segundo punto. +triangle__params__y2 = Número: coordenada y del segundo punto. +triangle__params__x3 = Número: coordenada x del tercer punto. +triangle__params__y3 = Número: coordenada y del tercer punto. +ellipseMode__description__0 = Modifica la ubicación de donde las elipses son dibujadas, cambiando la manera en que los parámetros dados a ellipse() son interpretados. El modo por defecto es ellipseMode(CENTER), que interpreta los dos primeros parámetros de ellipse() como el centro de la figura, mientras que los parámetros tercero y cuarto son el ancho y la altura. ellipseMode(RADIUS) también usa los dos primeros parámetros de ellipse() como el punto central de la figura, pero usa los parámetros tercero y cuarto para especificar la mitad del ancho y la altura de la figura. ellipseMode(CORNER) interpreta los dos primeros parámetros de ellipse() como la esquina superior izquierda de la figura, mientras que los parámetros tercero y cuarto son el ancho y la altura. ellipseMode(CORNERS) interpreta los dos primeros parámetros de ellipse() como la ubicación de una esquina del rectángulo contenedor de la elipse, y los parámetros tercero y cuarto como la ubicación de la esquina opuesta. El parámetro debe ser escrito en MAYÚSCULAS porque Javascript es una lenguaje de programación que distingue entre mayúsculas y minúsculas. +ellipseMode__params__mode = Constante: puede ser CENTER, RADIUS, CORNER, o CORNERS. +noSmooth__description__0 = Dibuja las figuras geométricas con bordes no suaves (aliasing). Notar que smooth() está activo por defecto, así que es necesario ejectuar noSmooth() para deshabilitar el suavizado de las figuras geométricas, imágenes y tipografías. +rectMode__description__0 = Modifica la ubicación en que los rectángulos son dibujados, cambiando la manera en que los parámetros dados a rect() son interpretados. El modo por defecto es rectMode(CORNER), que interpreta los primeros dos parámetros de rect() como la esquina superior izquierda de la figura, mientras que los parámetros tercero y cuarto son su ancho y altura. rectMode(CORNERS) interpreta los dos primeros parámetros de rect() como la ubicación de una esquina, y los parámetros tercero y cuarto como la ubicación de la esquina opuesta. rectMode(CENTER) interpreta los dos primeros parámetros de rect() como el punto central de la figura, mientas que los parámetros tercero y cuarto son su ancho y altura. rectMode(RADIUS) también usa los dos primeros parámetros de rect()= como el punto central de la figura, pero usa los parámetros tercero y cuarto para especificar la mitad del ancho y la altura de la figura. Los parámetros deben ser escritos en MAYÚSCULAS porque Javascript es un lenguaje que distingue entre mayúsculas y minúsculas. +rectMode__params__mode = Constante: puede ser CORNER, CORNERS, CENTER, o RADIUS. +smooth__description__0 = Dibuja todas las figuras geométricas con bordes suaves (sin aliasing). smooth() también mejorará la calidad de las imágenes cuyo tamaño ha sido modificado. Notar que smooth() está activo por defecto; noSmooth() puede ser usado para deshabilitar el suavizado de las figuras geométricas, imágenes y tipografía. +strokeCap__description__0 = Define el estilo de rendering de los extremos de las líneas. Estos extremos pueden ser cuadrados, extendidos o redondeados, cada uno de estos especifados con los parámetros correspondientes: SQUARE, PROJECT, y ROUND. El extremo por defecto es redonedeado (ROUND). +strokeCap__params__cap = Constante: puede ser SQUARE, PROJECT, o ROUND. +strokeJoin__description__0 = Define el estilo de las uniones que conectan segmentos de líneas. Estas uniones pueden ser tipo inglete, biseladas o redondeadas, y especificadas con los parámetros correspondientes: MITER, BEVEL, y ROUND. La unión por defecto es MITER. +strokeJoin__params__join = Constante: puede ser MITER, BEVEL, o ROUND. +strokeWeight__description__0 = Define el ancho del trazo usado para dibujar líneas, puntos y los bordes de las figuras geométricas. Todos los anchos son medidos en pixeles. +strokeWeight__params__weight = Número: el peso (en pixeles) del trazado +bezier__description__0 = Dibuja una curva Bezier cúbica en la pantalla. Estas curvas están definidas por una serie de puntos ancla y de control. Los primeros dos parámetros especifican el primer punto ancla y los dos últimos especifican el otro punto ancla, que se convierten en los puntos primero y último de la curva. Los parámetros en el medio especifican los dos puntos de control que definen la forma de la curva. De forma aproximada, los puntos de control atraen la curva hacia ellos. Las curvas Bezier fueron desarrolladas por el ingeniero automotriz Pierre Bezier, y son comúnmente usadas en gráficas computacionales para definir curvas de pendiente suave. Ver también curve(). +bezier__params__x1 = Número: coordenada x del primer punto ancla +bezier__params__y1 = Número: coordenada y del primer punto ancla +bezier__params__x2 = Número: coordenada y del primer punto de control +bezier__params__y2 = Número: coordenada x del segundo punto de control +bezier__params__x3 = Número: coordenada x del segundo punto ancla +bezier__params__y3 = Número: coordenada y del segundo punto ancla +bezier__params__x4 = Número: coordenada z del primer punto de control +bezier__params__y4 = Número: coordenada z del segundo punto ancla +bezier__params__z1 = Número: coordenada x del primer punto de control +bezier__params__z2 = Número: coordenada y del segundo punto de control +bezier__params__z3 = Número: coordenada z del primer punto ancla +bezier__params__z4 = Número: coordenada z del segundo punto de control +bezierPoint__description__0 = Evalua la curva Bezier en la posición t para los puntos a, b, c, d. Los parámetros a y d son los puntos primero y último de la curva, mientras que b y c son los puntos de control. El parámetro final t varía entre 0 y 1. Esto puede ser realizado una vez con las coordenadas x y una segunda vez con las coordenadas y para obtener la ubicación de la curva Bezier en t. +bezierPoint__returns = el valor de la curva Bezier en la posición t +bezierPoint__params__a = Número: coordenada del primer punto de la curva +bezierPoint__params__b = Número: coordenada del primer punto de control de la curva +bezierPoint__params__c = Número: coordenada del segundo punto de control de la curva +bezierPoint__params__d = Número: coordenada del segundo punto de la curva +bezierPoint__params__t = Número: valor entre 0 y 1 +bezierTangent__description__0 = Evalua la tangente de la curva Bezier en la posición t para los puntos a, b, c, d. Los parámetros a y d son los puntos primero y último de la curva, mientras que b y c son los puntos de control. El parámetro final t varía entre 0 1. +bezierTangent__returns = la tangente en la posición t +bezierTangent__params__a = Número: coordenada del primer punto de la curva +bezierTangent__params__b = Número: coordenada del primer punto de control de la curva +bezierTangent__params__c = Número: coordenada del segundo punto de control de la curva +bezierTangent__params__d = Número: coordenada del segundo punto de la curva +bezierTangent__params__t = Número: valor entre 0 y 1 +curve__description__0 = Dibuja una línea curva en la pantalla entre dos puntos, dados como los cuatro parámetros centrales. Los dos primeros puntos son un punto de control, como si la curva viniera desde este punto, aunque no sea dibujado. Los dos últimos parámetros de forma similar describen el otro punto de control. SE pueden cerar curvas más largas, por medio del posicionamiento de varias funciones curve() juntas o usando curveVertex(). Una función adicional llamada curveTightness() provee control de la calidad visual de la curva. La función curve() es una implementación de la Catmull-Rom spline. +curve__params__x1 = Número: coordenada x del punto de control inicial +curve__params__y1 = Número: coordenada y del punto de control inicial +curve__params__x2 = Número: coordenada y del primer punto +curve__params__y2 = Número: coordenada x del segundo punto +curve__params__x3 = Número: coordenada x del punto de control final +curve__params__y3 = Número: coordenada y del punto de control final +curve__params__x4 = Número: coordenada z del primer punto +curve__params__y4 = Número: coordenada z del segundo punto +curve__params__z1 = Número: coordenada x del primer punto +curve__params__z2 = Número: coordenada y del segundo punto +curve__params__z3 = Número: coordenada z del punto de control inicial +curve__params__z4 = Número: coordenada z del punto de control final +curveTightness__description__0 = Modifica la calidad de las formas creadas con curve() y curveVertex(). El parámetro tightness (tirantez) determina cómo la curva calza con los vértices. El valor 0.0 es el valor por defecto (este valor define las curvas Spline Catmull-Rom) y el valor 1.0 conecta todos los puntos con líneas rectas. Valores en el rango entre -5.0 y 5.0 deformarán las curvas pero las dejarán reconocibles, y a medida que los valores crecen en magnitud, se continuarán deformando. +curveTightness__params__amount = Número: deformación de los vértices originales +curvePoint__description__0 = Evalua la curva en la posición t para los puntos a, b, c, d. El parámetro t varía entre 0 y 1, los puntos a y d son puntos en la cruva, y b y c son los puntos de control. Esto puede ser hecho una vez con las coordenadas x y una segunda vez con las coordenadas y para obtener la ubicación de la curva en t. +curvePoint__returns = el objeto p5 +curvePoint__params__a = Número: coordenada del primer punto de la curva +curvePoint__params__b = Número: coordenada del primer punto de control de la curva +curvePoint__params__c = Número: coordenada del segundo punto de control de la curva +curvePoint__params__d = Número: coordenada del segundo punto de la curva +curvePoint__params__t = Número: valor entre 0 y 1 +curveTangent__description__0 = Evalua la tangente de la curva en la posición t para los puntos a, b, c, d. El parámetro t varía entre 0 y 1, a y d son los puntos de la curva, b y c son los puntos de control. +curveTangent__returns = la tangente en la posición t +curveTangent__params__a = Número: coordenada del primer punto de la curva +curveTangent__params__b = Número: coordenada del primer punto de control de la curva +curveTangent__params__c = Número: coordenada del segundo punto de control de la curva +curveTangent__params__d = Número: coordenada del segundo punto de la curva +curveTangent__params__t = Número: valor entre 0 y 1 +beginContour__description__0 = Usa las funciones beginContour() y endContour() para crear figuras negativas dentro de figuras como el centro de la letra 'O'. beginContour() empieza la grabación de los vértices para la figura y endContour() finaliza la grabación. Los vértices que definen una figura negativa deben ser definidos en la dirección opuesta a la figura exterior. Primero dibuja los vértices de la figura exterior en el orden de las manecillas del reloj, y luego para figuras internas, dibuja vértices en el sentido contrario a las manecillas del reloj. Estas funciones solo pueden ser usadas dentro de un par beginShape()/endShape() y transformaciones como translate(), rotate(), y scale() no funcionan dentro de un par beginContour()/endContour(). Tampoco es posible usar otras figuras, como elupse() o rect() dentro. +beginShape__description__0 = El uso de las funciones beginShape() y endShape() permiten la creación de figuras más complejas. beginShape() empieza la grabación de vértices para una figura, mientras que endShape() termina la grabación. El valor del parámetro kind (tipo) define qué tipo de figuras serán creadas a partir de los vértices. Si no se especifica un modo, la figura puede ser cualquier polígono irregular. Los parámetros disponibles para beginShape() son POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, y QUAD_STRIP. Después de llamar a la función beginShape(), debe ser seguida por una serie de comandos vertex(). Para detener el dibujo de la figura, ejecuta endShape(). Cada figura será dibujada con el color de trazo y el color de relleno actual. Transformaciones como translate(), rotate(), y scale() no funcionan dentro de beginShape(). Tampoco es posible usar otras figuras como ellipse() o rect() dentro de beginShape(). +beginShape__params__kind = Constante: puede ser POINTS, LINES, TRIANGLES, TRIANGLE_FAN TRIANGLE_STRIP, QUADS, o QUAD_STRIP +bezierVertex__description__0 = Especifica las coordenadas de un vértice para una curva Bezier. Cada llamada a la función bezierVertex() define la posición de dos puntos de control y un punto ancla de una curva Bezier, añadiendo un nuevo segmento a la línea o figura. La primera vez que bezierVertex() es usada dentro de una llamada a beginShape(), debe ser antecedida por una llamada a la función vertex() para definir el primer punto ancla. Esta función debe ser usada entre beginShape() y endShape() y solo cuando no se ha especificado el parámetro MODE (modo) a beginShape(). +bezierVertex__params__x2 = Número: coordenada x del primer punto de control la curva +bezierVertex__params__y2 = Número: coordenada y del primer punto de control la curva +bezierVertex__params__x3 = Número: coordenada x del segundo punto de control la curva +bezierVertex__params__y3 = Número: coordenada y del segundo punto de control la curva +bezierVertex__params__x4 = Número: coordenada x del primer punto ancla +bezierVertex__params__y4 = Número: coordenada y del primer punto ancla +curveVertex__description__0 = Especifica las coordenadas de un vértice para una curva. Esta función solo puede ser usada entre beginShape() y endShape() y cuando no se ha especificado el parámetro MODE en la función beginShape(). Los puntos primero y último en una serie de líneas curveVertex() serán usados para guiar el inicio y final de una curva. Un mínimo de cuatro puntos es requerido para dibujar una pequeña curva entre los puntos segundo y tercero, Añadir un quinto punto con curveVertex() dibujará la curva entre los puntos segundo, tercero y cuarto. La función curveVertex() es una implementación de las splines de Catmull-Rom. +curveVertex__params__x = Número: coordenada x del vértice +curveVertex__params__y = Número: coordenada y del vértice +endContour__description__0 = Usa las funciones beginContour() y endContour() para crear figuras negativas dentro de figuras como el centro de la letra 'O'. beginContour() empieza la grabación de los vértices para la figura y endContour() finaliza la grabación. Los vértices que definen una figura negativa deben ser definidos en la dirección opuesta a la figura exterior. Primero dibuja los vértices de la figura exterior en el orden de las manecillas del reloj, y luego para figuras internas, dibuja vértices en el sentido contrario a las manecillas del reloj. Estas funciones solo pueden ser usadas dentro de un par beginShape()/endShape() y transformaciones como translate(), rotate(), y scale() no funcionan dentro de un par beginContour()/endContour(). Tampoco es posible usar otras figuras, como elupse() o rect() dentro. +endShape__description__0 = La función endShape() es compañera de la función beginShape() y solo puede ser ejecutada tras la ejecución de beginShape(). Cuando endshape() es ejecutada, todos los datos de imagen definidos desde la llamada anterior a beginShape() son escritos en el buffer de imagen. La constante CLOSE se usa como valor para el parámetro MODE para cerrar la figura (para conectar el comienzo con el final). +endShape__params__mode = Constante: usa CLOSE para cerrar la figura. +quadraticVertex__description__0 = Especifica las coordenadas de vértices par curvas Bezier cuadráticas. Cada llamada a quadraticVertex() define la posición de uno de los puntos de control y ancla de una curva Bezier, añadiendo un nuevo segmento a la línea o figura. La primera vez que quadraticVertex() es usada dentro de una llamada a beginShape(), debe ser precedida por una llamada a la función vertex() para definir el primer punto ancla. Esta función debe ser usada entre un par beginShape() y endShape() y solo cuando no se ha especificado el parámetro MODE de beginShape(). +quadraticVertex__description__1 = This function must be used between beginShape() and endShape() and only when there is no MODE or POINTS parameter specified to beginShape(). +quadraticVertex__params__cx = Número: coordenada x del punto de control +quadraticVertex__params__cy = Número: coordenada y del punto de control +quadraticVertex__params__x3 = Número: coordenada x del punto ancla +quadraticVertex__params__y3 = Número: coordenada y del punto ancla +vertex__description__0 = Todas las figuras son construidas mediante la conexión de una serie de vértices. vertex() es usado para especificar las coordenadas de los vértices para puntos, líneas, triángulos, cuadriláteros y polígonos. Es usada exclusivamente dentro de un par de funciones beginShape() y endShape(). +vertex__params__x = Número: coordenada x del vértice +vertex__params__y = Número: coordenada y del vértice +HALF_PI__description__0 = HALF_PI es una constante matemática de valor 1.57079632679489661923. Es la mitad de la razón entre la circunferencia de un círculo y su diámetro. Es útil en combinación con las funciones trigonométricas sin() y cos(). +PI__description__0 = PI es una constante matemática de valor 3.14159265358979323846. Es la razón entre la circunferencia de un círculo y su diámetro. Es útil en combinación con las funciones trigonométricas sin() y cos(). +QUARTER_PI__description__0 = QUARTER_PI es una constante matemática de valor 0.7853982. Es un cuarto de la razón entre la circunferencia de un círculo y su diámetro. Es útil en combinación con las funciones trigonométricas sin() y cos(). +TAU__description__0 = TAU es un alias de TWO_PI, una constante matemática de valor 6.28318530717958647693. Es el doble de la razón entre la circunferencia de un círculo y su diámetro. Es útil en combinación con las funciones trigonométricas sin() y cos(). +TWO_PI__description__0 = TWO_PI es una constante matemática de valor 6.28318530717958647693. Es el doble de la razón entre la circunferencia de un círculo y su diámetro. Es útil en combinación con las funciones trigonométricas sin() y cos(). +print__description__0 = La función print() escribe en la consola del navegador. Esta función es a menudo de ayuda para observar los datos que un programa está produciendo. Esta función crea una nueva línea de texto por cada ejecución de la función. Elementos individuales pueden ser separados por comillas ('') y unidos con el operador de adición (+). Aunque print() es similar a console.log(), no llama a console.log() directamente, para simular una manera más simple de entender el comportamiento del programa. Por esto mismo, es más lento. Para resultados más rápidos, usar directamente console.log(). +print__params__contents = Cualquiera: cualquier combinación de número, string, objeto, boolean o arreglo a imprimir +frameCount__description__0 = La variable de sistema frameCount contiene el número de cuadros (frames) que se han mostrado desde que el programa empezó a ejecutarse. Dentro de setup() el valor es 0, después de la primera iteración de draw() es 1, etc. +focused__description__0 = Confirma si la ventana de un programa de p5.js está en foco, lo que significa que el bosquejo aceptará entradas desde el ratón o teclado. Esta variable es verdadera (true) si la ventana está en foco y falsa (false) si no. +cursor__description__0 = Define el cursor como un símbolo predeterminado o una imagen, o hace el cursor visible si es que estaba escondido. Si estás tratando de asignar una imagen al cursor, el tamaño recomendado es 16x16 o 32x32 pixeles. No es posible cargar una imagen al cursor si estás exportando tu programa a la Web, y no todos los modos funcionan con todos los navegadores. Los valores de los parámetros x e y deben ser menores a la dimensión de la imagen. +cursor__params__type = Número|Constante: puede ser ARROW, CROSS, HAND, MOVE, TEXT, o WAIT, o la dirección de una imagen +cursor__params__x = Número: el punto activo horizontal del cursor +cursor__params__y = Número: el punto activo vertical del cursor +frameRate__description__0 = Especifica el número de cuadros mostrados por segundo. Por ejemplo, la llamada a la función frameRate(30), tratará de refrescar 30 veces por segundo. Si el procesador no es lo suficientemente rápido para mantener la tasa especificada, la tasa de cuadros por segundo no será lograda. Definir la tasa de cuadros por segundo dentro de setup() es lo recomendable. La tasa por defecto es de 60 veces por segundo. Esto es lo mismo que setFrameRate(val). Llamar a la función frameRate() sin argumentos retorna la tasa actual. Esto es lo mismo que getFrameRate(). Llamar a la función frameRate() con arugmentos que no son de tipo número o no son positivos también retornarán la tasa actual. +frameRate__params__fps = Número: número de cuadros a ser mostrados cada segundo. +noCursor__description__0 = Esconde el cursor. +displayWidth__description__0 = Variable de sistema que almacena el ancho de la pantalla mostrada. Esto es usado para correr un programa a pantalla completa en cualquier dimensión de pantalla. +displayHeight__description__0 = Variable de sistema que almacena la altura de la pantalla mostrada. Esto es usado para correr un programa a pantalla completa en cualquier dimensión de pantalla. +windowWidth__description__0 = Variable de sistema que almacena el ancho interior de la ventana del navegador, equivale a window.innerWidth. +windowHeight__description__0 = Variable de sistema que almacena la altura interior de la ventana del navegador, equivale a window.innerHeight. +windowResized__description__0 = La función windowResized() es llamada cada vez que la ventana del navegador cambia de tamaño. Es un buen lugar para cambiar las dimensiones del lienzo o hacer cualquier otro ajuste necesario para acomodar las nuevas dimensiones de la ventana. +width__description__0 = Variable de sistema que almacena el ancho del lienzo dibujado. Este valor es definido por el primer parámetro de la función createCanvas(). Por ejemplo, la llamada a la función (320, 240) define la variable width al valor 320. El valor por defecto de ancho es de 100 si es que createCanvas() no ha sido usado en el programa. +height__description__0 = ariable de sistema que almacena la altura del lienzo dibujado. Este valor es definido por el primer parámetro de la función createCanvas(). Por ejemplo, la llamada a la función (320, 240) define la variable width al valor 240. El valor por defecto de ancho es de 100 si es que createCanvas() no ha sido usado en el programa. +fullscreen__description__0 = Si se da un argumento, define que el bosquejo esté a pantalla completa basado en el valor del argumento. Si no se da un argumento, retorna el estado actual de pantalla completa. Notar que debido a restricciones del navegador esto solo puede ser llamado con una entrada de parte del usuario, por ejemplo, cuando se presiona el ratón como en el ejemplo. +fullscreen__returns = Boolean: estado de pantalla completa actual +fullscreen__params__val = Boolean: define si el bosquejo debe estar a pantalla completa o no. +pixelDensity__description__0 = Define el escalamiento de pixeles para monitores de alta densidad de pixeles. Por defecto, la densidad de pixeles es definida para calzar con la densidad del monitor, ejecuta pixelDensity() para que no sea así. Llamar a pixelDensity() sin argumentos retorna la densidad de pixeles actual del bosquejo. +pixelDensity__params__val = Número: si es que el bosquejo debe ser escalado y cuánto. +displayDensity__description__0 = Retorna la densidad de pixeles del monitor actual en que el bosquejo está corriendo. +displayDensity__returns = Número: la densidad de pixeles actual del monitor +getURL__description__0 = Retorna la URL actual. +getURL__returns = String: URL +getURLPath__description__0 = Retorna la dirección URL como un arreglo +getURLPath__returns = Arreglo: los componentes de la dirección +getURLParams__description__0 = Retorna los parámetros de la URL actual como un objeto. +getURLParams__returns = Objeto: parámetros de la URL +preload__description__0 = La función preload() es ejecutada antes de setup(), es usada para manejar la carga asíncrona de archivos externos. Si se define una función preload(), setup() esperará hasta que las llamadas a funciones load hayan terminado. Solo se deben incluir instrucciones de carga dentro de preload() (loadImage, loadJSON, loadFont, loadStrings, etc). +setup__description__0 = La función setup() es ejecutada una vez, cuando el programa empieza. Es usada para definir propiedades iniciales como amaño de la pantalla y color de fondo y para cargar medios como imágenes y tipografías cuando el programa empieza. Solo puede haber una función setup() en cada programa y no debe ser llamada después de su ejecución inicial. Nota: las variables declaradas dentro de setup() no son accesibles dentro de otras funciones, como draw(). +draw__description__0 = La función draw() es ejecutada después de setup(), y ejecuta contínuamente las líneas de código dentro de su bloque hasta que el programa es detenido o se ejecuta la función noLoop(). Notar que si noLoop() es ejecutada dentro de setup(), draw() igualmente será ejecutado una vez antes de parar. La función draw() es ejecutada automáticamente y nunca debiera ser ejecutada explícitamente. Siempre debería ser controlada con noLoop(), redraw() y loop(). Después de que noLoop() detiene la ejecución del código dentro de draw(), redraw() causa que el código dentro de draw() se ejecute una vez, y loop() causa que el código dentro de draw() siga ejecutándose de forma continua. El número de veces que draw() se ejecuta por segundo puede ser controlado con la función frameRate(). Solo puede haber una función draw() en cada bosquejo, y draw() solo debe existir si quieres que el código corra de forma continua, o para procesar eventos como mousePressed(). Algunas veces, podrías querer ejecutar una función draw() vacía, como se mostró en el ejemplo más arriba. Es importante notar que el sistema de coordenadas de dibujo será reiniciado al principio de cada ejecución de la función draw(). Si cualquier transformación es hecha dentro de draw() (por ejemplo: escalar, rotar, trasladar), sus efectos serán anulados al principio de cada ejecución de draw(), así que las transformaciones no se acumulan en el tiempo. Por el otro lado, el estilo aplicado (color de relleno, color de trazado) sí se mantendrá en efecto. +remove__description__0 = Remueve el bosquejo de p5 completamente. Esto removerá el lienzo y cualquier otro elemento creado por p5.js. También detendrá el bucle de dibujo y desvinculará cualquier propiedad o método global de la ventana. Dejará una variable p5 en caso que quieras crear un nuevo bosquejo p5. Si quieres, puedes definir p5 = null para borrar esta variable. +boolean__description__0 = Convierte un número o string a su representación en boolean. Para números, cualquier valor distinto de cero (positivo o ne gativo), evalua a true, mientras que cero evalua a falso. Para un string, el valor true evalua a true, mientras que cualquier otro valor evalua a falso. Cuando un arreglo de números o strings es introducido, entonces un arreglo de booleans de la misma longitud es retornado. +boolean__returns = Boolean: representación en formato boolean del valor +boolean__params__n = String|Boolean|Número|Arreglo: valor a procesar +createCanvas__description__0 = Crea un elemento canvas en el documento, y define sus dimensiones medidas en pixeles. Este método debe ser llamado solo una vez al comienzo de la función setup(). Llamar a la función createCanvas() más de una vez en un bosquejo puede resultar en comportamientos impredecibles. Si quieres más de un lienzo donde dibujar, debes usar la función createGraphics() (escondido por defecto, pero puede ser mostrado), Las variables de sistema width (ancho) y height (altura) son definidas por los parámetros pasados a la función. Si createCanvas() no es usado, la ventana tendrá un tamaño por defecto de 100 x 100 pixeles. Para más maneras de posicionar el lienzo, ver la sección de posición del lienzo. +createCanvas__returns = Objeto: lienzo generado +createCanvas__params__w = Número: ancho del lienzo +createCanvas__params__h = Número: altura del lienzo +createCanvas__params__renderer = Constante: P2D o WEBGL +resizeCanvas__description__0 = Redimensiona el linezo al ancho y la altura dados. El lienzo será borrado y la función draw() será llamada inmediatamente, permitiendo que el bosquejo se ajuste al nuevo lienzo +noCanvas__description__0 = Remueve el lienzo por defecto para un bosquejo de p5 que no requiere un lienzo. +createGraphics__description__0 = Crea y retorna un nuevo objeto p5.Renderer. Usa esta clase si necesitas dibujar fuera de pantalla en un buffer gráfico. Los dos parámetros definen el ancho y la altura en pixeles. +createGraphics__returns = buffer gráfico fuera de pantalla +createGraphics__params__w = Número: ancho del buffer gráfico fuera de pantalla +createGraphics__params__h = Número: altura del buffer gráfico fuera de pantalla +createGraphics__params__renderer = Constante: P2D o WEBGL, si no se define es P2D por defecto +blendMode__description__0 = Combina los pixeles en la ventana según el modo definido. Existen distintas maneras de combinar los pixeles de la fuente (A) con los ya existentes en la pantalla mostrada (B). TODO +blendMode__params__mode = Constante: modo de combinar del lienzo +noLoop__description__0 = Detiene la ejecución continua del código de draw() de p5.js. Si se llama a la función loop(), el código dentro de draw() empieza a correr de forma continua nuevamente. Si se usa noLoop() dentro de setup(), debe ser la última línea de código dentro del bloque. Cuando se usa noLoop(), no es posible manipular o acceder a la pantalla dentro de las funciones que manejan eventos como mousePressed() o keyPressed(). En vez de eso, usa estas funciones para llamar a redraw() o loop(), que permitirán la ejecución de draw(), lo que permite el refresco correcto de la pantalla. Esto significa que cuando noLoop() ha sido ejecutado, no se sigue dibujando, y funciones como saveFrame() o loadPixels() no se pueden usar. Notar que si el bosquejo es escalado, redraw() será llamado para actualizar el bosquejo, incluso si noLoop() ha sido ejecutada. Por otro lado, el bosquejo entrará a un estado singular, hasta que loop() sea ejecutado. +loop__description__0 = Por defecto, p5.js repite de forma continua la función draw(), ejecutado el código dentro de su bloque. Sin embargo, el bucle de dibujo puede ser detenido llamando a la función noLoop(). En ese caso, el bucle de draw() puede ser retomado con loop(). +push__description__0 = La función push() graba la configuración actual de estilo de dibujo, y pop() restaura esta configuración. Notar que estas funciones siempre son usadas en conjunto. Permiten cambiar las configuraciones de estilo y transformaciones y luego volver a lo que tenías. Cuando un nuevo estado es iniciado con push(), construye encima de la información actual de estilo y transformación. Las funciones push() y pop() pueden ser embebidas para proveer más control (ver el segundo ejemplo para una demostración). push() almacena información relacionada a la configuración de estado de transformación y de estulo actual, controlada por las siguientes funciones: fill(), stroke(), tint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textMode(), textSize(), textLeading(). +pop__description__0 = La función push() graba la configuración actual de estilo de dibujo, y pop() restaura esta configuración. Notar que estas funciones siempre son usadas en conjunto. Permiten cambiar las configuraciones de estilo y transformaciones y luego volver a lo que tenías. Cuando un nuevo estado es iniciado con push(), construye encima de la información actual de estilo y transformación. Las funciones push() y pop() pueden ser embebidas para proveer más control (ver el segundo ejemplo para una demostración). push() almacena información relacionada a la configuración de estado de transformación y de estulo actual, controlada por las siguientes funciones: fill(), stroke(), tint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textMode(), textSize(), textLeading(). +redraw__description__0 = Ejecuta una vez el código dentro de la función draw(). Esta función permite al programa actualizar la ventana mostrada solamente cuando es necesario, por ejemplo, cuando un evento registrado por mousePressed() o keyPressed() ocurre. En la estructura de un programa, solo hace sentido llamar a redraw() dentro de eventos como mousePressed(). Esto es porque redraw() no hace que draw() se ejecute de forma inmediata (solo define una indicación de que se necesita un refresco). La función redraw() no funciona de forma correcta cuando se llama dentro de la función draw(). Para habilitar y deshabilitar animaciones, usa las funcioens loop() y noLoop(). Adicionalmente, puedes definir el número de veces que se dibuja por cada llamada a este método. Para esto, añade un entero como parámetro único a la función, que señale cuántas veces se requiere dibujar. +redraw__params__n = Entero: redibuja n-veces. Por defecto el valor es 1 +applyMatrix__description__0 = Multiplica la matriz actual por la especificada según los parámetros. Esto es muy lento porque tratará de calcular el inverso de la transformada, así que evítalo cuando sea posible +applyMatrix__params__a = Número: números que definen la matriz 3x2 a multiplicar +applyMatrix__params__b = Número: números que definen la matriz 3x2 a multiplicar +applyMatrix__params__c = Número: números que definen la matriz 3x2 a multiplicar +applyMatrix__params__d = Número: números que definen la matriz 3x2 a multiplicar +applyMatrix__params__e = Número: números que definen la matriz 3x2 a multiplicar +applyMatrix__params__f = Número: números que definen la matriz 3x2 a multiplicar +resetMatrix__description__0 = Reemplaza la matriz actual con la matriz identidad +rotate__description__0 = Rota una figura según el monto especificado por el parámetro ángulo. Esta función toma en cuenta el modo de ángulo definido por angleMode(), así que los ángulos pueden ser ingresados en radianes o grados. Los objetos son siempre rotados según su posición relativa al origen y los números positivos rotan en la dirección de las manecillas del reloj. Las transformaciones se aplican a todo lo que ocurre de forma posterior y las subsecuentes llamadas a la función acumulan el efecto. Por ejemplo, llamar a la función rotate(HALF_PI) y luego rotate(HALF_PI) equivale a una llamada a rotate(PI). Todas las transformaciones son anuladas cuando la función draw() comienza nuevamente. Técnicamente, rotate() multiplica la matriz de transformación actual por una matriz de rotación. Esta función puede ser controlada además con las funciones push() y pop(). +rotate__params__angle = Ángulo: el ángulo de rotación, especificado en radianes o grados, dependiendo de angleMode() +rotate__params__axis = p5.Vector|Arreglo: eje sobre el que se rota +rotateX__description__0 = Rota en torno al eje X +rotateX__params__angle = Número: ángulo en radianes +rotateY__description__0 = Rota en torno al eje Y +rotateY__params__angle = Número: ángulo en radianes +rotateZ__description__0 = Rota en torno al eje Z,. Sólo disponible en el modo WEBGL. +rotateZ__params__angle = Número: ángulo en radianes +scale__description__0 = Aumenta o decrementa el tamaño de una figura por medio de expandir o contraer sus vértices. Los objetos siempre escalan desde su origen relativo al sistema de coordenadas. Los valores de escalamiento son porcentajes decimales. Por ejemplo, la llamada a la función scale(2.0) aumenta la dimensión de una figura en un 200%. Las transformaciones se aplican a todo lo que ocurre después y llamadas subsecuentes a la función multiplican el efecto. Por ejemplo, llamar a scale(2.0) y luego a scale(1.5) equivale a llamar a scale(3.0). Si la función scale() es llamad dentro de draw(), la transformación es anulada cuando el bucle empieza nuevamente. El uso de esta función con el parámetro z está solo disponible en el modo WEBGL. Esta función puede también ser controlada con las funciones push() y pop(). +scale__params__s = Número | p5.Vector| Arreglo: porcentaje a escalar del objeto, o porcentaje a esacalar del objeto en el eje x si se dan múltiples argumentos +scale__params__y = Número: porcentaje a escalar el objeto en el eje y +scale__params__z = Número: porcentaje a escalar el objeto en el eje z (sólo en modo WEBGL) +shearX__description__0 = Corta la figura en torno al eje x según el monto especificado por el parámetro ángulo. Los ángulos deben ser especificados según el modo actual de ángulo angleMode(). Los objetos son siempre cortados según su posición relativa al origen y los números positivos cortan los objetos en la dirección de las manecillas del reloj. Las transformaciones aplican a todo lo que ocurre después y llamadas posteriores a la misma función acumulan el efecto. Por ejemplo, llamar a shearX(PI/2) y luego a shearX(PI/2) equivale a llamar a shearX(PI). Si shearX() es llamado dentro de draw(), la transformación es anulada cuando el bucle empieza nuevamente. Técnicamente, shearX() multiplica la matriz de transformación actual por una matriz de rotación. La función puede ser controlada con las funciones push() y pop(). +shearX__params__angle = Número: ángulo de corte especificado en radianes o grados, dependiendo del modo de ángulo actual angleMode() +shearY__description__0 = Corta la figura en torno al eje y según el monto especificado por el parámetro ángulo. Los ángulos deben ser especificados según el modo actual de ángulo angleMode(). Los objetos son siempre cortados según su posición relativa al origen y los números positivos cortan los objetos en la dirección de las manecillas del reloj. Las transformaciones aplican a todo lo que ocurre después y llamadas posteriores a la misma función acumulan el efecto. Por ejemplo, llamar a shearY(PI/2) y luego a shearY(PI/2) equivale a llamar a shearY(PI). Si shearY() es llamado dentro de draw(), la transformación es anulada cuando el bucle empieza nuevamente. Técnicamente, shearY() multiplica la matriz de transformación actual por una matriz de rotación. La función puede ser controlada con las funciones push() y pop(). +shearY__params__angle = Número: ángulo de corte especificado en radianes o grados, dependiendo del modo de ángulo actual angleMode() +translate__description__0 = Especifica una cantidad a desplazar los objetos dentro de la ventana mostrada. El parámetro x especifica la traslación de izquierda a derecha, el parámetro y especifica la traslación de arriba a abajo. Las transformaciones son acumulativas y aplican a todo lo que ocurre después y llamadas posteriores a la misma función acumulan el efecto. Por ejemplo, llamar a translate(50, 0) y luego a translate(20, 0) equivale a llamar a translate(70, 0). Si translate() es llamado dentro de draw(), la transformación es anulada cada vez que el bucle empieza nuevamente. Esta función peude ser controlada con las funciones push() y pop(). +translate__params__x = Número: traslación izquierda-derecha +translate__params__y = Número: traslación arriba-abajo +translate__params__z = Número: traslación adelante-atrás (solo en modo WEBGL) +createStringDict__returns = p5.StringDict: +createStringDict__params__key = String +createStringDict__params__value = String +createNumberDict__returns = p5.NumberDict: +deviceOrientation__description__0 = La variable de sistema deviceOrientation siempre contiene la orientación del dispositivo. El valor de esta variable será o landscape (paisaje) o portrait (retrato). Si la información no está disponible, su valor será undefined. +accelerationX__description__0 = La variable de sistema accelerationX siempré contiene la aceleración del dispositivo en el eje X. El valor es representado en unidades de metros por segundo al cuadrado. +accelerationY__description__0 = La variable de sistema accelerationX siempré contiene la aceleración del dispositivo en el eje Y. El valor es representado en unidades de metros por segundo al cuadrado. +accelerationZ__description__0 = La variable de sistema accelerationX siempré contiene la aceleración del dispositivo en el eje Z. El valor es representado en unidades de metros por segundo al cuadrado. +pAccelerationX__description__0 = La variable de sistema pAccelerationX siempré contiene la aceleración del dispositivo en el eje X, del cuadro anterior al cuadro actual. El valor es representado en unidades de metros por segundo al cuadrado. +pAccelerationY__description__0 = La variable de sistema pAccelerationY siempré contiene la aceleración del dispositivo en el eje Y, del cuadro anterior al cuadro actual. El valor es representado en unidades de metros por segundo al cuadrado. +pAccelerationZ__description__0 = La variable de sistema pAccelerationZ siempré contiene la aceleración del dispositivo en el eje Z, del cuadro anterior al cuadro actual. El valor es representado en unidades de metros por segundo al cuadrado. +rotationX__description__0 = La variable de sistema rotationX siempre contiene la rotación del dispositivo en el eje x. El valor está representado entre 0 y +/-180 grados. Nota: el orden en que las rotaciones son llamadas es importante, por ejemplo, si se usan juntas, deben ser llamadas en el orden Z-X-Y, en caso contrario podría haber un comportamiento errado. +rotationY__description__0 = La variable de sistema rotationX siempre contiene la rotación del dispositivo en el eje x. El valor está representado entre 0 y +/-180 grados. Nota: el orden en que las rotaciones son llamadas es importante, por ejemplo, si se usan juntas, deben ser llamadas en el orden Z-X-Y, en caso contrario podría haber un comportamiento errado. +rotationZ__description__0 = La variable de sistema rotationX siempre contiene la rotación del dispositivo en el eje y. El valor está representado entre 0 y 360 grados. A diferencia de rotationX y rotationY, esta variable está solo disponible en dispositivos equipados con una brújula interna. Nota: el orden en que las rotaciones son llamadas es importante, por ejemplo, si se usan juntas, deben ser llamadas en el orden Z-X-Y, en caso contrario podría haber un comportamiento errado. +pRotationX__description__0 = La variable de sistema pRotationX siempre contiene la rotación del dispositivo en el eje x, en el cuadro anterior al actual. El valor está representado entre 0 y +/-180 grados. pRotationX puede ser usado en conjunto con rotationX para determinar la dirección de rotación del dispositivo a lo largo del eje x. +pRotationY__description__0 = La variable de sistema pRotationY siempre contiene la rotación del dispositivo en el eje x, en el cuadro anterior al actual. El valor está representado entre 0 y +/-90 grados. pRotationY puede ser usado en conjunto con rotationY para determinar la dirección de rotación del dispositivo a lo largo del eje y. +pRotationZ__description__0 = La variable de sistema pRotationZ siempre contiene la rotación del dispositivo en el eje z, en el cuadro anterior al actual. El valor está representado entre 0 y 359 grados. pRotationZ puede ser usado en conjunto con rotationZ para determinar la dirección de rotación del dispositivo a lo largo del eje z. +setMoveThreshold__description__0 = La función setMoveThreshold() es usada para definir el umbral para detectar movimiento de la función deviceMoved(). El valor umbral por defecto es 0.5 +setMoveThreshold__params__value = Número: el valor umbral +setShakeThreshold__description__0 = La función setShakeThreshold() es usada para definir el umbral para detectar agitamiento de la función deviceShaken(). El valor umbral por defecto es 30. +setShakeThreshold__params__value = Número: el valor umbral +deviceMoved__description__0 = La función deviceMoved() es llamada cuando el dispositivo es movido en una cantidad mayor al valor umbral en el eje X, Y o Z. El valor umbral por defecto es 0.5 +deviceTurned__description__0 = La función deviceTurned() es llamada cuando el dispositivo es girado en más de 90 grados de modo continuo. El eje que gatilla la función deviceTurned() es almacenado en la variable turnAxis. El método deviceTurned() puede ser restringido para gatillar en cualquier eje: X, Y o Z, comparando la variable turnAxis con X, Y o Z. +deviceShaken__description__0 = La función deviceShaken() es llamada cuando la aceleración total de los cambios de accelerationX y accelerationY son mayores al valor umbral. El valor umbral por defecto es 30 +keyIsPressed__description__0 = La variable boolean de sistema keyIsPressed es verdadera (true) cuando cualquier tecla es presionada y falsa (false) si no hay ninguna tecla presionada +key__description__0 = La variable de sistema key siempre contiene el valor más reciente de la tecla del teclado presionada. Para tener los mejores resultados, es mejor usarla dentro de la función keyTyped(). Para teclas sin valor ASCII, usa la variable keyCode +keyCode__description__0 = La variable keyCode es usada para detectar teclas especiales, como BACKSPACE, DELETE, ENTER, RETURN, ESCAPE, SHIFT, CONTROL, OPTION, ALT, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW. También puedes revisar las teclas especiales buscando el código keyCode de cualquier tecla en internet. +keyPressed__description__0 = La función keyPressed() es llamada una vez cada vez que una tecla es presionada. El código keyCode de la tecla presionada es almacenado en la variable keyCode. Para las teclas sin valor ASCII, usa la variable keyCode. Puedes comprobar si la variable keyCode es igual a BACKSPACE, DELETE, ENTER, RETURN, ESCAPE, SHIFT, CONTROL, OPTION, ALT, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW. Para las teclas con valor ASCII que son presionadas, el valor es almacenado en la variable key. Sin embargo, no distingue entre letras mayúsculas y minúsculas. Por esta razón, es recomendable usar la función keyTyped() para leer la variable key, que sí distingue entre mayúsculas y minúsculas. Por la forma en que los sistemas operativos manejan la repetición de teclas, mantener presionada una tecla puede causar múltiples llamadas a keyTyped() (y también keyReleased()). La tasa de repetición es definida por el sistema operativo y según cómo cada computador está configurado. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por teclas. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +keyReleased__description__0 = La función keyReleased() es llamada una vez cada vez que una tecla es soltada. Ver key y keyCode para más información. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por teclas. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +keyTyped__description__0 = la función keyTyped es llamada cava vez que una tecla es presionada, excepto cuando son presionadas la steclas de acción como Ctrl, Shift y Alt, que son ignoradas. La tecla presionada más reciente será almacenada en la variable key. Por la forma en que los sistemas operativos manejan la repetición de teclas, mantener presionada una tecla puede causar múltiples llamadas a keyTyped() (y también keyReleased()). La tasa de repetición es definida por el sistema operativo y según cómo cada computador está configurado. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por teclas. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +keyIsDown__description__0 = La función keyIsDown() comprueba si la tecla está presionada. Puede ser usada si tienes un objeto que se mueve, y quieres que varias teclas sean capaces de afectar este comportamiento de manera simultánea, como cuando mueves una imagen de forma diagonal. Puedes ingresar cualquier número representando el código de tecla keyCode de la tecla, o usar cualquier de los nombres de la variable keyCode. +keyIsDown__returns = el objeto p5 +keyIsDown__params__code = Número: la tecla a buscar +mouseX__description__0 = La variable de sistema mouseX siempre contiene la posición horizontal actual del ratón, relativa al origen (0, 0) del lienzo. +mouseY__description__0 = La variable de sistema mouseY siempre contiene la posición vertical actual del ratón, relativa al origen (0, 0) del lienzo. +pmouseX__description__0 = La variable de sistema pmouseX siempre contiene la posición horizontal actual del ratón, en el cuadro anterior al actual, relativa al origen (0, 0) del lienzo. +pmouseY__description__0 = La variable de sistema pmouseY siempre contiene la posición vertical actual del ratón, en el cuadro anterior al actual, relativa al origen (0, 0) del lienzo. +winMouseX__description__0 = La variable de sistema winMouseX siempre contiene la posición horizontal actual del ratón, relativa al origen (0, 0) de la ventana del navegador. +winMouseY__description__0 = La variable de sistema winMouseY siempre contiene la posición vertical actual del ratón, relativa al origen (0, 0) de la ventana del navegador. +pwinMouseX__description__0 = La variable de sistema pwinMouseX siempre contiene la posición horizontal actual del ratón, en el cuadro anterior al actual, relativa al origen (0, 0) de la ventana del navegador. +pwinMouseY__description__0 = La variable de sistema pwinMouseY siempre contiene la posición vertical actual del ratón, en el cuadro anterior al actual, relativa al origen (0, 0) de la ventana del navegador. +mouseButton__description__0 = P5.js automáticamente rastrea si el botón del ratón está presionado y cuál botón está presionado. El valor de la variable de sistema mouseButton es o LEFT, RIGHT o CENTER dependiendo de cual fue el último botón presionado. Advertencia: diferentes navegadores pueden diferir. +mouseIsPressed__description__0 = La variable boolean de sistema mouseIsPressed es verdadera (true) si el ratón está siendo presionado, y falsa (false) en caso contrario. +mouseMoved__description__0 = La función mouseMoved() es llamada cada vez que el ratón se mueve y un botón del ratón no está siendo presionado. Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. +mouseDragged__description__0 = La función mouseDragged() es llamada cada vez que el ratón se mueve y un botón del ratón está siendo presionado. Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. +mousePressed__description__0 = La función mousePressed() es llamada cada vez que un botón del ratón está siendo presionado. La variable mouseButton (ver la referencia) puede ser usada para determinar cual botón está siendo presionado. Si no se define una función mousePressed(), la función touchStarted() será llamada en su reemplazo, si es que está definida. Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. +mouseReleased__description__0 = La función mouseReleased() es llamada cada vez que un botón del ratón es soltado. Si no se define una función mouseReleased(), la función touchEnded() será llamada en su reemplazo, si es que está definida. Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. +mouseClicked__description__0 = La función mouseClicked() es llamada cada vez que un botón del ratón es presionado y luego soltado. Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. +mouseWheel__description__0 = La función mouseWheel() es llamada cada vez que se detecta un evento de rueda de ratón vertical, ya sea gatillado por un ratón o por un touchpad. La propiedad event.delta retorna el monto que el ratón ha avanzado. Estos valores pueden ser positivos o negativos, dependiendo de la dirección de navegación (en OS X con natural scrolling, los signos son invertidos). Los navegadores pueden tener comportamientos por defecto asociados a distintos eventos del ratón. Para prevenir cualquier comportamiento por defecto, añade return false como última línea de este método. Debido al soporte actual del evento wheel en Safari, la función podría solo funcionar si return false es incluido cuando se usa Safari. +touchStarted__description__0 = La función touchStarted() es llamada una vez, cada vez que un toque nuevo es registrado. Si la función touchStarted() no ha sido definida, la función mouseIsPressed() será llamada en su lugar, si es que está definida. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por toque. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +touchMoved__description__0 = La función touchStarted() es llamada una vez, cada vez que es registrado el movimiento de un toque. Si la función touchMoved() no ha sido definida, la función mouseDragged() será llamada en su lugar, si es que está definida. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por toque. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +touchEnded__description__0 = La función touchEnded() es llamada una vez, cada vez que un toque finaliza. Si la función touchEnded() no ha sido definida, la función mouseReleased() será llamada en su lugar, si es que está definida. Los navegadores tienen distintos comportamientos por defecto asociados a distintos eventos gatillados por toque. Para prevenir cualquier comportamiento por defecto para este evento, añade return false al final de este método. +createImage__description__0 = Crea una nueva p5.Image (el tipo de datos para almacenar imágenes). Esto provee un nuevo buffer de pixeles para jugar. Define el tamaño del buffer con los parámetros de ancho y altuar. .pixels da acceso a un arreglo conteniendo los valores de todos los pixeles en la ventana mostrada. Estos valores son números. Este arreglo es del tamaño (incluyendo un factor apropiado de pixelDensity) de la ventana mostrada x4, representando los valroes R, G, B, A en orden para cada pixel., moviendo de izquierda a derecha en cada fila, y luego bajando de columna. Ver .pixels para mayor información. Podría ser más simple usar set() y get(). Antes de acceder a los pixeles de una imagen, los datos deben ser cargados con la función loadPixels(). Después de que el arreglo de datos ha sido modificado, la función updatePixels() debe ejecutarse para actualizar los cambios. +createImage__returns = el objeto p5 +createImage__params__width = Entero: ancho en pixeles +createImage__params__height = Entero: altura en pixeles +saveCanvas__description__0 = Graba el lienzo actual como una imagen. En Safari, esto abrirá la imagen en la ventana y el usuario deberá proveer su propio nombre de archivo. Otros navegadores o grabarán el archivo de inmediato, o abrirán una ventana de diálogo. +saveCanvas__params__selectedCanvas = Canvas seleccionado: una variable representando un canvas HTML5 específico (opcional) +saveCanvas__params__filename = String +saveCanvas__params__extension = String: jpg o png +saveFrames__description__0 = Captura una secuencia de cuadros que pueden ser usados para crear una película. Acepta una función callback. Por ejemplo, puedes querer mandar los cuadros a un servidor donde pueden ser almacenados o convertidos en una película. Si no se provee una función callback, el navegador abrirá varios diálogos tratando de descargar todas las imágenes que han sido creadas. Con una función callback provista, los datos de imagen no son grabados por defecto, sino que son pasados como argumento a la función callback como un arreglo de objetos, con el tamaño del arreglo siendo igual al número total de cuadros. +saveFrames__description__1 = Note that saveFrames() will only save the first 15 frames of an animation. To export longer animations, you might look into a library like ccapture.js. +saveFrames__params__filename = String: +saveFrames__params__extension = String: jpg o png +saveFrames__params__duration = Número: duración en segundos para grabar los cuadros +saveFrames__params__framerate = Número: tasa de cuadros por segundo a grabar +saveFrames__params__callback = Función: una función callback que será ejecutada para manejar los datos de imagen. Esta función deberá aceptar un arreglo como argumento. El arreglo contendrá el número especificado de cuadros como objetos. Cada objeto tiene tres propiedades: datos de imagen imageData, nombre del archivo y extensión +loadImage__description__0 = Carga una imagen desde una ruta de archivo y crea un objeto p5.Image. La imagen puede no estar inmediatamente disponible para render. Si quieres asegurarte que esté lista antes de hacer algo con ella, ubica la función loadImage() dentro de preload(). También puedes proveer una función callback para manejar la imagen cuando esté lista. La ruta a la imagen debe ser relativa al archivo HTML de tu bosquejo. Cargar desde una URL u otra ubicación remota podría estar bloqueado por las opciones de seguridad del navegador. +loadImage__returns = el objeto p5 +loadImage__params__path = String: ruta de la imagen a cargar +loadImage__params__successCallback = Función(p5.Image): función a ser llamada una vez que la imagen sea cargada. Le será pasado el objeto p5.Image +loadImage__params__failureCallback = Función(evento): llamada con el evento error si es que la carga de la imagen falla. +image__description__0 = Dibuja una imagen en el lienzo principal del bosquejo p5.js. +image__params__img = p5.Image: la imagen a mostrar +image__params__x = Número: la coordenada x donde se ubicará la esquina superior de la imagen +image__params__y = Número: la coordenada y donde se ubicará la esquina superior de la imagen +image__params__width = Número: ancho de la imagen a dibujar +image__params__height = Número: altura de la imagen a dibujar +image__params__dx = Número: la coordenada x en el lienzo de destino donde se ubicará la esquina superior izquierda de la imagen +image__params__dy = Número: la coordenada y en el lienzo de destino donde se ubicará la esquina superior izquierda de la imagen +image__params__dWidth = Número: ancho de la imagen a dibujar en el lienzo de destino +image__params__dHeight = Número: altura de la imagen a dibujar en el lienzo de destino +image__params__sx = Número: la coordenada x de la esquina superior izquierda del subrectángulo de la imagen original a dibujar en el lienzo de destino +image__params__sy = Número: la coordenada y de la esquina superior izquierda del subrectángulo de la imagen original a dibujar en el lienzo de destino +image__params__sWidth = Número: el ancho del subrectángulo de la imagen original a dibujar en el lienzo de destino +image__params__sHeight = Número: la altura del subrectángulo de la imagen original a dibujar en el lienzo de destino +tint__description__0 = Define el valor de relleno para mostrar imágenes. Las imágenes pueden ser teñidas en colores específicos o hacerse transparentes al incluir un valor alpha. Para aplicar transparencia a una imagen sin afectar su color, usa blanco como color de teñido y especifica un valor alpha. Por ejemplo, tint(255, 128) hará una imagen 50% transparente (asumiendo el rango alpha por defecto entre 0 y 255, el que puede ser modificado con la función colorMode()). El valor del parámetro gris debe ser menor o igual al actual valor máximo según lo especificado por colorMode(). El valor máximo por defecto es 255. +tint__params__v1 = Número|Arreglo: valor de gris, rojo o tinte (dependiendo del modo de color actual), o un arreglo de colores +tint__params__v2 = Número|Arreglo: valor de verde o saturación (dependiendo del modo de color actual) +tint__params__v3 = Número|Arreglo: valor de azul o brillo (dependiendo del modo de color actual) +tint__params__alpha = Número|Arreglo: opacidad del fondo +noTint__description__0 = Remueve el valor actual de relleno para mostrar imágenes y revierte a mostrar las imágenes con sus colores originales. +imageMode__description__0 = Define el modo de imagen. Modifica la ubicación desde la que las imágenes son dibujadas, por medio de cambiar la manera en que los parámetros dados a image() son interpretados. El modo por defecto es imageMode(CORNER), que interpreta los paráemtros segundo y tercero de image() como la posición de la esquina superior izquierda de la imagen. Si se dan dos parámetros adicionales, son usados para definir el ancho y la altura la imagen. imageMode(CORNERS) interpreta los paráemtros segundo y tercero de image() como la ubicación de una esquina, y los parámetros cuarto y quinto como la ubicación de la esquina opuesta. imageMode(CENTER) interpreta los parámetros segundo y tercero de image() como el punto central de la imagen. Si dos parámetros adicionales son especificados, son usados para definir el ancho y la altura de la imagen. +imageMode__params__mode = Constante: puede ser CORNER, CORNERS, o CENTER +blend__description__0 = Copia una región de pixeles de una imagen a otra, usando un modo específico de mezcla para hacer la operación. Los modos disponibles de mezcla son: BLEND | DARKEST | LIGHTEST | DIFFERENCE | MULTIPLY| EXCLUSION | SCREEN | REPLACE | OVERLAY | HARD_LIGHT | SOFT_LIGHT | DODGE | BURN | ADD | NORMAL +blend__params__srcImage = p5.Image: imagen fuente +blend__params__sx = Entero: coordenada x de la esquina superior izquierda de la fuente +blend__params__sy = Entero: coordenada y de la esquina superior izquierda de la fuente +blend__params__sw = Entero: ancho de la imagen fuente +blend__params__sh = Entero: altura de la imagen fuente +blend__params__dx = Entero: coordenada x de la esquina superior izquierda del destino +blend__params__dy = Entero: coordenada y de la esquina superior izquierda del destino +blend__params__dw = Entero: ancho de la imagen destino +blend__params__dh = Entero: altura de la imagen destino +blend__params__blendMode = Constante: el modo de mezcla +copy__description__0 = Copia una región del lienzo a otra región del lienzo desde una imagen usada como el parámetro srcImage en el lienzo. Si la fuente y el destino no son del mismo tamaño, automáticamente redimensionará los pixeles de la fuente para calzar con la región especificada como destino. +copy__params__srcImage = p5.Image: imagen fuente +copy__params__sx = Entero: coordenada x de la esquina superior izquierda de la fuente +copy__params__sy = Entero: coordenada y de la esquina superior izquierda de la fuente +copy__params__sw = Entero: ancho de la imagen fuente +copy__params__sh = Entero: altura de la imagen fuente +copy__params__dx = Entero: coordenada x de la esquina superior izquierda de destino +copy__params__dy = Entero: coordenada y de la esquina superior izquierda de destino +copy__params__dw = Entero: ancho de la imagen de destino +copy__params__dh = Entero: altura de la imagen de destino +filter__description__0 = Aplica un filtro al lienzo. Las opciones posibles son: THRESHOLD, que convierte la imagen a pixeles blancos y negros dependiendo de si están arriba o abajo del umbral definido por el parámetro. El parámetro debe estar entre 0.0 (negro) y 1.0 (blanco). Si no se especifica ningún valor, el valor por defecto es 0.5. GRAY, convierte cualquier color en la imagen a un equivalente en la escala de grises, no tiene parámetros. OPAQUE, hace que el canal alpha sea totalmente opaco, no tiene parámetros. INVERT, hace que cada pixel tenga su valor inverso, no tiene parámetros. POSTERIZE, limita cada canal de la imagen a un número de colores especificado como parámetro. El parámetro puede definir entre 2 y 255 valores, pero los resultados más notorios se dan con valores bajos. BLUR, hace que la imagen sea borrosa con un proceso Gaussiano, siendo el parámetro el nivel de cuán borroso es el resultado, si no se usa ningún parámetro, el parámetro por defecto es 1, a mayores valores es más borroso el resultado. ERODE, reduce las áreas claras, no tiene parámetros. DILATE, aumenta las áreas claras, no tiene parámetros. +filter__params__filterType = Constante: +filter__params__filterParam = Número: un parámetro opcional único a cada filtro, ver más arriba +get__description__0 = Retorna un arreglo de valores RGBA por cada pixel o toma una sección de una imagen. Si no especifican parámetros, se retorna la imagen entera. Usa los parámetros x e y para obtener el valor de un pixel. Toma una sección de la ventana mostrada si especificas los parámetros adicionales w y h. Cuando se obtiene una imagen, los parámetros x e y definen las coordenadas de la esquina superior izquierda de la imagen, sin importar el actual mode imagen definido por imageMode(). Si el pixel solicitado está fuera de la imagen, se retorna el valor [0, 0, 0, 255]. Para obtener los números escalados según los rangoes de color actuales y tomar en cuenta el modo de color según colorMode(), usa getColor() en vez de get(). Tomar el valor de un pixel con get(x, y) es fácil, pero no tan rápido como tomar los datos directamente desde pixels[]. La instrucción equivalente a get(x, y) usando pixels[] con densidad de pixeles d es var off = (y width + x) d * 4; [pixels[off], pixels[off+1], pixels[off+2], pixels[off+3]]. Ver la referencia de pixels[] para mayor información. +get__returns = Arreglo|p5.Image: valores de pixel en la posición (x, y) en formato arreglo RGBAs o p5.Image +get__params__x = Número: coordenada x del pixel +get__params__y = Número: coordenada y del pixel +get__params__w = Número: ancho +get__params__h = Número: altura +loadPixels__description__0 = Carga los datos de los pixeles en pantalla al arreglo pixels[]. Esta función siempre debe ser llamada antes de leer o escribir en el arreglo pixels[] +set__description__0 = Cambia el color de cualquier pixel, o pone una imagen directamente en la ventana. Los parámetros x e y especifican el pixel a cambiar y c especifica el valor del color. Puede ser un objeto p5.Color o un arreglo de pixeles RGBA. También puede ser un valor único en escala de grises. Cuando se define una imagen, los parámetros x e y definen las coordenadas de la esquina superior izquierda de la imagen, sin importar el modo actual de imagen según imageMode(). Después de usar set(), debes llamar a updatePixels()' para que tus cambios aparezcan. Esta función debería ser llamada una vez que todos los pixeles han sido definidos. Definir el color de un solo pixel con set(x, y) es fácil, pero es tan rápido como poner los datos directamente en el arreglo pixels[]. Definir los valores de pixels[] directamente puede ser complicado cuando se trabaja con un monitor retina, pero tendrá un mejor desempeño cuando muchos pixeles necesiten ser definidos directamente en cada iteración. Ver la referencia de pixels[] para mayor información. +set__params__x = Número: coordenada x del pixel +set__params__y = Número: coordenada y del pixel +set__params__c = Número|Arreglo|Objeto: inserta un valor en escala de grises | un arreglo de pixeles | un objeto p5.Color | un objeto p5.Image a copiar +updatePixels__description__0 = Actualiza la ventana mostrada con los datos del arreglo pixels[]. Se usa en conjunto con loadPixels(). Si solo estás leyendo pixeles desde el arreglo, no hay necesidad de llamar a updatePixels() - actualizar es solo necesario para aplicar cambios. updatePixels() debe ser llamada cada vez que el arreglo de pixeles es manipulado o si se llama a la función set(). +updatePixels__params__x = Número: coordenada x de la esquina superior izquierda de la región a actualizar +updatePixels__params__y = Número: coordenada y de la esquina superior izquierda de la región a actualizar +updatePixels__params__w = Número: ancho de la región a actualizar +updatePixels__params__h = Número: altura de la región a actualizar +loadJSON__description__0 = Carga un archivo JSON desde un archivo o una URL, y retorna un objeto o un arreglo. Este método es asíncrono, lo que significa que puede que no termine antes que se ejecute la siguiente línea en tu bosquejo. +loadJSON__returns = Objeto|Arreglo: datos JSON +loadJSON__params__path = String: nombre de archivo o URL a cargar +loadJSON__params__datatype = Función: función a ser ejecutada después de que loadJSON() finalice, los datos son pasados como primer argumento +loadJSON__params__callback = Función: función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +loadJSON__params__errorCallback = String: json o jsonp +loadStrings__description__0 = Lee los contenidos de un archivo y crea un arreglo de Strings de sus líneas individuales. Si el nombre del archivo es usado como parámetro, como en el ejemplo anterior, el archivo debe estar ubicado en el directorio del bosquejo. Alternativamente, el archivo puede ser cargado desde cualquier lugar del computador local usando una dirección absoluta (empieza con / en Unix y Linux, o una letra representando el disco en Windows), o el parámetro de nombre de archivo puede ser una URL donde esté el archivo dentro de una red. Este método es asíncrono, lo que significa que puede ser que su ejecución no termine antes de que se ejecute la siguiente línea del bosquejo. +loadStrings__returns = Arreglo: un arreglo de Strings +loadStrings__params__filename = String: nombre de archivo o URL a cargar +loadStrings__params__callback = Función: función a ser ejecutada después de que loadStrings() finalice, el arreglo es pasado como primer argumento +loadStrings__params__errorCallback = Función: función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +loadTable__description__0 = Lee los contenidos de un archivo o URL y crea un objeto p5.Table con sus valores. Si un archivo es especificado, debe ser ubicado en el directorio data del bosquejo. El parámetro de nombre de archivo puede también ser una URL de un archivo en línea. Por defecto, se asume que el archivo está separado por comas (formato CSV), La tabla sólo busca una fila de encabezado si es que se incluye la opción header. Las opciones posibles incluyen: csv: se procesan los datos como valores separados por comas, tsv: se procesan los datos como separados por tabulación, header: la tabla tiene una fila de encabezados (títulos). Si se incluyenn múltiples opciones, se deben ingresar como parámetros separados por comas. Todos los archivos son cargados y grabados usando codificación UTF-8. Este método es asíncrono, lo que significa que su ejecución puede no haber terminado antes de que se ejecute la siguiente línea del bosquejo. Si se llama a loadTable() dentro de preload() se garantiza que se complete la operación antes de que setup() y draw() sean llamadas. Fuera de preload(), puedes suplir una función callback para manejar el objeto. +loadTable__returns = Objeto Table conteniendo los datos +loadTable__params__filename = String: nombre de archivo o URL a cargar +loadTable__params__callback = String|Strings: header, csv, tsv +loadTable__params__errorCallback = Función: función a ser ejecutada después de que loadTable() finalice, el arreglo es pasado como primer argumento. Si es exitosa, el objeto Table es pasado como primer argumento, en caso contrario se pasa el valor boolean false. +loadXML__description__0 = Lee los contenidos de un archivo y crea un objeto XML con sus valores. Si el nombre del archivo es usado como parámetro, el archivo debe estar ubicado en el directorio del bosquejo. Alternativamente, el archivo puede ser cargado desde cualquier lugar del computador local usando una dirección absoluta (que empieza con / en Unix y Linux, o con una letra que simbolice el disco duro en Windows). También se puede usar como parámetro de nombre de archivo una URL para un archivo en una red. Este método es asíncrono, lo que significa que su ejecución puede no estar completa antes de que se ejecute la siguiente línea de código en el bosquejo. Llamar a loadXML() dentro de preload() garantiza que la operación se complete antes de que setup() y draw() sean llamados. Fuera de preload(), puedes suplir una función callBack para manejar el objeto. +loadXML__returns = objeto XML que contiene los datos +loadXML__params__filename = String: nombre de archivo o URL a cargar +loadXML__params__callback = Función: función a ser ejecutada después de que loadXML() finalice, el objeto XML es pasado como primer argumento +loadXML__params__errorCallback = Función: la función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +httpGet__description__0 = Método para ejecutar una solicitud HTTP GET. Si no se especifica el tipo de datos, p5 tratará de adivinar basándose en la URL, usando texto por defecto. +httpGet__returns = el objeto p5 +httpGet__params__path = String: nombre del archivo o URL a cargar +httpGet__params__datatype = Objeto: parámetro de datos pasados con la solicitud enviada +httpGet__params__data = String: json, jsonp, xml o text +httpGet__params__callback = Función: función a ser ejecutada después de que httpGet() finalice, los datos son pasados como primer argumento +httpGet__params__errorCallback = Función: función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +httpPost__description__0 = Método para ejecutar una solicitud HTTP POST. Si no se especifica el tipo de datos, p5 tratará de adivinar basándose en la URL, usando texto por defecto. +httpPost__returns = el objeto p5 +httpPost__params__path = String: nombre del archivo o URL a cargar +httpPost__params__datatype = Objeto: parámetro de datos pasados con la solicitud enviada +httpPost__params__data = String: json, jsonp, xml o text +httpPost__params__callback = Función: función a ser ejecutada después de que httpPost() finalice, los datos son pasados como primer argumento +httpPost__params__errorCallback = Función: función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +httpDo__description__0 = Método para ejecutar una solicitud HTTP. Si no se especifica el tipo de datos, p5 tratará de adivinar basándose en la URL, usando texto por defecto. También puedes pasar un objeto especificando todos los parámetros de la solicitud siguiendo los ejemplos dentro de las llamadas de reqwest() +httpDo__returns = el objeto p5 +httpDo__params__path = String: nombre del archivo o URL a cargar +httpDo__params__method = Objeto: parámetro de datos pasados con la solicitud enviada +httpDo__params__datatype = String: json, jsonp, xml o text +httpDo__params__data = Función: función a ser ejecutada después de que httpDo() finalice, los datos son pasados como primer argumento +httpDo__params__callback = Función: función a ser ejecutada si es que hay un error, la respuesta es pasada como primer argumento +createWriter__returns = p5.PrintWriter: +save__description__0 = Graba una imagen, text, json, csv, wav o html. Hace que la descarga ocurra en el computador cliente. Notar que no es recomendado llamar a save() dentro de draw() si está en bucle, porque la función save() abrirá una ventana de diálogo en cada cuadro. El comportamiento por defecto es grabar el lienzo como una imagen. Puedes opcionalmente especificar un nombre de archivo. Por ejemplo: TODO. Alternativamente, el primer parámetro puede ser un puntero a un lienzo p5.Element, un arreglo de Strings, un arreglo de JSON, un objeto JSON, un p5.Table, un p5.Image, o un p5.SoundFile (requiere p5.sound). El segundo parámetro es el nombre del archivo (incluyendo la extensión). El tercer parámetro es para opciones específicas a este tipo de objeto. Este método grabará un archivo que se austa a los parámetros dados. Por ejemplo: TODO. +save__params__objectOrFilename = Objeto|String: si se provee un nombre de archivo, se grabará el lienzo como una imagen con la extensión png o jpg, dependiendo del nombre del archivo. Si se provee un objeto, se grabará dependiendo del objeto y el nombre del archivo (ver los ejemplos anteriores) +save__params__filename = String: Si se provee un objeto como el primer parámetro, entonces el segundo parámetro indica el nombre del archivo, y debe incluir la extensión apropiada (ver los ejemplos anteriores). +save__params__options = Boolean|String: opciones adicionales depndiendo del tipo de archivo. Por ejemplo, cuando se graba un archivo JSON, true indica que la salida será optimizada según el tamaño del archivo, en vez de por legibilidad. +saveJSON__description__0 = Escribe los contenidos de un arreglo o un objeto JSON a un archivo .json. El proceso de grabación del archivo y su ubicación pueden variar entre navegadores web. +saveJSON__params__json = Arreglo|Objeto: +saveJSON__params__filename = String +saveJSON__params__optimize = Boolean: si es verdadero (true), remueve los saltos de línea del archivo de salida para optimizar el tamaño del archivo, en desmedro de la legibilidad. +saveStrings__description__0 = Escribe un arreglo de Strings a un archivo de texto, una línea por String. El proceso de grabación del archivo y su ubicación pueden variar entre navegadores web. +saveStrings__params__list = Arreglo: arreglo de Strings a ser escrito +saveStrings__params__filename = String: nombre del archivo de salida +saveTable__description__0 = Escribe los contenidos de un objeto Table a un archivo. Por defecto es un archivo de texto con valores separados por coma (csv), pero también puede usar separación por tabulación (tsv), o generar una tabla HTML (html). El proceso de grabación del archivo y su ubicación pueden variar entre navegadores web. +saveTable__params__filename = String: el nombre del archivo en el que Table será grabado +saveTable__params__options = String: puede ser tsv, csv o html. +abs__description__0 = Calcula el valor absoluto (magnitud) de un número. Usa Math.abs(). El valor absoluto de un número es siempre positivo. +abs__returns = Número: valor absoluto del número dado +abs__params__n = Número: número a computar +ceil__description__0 = Calcula el entero más cercano que es mayor o igual que el valor del parámetro. Usa Math.ceil(). Por ejemplo, ceil(9.03) retorna el valor 10. +ceil__returns = Número: número redondeado hacia arriba +ceil__params__n = Número: número a redondear +constrain__description__0 = Restringe un valor a estar entre un valor mínimo y uno máximo. +constrain__returns = Número: número restringido +constrain__params__n = Número: número a restringir +constrain__params__low = Número: límite mínimo +constrain__params__high = Número: límite máximo +dist__description__0 = Calcula la distancia entre dos puntos +dist__returns = Número: distancia entre los dos puntos +dist__params__x1 = Número: la coordenada x del primer punto +dist__params__y1 = Número: la coordenada y del primer punto +dist__params__x2 = Número: la coordenada x del segundo punto +dist__params__y2 = Número: la coordenada y del segundo punto +dist__params__z1 = Número: la coordenada z del primer punto +dist__params__z2 = Número: la coordenada z del segundo punto +exp__description__0 = Retorna el número de Euler (2.71828...) elevado al parámetro n. Usa Math.exp(). +exp__returns = e^n +exp__params__n = Número: exponente a elevar +floor__description__0 = Calcula el valor entero más cercano que es menor o igual al parámetro. Usa Math.floor(). +floor__returns = Número: número redondeado hacia abajo +floor__params__n = Número: número a ser redondeado hacia abajo +lerp__description__0 = Calcula un número entre dos números a un incremento específico. El parámetro amt es la cantidad a interpolar entre los dos valores donde 0.0 es igual al primer punto, 0.1 está muy cerca del primer punto, 0.5 está a medio camino entre ambos números, etc. La función lerp es conveniente para crear movimiento a lo largo de un camino recto y para dibujar líneas punteadas. +lerp__returns = Número: valor interpolado +lerp__params__start = Número: primer valor +lerp__params__stop = Número: segundo valor +lerp__params__amt = Número: número entre 0.0 y 1.0 +log__description__0 = Calcula el logaritmo natural (logaritmo con base e) de un número. Esta función espera que el parámetro n sea de un valor más grande que 0.0. Usa Math.log(). +log__returns = Número: logaritmo naturla de n +log__params__n = Number: number greater than 0 +mag__description__0 = Calcula la magnitud (o tamaño) de un vector. Un vector es una dirección en el espacio comúnmente usada en gráfica computacional y álgebra lineal. Como no tiene posición de inicio, la magnitud del vector puede ser pensada como la distancia entre la coordenada 0,0 a su valor x,y. Por lo tanto, mag() es un atajo a escribir dist(0, 0, x, y). +mag__returns = Número: magnitud del vector entre (0, 0) y (a, b) +mag__params__a = Número: primer valor +mag__params__b = Número: segundo valor +map__description__0 = Escala un nombre de un rango a otro rango. En el primer ejemplo anterior, el número 25 es convertido de un valor en el rango entre 0 y 100 a un valor cuyo rango está entre el borde izquierdo de la ventana (0) y el borde derecho (ancho). +map__description__1 = In the first example above, the number 25 is converted from a value in the range of 0 to 100 into a value that ranges from the left edge of the window (0) to the right edge (width). +map__returns = Número: número escalado +map__params__value = Número: el valor a ser convertido +map__params__start1 = Número: límite inferior del rango actual +map__params__stop1 = Número: límite superior del rango actual +map__params__start2 = Número: límite inferior del rango deseado +map__params__stop2 = Número: límite superior del rango deseado +max__description__0 = Determina el valor más grande en una secuencia de números, y luego retorna ese valor. max() acepta cualquier número de parámetros tipo número, o un arreglo de cualquier largo. +max__returns = Número: número máximo +max__params__nums = Número|Arreglo: números a comparar +min__description__0 = Determina el valor más pequeño en una secuencia de números, y luego retorna ese valor. max() acepta cualquier número de parámetros tipo número, o un arreglo de cualquier largo. +min__returns = Número: número mínimo +min__params__nums = Número|Arreglo: números a comparar +norm__description__0 = Normaliza un número de un rango a otro rango entre 0 y 1. Es idéntico a map(value, low, high, 0, 1). Los números fuera del rango no son saturados a 0 o 1, porque los números fuera de rango son muchas veces intencionales y útiles (ver el segundo ejemplo más arriba) +norm__returns = Número: número normalizado +norm__params__value = Número: valor entrante a ser normalizado +norm__params__start = Número: límite inferior del rango actual +norm__params__stop = Número: límite superior del rango actual +pow__description__0 = Facilita las expresiones exponenciales. La función pow() es una manera eficiente de multiplicar números po sí mismos (o sus recíprocos) en grandes cantidades. Por ejemplo, pow(3, 5) es equivalente a la expresión 3*3*3*3*3 y pow (3, -5) es equivalente a 1/3*3*3*3*3. Usa Math.pow(). +pow__returns = n^e +pow__params__n = Número: base de la expresión exponencial +pow__params__e = Número: potencia a la que se eleva la base +round__description__0 = Calcula el entero más cercano al parámetro n. Por ejemplo, round(133.8) retorna el valor 134. Usa la función Math.round(). +round__returns = Número: número redondeado +round__params__n = Número: número a redondear +sq__description__0 = Eleva al cuadrado un número (lo multiplica por sí mismo), El resultado es siempre un número positivo, porque multiplicar dos números negativos siempre resulta en un número positivo. +sq__returns = Número: número elevado al cuadrado +sq__params__n = Número: número a elevar al cuadrado +sqrt__description__0 = Calcula la raíz cuadrada de un número. La raíz cuadrada de un número es siempre positiva, aunque puede haber una raíz cuadrada válida que sea negativa. La raíz cuadrada s de un número a es tal que s*s = a. Es lo opuesto a elevar al cuadrado. Usa Math.sqrt(). +sqrt__returns = Número: raíz cuadrada del número +sqrt__params__n = Número: número no negativo al que se le calcula la raíz cuadrada +fract__description__0 = Calculates the fractional part of a number. +createVector__description__0 = Crea un nuevo objeto p5.Vector (el tipo de datos para almacenar vectores). Esto provee un vector de dos o tres dimensiones, específicamente un vector euclideano (también conocido como geométrico). Un vector es una entidad que tiene tanto magnitud como dirección. +createVector__returns = el objeto p5 +createVector__params__x = Número: componente x del vector +createVector__params__y = Número: componente y del vector +createVector__params__z = Número: componente z del vector +noise__description__0 = Retorna el valor del ruido Perlin en las coordenadas específicas. El ruido Perlin es un generador de secuencias aleatorias produciendo una sucesión de números más naturalmente ordenada y armónica, en comparación con la función estándar random(). Fue inventada por Ken Perlin en los 1980s y ha sido usada desde entonces en aplicaciones gráficas para producir texturas procedurales, movimiento natural, figuras, terrenos, etc. La principal diferencia con la función random() es definida en una espacio infinito n-dimensional donde cada par de coordenadas corresponde a un valor fijo semi-aleatorio (fijado solo durante el tiempo de vida del programa; ver la función noiseSeed()). p5.js puede calcular ruido 1D, 2D y 3D, dependiendo del número de coordenadas dado. El valor resultante siempre estará entre 0.0 y 1.0. El valor de ruido puede ser animado moviéndose a través del espacio del ruido como fue demostrado en el ejemplo superior. Las dimensiones segunda y tercera también pueden ser interpretadas como tiempo. El ruido está estructurado de forma similar a una señal de audio, con respecto al uso de la función de las frecuencias. De forma similar al conecpto de armónicas en física, el ruido Perlin es calculado a lo largo de varias octavas que se han sumado para dar forma al resultado final. Otra manera de ajustar el caracter de la secuencia resultante es la escala de las coordenadas de entrada. Como la función trabaja en un espacio infinito, el valor de las coordenadas no importa como tal, solo la distancia entre las coordenadas sucesivas importa (por ejemplo: cuando se usa noise() dentro de un bucle). Como regla general, a menor la diferencia entre coordenadas, más suave es el ruido resultante. Pasos entre 0.005 y 0.03 funcionan mejor para la mayor parte de las aplicaciones, pero esto diferirá dependiendo del uso. +noise__returns = valor de ruido Perlin (entre 0 y 1) en las coordenadas especificadas +noise__params__x = Número: coordenada x en el espacio del ruido +noise__params__y = Número: coordenada y en el espacio del ruido +noise__params__z = Número: coordenada z en el espacio del ruido +noiseDetail__description__0 = Ajusta el caracter y nivel de detalle producido por la función de ruido Perlin. Similar al concepto de armónicas en física, el ruido es calculado a lo largo de varias octavas. Las octavas más graves contribuyen de forma más significativa a la señal de salida y como define la intensidad general del ruido, mientras que las octavas más altas crean detalles más finos en la secuencia de ruido. Por defecto, el ruido es calculado a lo largo de 4 octavas, con cada octava contribuyendo exactamente la mitad que su predecesora, partiendo con una intensidad de 50% para la primera octava. Este tamaño de caída puede ser cambiado al añadir un parámetro adicional a la función. Por ejemplo, un factor de caída de 75% significa que cada octava tendrá un 75% de impacto (25% menos) que la octava anterior. Cualquier valor entre 0.0 y 1.0 es válido, sin embargo nota que valores superiores a 0.5 pueden resultar en que noise() retorne valores mayores a 1.0. Al cambiar estos parámetros, la señal creada por noise() puede ser adaptada para calzar con necesidades y características específicas. +noiseDetail__params__lod = Número: número de octavas a ser usadas por el ruido +noiseDetail__params__falloff = Número: factor de caída para cada octava +noiseSeed__description__0 = Define el valor semilla para la función noise(). Por defecto, noise() produce diferentes resultados cada vez que el programa es ejecutado. Defines el parámetro value a una constante para que retorne la misma secuencia de números pseudo-aleatorios cada vez que el programa es ejecutado +noiseSeed__params__seed = Número: el valor semilla +randomSeed__description__0 = Define la semilla para la función random(). Por defecto, la función random() produce diferentes resultados cada vez que el programa es ejecutado. Definir el parámetro semilla como una constante hace que retorne la misma secuencia de números pseudo-aleatorios cada vez que el programa es ejecutado. +randomSeed__params__seed = Número: el valor semilla +random__description__0 = Retorna un número aleaotorio de tipo float (punto flotante). Acepta 0, 1 o 2 argumentos. Si no se le da un argumento, retorna un número aleatorio entre 0 y 1 (sin incluir 1). Si se da un argumento y es un número, retorna un número aleatorio entre 0 y hasta (pero sin incluir) el parámetro. Si se da un argumento y es un arreglo, retorna una elemento al azar del arreglo. Si se dan dos argumentos, retorna un número aleatorio entre el primer argumento y hasta (pero sin incluir) el segundo argumento. +random__returns = Número: el número aleatorio o un elemento aleatorio de un conjunto de opciones +random__params__min = Número: el límite inferior (inclusivo) +random__params__max = Número: el límite superio (exclusivo) +random__params__choices = Arreglo: el arreglo del cual se elige +randomGaussian__description__0 = Retorna un número aleatorio ajjustado a una distribución Gaussiana o normal. No existe teóricamente un valor mínimo o máximo que la función randomGaussian() pueda retornar. En vez de eso, existe solo una muy baja probabilidad de retornar valores lejos de la media, y una alta probabilidad de retornar números cercanos a la media. Acepta 0, 1 o 2 argumentos. Si no tiene argumentos, retorna una media de 0 y una desviación estándar de 1. Si tiene un argumento, el argumento es la media (y la desviación estándar es 1). Si tiene dos argumentos, el primero es la media y el segundo es la desviación estándar. +randomGaussian__returns = el número aleatorio +randomGaussian__params__mean = Número: la media +randomGaussian__params__sd = Número: la desviación estándar +acos__description__0 = El inverso de la función cos(), retorna el arcocoseno de un valor. Esta función espera valores entre -1 y 1 y los valores retornados están en el rango entre 0 y PI (3.1415927). +acos__returns = Número: el arcocoseno del valor +acos__params__value = Número: el valor al que se aplica arcocoseno +asin__description__0 = El inverso de la función sin(), retorna el arcoseno de un valor. Esta función espera valores entre -1 y 1 y los valores retornados están en el rango entre -PI/2 y PI/2 . +asin__returns = Número: el arcoseno del valor +asin__params__value = Número: el valor al que se aplica arcoseno +atan__description__0 = El inverso de la función tan(), retorna el arcotangente de un valor. Esta función espera valores entre -Infinito e Infinito (exclusivo) y los valores retornados están en el rango entre -PI/2 y PI/2 . +atan__returns = Número: el arcotangente del valor +atan__params__value = Número: el valor al que se aplica arcotangente +atan2__description__0 = Calcula el ángulo (en radianes) desde un punto específico al origen, medido desde el eje x positivo. Los valores retornados son de tipo float entre -PI/2 y PI/2. La función atan2() es más frecuentemente usada para orientar figuras figuras geométricas según la posición del cursor. Nota: la coordenada y del punto es el primer parámetro, y la coordenada x es el segundo parámetro, debido a la estructura para calcular la tangente. +atan2__description__1 = Note: The y-coordinate of the point is the first parameter, and the x-coordinate is the second parameter, due the the structure of calculating the tangent. +atan2__returns = Número: el arcotangente del punto dado +atan2__params__y = Número: coordenada y del punto +atan2__params__x = Número: coordenada x del punto +cos__description__0 = calcula el coseno de un ángulo. Esta función toma en cuenta el modo actual de ángulo según angleMode(). Los valores son retornados en el rango entre -1 y 1. +cos__returns = Número: el coseno del ángulo +cos__params__angle = Número: el ángulo +sin__description__0 = calcula el seno de un ángulo. Esta función toma en cuenta el modo actual de ángulo según angleMode(). Los valores son retornados en el rango entre -1 y 1. +sin__returns = Número: el seno del ángulo +sin__params__angle = Número: el ángulo +tan__description__0 = calcula la tangente de un ángulo. Esta función toma en cuenta el modo actual de ángulo según angleMode(). Los valores son retornados en el rango entre -1 y 1. +tan__returns = Número: la tangente del ángulo +tan__params__angle = Número: el ángulo +degrees__description__0 = Convierte una medida en radianes a su correspondiente valor en grados. Radianes y grados son dos maneras de calcular lo mismo. Hay 360 grados en un círculo y 2*PI radianes en un círculo. Por ejemplo, 90 grados equivalen a PI/2 radianes. +degrees__returns = el ángulo convertido +degrees__params__radians = Número: valor en radianes a ser convertido a grados. +radians__description__0 = Convierte una medida en grados a su correspondiente valor en radianes. Radianes y grados son dos maneras de calcular lo mismo. Hay 360 grados en un círculo y 2*PI radianes en un círculo. Por ejemplo, 90 grados equivalen a PI/2 radianes. +radians__returns = el ángulo convertido +radians__params__degrees = Número: valor en grados a ser convertido a radianes. +angleMode__description__0 = Define el modo actual de p5 para interpretar ángulos. El modo por defecto es en RADIANS (radianes). +angleMode__params__mode = CONSTANTE: puede ser RADIANS (radianes) o DEGREES (grados) +textAlign__description__0 = Define el alineamiento actual para dibujar texto. Acepta dos argumentos: horizAlign(LEFT, CENTER o RIGHT) y vertAlign(TOP, BOTTOM, CENTER, o BASELINE). El parámetro horizAlign se refiere al valor x de la función text(), mientras que vel parámetro vertAlign al valor y. Así que si escribes textAlign(LEFT), estás alineando el borde izquierdo de tu texto al valor x dado en la función text(). Si escribes textAlign(RIGHT, TOP), estás alineando el borde derecho de tu texto con el valor x y el borde superior con el valor y del texto. +textAlign__description__1 = The horizAlign parameter is in reference to the x value of the text() function, while the vertAlign parameter is in reference to the y value. +textAlign__description__2 = So if you write textAlign(LEFT), you are aligning the left edge of your text to the x value you give in text(). If you write textAlign(RIGHT, TOP), you are aligning the right edge of your text to the x value and the top of edge of the text to the y value. +textAlign__params__horizAlign = Constante: alineamiento horizontal, puede ser LEFT, CENTER o RIGHT +textAlign__params__vertAlign = Constante: alineamiento vertical, puede ser TOP, BOTTOM, CENTER o BASELINE +textLeading__description__0 = Define o retorna el espaciado, en pixeles, entre líneas de texto. Esta configuración será usada en todas las llamadas posteriores a la función text(). +textLeading__params__leading = Número: el tamaño en pixeles de espaciamiento entre líneas +textSize__description__0 = Define o retorna el tamaño actual de la tipografía. Este tamaño será usado en todas las llamadas posteriores a la función text(). El tamaño de la tipografía es medido en pixeles. +textSize__params__theSize = Número: el tamaño en pixeles de las letras en pixeles +textStyle__description__0 = Define o retorna el estilo actual de la tipografía. Puede ser NORMAL (normal), ITALIC (cursivo) o BOLD (destacado). Notar que puede ser anulado por estilo CSS. Para tipografías que no sean de sistema (opentype, truetype, etc.), usa loadFont(). +textStyle__params__theStyle = Número|Constante: estilo del texto, puede ser NORMAL, ITALIC o BOLD +textWidth__description__0 = Calcula y retorna el ancho de cualquier caracter o string. +textWidth__returns = Número +textWidth__params__theText = String: el String de caracteres a medir +textWrap__returns = String: wrapStyle +loadFont__description__0 = Carga un archivo de fuente de letra (.otf, .ttf) desde un archivo o URL, y retorna un objeto PFont. Este método es asíncrono, lo que significa que puede que no finalice antes de que la siguiente línea en tu bosquejo sea ejecutada. La ubicación del archivo debe ser relativo al archivo HTML que lo vincula con tu bosquejo. Cargar desde una URL u otra ubicación remota puede ser bloqueado por las opciones de seguridad del navegador. +loadFont__description__1 = The path to the font should be relative to the HTML file that links in your sketch. Loading fonts from a URL or other remote location may be blocked due to your browser's built-in security. +loadFont__returns = Objeto: objeto p5.Font +loadFont__params__path = String: número del archivo o URL a cargar +loadFont__params__callback = Función: función a ser ejecutada después de que loadFont() es completada +text__description__0 = Dibuja texto en la pantalla. Muestra la información especificada en el primer parámetro en la pantalla, en la posición especificada por los parámetros adicionales. Una fuente por defecto será usada a menos que una fuente sea definida por la función textFont() y un tamaño por defecto será usado a menos que se use la función textSize(). Cambia el color del texto con la función fill(). Cambia la apariencia del texto con las funciones stroke() y strokeWeight(). El texto se muestra en relación a la función textAlign(), que da la opción de dibujar a la izuiqerda, derecha y centro de las coordenadas. Los parámetros x2 e y2 definen un área rectangular donde mostrar el texto y solo puede ser usado por los datos tipo String. Cuando estos parámetros son especificados, son interpretados según la configuración de rectMode(). El texto que no cabe completamente dentro del rectángulo especificado no será dibujado en pantalla. +text__params__str = String: símbolos alfanuméricos a ser mostrados +text__params__x = Número: coordenada x del texto +text__params__y = Número: coordenada y del texto +text__params__x2 = Número: por defecto, el ancho de la caja contenedora del texto, ver rectMode() para más información +text__params__y2 = Número: por defecto, la altura de la caja contenedora del texto, ver rectMode() para más información +textFont__description__0 = Define la función actual con la que se dibujará el contenido de la función text() +textFont__returns = Objeto +textFont__params__font = Objeto|String: una fuente cargada con loadFont(), o un String representando una tipografía segura de la web (una fuente ampliamente disponible a lo largo de todos los sistemas). +append__description__0 = Añade un valor al final de un arreglo. Extiende el largo de un arreglo en una unidad. Usa la función Array.push() +append__returns = el objeto p5 +append__params__array = Arreglo: Arreglo al que se agregará el dato +append__params__value = Cualquiera: a ser añadido al arreglo +arrayCopy__description__0 = Copia el arreglo (o una parte del arreglo) a otro arreglo. El arreglo fuente es copiado al arreglo de destino, empezando por la posición especificada por srcPosition y a la posición especificada por dstPosition. El número de elementos a copiar es determinado por el largo. Notar que al copiar valores se sobreescriben los valores existentes en el arreglo de destino. Para anexar valores en vez de sobreescribirlos, usa la función concat(). La versión simplificada con dos argumentos, arrayCopy(src, dest), copia un arreglo entero a otro del mismo tamaño. Es equivaletne a arrayCopy(src, 0, dst, 0, src.length). Usar esta función es mucho más eficiente para copiar datos de un arreglo que iterar con un bucle for() y copiar cada elemento individualmente. +arrayCopy__params__src = Arreglo: el arreglo fuente +arrayCopy__params__srcPosition = Número: posición inicial en el arreglo fuente +arrayCopy__params__dst = Arreglo: el arreglo de destino +arrayCopy__params__dstPosition = Número: posición inicial del arreglo de destino +arrayCopy__params__length = Número: númeor de elementos del arreglo a ser copiados +concat__description__0 = Concatena dos arreglos, usa la función Array.concat(). No modifica los arreglos de entrada. +concat__returns = Arreglo: el arreglo concatenado +concat__params__a = Arreglo: primer arreglo a concatenar +concat__params__b = Arreglo: segundo arreglo a concatenar +reverse__description__0 = Invierte el orden un arreglo, usa Array.reverse(). +reverse__returns = el objeto p5 +reverse__params__list = Arreglo: arreglo a ser invertido +shorten__description__0 = Disminuye un arreglo en un elemento y retorna el arreglo más corto, usa Array.pop(). +shorten__returns = Arreglo: el arreglo acortado +shorten__params__list = Lista: arreglo a acortar +shuffle__description__0 = Ordena aleatoriamente los elementos de un arreglo. Implementa el algoritmo Fisher Yates. +shuffle__returns = Arreglo: retorna el arreglo ordenado +shuffle__params__array = Arreglo: Arreglo a ordenar +shuffle__params__bool = Boolean: modifica el arreglo +sort__description__0 = Ordena un arreglo de números, desde el más pequeño al más grande, o pone un arreglo de palabras en orden alfabético. El arreglo original no es modificado, un nuevo arreglo ordenado es retornado. El parámetro count define el número de elementos a ordenar. Por ejemplo, si hay 12 elementos en un arreglo y count es 5, los primeros 5 elementos del arreglo serán ordenados. +sort__returns = el objeto p5 +sort__params__list = Arreglo: arreglo a ordenar +sort__params__count = Número: número de elementos a ordenar, empezando desde 0 +splice__description__0 = Inserta un valor o un arreglo de valores en un arreglo existente El primer parámetro especifica el arreglo inicial a ser modificado, y el segundo parámetro define los datos a insertarse. El tercer parámetro es un índice que especifica la posición del arreglo a partir de la que se insertarán los datos. Recuerda que el índice del arreglo empieza en 0, así que la primera posición es 0, la segunda es 1, etc. +splice__returns = el objeto p5 +splice__params__list = Arreglo: arreglo a ser modificado +splice__params__value = Cualquiera: valor a ser introducido +splice__params__position = Número: posición del arreglo donde se inserta el dato +subset__description__0 = Extrae un arreglo de elementos de un arreglo existente. El parámetro list define el arreglo desde el cual los elementos serán copiados, y los parámetros start y count especifican cuáles elementos extraer. Si no especifica count, los elementos serán extraidos desde el principio. Esta función no modifica el arreglo original +subset__returns = Arreglo: arreglo de elementos extraidos +subset__params__list = Arreglo: arreglo del cual se extrae +subset__params__start = Número: posición de donde empezar a extraer +subset__params__count = Número: número de valores a extraer +float__description__0 = Convierte un String a su representación de punto flotante. Los contenidos de un String deben parecerse a un número, en otro caso NaN es retornado. Por ejemplo, float('1234.56') evalua a 1234.56, pero float('giraffe') retorna NaN. Cuando un arreglo de valores es pasado, un arreglo de floats del mismo largo es retornado. +float__returns = Número: representación en punto flotante de un string +float__params__str = String: string a ser procesado +int__description__0 = Convierte un boolean, string o float a su representación en número entero. Cuando un arreglo de valores es introducido, entonces un arreglo de enteros de la misma longitud es retornado. +int__returns = Número: valor representado como entero +int__params__ns = String|Boolean|Número|Arreglo: valor a procesar +str__description__0 = Convierte un boolean, string, o número a su representación en string. Cuando un arreglo de valores es introducido, entonces un arreglo de strings de la misma longitud es retornado. +str__returns = String: valor representado como string +str__params__n = String|Boolean|Número|Arreglo: valor a procesar +byte__description__0 = Convierte un número, string o boolean a su representación en byte. Un byte puede solo ser un número entero entre -128 y 127, así que cuando un valor fuera de este rango es convertido, se hace wrap a la representación correspondiente en byte. Cuando un arreglo de números, string, o booleans es introducido, entonces un arreglo de bytes de la misma longitud es retornado. +byte__returns = Número: representación en formato byte del valor +byte__params__n = String|Boolean|Número|Arreglo: valor a procesar +byte__params__ns = Array: values to parse +char__description__0 = Convierte un número o string a su representaciómo como un string de un único caracter. Si se provee un parámetro, es primero pasado como entero y luego evaluado como un string de un único caracter. Cuando un arreglo de números o strings es introducido, entonces un arreglo de strings de un único caracter de la misma longitud es retornado. +char__returns = String: representación en formato string del valor +char__params__n = String|Número|Arreglo: valor a procesar +char__params__ns = Array: values to parse +unchar__description__0 = Convierte un string de un único caracter a su correspondiente representación como valor entero. Cuando un arreglo de strings de un caracter es introducido, entonces un arreglo de enteros de la misma longitud es retornado. +unchar__returns = Número: representación en formato entero del valor +unchar__params__n = String|Arreglo: valor a procesar +unchar__params__ns = Array: values to parse +hex__description__0 = Convierte un número a su correspondiente representación como hexadecimal. Si se ingersa un segundo parámetro, es usado para definir el número de caracteres a generar en la notación hexadecimal. Cuando un arreglo es introducido, entonces un arreglo de strings en notación hexadecimal de la misma longitud es retornado. +hex__returns = String: representación en formato string hexadecimal del valor +hex__params__n = Número|Arreglo: valor a procesar +unhex__description__0 = Convierte una representación en string de un número hexadecimal a su correspondiente representación como valor entero. Cuando un arreglo de strings en notación hexadecimal es introducido, entonces un arreglo de enteros de la misma longitud es retornado. +unhex__returns = Número: representación en formato entero del valor hexadecimal +unhex__params__n = String|Arreglo: valor a procesar +join__description__0 = Combina una arreglo de Strings en un String, cada uno separado por los caracteres usados como parámetro separator. Para unir arreglos de enteros o floats, es necesario primero convertirlos a Strings usando las funciones nf() o nfs(). +join__returns = String: String unificado +join__params__list = Arreglo: arreglo de Strings a ser unidos +join__params__separator = String: String a ser posicionado entre cada item +match__description__0 = Esta función es usada para aplicar una expresión regular a una porción de texto, y retorna grupos coincidentes (elementos encontrados entre paréntesis) como un arreglo de Strings. Si no existen coincidencias, se retorna el valor null. Si no se especifican grupos en la expresión regular, pero la secuencia coincide, un arreglo de largo 1 (con el texto coincidente como primer elemento del arreglo) será retornado. Para usar la función, primero comprueba si el resultado es null. Si el resultado es null, entonces la secuencia no tuvo coincidencias. Si la secuencia tuvo coincidencias, retorna un arreglo. Si exsiten grupos (especificados como conjuntos de paréntesis) en la expresión regular, entonces los contenidos de cada uno serán retornados en el arreglo. El elemento[0] de una coincidencia de expresión regular retorna el string coincidente, y el grupo de coincidencia empieza en el elemento[1] (el primer grupo es [1], el segundo es [2], etc). +match__returns = Arreglo: arreglo de Strings encontrados +match__params__str = String: el String a ser buscado +match__params__regexp = String: la expresión regular a ser usada para buscar coincidencias +matchAll__description__0 = Esta función es usada para aplicar una expresión regular a una porción de texto, y retorna una lista de grupos coincidentes (elementos encontrados entre paréntesis) como un arreglo de Strings bidimensional. Si no existen coincidencias, se retorna el valor null. Si no se especifican grupos en la expresión regular, pero la secuencia coincide, un arreglo de dos dimensiones es retornado, pero es de largo 1. Para usar la función, primero comprueba si el resultado es null. Si el resultado es null, entonces la secuencia no tuvo coincidencias. Si la secuencia tuvo coincidencias, retorna un arreglo 2D. Si exsiten grupos (especificados como conjuntos de paréntesis) en la expresión regular, entonces los contenidos de cada uno serán retornados en el arreglo. El elemento[i][0] de una coincidencia de expresión regular retorna el string coincidente completo, y el grupo de coincidencia empieza en el elemento[i][1] (el primer grupo es [i][1], el segundo es [i][2], etc). +matchAll__returns = Arreglo: arreglo 2D de Strings encontrados +matchAll__params__str = String: el String a ser buscado +matchAll__params__regexp = String: la expresión regular a ser usada para buscar coincidencias +nf__description__0 = Función de utilidad para formatear números a strings. Existen dos veriones: una para formatear floats, y una para formatear enteros. Los valores de los dígitos y los parámetros left y right siempre deben ser enteros positivos +nf__returns = String|Arreglo: String formateada +nf__params__num = Número|Arreglo: el número a formatear +nf__params__left = Número: número de dígitos a la izquierda del punto decimal +nf__params__right = Número: número de dígitos a la derecha del punto decimal +nfc__description__0 = Función de utilidad para formatear números en strings y poner las comas apropiadas para señalar múltiplos de mil. Hay dos versiones: una para números enteros y otra para arreglos de enteros. El valor del parámetro right debe siempre ser un entero positivo. +nfc__returns = String|Arreglo: String formateada +nfc__params__num = Número|Arreglo: el número a formatear +nfc__params__right = Número: número de dígitos a la derecha del punto decimal +nfp__description__0 = Función de utilidad para formatear números en strings. Similar a nf() pero pone un signo + en frente de los números positivos y un signo - en frente de números negativos. Hay dos versiones, una para formatear floats y otra para formatear enteros. Los valores de los parámetros left y right deben siempre ser enteros positivos. +nfp__returns = String|Arreglo: String formateada +nfp__params__num = Número|Arreglo: el número a formatear +nfp__params__left = Número: número de dígitos a la izquierda del punto decimal +nfp__params__right = Número: número de dígitos a la derecha del punto decimal +nfs__description__0 = Función de utilidad para formatear números en strings. Similar a nf() pero pone un espacio en frente de los números positivos y un signo - en frente de números negativos. Hay dos versiones, una para formatear floats y otra para formatear enteros. Los valores de los parámetros left y right deben siempre ser enteros positivos. +nfs__returns = String|Arreglo: String formateada +nfs__params__num = Número|Arreglo: el número a formatear +nfs__params__left = Número: número de dígitos a la izquierda del punto decimal +nfs__params__right = Número: número de dígitos a la derecha del punto decimal +split__description__0 = La función split usa String.split(), corta un String en pedazos usando un caracter o String como delimitador. El parámetro delim especifica el caracter o caracteres que marcan los bordes entre cada pieza. Un arreglo String[] es retornado, que contiene cada una de las piezas. La función splitTokens() funciona de forma similar, excepto que divide usango un rango de caracteres en vez de usar un caracter o una secuencia de caracteres específicos. +split__returns = Arreglo: arreglo de Strings +split__params__value = String: el String a ser dividido +split__params__delim = String: el String usado para separar los datos +splitTokens__description__0 = La función splitTokens() divide un String en uno o varios caracteres delimitadores o tokens. El parámetro delim especifica el o los caracteres a ser usados como borde. +splitTokens__description__1 = Si no se especifican caracteres delim, cualquier caracter tipo whitespace será usado para dividir. Los caracteres whitespace incluyen tabulación (\t), nueva línea (\n), retorno de carro (\r), entrada de formulario (\f), y espacio. +splitTokens__returns = Arreglo: arreglo de Strings +splitTokens__params__value = String: el String a ser dividido +splitTokens__params__delim = String: lista de Strings individuales que serán usados como separadores +trim__description__0 = Remueve caracteres tipo whitespace (espacio en blanco) del comienzo y el final de un String. En adición a los caracteres estámdar de whitespace como espacio, retorno de carro y tabulación, esta función también remueve el caracter Unicode nbsp. +trim__returns = String|Arreglo: un String o arreglo de Strings recortados. +day__description__0 = p5.js se comunica con el reloj de tu computador. La función day() retorna el día actual como un valor entre 1 y 31. +day__returns = Número: el día actual +hour__description__0 = p5.js se comunica con el reloj de tu computador. La función hour() retorna la hora actual como un valor entre 0 y 23. +hour__returns = Número: la hora actual +minute__description__0 = p5.js se comunica con el reloj de tu computador. La función minute() retorna el minuto actual como un valor entre 0 y 59. +minute__returns = Número: el minuto actual +millis__description__0 = Retorna el número de milisegundos (milésimas de segundo) desde que el programa empezó a correr. La información es usada a menudo para temporizar eventos y animar secuencias +millis__returns = Número: el número de milisegundos desde que empezó el programa +month__description__0 = p5.js se comunica con el reloj de tu computador. La función month() retorna el mes actual como un valor entre 1 y 12. +month__returns = Número: el mes actual +second__description__0 = p5.js se comunica con el reloj de tu computador. La función second() retorna el mes actual como un valor entre 0 y 59. +second__returns = Número: el segundo actual +year__description__0 = p5.js se comunica con el reloj de tu computador. La función year() retorna el año actual como un entero (2014, 2015, 2015, etc). +year__returns = Número: el año actual +plane__description__0 = Dibuja un plano con ancho y altura dados. +plane__params__width = Número: ancho del plano +plane__params__height = Número: altura del plano +plane__params__detailX = Número: número opcional de subdivisiones triangulares en la dimensión x +plane__params__detailY = Número: número opcional de subdivisiones triangulares en la dimensión y +box__description__0 = Dibuja una caja con ancho, altura y profundidad dados. +box__params__width = Número: ancho de la caja +box__params__Height = Número: altura de la caja +box__params__depth = Número: profundidad de la caja +box__params__detailX = Número: número opcional de subdivisiones triangulares en la dimensión x +box__params__detailY = Número: número opcional de subdivisiones triangulares en la dimensión y +sphere__description__0 = Dibuja una esfera de radio dado. +sphere__params__radius = Número: radio del círculo +sphere__params__detailX = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 24 +sphere__params__detailY = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 16 +cylinder__description__0 = Dibuja un cilindro de radio y altura dados. +cylinder__params__radius = Número: radio de la superficie +cylinder__params__height = Número: altura del cilindro +cylinder__params__detailX = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 24 +cylinder__params__detailY = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 16 +cone__description__0 = Dibuja un cono de radio y altura dados. +cone__description__1 = DetailX and detailY determine the number of subdivisions in the x-dimension and the y-dimension of a cone. More subdivisions make the cone seem smoother. The recommended maximum value for detailX is 24. Using a value greater than 24 may cause a warning or slow down the browser. +cone__params__radius = Número: radio de la superficie inferior +cone__params__height = Número: altura del cono +cone__params__detailX = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 24 +cone__params__detailY = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 16 +cone__params__cap = Boolean: (Optional) whether to draw the base of the cone +ellipsoid__description__0 = Dibuja un elipsoide de radio dado. +ellipsoid__params__radiusx = Número: radio x del círculo +ellipsoid__params__radiusy = Número: radio y del círculo +ellipsoid__params__radiusz = Número: radio z del círculo +ellipsoid__params__detailX = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 24. Evita números mayores a 150 que podrían colapsar el navegador. +ellipsoid__params__detailY = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 16. Evita números mayores a 150 que podrían colapsar el navegador. +torus__description__0 = Dibuja un toroide con radio y tubo dado. +torus__description__1 = DetailX and detailY determine the number of subdivisions in the x-dimension and the y-dimension of a torus. More subdivisions make the torus appear to be smoother. The default and maximum values for detailX and detailY are 24 and 16, respectively. Setting them to relatively small values like 4 and 6 allows you to create new shapes other than a torus. +torus__params__radius = Número: radio del anillo completo +torus__params__tubeRadius = Número: radio del tubo +torus__params__detailX = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 24. +torus__params__detailY = Número: opcional, número de segmentos, a mayor número de segmentos la geometría es más suave, por defecto es 16. +ambientLight__description__0 = Crea una luz ambiente con color +ambientLight__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo o tinte (dependiendo del modo de color actual), o arreglo de color o String de color CSS +ambientLight__params__v2 = Número: opcional, valor de verde o saturación +ambientLight__params__v3 = Número: opcional, valor de azul o brillo +ambientLight__params__alpha = Número: opcional, valor de opacidad +directionalLight__description__0 = Crea una luz direccional con color y dirección +directionalLight__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo o tinte (dependiendo del modo de color actual), o arreglo de color o String de color CSS +directionalLight__params__v2 = Número: opcional, valor de verde o saturación +directionalLight__params__v3 = Número: opcional, valor de azul o brillo +directionalLight__params__x = Número|p5.Vector: dirección del eje x o un p5.Vector +directionalLight__params__y = Número: opcional, dirección del eje y +directionalLight__params__z = Número: opcional, dirección del eje z +pointLight__description__0 = Crea una luz puntual con color y posición +pointLight__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo o tinte (dependiendo del modo de color actual), o arreglo de color o String de color CSS +pointLight__params__v2 = Número: opcional, valor de verde o saturación +pointLight__params__v3 = Número: opcional, valor de azul o brillo +pointLight__params__x = Número|p5.Vector: dirección del eje x o un p5.Vector +pointLight__params__y = Número: opcional, dirección del eje y +pointLight__params__z = Número: opcional, dirección del eje z +loadModel__description__0 = Carga un modelo 3d desde un archivo OBJ. Una de las limitaciones del formato OBJ es que no trae incorporado un sentido de escala. Esto significa que los modelos exportados por distintos programas pueden ser de tamaños radicalmente distintos. Si tu modelo no está siendo mostrado en pantalla, trata llamando a la función loadMode() con el parámetro de normalización configurado como verdadero. Esto escalará el tamaño del modelo a una escala apropiada para p5. También puedes hacer cambios adicionales al tamaño final de tu modelo con la función scale(). +loadModel__returns = el objeto p5.Geometry3D +loadModel__params__path = String: ubicación del modelo a cargar +loadModel__params__normalize = Boolean: Si es verdadero (true), escala el modelo a un tamaño estandarizado al momento de cargarlo. +loadModel__params__successCallback = Función(p5.Geometry3D): función a ser llamada cuando el modelo se cargue. Será pasada al modelo del objeto 3D. +loadModel__params__failureCallback = Función(evento): llamada con el error evento si la imagen no falla al cargar. +model__description__0 = Hace el render de un modelo 3D en la pantalla. +texture__description__0 = Textura para geometría. Puedes ver todos los posibles materiales en este ejemplo (TODO). +texture__params__tex = p5.Image|p5.MediaElement|p5.Graphics: gráfica bidimensional para hacer render como textura. +normalMaterial__description__0 = Material normal para geometría. Puedes ver todos los posibles materiales en este ejemplo (TODO). +ambientMaterial__description__0 = Material ambiente para geometría con un color dado. Puedes ver todos los posibles materiales en este ejemplo (TODO). +ambientMaterial__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo o tinte (dependiendo del modo de color), o arreglo de color, o String de color CSS +ambientMaterial__params__v2 = Número: opcional, valor de verde o saturación +ambientMaterial__params__v3 = Número: opcional, valor de azul o brillo +specularMaterial__description__0 = Material espejo para geometría con un color dado. Puedes ver todos los posibles materiales en este ejemplo. +specularMaterial__params__alpha = Número: opcional, valor de opacidad +specularMaterial__params__v1 = Número|Arreglo|String|p5.Color: valor de gris, rojo o tinte (dependiendo del modo de color), o arreglo de color, o String de color CSS +specularMaterial__params__v2 = Número: opcional, valor de verde o saturación +specularMaterial__params__v3 = Número: opcional, valor de azul o brillo +camera__description__0 = Define la posición de la cámara +camera__params__x = Número: valor de la posición de la cámara en el eje x +camera__params__y = Número: valor de la posición de la cámara en el eje y +camera__params__z = Número: valor de la posición de la cámara en el eje z +perspective__description__0 = Define la perspectiva de la cámara +perspective__params__fovy = Número: frustum del campo de visión vertical de la cámara, de abajo hacia arriba, en grados +perspective__params__aspect = Número: frustum de la relación de aspecto de la cámara +perspective__params__near = Número: frustum del largo del plano cercano +perspective__params__far = Número: frustum del largo del plano lejano +ortho__description__0 = Define la cámara ortogonal +ortho__params__left = Número: define el frustum del plano izquierdo de la cámara +ortho__params__right = Número: define el frustum del plano derecho de la cámara +ortho__params__bottom = Número: define el frustum del plano inferior de la cámara +ortho__params__top = Número: define el frustum del plano superior de la cámara +ortho__params__near = Número: define el frustum del plano cercano de la cámara +ortho__params__far = Número: define el frustum del plano lejano de la cámara diff --git a/src/data/localization/es/p5.sound.ftl b/src/data/localization/es/p5.sound.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/es/root.ftl b/src/data/localization/es/root.ftl new file mode 100644 index 0000000000..5ecedaf47f --- /dev/null +++ b/src/data/localization/es/root.ftl @@ -0,0 +1,63 @@ +h1 = Referencia +reference-search = Busca en la API +reference-description1 = ¿No encuentras lo que buscas? Quizás debas revisar en +reference-description3 = Puedes descargar una versión de la referencia. +reference-contribute2 = por favor dinos +reference-error1 = ¿Encontraste algún error? +reference-error3 = Por favor siéntete libre de +reference-error5 = y de indicar un pull request. +reference-example = Ejemplo +reference-description = Descripción +reference-extends = Extiende +reference-parameters = Parámetros +reference-syntax = Sintaxis +reference-returns = Retorna +Environment = Ambiente +Color = Color +Color Conversion = Color Conversion +Creating & Reading = Creación y lectura +Setting = Configuración +Shape = Forma +2D Primitives = Primitivas 2D +Attributes = Atributos +Curves = Curvas +Vertex = Vértices +Constants = Constantes +Structure = Estructura +DOM = DOM +Rendering = Render +Foundation = Foundation +Transform = Transformar +Data = Datos +LocalStorage = LocalStorage +Dictionary = Diccionario +Events = Eventos +Acceleration = Aceleración +Keyboard = Teclado +Mouse = Ratón +Touch = Tacto +Image = Imagen +Loading & Displaying = Cargar & Mostrar +Pixels = Pixeles +IO = Entrada y salida +Input = Entrada +Output = Salida +Table = Tabla +Math = Matemáticas +Calculation = Cálculo +Vector = Vector +Noise = Ruido +Random = Random +Trigonometry = Trigonometría +Typography = Tipografía +Array Functions = Funciones de arreglo +Conversion = Conversión +String Functions = Funciones de String +Time & Date = Tiempo & Fecha +3D Primitives = Primitivas 3D +Lights, Camera = Luces, cámara +Interaction = Interaction +Lights = Luces +3D Models = Modelos 3D +Material = Materiales +Camera = Cámara diff --git a/src/data/localization/hi-IN/JSON.ftl b/src/data/localization/hi-IN/JSON.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/console.ftl b/src/data/localization/hi-IN/console.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Amplitude.ftl b/src/data/localization/hi-IN/p5.Amplitude.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.AudioIn.ftl b/src/data/localization/hi-IN/p5.AudioIn.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.AudioVoice.ftl b/src/data/localization/hi-IN/p5.AudioVoice.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.BandPass.ftl b/src/data/localization/hi-IN/p5.BandPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Camera.ftl b/src/data/localization/hi-IN/p5.Camera.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Color.ftl b/src/data/localization/hi-IN/p5.Color.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Compressor.ftl b/src/data/localization/hi-IN/p5.Compressor.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Convolver.ftl b/src/data/localization/hi-IN/p5.Convolver.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Delay.ftl b/src/data/localization/hi-IN/p5.Delay.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Distortion.ftl b/src/data/localization/hi-IN/p5.Distortion.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.EQ.ftl b/src/data/localization/hi-IN/p5.EQ.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Effect.ftl b/src/data/localization/hi-IN/p5.Effect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Element.ftl b/src/data/localization/hi-IN/p5.Element.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Envelope.ftl b/src/data/localization/hi-IN/p5.Envelope.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.FFT.ftl b/src/data/localization/hi-IN/p5.FFT.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.File.ftl b/src/data/localization/hi-IN/p5.File.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Filter.ftl b/src/data/localization/hi-IN/p5.Filter.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Font.ftl b/src/data/localization/hi-IN/p5.Font.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Gain.ftl b/src/data/localization/hi-IN/p5.Gain.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Geometry.ftl b/src/data/localization/hi-IN/p5.Geometry.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Graphics.ftl b/src/data/localization/hi-IN/p5.Graphics.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.HighPass.ftl b/src/data/localization/hi-IN/p5.HighPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Image.ftl b/src/data/localization/hi-IN/p5.Image.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.LowPass.ftl b/src/data/localization/hi-IN/p5.LowPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.MediaElement.ftl b/src/data/localization/hi-IN/p5.MediaElement.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.MonoSynth.ftl b/src/data/localization/hi-IN/p5.MonoSynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Noise.ftl b/src/data/localization/hi-IN/p5.Noise.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.NumberDict.ftl b/src/data/localization/hi-IN/p5.NumberDict.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.OnsetDetect.ftl b/src/data/localization/hi-IN/p5.OnsetDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Oscillator.ftl b/src/data/localization/hi-IN/p5.Oscillator.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Panner3D.ftl b/src/data/localization/hi-IN/p5.Panner3D.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Part.ftl b/src/data/localization/hi-IN/p5.Part.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.PeakDetect.ftl b/src/data/localization/hi-IN/p5.PeakDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Phrase.ftl b/src/data/localization/hi-IN/p5.Phrase.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.PolySynth.ftl b/src/data/localization/hi-IN/p5.PolySynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.PrintWriter.ftl b/src/data/localization/hi-IN/p5.PrintWriter.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Pulse.ftl b/src/data/localization/hi-IN/p5.Pulse.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Renderer.ftl b/src/data/localization/hi-IN/p5.Renderer.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Reverb.ftl b/src/data/localization/hi-IN/p5.Reverb.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SawOsc.ftl b/src/data/localization/hi-IN/p5.SawOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Score.ftl b/src/data/localization/hi-IN/p5.Score.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Shader.ftl b/src/data/localization/hi-IN/p5.Shader.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SinOsc.ftl b/src/data/localization/hi-IN/p5.SinOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SoundFile.ftl b/src/data/localization/hi-IN/p5.SoundFile.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SoundLoop.ftl b/src/data/localization/hi-IN/p5.SoundLoop.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SoundRecorder.ftl b/src/data/localization/hi-IN/p5.SoundRecorder.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.SqrOsc.ftl b/src/data/localization/hi-IN/p5.SqrOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.StringDict.ftl b/src/data/localization/hi-IN/p5.StringDict.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Table.ftl b/src/data/localization/hi-IN/p5.Table.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.TableRow.ftl b/src/data/localization/hi-IN/p5.TableRow.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.TriOsc.ftl b/src/data/localization/hi-IN/p5.TriOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.TypedDict.ftl b/src/data/localization/hi-IN/p5.TypedDict.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.Vector.ftl b/src/data/localization/hi-IN/p5.Vector.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.XML.ftl b/src/data/localization/hi-IN/p5.XML.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/p5.ftl b/src/data/localization/hi-IN/p5.ftl new file mode 100644 index 0000000000..6dabbdfa58 --- /dev/null +++ b/src/data/localization/hi-IN/p5.ftl @@ -0,0 +1,151 @@ +alpha__returns = p5 ऑब्जेक्ट +blue__returns = p5 ऑब्जेक्ट +brightness__returns = p5 ऑब्जेक्ट +color__description__0 = रंग डेटाटाइप के चरों में भंडारण के लिए रंग बनाता है। पैरामीटर को वर्तमान colorMode() के आधार पर RGB या HSB मानों के रूप में व्याख्यायित किया जाता है। डिफ़ॉल्ट मोड आरजीबी मान 0 से 255 तक है और इसलिए, फ़ंक्शन कॉल रंग (255, 204, 0) एक चमकदार पीला रंग लौटाएगा। +color__description__1 = ध्यान दें कि यदि color() को केवल एक मान प्रदान किया जाता है, तो इसे ग्रेस्केल मान के रूप में समझा जाएगा। दूसरा मान जोड़ें, और यह होगा अल्फा पारदर्शिता के लिए उपयोग किया जाता है। जब तीन मान निर्दिष्ट किए जाते हैं, तो उन्हें आरजीबी या एचएसबी मान के रूप में व्याख्या किया जाता है। चौथा मान जोड़ने से अल्फा पारदर्शिता लागू होती है। +color__description__2 = यदि एक एकल स्ट्रिंग तर्क प्रदान किया जाता है, तो आरजीबी, आरजीबीए और हेक्स सीएसएस रंग स्ट्रिंग और सभी नामित रंग स्ट्रिंग समर्थित हैं। इस मामले में, दूसरे तर्क के रूप में अल्फा संख्या मान समर्थित नहीं है, आरजीबीए फॉर्म का उपयोग किया जाना चाहिए। +color__returns = फिक्स: परिणामस्वरूप रंग +green__returns = p5 ऑब्जेक्ट +hue__description__0 = रंग या पिक्सेल सरणी से रंग मान निकालता है। +hue__description__1 = ह्यू एचएसबी और एचएसएल दोनों में मौजूद है। एचएसबी रंग ऑब्जेक्ट के साथ आपूर्ति किए जाने पर यह फ़ंक्शन एचएसबी-सामान्यीकृत रंग लौटाएगा (या जब रंग मोड एचएसबी होने पर पिक्सेल सरणी के साथ आपूर्ति की जाती है), लेकिन एचएसएल-सामान्यीकृत रंग के लिए डिफ़ॉल्ट होगा अन्यथा। (मान केवल तभी भिन्न होंगे जब प्रत्येक सिस्टम के लिए अधिकतम ह्यू सेटिंग अलग हो।) +hue__returns = p5 ऑब्जेक्ट +lerpColor__description__0 = दो रंगों को मिलाता है उनके बीच कहीं तीसरा रंग खोजने के लिए। एएमटी पैरामीटर दो मानों के बीच इंटरपोलेट करने की मात्रा है जहां 0.0 पहले रंग के बराबर है, 0.1 पहले रंग के बहुत करीब है, 0.5 बीच में आधा है, आदि। एक 0 से नीचे की राशि को 0 माना जाएगा। इसी तरह, 1 से ऊपर की राशि को 1 पर सीमित कर दिया जाएगा। यह lerp() के व्यवहार से अलग है, लेकिन आवश्यक है क्योंकि अन्यथा सीमा के बाहर की संख्याएँ अजीब और अप्रत्याशित रंग उत्पन्न करेंगी। +lerpColor__description__1 = जिस तरह से रंगों को प्रक्षेपित किया जाता है वह वर्तमान रंग मोड पर निर्भर करता है। +lerpColor__returns = व्यवस्था / संख्या: प्रक्षेपित रंग +lightness__returns = p5 ऑब्जेक्ट +red__returns = p5 ऑब्जेक्ट +saturation__description__0 = रंग या पिक्सेल सरणी से संतृप्ति मान निकालता है। +saturation__description__1 = संतृप्ति को एचएसबी और एचएसएल में अलग-अलग स्केल किया जाता है। यह फ़ंक्शन एचएसबी रंग ऑब्जेक्ट के साथ आपूर्ति किए जाने पर एचएसबी संतृप्ति लौटाएगा (या जब रंग मोड एचएसबी है, तो पिक्सेल सरणी के साथ आपूर्ति की जाती है), लेकिन अन्यथा एचएसएल संतृप्ति में डिफ़ॉल्ट होगा। +saturation__returns = p5 ऑब्जेक्ट +background__description__0 = background() फ़ंक्शन p5.js कैनवास की पृष्ठभूमि के लिए उपयोग किए गए रंग को सेट करता है। डिफ़ॉल्ट पृष्ठभूमि पारदर्शी होती है। यह फ़ंक्शन आमतौर पर अंदर उपयोग किया जाता है draw() प्रत्येक फ्रेम की शुरुआत में डिस्प्ले विंडो को साफ करने के लिए, लेकिन इसका उपयोग सेटअप () एनिमेशन के पहले फ्रेम पर बैकग्राउंड सेट करने के लिए या अगर बैकग्राउंड को सिर्फ एक बार सेट करने की जरूरत है। +background__description__1 = रंग या तो आरजीबी, एचएसबी, या एचएसएल रंग के संदर्भ में निर्दिष्ट किया गया है जो वर्तमान colorMode पर निर्भर करता है। (डिफ़ॉल्ट रंग स्थान RGB है, जिसमें 0 से 255 तक की सीमा में प्रत्येक मान)। डिफ़ॉल्ट रूप से अल्फा श्रेणी भी 0 से 255 तक होती है। +background__description__2 = यदि एक एकल स्ट्रिंग तर्क प्रदान किया जाता है, तो आरजीबी, आरजीबीए और हेक्स सीएसएस रंग तार और सभी नामित रंग तार समर्थित हैं। इस मामले में, दूसरे तर्क के रूप में अल्फा संख्या मान समर्थित नहीं है, आरजीबीए फॉर्म का उपयोग किया जाना चाहिए। +background__description__3 = एक p5.Color ऑब्जेक्ट भी बैकग्राउंड कलर सेट करने के लिए दिया जा सकता है। +background__description__4 = एक p5.Image भी पृष्ठभूमि छवि सेट करने के लिए प्रदान किया जा सकता है। +colorMode__description__0 = colorMode() p5.js रंग डेटा की व्याख्या करने के तरीके को बदल देता है। डिफ़ॉल्ट रूप से, भरें(), stroke(), background(), और color() को RGB रंग मॉडल का उपयोग करके 0 और 255 के बीच के मानों द्वारा परिभाषित किया जाता है। यह colorMode (RGB, 255) सेट करने के बराबर है कलरमोड (एचएसबी) सेट करने से आप इसके बजाय एचएसबी सिस्टम का उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, यह कलरमोड (एचएसबी, 360, 100, 100, 1) है। आप एचएसएल का भी उपयोग कर सकते हैं। +colorMode__description__1 = नोट: मौजूदा रंगीन ऑब्जेक्ट उस मोड को याद रखते हैं जिसमें वे बनाए गए थे, इसलिए आप उनकी उपस्थिति को प्रभावित किए बिना अपनी पसंद के अनुसार मोड बदल सकते हैं। +fill__description__0 = आकृतियों को भरने के लिए प्रयुक्त रंग सेट करता है। उदाहरण के लिए, यदि आप भरण (204, 102, 0) चलाते हैं, तो भरण आदेश के बाद खींची गई सभी आकृतियों को नारंगी रंग से भर दिया जाएगा। यह रंग या तो आरजीबी के संदर्भ में निर्दिष्ट है या वर्तमान colorMode() के आधार पर HSB रंग। (डिफ़ॉल्ट रंग स्थान RGB है, जिसमें प्रत्येक मान 0 से 255 के बीच होता है)। अल्फा डिफ़ॉल्ट रूप से सीमा भी 0 से 255 तक होती है। +fill__description__1 = यदि एक एकल स्ट्रिंग तर्क प्रदान किया जाता है, तो आरजीबी, आरजीबीए और हेक्स सीएसएस रंग तार और सभी नामित रंग तार समर्थित हैं। इस मामले में, दूसरे तर्क के रूप में अल्फा संख्या मान समर्थित नहीं है, आरजीबीए फॉर्म का उपयोग किया जाना चाहिए। +fill__description__2 = एक p5 Color ऑब्जेक्ट भी भरण रंग सेट करने के लिए प्रदान किया जा सकता है। +noStroke__description__0 = स्ट्रोक (रूपरेखा) खींचना अक्षम करता है। यदि दोनों noStroke() और noFill() कहा जाता है, स्क्रीन पर कुछ भी नहीं खींचा जाएगा। +stroke__description__0 = आकृतियों के चारों ओर रेखाएँ और सीमाएँ खींचने के लिए उपयोग किए गए रंग को सेट करता है। यह रंग या तो RGB या HSB रंग के संदर्भ में निर्दिष्ट होता है जो वर्तमान colorMode()पर निर्भर करता है। (डिफ़ॉल्ट रंग स्थान आरजीबी है, प्रत्येक मान 0 से 255 तक की सीमा में है। डिफ़ॉल्ट रूप से अल्फा श्रेणी भी 0 से 255 है। +stroke__description__1 = यदि एक एकल स्ट्रिंग तर्क प्रदान किया जाता है, तो आरजीबी, आरजीबीए और हेक्स सीएसएस रंग तार और सभी नामित रंग तार समर्थित हैं। इस मामले में, दूसरे तर्क के रूप में अल्फा संख्या मान समर्थित नहीं है, आरजीबीए फॉर्म का उपयोग किया जाना चाहिए। +stroke__description__2 = स्ट्रोक रंग सेट करने के लिए एक p5 Color ऑब्जेक्ट भी प्रदान किया जा सकता है। +arc__description__0 = स्क्रीन पर एक चाप बनाएं। यदि केवल एक्स, वाई, डब्ल्यू, एच, स्टार्ट और स्टॉप के साथ बुलाया जाता है, तो चाप को एक खुले पाई सेगमेंट के रूप में खींचा और भर दिया जाएगा। यदि एक मोड पैरामीटर प्रदान किया जाता है, तो चाप भर जाएगा एक खुला अर्ध-वृत्त (OPEN), एक बंद अर्ध-वृत्त (CHORD), या एक बंद पाई खंड (PIE) के रूप में। मूल को ellipseMode()से बदला जा सकता है समारोह। +arc__description__1 = चाप हमेशा दक्षिणावर्त खींची जाती है, जहां से प्रारंभ गिरती है, जहां दीर्घवृत्त पर स्टॉप गिरती है। किसी भी कोण में TWO_PI को जोड़ने या घटाने से वह नहीं बदलता जहां वे गिरते हैं। यदि दोनों प्रारंभ और स्टॉप एक ही स्थान पर गिरते हैं, तो एक पूर्ण दीर्घवृत्त खींचा जाएगा। ध्यान रखें कि y-अक्ष नीचे की दिशा में बढ़ता है, इसलिए कोणों को धनात्मक x-दिशा ("3 बजे") से दक्षिणावर्त मापा जाता है। +ellipse__description__0 = स्क्रीन पर एक अंडाकार (अंडाकार) खींचता है। डिफ़ॉल्ट रूप से, पहले दो पैरामीटर अंडाकार के केंद्र का स्थान निर्धारित करते हैं, और तीसरा और चौथा पैरामीटर आकार की चौड़ाई और ऊंचाई निर्धारित करता है। यदि कोई ऊंचाई निर्दिष्ट नहीं है, तो का मान चौड़ाई का उपयोग चौड़ाई और ऊंचाई दोनों के लिए किया जाता है। यदि एक नकारात्मक ऊंचाई या चौड़ाई निर्दिष्ट की जाती है, तो निरपेक्ष मान लिया जाता है। +ellipse__description__1 = समान चौड़ाई और ऊंचाई वाला एक दीर्घवृत्त एक वृत्त है। मूल को ellipseMode() फ़ंक्शन के साथ बदला जा सकता है। +line__description__0 = स्क्रीन पर एक रेखा (दो बिंदुओं के बीच एक सीधा पथ) खींचता है। यदि केवल 4 पैरामीटर के साथ कॉल किया जाता है, तो यह 1 पिक्सेल की डिफ़ॉल्ट चौड़ाई के साथ 2D में एक रेखा खींचेगा। इस चौड़ाई को stokeWeight()का उपयोग करके संशोधित किया जा सकता है फ़ंक्शन। एक लाइन को भरा नहीं जा सकता है, इसलिए fill() फंक्शन होगा किसी रेखा के रंग को प्रभावित न करें। इसलिए किसी रेखा को रंगने के लिए, stroke() फ़ंक्शन का उपयोग करें। +point__description__0 = एक बिंदु खींचता है, एक पिक्सेल के आयाम पर अंतरिक्ष में एक निर्देशांक। पहला पैरामीटर बिंदु के लिए क्षैतिज मान है, दूसरा पैरामीटर बिंदु के लिए लंबवत मान है। बिंदु का रंग stoke() के साथ बदल जाता है फ़ंक्शन। बिंदु का आकार strokeWeight() समारोह। +quad__description__0 = कैनवास पर एक क्वाड खींचता है। एक क्वाड एक चतुर्भुज, एक चार भुजा वाला बहुभुज है। यह एक आयत के समान है, लेकिन इसके किनारों के बीच के कोण नब्बे डिग्री तक सीमित नहीं हैं। मापदंडों की पहली जोड़ी (x1,y1) सेट पहले शीर्ष और बाद के जोड़े को परिभाषित आकार के चारों ओर दक्षिणावर्त या वामावर्त आगे बढ़ना चाहिए। z- तर्क केवल तभी काम करते हैं जब quad() का उपयोग WEBGL मोड में किया जाता है। +rect__description__0 = कैनवास पर एक आयत बनाता है। एक आयत एक चार-तरफा बंद आकार है जिसमें प्रत्येक कोण नब्बे डिग्री पर होता है। डिफ़ॉल्ट रूप से, पहले दो पैरामीटर ऊपरी-बाएं कोने का स्थान निर्धारित करते हैं, तीसरा चौड़ाई सेट करता है, और चौथा ऊंचाई सेट करता है। जिस तरह से इन मापदंडों की व्याख्या की जाती है, उसे rectMode() फ़ंक्शन के साथ बदला जा सकता है। +rect__description__1 = पांचवां, छठा, सातवां और आठवां पैरामीटर, यदि निर्दिष्ट किया गया है, क्रमशः शीर्ष-बाएं, शीर्ष-दाएं, निचले-दाएं और निचले-बाएं कोनों के लिए कोने त्रिज्या निर्धारित करें। एक छोड़ा गया कोने त्रिज्या पैरामीटर के मान पर सेट किया गया है पैरामीटर सूची में पहले निर्दिष्ट त्रिज्या मान। +triangle__description__0 = एक त्रिभुज को कैनवास पर खींचता है। एक त्रिभुज तीन बिंदुओं को जोड़कर बनाया गया एक विमान है। पहले दो तर्क पहले बिंदु को निर्दिष्ट करते हैं, मध्य दो तर्क दूसरे बिंदु को निर्दिष्ट करते हैं, और अंतिम दो तर्क तीसरे बिंदु को निर्दिष्ट करते हैं। +ellipseMode__description__0 = उस स्थान को संशोधित करता है जहां से दीर्घवृत्त खींचे जाते हैं, जिस तरह से पैरामीटर दिए गए हैं ellipse(), circle() और arc() की व्याख्या की जाती है। +ellipseMode__description__1 = डिफ़ॉल्ट मोड CENTER है, जिसमें पहले दो मापदंडों की व्याख्या आकृति के केंद्र बिंदु के रूप में क्रमशः x और y निर्देशांक के रूप में की जाती है, जबकि तीसरा और चौथा पैरामीटर इसकी चौड़ाई और ऊंचाई है। +ellipseMode__description__2 = ellipseMode(RADIUS) आकृति के केंद्र बिंदु के x और y निर्देशांक के रूप में पहले दो पैरामीटर का भी उपयोग करता है, लेकिन आकार की चौड़ाई और ऊंचाई के आधे हिस्से को निर्दिष्ट करने के लिए तीसरे और चौथे पैरामीटर का उपयोग करता है। +ellipseMode__description__3 = ellipseMode(CORNER) आकृति के ऊपरी-बाएँ कोने के रूप में पहले दो मापदंडों की व्याख्या करता है, जबकि तीसरा और चौथा पैरामीटर इसकी चौड़ाई और ऊंचाई है। +ellipseMode__description__4 = ellipseMode(CORNERS) पहले दो मापदंडों को दीर्घवृत्त के बाउंडिंग बॉक्स के एक कोने के स्थान के रूप में और तीसरे और चौथे पैरामीटर को विपरीत कोने के स्थान के रूप में व्याख्या करता है। +ellipseMode__description__5 = इस पद्धति के पैरामीटर को सभी CAPS में लिखा जाना चाहिए क्योंकि वे सभी CAPS में स्थिरांक के रूप में पूर्वनिर्धारित हैं और जावास्क्रिप्ट एक केस-संवेदी भाषा है। +noSmooth__description__0 = सभी ज्यामिति को दांतेदार (उपनाम) किनारों के साथ खींचता है। ध्यान दें कि smooth() डिफ़ॉल्ट रूप से 2D मोड में सक्रिय है, इसलिए कॉल करना आवश्यक है noSmooth() ज्योमेट्री, इमेज और फॉण्ट की स्मूदिंग को डिसेबल करने के लिए। 3D मोड में noSmooth() डिफ़ॉल्ट रूप से सक्षम है, इसलिए smooth() को कॉल करना आवश्यक है यदि आप अपनी ज्यामिति पर चिकने (एंटीअलाइज्ड) किनारे चाहते हैं। +rectMode__description__0 = उस स्थान को संशोधित करता है जहां से पैरामीटर दिए गए तरीके को बदलकर आयतें खींची जाती हैं rect() की व्याख्या की जाती है। +rectMode__description__1 = डिफ़ॉल्ट मोड कॉर्नर है, जो पहले दो मापदंडों को आकार के ऊपरी-बाएँ कोने के रूप में व्याख्या करता है, जबकि तीसरा और चौथा पैरामीटर इसकी चौड़ाई और ऊंचाई है। +rectMode__description__2 = रेक्टमोड (कॉर्नर) पहले दो मापदंडों को कोनों में से एक के स्थान के रूप में और तीसरे और चौथे पैरामीटर को तिरछे विपरीत कोने के स्थान के रूप में व्याख्या करता है। ध्यान दें, आयत निर्देशांक के बीच खींचा जाता है, इसलिए यह आवश्यक नहीं है कि पहला कोना ऊपरी बाएँ कोना होगा। +rectMode__description__3 = rectMode(CENTER) आकृति के केंद्र बिंदु के रूप में पहले दो मापदंडों की व्याख्या करता है, जबकि तीसरा और चौथा पैरामीटर इसकी चौड़ाई और ऊंचाई है। +rectMode__description__4 = rectMode(RADIUS) आकृति के केंद्र बिंदु के रूप में पहले दो मापदंडों का भी उपयोग करता है, लेकिन क्रमशः आकार की चौड़ाई और ऊंचाई के आधे हिस्से को निर्दिष्ट करने के लिए तीसरे और चौथे पैरामीटर का उपयोग करता है। +rectMode__description__5 = इस पद्धति के पैरामीटर को सभी CAPS में लिखा जाना चाहिए क्योंकि वे सभी CAPS में स्थिरांक के रूप में पूर्वनिर्धारित हैं और जावास्क्रिप्ट एक केस-संवेदी भाषा है। +smooth__description__0 = सभी ज्यामिति को चिकने (एंटी-अलियास) किनारों के साथ खींचता है। smooth() आकार बदलने वाली छवियों की छवि गुणवत्ता में भी सुधार करेगा। ध्यान दें कि smooth() डिफ़ॉल्ट रूप से 2D मोड में सक्रिय है; noSmooth() का इस्तेमाल ज्योमेट्री, इमेज और फोंट की स्मूदिंग को डिसेबल करने के लिए किया जा सकता है। 3डी मोड में, noSmooth() डिफ़ॉल्ट रूप से सक्षम है, इसलिए smooth() को कॉल करना आवश्यक है यदि आप अपनी ज्यामिति पर चिकने (एंटीअलाइज्ड) किनारे चाहते हैं। +strokeCap__description__0 = लाइन एंडिंग को रेंडर करने के लिए स्टाइल सेट करता है। ये सिरे या तो गोल, चौकोर या विस्तारित होते हैं, जिनमें से प्रत्येक को संबंधित मापदंडों के साथ निर्दिष्ट किया जाता है: ROUND, SQUARE और PROJECT। डिफ़ॉल्ट कैप राउंड है। +strokeCap__description__1 = इस पद्धति के पैरामीटर को सभी CAPS में लिखा जाना चाहिए क्योंकि वे सभी CAPS में स्थिरांक के रूप में पूर्वनिर्धारित हैं और जावास्क्रिप्ट एक केस-संवेदी भाषा है। +strokeJoin__description__0 = जोड़ों की शैली सेट करता है जो लाइन सेगमेंट को जोड़ता है। ये जोड़ या तो मिटर्ड, बेवेल या गोलाकार होते हैं और संबंधित पैरामीटर एमआईटीईआर, बेवेल और राउंड के साथ निर्दिष्ट होते हैं। डिफ़ॉल्ट संयुक्त एमआईटीईआर है। इस पद्धति के पैरामीटर को सभी CAPS में लिखा जाना चाहिए क्योंकि वे सभी CAPS में स्थिरांक के रूप में पूर्वनिर्धारित हैं और जावास्क्रिप्ट एक केस-संवेदी भाषा है। +bezier__description__0 = स्क्रीन पर एक क्यूबिक बेज़ियर वक्र बनाता है। इन वक्रों को एंकर और नियंत्रण बिंदुओं की एक श्रृंखला द्वारा परिभाषित किया जाता है। पहले दो पैरामीटर पहले एंकर पॉइंट को निर्दिष्ट करते हैं और अंतिम दो पैरामीटर अन्य एंकर पॉइंट को निर्दिष्ट करते हैं, जो पहले और अंतिम बिंदु बन जाते हैं। वक्र पर। मध्य पैरामीटर दो नियंत्रण बिंदुओं को निर्दिष्ट करते हैं जो वक्र के आकार को परिभाषित करते हैं। लगभग बोलते हुए, नियंत्रण बिंदु वक्र को उनकी ओर "खींचें"। +bezier__description__1 = बेज़ियर कर्व्स फ्रांसीसी ऑटोमोटिव इंजीनियर पियरे बेज़ियर द्वारा विकसित किए गए थे, और आमतौर पर कंप्यूटर ग्राफिक्स में धीरे-धीरे ढलान वाले वक्रों को परिभाषित करने के लिए उपयोग किए जाते हैं। वक्र() भी देखें। +bezierPoint__description__0 = बेज़ियर वक्र के नियंत्रण और एंकर बिंदुओं के x या y समन्वय मानों को देखते हुए, यह स्थिति t पर बेज़ियर के x या y निर्देशांक का मूल्यांकन करता है। पैरामीटर a और d पहले और अंतिम बिंदुओं के x या y निर्देशांक हैं। वक्र पर जबकि बी और सी नियंत्रण बिंदुओं के हैं। अंतिम पैरामीटर टी परिणामी बिंदु की स्थिति है जो 0 और 1 के बीच दिया गया है। यह एक बार x निर्देशांक के साथ और दूसरी बार y निर्देशांक के साथ किया जा सकता है t पर एक बेजियर वक्र का स्थान प्राप्त करें। +bezierPoint__returns = स्थिति टी पर बेज़ियर वक्र का मूल्य +bezierTangent__description__0 = A, B, C, D के लिए स्थितिी t पर बेज़ियर के स्पर्शरेखा का मूल्यांकन करता है। पैरामीटर A और D वक्र पर पहले और आखिरी बिंदु हैं, और B और D नियंत्रण बिंदु हैं। अंतिम पैरामीटर t के बीच भिन्न होता है 0 और 1। +bezierTangent__returns = स्थिति में स्पर्शरेखा t +curve__description__0 = स्क्रीन पर दो बिंदुओं के बीच एक घुमावदार रेखा खींचता है, जिसे मध्य चार मापदंडों के रूप में दिया गया है। पहले दो पैरामीटर एक नियंत्रण बिंदु हैं, जैसे कि वक्र इस बिंदु से आया है, भले ही वह खींचा न गया हो। अंतिम दो पैरामीटर समान रूप से दूसरे का वर्णन करते हैं नियंत्रण बिंदु।

        curve() कार्यों की श्रृंखला को एक साथ रखकर या curveVertex()। एक अतिरिक्त फ़ंक्शन जिसे curveTightness() कहा जाता है, की दृश्य गुणवत्ता के लिए नियंत्रण प्रदान करता है वक्र। curve() फ़ंक्शन Catmull-Rom splines का कार्यान्वयन है। +curvePoint__returns = p5 ऑब्जेक्ट +curveTangent__returns = स्थिति में स्पर्शरेखा t +beginContour__description__0 = नकारात्मक बनाने के लिए beginContour() और endContour() फ़ंक्शन का उपयोग करें अक्षर 'O' के केंद्र जैसे आकार के भीतर आकार। beginContour() आकृति के लिए शीर्षों को रिकॉर्ड करना शुरू करता है और endContour() रिकॉर्डिंग बंद कर देता है। ऋणात्मक आकार को परिभाषित करने वाले शीर्षों को बाहरी आकार से विपरीत दिशा में "wind" होना चाहिए। पहले बाहरी दक्षिणावर्त क्रम के लिए शीर्ष बनाएं, फिर आंतरिक के लिए आकृतियाँ, वामावर्त में शीर्ष आकृतियाँ बनाएँ। +beginContour__description__1 = इन कार्यों का उपयोग केवल beginShape()/endShape() में किया जा सकता है। जोड़ी और रूपांतरण जैसे translate(), rotate() , और scale() एक beginContour()/ के भीतर काम नहीं करते हैं endContour() जोड़ी। अन्य आकृतियों का उपयोग करना भी संभव नहीं है, जैसे कि ellipse () या rect() भीतर। +beginShape__description__0 = beginShape() और endShape() फ़ंक्शन का उपयोग करने से और अधिक निर्माण करने की अनुमति मिलती है जटिल रूप। beginShape() एक आकृति के लिए शीर्षों को रिकॉर्ड करना शुरू करता है और endShape() रिकॉर्डिंग बंद कर देता है। प्रकार के पैरामीटर का मान यह बताता है कि दिए गए शीर्षों से किस प्रकार की आकृतियाँ बनानी हैं। बिना किसी विधा के निर्दिष्ट किए, आकार कोई भी अनियमित बहुभुज हो सकता है। +beginShape__description__1 = beginShape() के लिए उपलब्ध पैरामीटर POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP, और TESS (केवल WebGL) हैं। कॉल करने के बाद beginShape() फ़ंक्शन, vertex() कमांड की एक श्रृंखला होनी चाहिए अनुसरण करें। आकृति बनाना बंद करने के लिए, endShape() पर कॉल करें। प्रत्येक आकृति को वर्तमान स्ट्रोक रंग से रेखांकित किया जाएगा और भरण रंग से भरा जाएगा। +beginShape__description__2 = रूपांतरण जैसे translate(), rotate(), और scale() beginShape() के भीतर काम नहीं करते। यह भी नहीं है अन्य आकृतियों का उपयोग करना संभव है, जैसे कि ellipse() या rect() के भीतर beginShape()। +bezierVertex__description__0 = बेज़ियर कर्व्स के लिए वर्टेक्स निर्देशांक निर्दिष्ट करता है। bezierVertex() के लिए प्रत्येक कॉल दो नियंत्रण बिंदुओं की स्थिति और एक बेज़ियर वक्र के एक एंकर पॉइंट को परिभाषित करता है, एक लाइन या आकार में एक नया सेगमेंट जोड़ता है। वेबजीएल मोड के लिए bezierVertex() में इस्तेमाल किया जा सकता है 2डी और साथ ही 3डी मोड। 2डी मोड 6 पैरामीटर की अपेक्षा करता है, जबकि 3डी मोड 9 पैरामीटर (जेड निर्देशांक सहित) की अपेक्षा करता है। +bezierVertex__description__1 = पहली बार bezierVertex() का उपयोग beginShape() कॉल के भीतर किया जाता है, इसे vertex()। इस फ़ंक्शन का उपयोग beginShape() और endShape() और केवल तभी जब beginShape()। +curveVertex__description__0 = वक्र के लिए शीर्ष निर्देशांक निर्दिष्ट करता है। इस फ़ंक्शन का उपयोग केवल beginShape() और endShape()के बीच किया जा सकता है और केवल तभी जब beginShape() के लिए निर्दिष्ट कोई मोड पैरामीटर न हो। WebGL मोड के लिए curveVertex() का उपयोग 2D में किया जा सकता है साथ ही 3D मोड। 2D मोड 2 पैरामीटर की अपेक्षा करता है, जबकि 3D मोड 3 पैरामीटर की अपेक्षा करता है। +curveVertex__description__1 = वक्र की शुरुआत और अंत को निर्देशित करने के लिए curveVertex() लाइनों की एक श्रृंखला में पहले और अंतिम बिंदुओं का उपयोग किया जाएगा। दूसरे और तीसरे बिंदुओं के बीच एक छोटा वक्र खींचने के लिए न्यूनतम चार बिंदुओं की आवश्यकता होती है। पांचवां जोड़ना curveVertex() के साथ बिंदु दूसरे, तीसरे और चौथे बिंदुओं के बीच वक्र खींचेगा। curveVertex() फ़ंक्शन कैटमुल-रोम स्प्लिन का कार्यान्वयन है। +endContour__description__0 = ऋण बनाने के लिए beginContour() और endContour() फ़ंक्शन का उपयोग करें अक्षर 'O' के केंद्र जैसे आकार के भीतर आकार। beginContour() आकृति के लिए शीर्षों को रिकॉर्ड करना शुरू करता है और endContour() रिकॉर्डिंग बंद कर देता है। ऋणात्मक आकार को परिभाषित करने वाले शीर्षों को बाहरी आकार से विपरीत दिशा में "wind" होना चाहिए। पहले बाहरी दक्षिणावर्त क्रम के लिए कोने बनाएं, फिर आंतरिक के लिए आकृतियाँ, वामावर्त में शीर्ष आकृतियाँ बनाएँ। +endContour__description__1 = इन कार्यों का उपयोग केवल beginShape()/endShape() में किया जा सकता है। जोड़ी और रूपांतरण जैसे translate(), rotate() , और scale() एक beginContour()/ के भीतर काम नहीं करते हैं endContour() जोड़ी। अन्य आकृतियों का उपयोग करना भी संभव नहीं है, जैसे कि ellipse () या rect() भीतर। +endShape__description__0 = endShape() फ़ंक्शन beginShape() का सहयोगी है और beginShape() के बाद ही कॉल किया जा सकता है। जब endShape() है कहा जाता है, पिछली कॉल के बाद से परिभाषित सभी छवि डेटा beginShape() को छवि बफर में लिखा जाता है। मोड पैरामीटर के मान के रूप में स्थिर बंद करें आकृति को बंद करने के लिए (शुरुआत और अंत को जोड़ने के लिए)। +quadraticVertex__description__0 = द्विघात बेज़ियर वक्रों के लिए शीर्ष निर्देशांक निर्दिष्ट करता है। quadraticVertex() के लिए प्रत्येक कॉल एक नियंत्रण बिंदु और एक Bezier वक्र के एक एंकर बिंदु की स्थिति को परिभाषित करता है, एक रेखा या आकार में एक नया खंड जोड़ता है। पहली बार quadraticVertex() का उपयोग किया जाता है एक beginShape() कॉल, इसे vertex()पर कॉल के साथ पहले से तैयार किया जाना चाहिए पहला एंकर पॉइंट सेट करने के लिए। WebGL मोड के लिए quadraticVertex() का उपयोग 2D के साथ-साथ 3D मोड में भी किया जा सकता है। 2D मोड 4 पैरामीटर की अपेक्षा करता है, जबकि 3D मोड 6 पैरामीटर (z निर्देशांक सहित) की अपेक्षा करता है। +quadraticVertex__description__1 = इस फ़ंक्शन का उपयोग beginShape() और endShape() के बीच किया जाना चाहिए और केवल तभी जब beginShape() में निर्दिष्ट कोई मोड या POINTS पैरामीटर न हो। +vertex__description__0 = सभी आकृतियों का निर्माण शीर्षों की एक श्रृंखला को जोड़कर किया जाता है। vertex() का उपयोग बिंदुओं, रेखाओं, त्रिभुजों, चतुर्भुज और के लिए शीर्ष निर्देशांक निर्दिष्ट करने के लिए किया जाता है। बहुभुज। इसका उपयोग विशेष रूप से beginShape() और endShape() में किया जाता है कार्य। +frameRate__description__0 = प्रत्येक सेकंड में प्रदर्शित होने वाले फ़्रेमों की संख्या निर्दिष्ट करता है। उदाहरण के लिए, फ़ंक्शन कॉल frameRate(30) एक सेकंड में 30 बार ताज़ा करने का प्रयास करेगा। यदि प्रोसेसर निर्दिष्ट दर को बनाए रखने के लिए पर्याप्त तेज़ नहीं है, तो फ़्रेम दर नहीं होगी हासिल किया। फ्रेम दर को setup() के भीतर सेट करने की अनुशंसा की जाती है। डिफ़ॉल्ट फ्रेम दर प्रदर्शन की फ्रेम दर पर आधारित होती है (यहां इसे " भी कहा जाता है) ताज़ा दर"), जो अधिकांश कंप्यूटरों पर 60 फ़्रेम प्रति सेकंड पर सेट है। 24 फ़्रेम प्रति सेकंड (फ़िल्मों के लिए सामान्य) या इससे अधिक की फ़्रेम दर सुचारू एनिमेशन के लिए पर्याप्त होगी। यह setFrameRate(val) के समान है। +frameRate__description__1 = कॉलिंग frameRate() बिना किसी तर्क के वर्तमान फ्रैमरेट लौटाती है। ड्रा फ़ंक्शन को मान वापस करने से पहले कम से कम एक बार चलना चाहिए। यह वही है getFrameRate() के रूप में। +frameRate__description__2 = frameRate() को ऐसे तर्कों के साथ कॉल करना जो संख्याओं के प्रकार के नहीं हैं या जो सकारात्मक नहीं हैं, वर्तमान फ्रैमरेट भी लौटाते हैं। +displayWidth__description__0 = सिस्टम वैरिएबल जो डिफ़ॉल्ट pixelDensity के अनुसार स्क्रीन डिस्प्ले की चौड़ाई को स्टोर करता है। इसका उपयोग किसी भी डिस्प्ले साइज पर फुल-स्क्रीन प्रोग्राम चलाने के लिए किया जाता है। वास्तविक स्क्रीन आकार वापस करने के लिए, इसे पिक्सेल घनत्व से गुणा करें। +displayHeight__description__0 = सिस्टम वैरिएबल जो डिफ़ॉल्ट pixelDensity के अनुसार स्क्रीन डिस्प्ले की ऊंचाई को स्टोर करता है। इसका उपयोग किसी भी डिस्प्ले साइज पर फुल-स्क्रीन प्रोग्राम चलाने के लिए किया जाता है। वास्तविक स्क्रीन आकार वापस करने के लिए, इसे पिक्सेल घनत्व से गुणा करें। +windowResized__description__0 = windowResized() फ़ंक्शन हर बार ब्राउज़र विंडो का आकार बदलने पर एक बार कॉल किया जाता है। कैनवास का आकार बदलने या इसके लिए कोई अन्य समायोजन करने के लिए यह एक अच्छी जगह है नई विंडो के आकार को समायोजित करें। +width__description__0 = सिस्टम वैरिएबल जो ड्रॉइंग कैनवास की चौड़ाई को स्टोर करता है। यह मान createCanvas() फ़ंक्शन के पहले पैरामीटर द्वारा सेट किया गया है। उदाहरण के लिए, फ़ंक्शन कॉल createCanvas(320, 240) चौड़ाई चर को मान 320 पर सेट करता है। चौड़ाई का मान डिफ़ॉल्ट रूप से 100 हो जाता है यदि createCanvas() का उपयोग नहीं किया जाता है कार्यक्रम। +height__description__0 = सिस्टम वैरिएबल जो ड्राइंग कैनवास की ऊंचाई को स्टोर करता है। यह मान createCanvas() फ़ंक्शन के दूसरे पैरामीटर द्वारा सेट किया गया है। उदाहरण के लिए, फ़ंक्शन कॉल createCanvas(320, 240) ऊंचाई चर को 240 मान पर सेट करता है। ऊंचाई का मान डिफ़ॉल्ट रूप से 100 हो जाता है यदि createCanvas() का उपयोग नहीं किया जाता है कार्यक्रम। +fullscreen__description__0 = यदि तर्क दिया गया है, तो तर्क के मूल्य के आधार पर स्केच को पूर्णस्क्रीन पर सेट करता है या नहीं। यदि कोई तर्क नहीं दिया जाता है, तो वर्तमान पूर्णस्क्रीन स्थिति लौटाता है। ध्यान दें कि ब्राउज़र प्रतिबंधों के कारण इसे केवल उपयोगकर्ता इनपुट पर ही कॉल किया जा सकता है, उदाहरण के लिए , माउस प्रेस पर नीचे दिए गए उदाहरण की तरह। +fullscreen__returns = बूलियन: वर्तमान पूर्ण स्क्रीन स्थिति +pixelDensity__description__0 = उच्च पिक्सेल घनत्व डिस्प्ले के लिए पिक्सेल स्केलिंग सेट करता है। डिफ़ॉल्ट रूप से पिक्सेल घनत्व प्रदर्शन घनत्व से मेल खाने के लिए सेट होता है, इसे बंद करने के लिए पिक्सेल घनत्व (1) पर कॉल करें। pixelDensity() पर कॉल करना बिना किसी तर्क के स्केच का वर्तमान पिक्सेल घनत्व लौटाता है। +displayDensity__returns = संख्या: मॉनिटर की वर्तमान पिक्सेल घनत्व +getURL__returns = स्ट्रिंग: URL +getURLPath__returns = फिक्स: पते के घटक +getURLParams__returns = ऑब्जेक्ट: URL पैरामीटर +preload__description__0 = setup() से पहले सीधे कॉल किया जाता है, preload() फ़ंक्शन है अवरुद्ध तरीके से बाहरी फ़ाइलों के एसिंक्रोनस लोडिंग को संभालने के लिए उपयोग किया जाता है। यदि एक प्रीलोड फ़ंक्शन परिभाषित किया गया है, तो setup() तब तक प्रतीक्षा करेगा जब तक कि कोई भी लोड कॉल समाप्त न हो जाए . लोड कॉल के अलावा कुछ नहीं (loadImage, loadJSON, loadFont, loadStrings, आदि) प्रीलोड फ़ंक्शन के अंदर होना चाहिए। यदि एसिंक्रोनस लोडिंग है पसंदीदा, लोड विधियों को इसके बजाय setup() या कहीं भी कॉलबैक पैरामीटर के उपयोग के साथ कॉल किया जा सकता है। +preload__description__1 = डिफ़ॉल्ट रूप से पाठ "loading..." प्रदर्शित किया जाएगा। अपना स्वयं का लोडिंग पृष्ठ बनाने के लिए, अपने पृष्ठ में आईडी "p5_loading" के साथ एक HTML तत्व शामिल करें। अधिक जानकारी यहां। +setup__description__0 = setup() फ़ंक्शन को प्रोग्राम शुरू होने पर एक बार कॉल किया जाता है। इसका उपयोग प्रारंभिक पर्यावरण गुणों जैसे स्क्रीन आकार और पृष्ठभूमि रंग को परिभाषित करने और मीडिया लोड करने के लिए किया जाता है जैसे कि प्रोग्राम शुरू होने पर इमेज और फोंट। प्रत्येक प्रोग्राम के लिए केवल एक setup() फ़ंक्शन हो सकता है और इसे इसके बाद फिर से कॉल नहीं किया जाना चाहिए प्रारंभिक निष्पादन। +setup__description__1 = ध्यान दें: setup() के अंतर्गत घोषित वैरिएबल draw() सहित अन्य कार्यों में पहुंच योग्य नहीं हैं। +draw__description__0 = setup() के बाद सीधे कॉल किया जाता है, draw() लगातार काम करता है प्रोग्राम के बंद होने तक या noLoop() कॉल किए जाने तक अपने ब्लॉक के अंदर निहित कोड की पंक्तियों को निष्पादित करता है। नोट करें यदि noLoop() को setup(), draw() में कॉल किया जाता है। रुकने से पहले एक बार निष्पादित किया जाएगा। draw() स्वचालित रूप से कॉल किया जाता है और इसे स्पष्ट रूप से कभी नहीं कहा जाना चाहिए। +draw__description__1 = इसे हमेशा noLoop(), redraw() से नियंत्रित किया जाना चाहिए और loop()noLoop() के बाद कोड को में बंद कर देता है। draw() क्रियान्वित होने से, redraw() कोड को draw() एक बार निष्पादित करने के लिए, और loop() कोड को अंदर कर देगा draw() लगातार क्रियान्वित करना फिर से शुरू करने के लिए। +draw__description__2 = प्रत्येक सेकंड में draw() निष्पादित होने की संख्या को frameRate() से नियंत्रित किया जा सकता है समारोह। +draw__description__3 = प्रत्येक स्केच के लिए केवल एक draw() फ़ंक्शन हो सकता है, और draw()हो सकता है। मौजूद होना चाहिए यदि आप चाहते हैं कि कोड लगातार चलता रहे, या mousePressed() जैसी घटनाओं को संसाधित करने के लिए। कभी-कभी, आपके पास एक खाली हो सकता है अपने प्रोग्राम में draw() पर कॉल करें, जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है। +draw__description__4 = यह ध्यान रखना महत्वपूर्ण है कि ड्रॉइंग कोऑर्डिनेट सिस्टम प्रत्येक +createCanvas__description__0 = दस्तावेज़ में एक कैनवास तत्व बनाता है, और इसके आयामों को पिक्सेल में सेट करता है। इस विधि को सेटअप के प्रारंभ में केवल एक बार कॉल किया जाना चाहिए। createCanvasको कॉल करना एक स्केच में एक से अधिक बार बहुत अप्रत्याशित व्यवहार होगा। यदि आप एक से अधिक ड्राइंग कैनवास चाहते हैं तो आप createGraphics का उपयोग कर सकते हैं (डिफ़ॉल्ट रूप से छिपा हुआ लेकिन यह दिखाया जा सकता है)। +createCanvas__description__1 = महत्वपूर्ण नोट: 2D मोड में (अर्थात जब p5.Renderer सेट नहीं है) मूल (0,0) स्क्रीन के ऊपर बाईं ओर स्थित है। 3D मोड में (अर्थात जब p5.Renderer WEBGL पर सेट है), मूल कैनवास के केंद्र में स्थित है। this issue अधिक जानकारी के लिए। +createCanvas__description__2 = सिस्टम चर की चौड़ाई और ऊंचाई इस फ़ंक्शन को दिए गए पैरामीटर द्वारा निर्धारित की जाती है। यदि createCanvas() का उपयोग नहीं किया जाता है, तो विंडो को एक डिफ़ॉल्ट दिया जाएगा 100x100 पिक्सेल का आकार। +createCanvas__description__3 = कैनवास को स्थान देने के और तरीकों के लिए, कैनवस की स्थिति विकी पृष्ठ देखें। +createCanvas__returns = ऑब्जेक्ट: उत्पन्न कैनवास +createGraphics__returns = स्क्रीन पर ग्राफिक बफर +blendMode__description__0 = डिस्प्ले विंडो में पिक्सल को परिभाषित मोड के अनुसार ब्लेंड करता है। सोर्स पिक्सल (ए) को डिस्प्ले विंडो में पहले से मौजूद पिक्सल के साथ ब्लेंड करने के लिए निम्नलिखित मोड का विकल्प है:
        • BLEND - रंगों का रैखिक प्रक्षेप: C = A*factor + B. यह डिफ़ॉल्ट सम्मिश्रण मोड है।
        • ADD - A और B का योग
        • डार्केस्ट - केवल सबसे गहरा रंग सफल होता है: C = min(A*factor, B).
        • सबसे हल्का - केवल सबसे हल्का रंग सफल होता है: C = max(A*factor, B).
        • DIFFERENCE - अंतर्निहित छवि से रंगों को घटाएं।
        • < li>EXCLUSION - DIFFERENCE के समान, लेकिन कम चरम।
        • MULTIPLY - रंगों को गुणा करें, परिणाम हमेशा होगा गहरा।
        • SCREEN - विपरीत गुणा, रंगों के व्युत्क्रम मानों का उपयोग करता है।
        • REPLACE - पिक्सल पूरी तरह से दूसरों की जगह लेते हैं और अल्फ़ा (पारदर्शिता) मानों का उपयोग न करें।
        • REMOVE - A के अल्फा स्ट्रेंथ के साथ B से पिक्सेल निकालता है।
        • Overlay - MULTIPLY का मिश्रण और <कोड>स्क्रीन । डार्क वैल्यू को गुणा करता है, और लाइट वैल्यू को स्क्रीन करता है। (2D)
        • HARD_LIGHT - SCREEN जब ५०% से अधिक ग्रे, MULTIPLY जब निचला। (2D)
        • SOFT_LIGHT - DARKEST और LIGHTEST का मिश्रण। OVERLAY की तरह काम करता है, लेकिन उतना कठोर नहीं। (2D)
        • DODGE - हल्के टोन को हल्का करता है और कंट्रास्ट को बढ़ाता है, अंधेरे को नज़रअंदाज़ करता है। (2D)
        • BURN - गहरे रंग के क्षेत्र लगाए जाते हैं, कंट्रास्ट को बढ़ाते हुए, रोशनी को नज़रअंदाज़ किया जाता है। (2D)
        • सबट्रैक्ट - A और B के शेष (3D)
        +blendMode__description__1 = (2D) इंगित करता है कि यह मिश्रण मोड केवल 2D रेंडरर में काम करता है। (3D) इंगित करता है कि यह मिश्रण मोड केवल< /b> WEBGL रेंडरर में काम करता है। +noLoop__description__0 = p5.js को draw() में लगातार कोड निष्पादित करने से रोकता है। यदि loop() को कॉल किया जाता है, draw() में कोड लगातार चलने लगता है। यदि noLoop() setup() में, यह ब्लॉक के अंदर की आखिरी लाइन होनी चाहिए। +noLoop__description__1 = जब noLoop() का उपयोग किया जाता है, तो mousePressed() या keyPressed()। इसके बजाय, redraw() या loop(), जो draw() चलेगा, जो स्क्रीन को ठीक से अपडेट कर सकता है। इसका मतलब है कि जब noLoop() को कॉल किया गया है, तो कोई भी ड्रॉइंग नहीं कर सकता होता है, और saveFrames() या loadPixels() जैसे कार्य नहीं हो सकते हैं इस्तेमाल किया गया। +noLoop__description__2 = ध्यान दें कि अगर स्केच का आकार बदला जाता है, तो redraw() को स्केच को अपडेट करने के लिए noLoop()के बाद भी कॉल किया जाएगा। निर्दिष्ट किया गया है। अन्यथा, loop() को कॉल किए जाने तक स्केच एक विषम स्थिति में प्रवेश करेगा। +noLoop__description__3 = loop() की वर्तमान स्थिति की जांच करने के लिए isLooping() का उपयोग करें। +loop__description__0 = डिफ़ॉल्ट रूप से, p5.js draw() के माध्यम से लगातार लूप करता है, इसके भीतर कोड निष्पादित करता है। हालांकि, draw() लूप को कॉल करके रोका जा सकता है noLoop()। उस स्थिति में, draw() लूप कर सकते हैं loop() के साथ फिर से शुरू करें। +loop__description__1 = अंदर के setup() से loop() को कॉल करने से बचें। +loop__description__2 = loop() की वर्तमान स्थिति की जांच करने के लिए isLooping() का उपयोग करें। +push__description__0 = push() फ़ंक्शन वर्तमान आरेखण शैली सेटिंग्स और परिवर्तनों को सहेजता है, जबकि pop() इन सेटिंग्स को पुनर्स्थापित करता है। ध्यान दें कि ये फ़ंक्शन हमेशा एक साथ उपयोग किए जाते हैं। वे आपको शैली और परिवर्तन सेटिंग्स को बदलने की अनुमति देते हैं और बाद में जो आपके पास था उस पर वापस लौटते हैं। जब एक नया राज्य शुरू होता है push(), यह वर्तमान शैली पर आधारित है और जानकारी को रूपांतरित करता है। push() और pop() अधिक नियंत्रण प्रदान करने के लिए कार्यों को एम्बेड किया जा सकता है। (प्रदर्शन के लिए दूसरा उदाहरण देखें।) +push__description__1 = push() निम्नलिखित कार्यों द्वारा नियंत्रित वर्तमान परिवर्तन स्थिति और शैली सेटिंग्स से संबंधित जानकारी संग्रहीत करता है: भरें(), noFill(), noStroke() , stroke(), tint(), noTint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix (), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +push__description__2 = WEBGL मोड में अतिरिक्त स्टाइल सेटिंग्स संग्रहीत की जाती हैं। इन्हें निम्नलिखित कार्यों द्वारा नियंत्रित किया जाता है: setCamera(), ambientLight (), directionLight(), pointLight(), texture(), specularMaterial(), shininess(), normalMaterial() और shader()। +pop__description__0 = push() फ़ंक्शन वर्तमान आरेखण शैली सेटिंग्स और परिवर्तनों को सहेजता है, जबकि pop() इन सेटिंग्स को पुनर्स्थापित करता है। ध्यान दें कि ये फ़ंक्शन हमेशा एक साथ उपयोग किए जाते हैं। वे आपको शैली और परिवर्तन सेटिंग्स को बदलने की अनुमति देते हैं और बाद में जो आपके पास था उस पर वापस लौटते हैं। जब एक नया राज्य शुरू होता है push(), यह वर्तमान शैली पर आधारित है और जानकारी को रूपांतरित करता है। push() और pop() अधिक नियंत्रण प्रदान करने के लिए कार्यों को एम्बेड किया जा सकता है। (प्रदर्शन के लिए दूसरा उदाहरण देखें।) +pop__description__1 = push() निम्नलिखित कार्यों द्वारा नियंत्रित वर्तमान परिवर्तन स्थिति और शैली सेटिंग्स से संबंधित जानकारी संग्रहीत करता है: भरें(), noFill(), noStroke() , stroke(), tint(), noTint(), strokeWeight(), स्ट्रोककैप(), strokeJoint(), imageMode(), rectMode(), ellipseMode() a>, colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix (), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +pop__description__2 = WEBGL मोड में अतिरिक्त स्टाइल सेटिंग्स संग्रहीत की जाती हैं। इन्हें निम्नलिखित कार्यों द्वारा नियंत्रित किया जाता है: setCamera(), ambientLight(), directionLight(), pointLight(), texture(), specularMaterial(), चमकता(), normalMaterial() और shader()। +redraw__description__0 = कोड को एक बार draw() के भीतर निष्पादित करता है। यह फ़ंक्शन प्रोग्राम को केवल आवश्यक होने पर ही डिस्प्ले विंडो को अपडेट करने की अनुमति देता है, उदाहरण के लिए जब कोई ईवेंट पंजीकृत किया जाता है mousePressed() या keyPressed() होता है। +redraw__description__1 = किसी प्रोग्राम की संरचना में, redraw() को कॉल करना ही समझदारी है। >mousePressed(). ऐसा इसलिए है क्योंकि redraw() नहीं चलता है draw() तुरंत (यह केवल एक ध्वज सेट करता है जो इंगित करता है कि एक अद्यतन की आवश्यकता है)। +redraw__description__2 = redraw() फ़ंक्शन ठीक से काम नहीं करता है जब draw()के अंदर कॉल किया जाता है।. एनिमेशन को सक्षम/अक्षम करने के लिए, loop() और noLoop()का उपयोग करें। +redraw__description__3 = इसके अलावा आप प्रति मेथड कॉल के लिए रेड्रा की संख्या निर्धारित कर सकते हैं। बस एक पूर्णांक को एकल पैरामीटर के रूप में जोड़ें। +rotate__description__0 = कोण पैरामीटर द्वारा निर्दिष्ट राशि से एक आकृति को घुमाता है। यह फ़ंक्शन angleMode के लिए जिम्मेदार है, इसलिए कोणों को रेडियन या डिग्री में दर्ज किया जा सकता है। +rotate__description__1 = ऑब्जेक्ट्स को हमेशा उनकी सापेक्ष स्थिति के आसपास मूल में घुमाया जाता है और सकारात्मक संख्याएं वस्तुओं को एक दक्षिणावर्त दिशा में घुमाती हैं। परिवर्तन उन सभी चीजों पर लागू होता है जो फ़ंक्शन के बाद और बाद में कॉल के प्रभाव को जमा करते हैं। उदाहरण के लिए, रोटेट (HALF_PI) को कॉल करना और फिर घुमाएं (HALF_PI) रोटेट (PI) के समान है। draw() फिर से शुरू होने पर सभी रूपांतरण रीसेट हो जाते हैं। +rotate__description__2 = तकनीकी रूप से, rotate() वर्तमान रूपांतरण मैट्रिक्स को एक रोटेशन मैट्रिक्स से गुणा करता है। इस फ़ंक्शन को push()द्वारा और नियंत्रित किया जा सकता है। और pop()। +rotateX__description__0 = कोण पैरामीटर में निर्दिष्ट राशि द्वारा एक्स अक्ष के चारों ओर एक आकृति घुमाता है। कोणों को रेडियंस या डिग्री में दर्ज किया जा सकता है। +rotateX__description__1 = ऑब्जेक्ट हमेशा अपनी सापेक्ष स्थिति के आसपास मूल के लिए घुमाए जाते हैं और सकारात्मक संख्याएं वस्तुओं को दक्षिणावर्त दिशा में घुमाती हैं। सभी रूपांतरण रीसेट हो जाते हैं जब draw() फिर से शुरू होता है । +rotateY__description__0 = कोण पैरामीटर में निर्दिष्ट राशि द्वारा Z अक्ष के चारों ओर एक आकृति को घुमाता है। कोणों को रेडियन या डिग्री में दर्ज किया जा सकता है। +rotateY__description__1 = यह विधि केवल WEBGL मोड में काम करती है। +scale__description__0 = शीर्षों को विस्तारित या अनुबंधित करके आकार के आकार को बढ़ाता या घटाता है। वस्तुएं हमेशा अपने सापेक्ष मूल से समन्वय प्रणाली तक स्केल करती हैं। स्केल मान दशमलव प्रतिशत के रूप में निर्दिष्ट होते हैं। उदाहरण के लिए, फ़ंक्शन कॉल स्केल (2.0) एक के आयाम को बढ़ाता है 200% से आकार। +scale__description__1 = रूपांतरण हर उस चीज़ पर लागू होता है जो फ़ंक्शन के बाद और बाद में होने वाली कॉल के प्रभाव को गुणा करती है। उदाहरण के लिए, कॉलिंग स्केल (2.0) और फिर स्केल (1.5) स्केल (3.0) के समान है। यदि scale() को draw() में कॉल किया जाता है, जब लूप दोबारा शुरू होता है तो ट्रांसफॉर्मेशन रीसेट हो जाता है। +scale__description__2 = Z पैरामीटर के साथ इस फ़ंक्शन का उपयोग करना केवल WEBGL मोड में उपलब्ध है। इस फ़ंक्शन को push() और pop()के साथ और अधिक नियंत्रित किया जा सकता है। +shearX__description__0 = कोण पैरामीटर द्वारा निर्दिष्ट राशि द्वारा एक्स-अक्ष के चारों ओर एक आकृति को कतरता है। कोणों को वर्तमान कोण मोड में निर्दिष्ट किया जाना चाहिए। वस्तुओं को हमेशा उनकी सापेक्ष स्थिति के आसपास मूल और सकारात्मक संख्याएं घड़ी की दिशा में वस्तुओं को कतरनी करती हैं। +shearX__description__1 = परिवर्तन सब कुछ पर लागू होता है जो फ़ंक्शन के बाद और बाद में कॉल के प्रभाव को जमा करता है। उदाहरण के लिए, शीयरएक्स (पीआई/2) और फिर शीयरएक्स (पीआई/2) को कॉल करना शीयरएक्स (पीआई) के समान है। यदि shearX() को draw() के अंदर कॉल किया जाता है, जब लूप में ट्रांसफ़ॉर्मेशन रीसेट हो जाता है फिर से शुरू होता है। +shearX__description__2 = तकनीकी रूप से, shearX() वर्तमान रूपांतरण मैट्रिक्स को एक रोटेशन मैट्रिक्स से गुणा करता है। इस फ़ंक्शन को push()द्वारा और नियंत्रित किया जा सकता है और pop() फंक्शन। +shearY__description__0 = y-अक्ष के चारों ओर एक आकार को कोण पैरामीटर द्वारा निर्दिष्ट राशि को कतरता है। कोणों को वर्तमान कोण मोड में निर्दिष्ट किया जाना चाहिए। वस्तुओं को हमेशा उनकी सापेक्ष स्थिति के आसपास मूल और सकारात्मक संख्याएं वस्तुओं को दक्षिणावर्त दिशा में कतरती हैं। +shearY__description__1 = परिवर्तन सब कुछ पर लागू होता है जो फ़ंक्शन के बाद और बाद में कॉल के प्रभाव को जमा करता है। उदाहरण के लिए, शीयरवाई (PI/2) और फिर शीयरवाई (PI/2) को कॉल करना शीयरवाई (PI) के समान है। यदि shearY() को draw() में कॉल किया जाता है, जब लूप में ट्रांसफॉर्मेशन रीसेट हो जाता है फिर से शुरू होता है। +shearY__description__2 = तकनीकी रूप से, shearY() वर्तमान रूपांतरण मैट्रिक्स को एक रोटेशन मैट्रिक्स से गुणा करता है। इस फ़ंक्शन को push() और pop() फंक्शन। +translate__description__0 = डिस्प्ले विंडो के भीतर वस्तुओं को विस्थापित करने के लिए एक राशि निर्दिष्ट करता है। x पैरामीटर बाएँ/दाएँ अनुवाद निर्दिष्ट करता है, y पैरामीटर ऊपर/नीचे अनुवाद निर्दिष्ट करता है। +translate__description__1 = रूपांतरण संचयी होते हैं और उन सभी चीजों पर लागू होते हैं जो फ़ंक्शन के बाद और बाद में कॉल के प्रभाव को जमा करते हैं। उदाहरण के लिए, अनुवाद को कॉल करना (50, 0) और फिर अनुवाद (20, 0) अनुवाद (70, 0) के समान है। यदि translate() को draw() में कॉल किया जाता है, तो रूपांतरण है लूप के फिर से शुरू होने पर रीसेट करें। इस फ़ंक्शन को push() और pop()का उपयोग करके नियंत्रित किया जा सकता है। \ No newline at end of file diff --git a/src/data/localization/hi-IN/p5.sound.ftl b/src/data/localization/hi-IN/p5.sound.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/hi-IN/root.ftl b/src/data/localization/hi-IN/root.ftl new file mode 100644 index 0000000000..ec44f154b2 --- /dev/null +++ b/src/data/localization/hi-IN/root.ftl @@ -0,0 +1,63 @@ +h1 = संदर्भ +reference-search = एपीआई खोजें +reference-description1 = आप जो खोज रहे हैं वह नहीं मिल रहा है? शायद आपको अंदर जांचना चाहिए +reference-description3 = आप संदर्भ का एक संस्करण डाउनलोड कर सकते हैं +reference-contribute2 = कृपया हमें बताएं +reference-error1 = क्या आपको कोई गलती मिली? +reference-error3 = कृपया बेझिझक करें +reference-error5 = और पुल अनुरोध का संकेत देते हैं। +reference-example = उदाहरण +reference-description = विवरण +reference-extends = फैली +reference-parameters = मापदंडों +reference-syntax = वाक्य-विन्यास +reference-returns = रिटर्न +Environment = वातावरण +Color = रंग +Color Conversion = Color Conversion +Creating & Reading = सृजन और पढ़ना +Setting = विन्यास +Shape = आकार +2D Primitives = 2D आदिम +Attributes = गुण +Curves = घटता +Vertex = कोने +Constants = स्थिरांक +Structure = संरचना +DOM = डोम +Rendering = प्रस्तुत करना +Foundation = Foundation +Transform = परिवर्तन +Data = डेटा +LocalStorage = LocalStorage +Dictionary = शब्दकोश +Events = घटनाक्रम +Acceleration = त्वरण +Keyboard = कीबोर्ड +Mouse = माउस +Touch = स्पर्श +Image = चित्र +Loading & Displaying = लोड और दिखाएँ +Pixels = पिक्सल +IO = प्रवेश और निकास +Input = प्रविष्टि +Output = उत्पादन +Table = तालिका +Math = गणित +Calculation = गणना +Vector = Vector +Noise = शोर +Random = Random +Trigonometry = त्रिकोणमिति +Typography = टाइपोग्राफी +Array Functions = सरणी कार्य करता है +Conversion = रूपांतरण +String Functions = स्ट्रिंग फ़ंक्शंस +Time & Date = समय और दिनांक +3D Primitives = 3 डी प्रिमिटिव +Lights, Camera = रोशनी, कैमरा +Interaction = Interaction +Lights = दीपक +3D Models = 3 डी मॉडल +Material = सामग्री +Camera = कैमरा diff --git a/src/data/localization/ko/JSON.ftl b/src/data/localization/ko/JSON.ftl new file mode 100644 index 0000000000..47641ec68e --- /dev/null +++ b/src/data/localization/ko/JSON.ftl @@ -0,0 +1,2 @@ +stringify__description__0 = MDN에서 참고: JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 선택적으로, replacer를 함수로 전달할 경우 변환 전 값을 변형할 수 있고, 배열로 전달할 경우 지정한 속성만 결과에 포함합니다. +stringify__params__object = 객체: JSON으로 변형하고 싶은 JavaScript 객체 diff --git a/src/data/localization/ko/console.ftl b/src/data/localization/ko/console.ftl new file mode 100644 index 0000000000..5d75a219f5 --- /dev/null +++ b/src/data/localization/ko/console.ftl @@ -0,0 +1,3 @@ +log__description__0 = 브라우저의 메세지 콘솔에 메세지를 프린트합니다. p5에서는 print 또는 console.log 모두 사용가능합니다. +log__description__1 = 콘솔은 브라우저에 따라 다르게 열립니다. 다음은 여러가지 방법이 제시되어 있습니다. Firefox , Chrome, Edge, Safari.
        온라인 p5 에디터에서는 콘솔이 코트 에디터 바로 밑에 고정되어 있습니다. +log__params__message = 문자열|Expression|객체: 콘솔에 프린트하고 싶은 메세지 diff --git a/src/data/localization/ko/p5.Amplitude.ftl b/src/data/localization/ko/p5.Amplitude.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.AudioIn.ftl b/src/data/localization/ko/p5.AudioIn.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.AudioVoice.ftl b/src/data/localization/ko/p5.AudioVoice.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.BandPass.ftl b/src/data/localization/ko/p5.BandPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Camera.ftl b/src/data/localization/ko/p5.Camera.ftl new file mode 100644 index 0000000000..9807f74b68 --- /dev/null +++ b/src/data/localization/ko/p5.Camera.ftl @@ -0,0 +1,42 @@ +description__0 = p5의 WebGL 모드용 카메라를 위한 클래스입니다. 3D씬 렌더링에 필요한 카메라 위치, 방향, 투영 정보 등을 포함합니다. +description__1 = createCamera()로 새로운 p5.Camera 객체를 생성하고, 아래의 메소드들을 통해 이를 제어할 수 있습니다. 이러한 방식으로 생성된 카메라는, 여타 메소드들을 통해 변경하지 않는 한, 화면에 기본값으로 설정된 위치 및 투시 투영법을 사용합니다. 여러 대의 카메라 생성 또한 가능한데, 이 경우 setCamera() 메소드로 현재 카메라를 설정할 수 있습니다. +description__2 = 참고: 아래의 메소드들은 다음 2개의 좌표계에서 작동합니다: 월드 좌표계는 X,Y,Z축 상의 원점에 대한 위치를 나타내는 반면, 로컬 좌표계는 카메라 시점에서의 위치(좌-우, 위-아래, 앞-뒤)를 나타냅니다. move() 메소드는 카메라의 자체 축을 따라 움직이는 반면, setPosition()은 월드 공간에서의 카메라의 위치를 설정합니다. +description__3 = 카메라 객체의 속성인 eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ 은 카메라 위치, 화면방향, 투영을 지정하며, createCamera() 함수를 통해 형성된 카메라 객체에도 찾을 수 있습니다. +params__rendererGL = RendererGL: WebGL 렌더러의 인스턴스 +eyeX__description__0 = x 축에 있는 카메라 위치 값 +eyeY__description__0 = y 축에 있는 카메라 위치 값 +eyeZ__description__0 = z 축에 있는 카메라 위치 값 +centerX__description__0 = 스케치의 중심을 표시하는 x 좌표 +centerY__description__0 = 스케치의 중심을 표시하는 y 좌표 +centerZ__description__0 = 스케치의 중심을 표시하는 z 좌표 +upX__description__0 = 카메라의 '위' 방향을 표시하는 x 구성요소 +upY__description__0 = 카메라의 '위' 방향을 표시하는 y 구성요소 +upZ__description__0 = 카메라의 '위' 방향을 표시하는 z 구성요소 +perspective__description__0 = p5.Camera 객체의 투시 투영법을 설정하고, perspective() 구문에 따라 해당 투영법의 매개변수를 설정합니다. +ortho__description__0 = p5.Camera 객체의 직교 투영법을 설정하고, ortho() 구문에 따라 해당 투영법의 매개변수를 설정합니다. +frustum__description__0 = 주어진 매개변수로 퍼스펙티브 매트릭스 (perspective matrix)를 만듧니다. +frustum__description__1 = frustum은 피라미드 모양의 상단을 바닥과 평행한 면에서 잘라낸 기하학적 모양입니다. 이 피라미드의 위에 보는 사람의 눈이 있다 가정하면서 여섯 면은 장면의 특정 부분만 렌더링하는데에 쓰이는 가상의 면인 clipping plane입니다. 3D로 렌더링 할 시, 이 여섯 면 안에 있는 물체는 보이며, 그 바깥에 있는 물체는 보이지 않습니다. 이 링크를 통해 더 자세히 알 수 있습니다. +frustum__description__2 = frustum을 설정하면 렌더링되는 장면이 달라집니다. 이는 간단하게 perspective() 함수를 통해 이룰 수도 있습니다. +frustum__params__left = 숫자: (선택 사항) 카메라 frustum의 왼쪽 면 +frustum__params__right = 숫자: (선택 사항) 카메라 frustum의 오른쪽 면 +frustum__params__bottom = 숫자: (선택 사항) 카메라 frustum의 밑 면 +frustum__params__top = 숫자: (선택 사항) 카메라 frustum의 위 면 +frustum__params__near = 숫자: (선택 사항) 카메라 frustum의 근거리 면 +frustum__params__far = 숫자: (선택 사항) 카메라 frustum의 장거리 면 +pan__description__0 = 패닝은 카메라 화면을 좌우로 회전합니다. +pan__params__angle = 숫자: 현재 angleMode 단위로 카메라를 회전할 정도. 0을 초과하는 숫자는 카메라를 시계방향(왼쪽)으로 회전시킵니다. +tilt__description__0 = 틸트는 카메라 화면을 상하로 회전합니다. +tilt__params__angle = 숫자: 현재 angleMode 단위로 카메라를 회전할 정도. 0을 초과하는 숫자는 카메라를 시계방향(왼쪽)으로 회전시킵니다. +lookAt__description__0 = 월드 공간 위치에서 보도록 카메라 방향을 조정합니다. +lookAt__params__x = 숫자: 월드 공간 속 한 점의 x 위치 +lookAt__params__y = 숫자: 월드 공간 속 한 점의 y 위치 +lookAt__params__z = 숫자: 월드 공간 속 한 점의 z 위치 +camera__description__0 = 카메라의 위치와 방향을 설정합니다. p5.Camera 객체에 camera()를 호출하는 것과 동일한 효과를 갖습니다. +move__description__0 = 현재 카메라 방향을 유지하면서 그 로컬축을 따라 이동합니다. +move__params__x = 숫자: 카메라의 좌우축에서 움직일 정도 +move__params__y = 숫자: 카메라의 상하축에서 움직일 정도 +move__params__z = 숫자: 카메라의 앞뒤축에서 움직일 정도 +setPosition__description__0 = 현재 카메라 방향을 유지하면서 카메라의 위치를 월드 공간에서의 위치로 설정합니다. +setPosition__params__x = 숫자: 월드 공간 속 한 점의 x 위치 +setPosition__params__y = 숫자: 월드 공간 속 한 점의 y 위치 +setPosition__params__z = 숫자: 월드 공간 속 한 점의 z 위치 diff --git a/src/data/localization/ko/p5.Color.ftl b/src/data/localization/ko/p5.Color.ftl new file mode 100644 index 0000000000..20b6105038 --- /dev/null +++ b/src/data/localization/ko/p5.Color.ftl @@ -0,0 +1,11 @@ +description__0 = 처음 만들었을 때의 색상모드와 레벨들의 최댓값들을 저장합니다. 이 값들은 입력 인수로 사용되거나 (창조시기, 또는 같은 색의 인스턴스가 이후에 사용될 때) 출력의 체재를 설정하는데 사용됩니다 (saturation()와 같은 함수들을 사용할 때). +description__1 = 내적으로는 RGBA 값들을 부동소수점 형식으로 배열 안에 저장하며, 이 값들은 0과 1 사이로 정규화됩니다. 이 값들로 가장 가까운 색 (0과 255 사이)를 계산하며 렌더러에 전달합니다. +description__2 = 다양한 형식의 부동소수점 구성요소들을 케시에 임시저장하기도 합니다. 이는 최근에 이루어진 계산을 반복하지 않기 위해서입니다. +setRed__description__0 = setRed 함수는 색깔의 빨강값을 설정합니다. 컬러모드에 따라 다를 수도 있지만, RBG 모드는 0과 255 사이의 값입니다. +setRed__params__red = 숫자: 새로운 빨강값 +setGreen__description__0 = setGreen 함수는 색깔의 초록값을 설정합니다. 컬러모드에 따라 다를 수도 있지만, RBG 모드는 0과 255 사이의 값입니다. +setGreen__params__green = 숫자: 새로운 초록값 +setBlue__description__0 = setBlue 함수는 색깔의 파랑값을 설정합니다. 컬러모드에 따라 다를 수도 있지만, RBG 모드는 0과 255 사이의 값입니다. +setBlue__params__blue = 숫자: 새로운 파랑값 +setAlpha__description__0 = setAlpha 함수는 색깔의 알파값 (투명도)을 설정합니다. 컬러모드에 따라 다를 수도 있지만, RBG 모드는 0과 255 사이의 값입니다. +setAlpha__params__alpha = 숫자: 새로운 알파값 diff --git a/src/data/localization/ko/p5.Compressor.ftl b/src/data/localization/ko/p5.Compressor.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Convolver.ftl b/src/data/localization/ko/p5.Convolver.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Delay.ftl b/src/data/localization/ko/p5.Delay.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Distortion.ftl b/src/data/localization/ko/p5.Distortion.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.EQ.ftl b/src/data/localization/ko/p5.EQ.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Effect.ftl b/src/data/localization/ko/p5.Effect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Element.ftl b/src/data/localization/ko/p5.Element.ftl new file mode 100644 index 0000000000..33b420c3fe --- /dev/null +++ b/src/data/localization/ko/p5.Element.ftl @@ -0,0 +1,87 @@ +description__0 = 캔버스, 그래픽 버퍼, 기타 HTML 요소를 비롯하여, 스케치에 추가된 모든 요소(element)들을 위한 기본 클래스입니다. p5.Element 클래스는 직접 호출되지 않지만, 그 객체는 createCanvas, createGraphics, createDiv, createImg, createInput 호출을 통해 생성됩니다. +params__elt = 문자열: 래핑된 DOM 노드 +params__pInst = P5: (선택 사항) p5 인스턴스에 대한 포인터 +elt__description__0 = 기본 HTML 요소로, 모든 일반 HTML 메소드를 호출. +parent__description__0 = 지정된 부모 클래스에 요소를 연결합니다. 요소의 컨테이너를 설정하는 방법입니다. 문자열 ID, DOM 노드, 또는 p5.Element를 허용합니다. 별도의 인수가 지정되지 않을 경우, 부모 노드가 반환됩니다. 캔버스 배치하는 다른 방법들은 이 위키 페이지에서 확인할 수 있습니다. +parent__params__parent = 문자열|p5.Element|객체: 지정된 부모 요소의 ID, DOM node, 또는 p5.Element +id__description__0 = 요소의 ID를 설정합니다. 별도로 지정한 ID 인수가 없으면, 요소의 현재 ID를 반환합니다. 요소당 1개의 특정 id를 가질 수 있습니다. .class() 함수는 동일한 클래스 이름을 가진 여러 요소들을 식별하는 데에 사용됩니다. +id__params__id = 문자열: 요소의 ID +class__description__0 = 사용자가 지정한 클래스를 요소에 더합니다. 별도로 지정한 클래스 인수가 없으면, 요소의 현재 클래스(들)를 포함하는 문자열을 반환합니다. +class__params__class = 문자열: 추가할 클래스 +mousePressed__description__0 = .mousePressed() 함수는 요소 위에서 마우스 버튼이 눌릴 때마다 한 번씩 호출됩니다. 터치 스크린 기반의 모바일 브라우저에서는 손가락 탭을 통해 이벤트가 발생합니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mousePressed__params__fxn = 함수|불리언: 마우스를 요소 위에서 버튼이 눌릴 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +doubleClicked__description__0 = .doubleClicked() 함수는 요소 위에서 마우스 버튼을 빠르게 두 번 클릭할 때마다 한 번씩 호출됩니다. 요소에 행동 특정적 이벤트 리스너를 연결하는 데에 사용됩니다. +doubleClicked__returns = p5.Element: +doubleClicked__params__fxn = 함수|불리언: 마우스를 요소 위에서 더블클릭 할 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseWheel__description__0 = .mouseWheel() 함수는 요소 위에서 마우스 휠을 스크롤 할 때마다 한 번싹 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseWheel__description__1 = 이 함수에서는 콜백 함수를 인수로서 사용할 수 있습니다. 그 경우, 요소 위에서 휠 이벤트가 발생할 때마다 콜백 함수가 하나의 event 인수로서 전달됩니다. event.deltaY 속성은 마우스 휠이 위쪽으로 회전하거나 사용자로부터 멀어지면 음수값을 반환하고, 그 반대 방향에선 양수값을 반환합니다. event.deltaX 속성은 마우스 가로 휠 스크롤을 읽는다는 점을 제외하고 event.deltaY와 동일하게 작동합니다. +mouseWheel__description__2 = +mouseWheel__description__3 = +mouseWheel__params__fxn = 함수|불리언: 마우스를 요소 위에서 스크롤 할 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseReleased__description__0 = .mouseReleased() 함수는 요소 위에서 마우스 버튼을 놓을 때마다 한 번씩 호출됩니다. 터치 스크린 기반의 모바일 브라우저에서는 손가락 탭을 통해 이벤트가 발생합니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseReleased__params__fxn = 함수|불리언: 마우스를 요소 위에서 버튼이 놓일 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseClicked__description__0 = .mouseClicked() 함수는 요소 위에서 마우스 버튼을 클릭한 뒤 놓을 때마다 한 번씩 호출됩니다. 터치 스크린 기반의 모바일 브라우저에서는 손가락 탭을 통해 이벤트가 발생합니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseClicked__params__fxn = 함수|불리언: 마우스를 요소 위에서 클릭 할 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseMoved__description__0 = .mouseMoved() 함수는 마우스가 요소 위에서 움직일 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseMoved__params__fxn = 함수|불리언: 마우스를 요소 위에서 움직일 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseOver__description__0 = .mouseOver() 함수는 마우스가 요소 위에 올라올 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseOver__params__fxn = 함수|불리언: 마우스를 요소 위로 움직일 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +mouseOut__description__0 = .mouseOut() 함수는 마우스가 요소 위에서 벗어날 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +mouseOut__params__fxn = 함수|불리언: 마우스를 요소 위에서부터 다른 곳으로 움직일 때 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +touchStarted__description__0 = .touchStarted() 함수는 터치가 등록될 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +touchStarted__params__fxn = 함수|불리언: 터치가 등록될 때마다 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +touchMoved__description__0 = .touchMoved() 함수는 터치 움직임이 등록될 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +touchMoved__params__fxn = 함수|불리언: 터치 움직임이 등록될 때마다 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +touchEnded__description__0 = .touchEnded() 함수는 터치의 끝이 등록될 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +touchEnded__params__fxn = 함수|불리언: 터치의 끝이 등록될 때마다 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +dragOver__description__0 = .dragOver() 함수는 요소 위에 파일을 드래그할 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +dragOver__params__fxn = 함수|불리언: 요소 위에 파일을 드래그할 때마다 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +dragLeave__description__0 = .dragLeave() 함수는 드래그된 파일이 요소 영역을 벗어날 때마다 한 번씩 호출됩니다. 요소에 이벤트 리스너를 연결하는 데에 사용됩니다. +dragLeave__params__fxn = 함수|불리언: 드래그된 파일이 요소 영역을 벗어날 때마다 호출 될 함수. 대신 false을 사용할 시, 함수호출은 중지됩니다. +addClass__description__0 = 요소에 특정 클래스를 추가합니다. +addClass__params__class = 문자열: 추가할 클래스의 이름 +removeClass__description__0 = 요소로부터 특정 클래스를 제거합니다. +removeClass__params__class = 문자열: 삭제할 클래스의 이름 +hasClass__description__0 = 요소에 이미 클래스가 설정되어 있는지 확인합니다. +hasClass__returns = 불리언: 요소가 클래스가 있는 여부 +hasClass__params__c = 문자열: 확인할 클래스의 이름 +toggleClass__description__0 = 요소 클래스를 토글합니다. +toggleClass__params__c = 문자열: 토글할 클래스의 이름 +child__description__0 = 지정된 부모 클래스에 요소를 자식으로서 연결합니다. 문자열 ID, DOM 노드, 또는 p5.Element를 허용합니다. 별도의 인수가 지정되지 않을 경우, 자식 DOM 노드 배열이 반환됩니다. +child__returns = 노드 배열[]: 자식 노드의 배열 +child__params__child = 문자열|p5.Element: (선택 사항) 본 객체애 연결할 객체의 ID, 문서 객체 모델 (DOM) 노드, 또는 p5.Element +center__description__0 = p5 Element를 수직으로, 수평으로, 또는 수직 및 수평으로 가운데 정렬합니다. 별도로 지정한 부모가 있는 경우 부모를 기준으로, 부모가 없는 경우 그 자신을 기준으로 합니다. 별도로 지정한 인수가 없으면 요소는 수직 및 수평으로 정렬됩니다. +center__params__align = 문자열: (선택 사항) 'vertical' 또는 'horizontal'로 요소를 수직 또는 수평적으로 정렬합니다 +html__description__0 = 사용자가 별도로 지정한 인수로서 요소의 내부 HTML을 설정하며, 기존의 모든 HTML를 대체합니다. 참(true)이 그 2번째 인수로서 포함된 경우, 기존의 모든 HTML을 대체하는 대신 새로운 HTML을 추가(append)합니다. 별도로 지정한 인수가 없으면 요소의 내부 HTML을 반환합니다. +html__returns = 문자열: 요소의 내부 HTML 요소 +html__params__html = 문자열: (선택 사항) 요소 안에 설정할 HTML +html__params__append = 불리언: (선택 사항) 새로 입력한 HTML을 추가 (false의 경우 기존 HTML을 덮어 씁니다) +position__description__0 = 요소의 위치를 설정합니다. 별도로 지정한 위치 유형 인수가 없는 경우, 화면창의 (0,0)을 기준으로 합니다. 기본적으로, 이 메소드를 통해 position:absolute와 left 및 top 스타일 속성을 설정합니다. 선택적으로, 3번째 인수를 통해 x 및 y 좌표의 위치 지정 체계를 설정할 수 있습니다. 별도로 지정한 인수가 없으면 함수는 요소의 x와 y의 위치를 반환합니다. +position__returns = 객체: 요소의 위치를 나타내는 {"{"} x: 0, y: 0 {"}"} 형식의 객체 +position__params__x = 숫자: (선택 사항) 윈도우 왼쪽 위 기준으로한 x 위치 +position__params__y = 숫자: (선택 사항) 윈도우 왼쪽 위 기준으로한 y 위치 +position__params__positionType = 문자열: static, fixed, relative, sticky, initial 또는 inherit +style__description__0 = 별도 지정한 값(2번째 인수)으로 CSS 스타일 속성(1번째 인수)을 설정합니다. 1개의 인수만 지정할 경우, .style()은 주어진 속성의 값을 반환합니다. 그러나 이 인수를 CSS 구문('text-align:center')으로 작성할 경우, .style()은 CSS를 설정합니다. +style__returns = 문자열: 속성의 값 +style__params__property = 문자열: 설정할 속성 +style__params__value = 문자열|p5.Color: 속성에 설정할 값 +attribute__description__0 = 사용자가 지정한 요소에 새 속성을 추가하거나, 요소의 기존 속성값을 변경합니다. 별도로 지정한 값이 없는 경우 주어진 속성의 값을 반환하고, 속성이 설정되지 않은 경우 null을 반환합니다. +attribute__returns = 문자열: 속성의 값 +attribute__params__attr = 문자열: 설정할 속성 +attribute__params__value = 문자열: 설정할 속성값 +removeAttribute__description__0 = 요소로부터 속성을 제거합니다. +removeAttribute__params__attr = 문자열: 삭제할 속성 +value__description__0 = 별도로 지정한 인수가 없는 경우, 요소의 값을 반환하거나 설정합니다. +value__returns = 문자열|숫자: 요소의 값 +value__params__value = 문자열|숫자 +show__description__0 = 현재 요소를 보여줍니다. display:block로 스타일을 설정합니다. +hide__description__0 = 현재 요소를 숨깁니다. display:none으로 스타일을 설정합니다. +size__description__0 = 요소의 너비와 높이를 설정합니다. AUTO는 한 번에 한 개의 수치를 조정하는 데에 쓰입니다. 별도로 지정한 인수가 없는 경우, 객체 속 요소의 너비와 높이를 반환합니다. 이미지 파일과 같이 불러오기가 필요한 요소의 경우, 불러오기가 완료된 후 함수를 호출하는 것을 권장합니다. +size__returns = 객체: 객체 안 요소의 너비와 높이 +size__params__w = 숫자|상수: 요소의 너비 - AUTO, 또는 숫자 +size__params__h = 숫자|상수: (선택 사항) 요소의 높이 - AUTO, 또는 숫자 +remove__description__0 = 요소를 제거하고, 모든 미디어 스트림을 중지하며, 모든 리스너를 해제합니다. +drop__description__0 = 요소에 드롭된 파일이 로드될 때마다 호출되는 콜백을 등록합니다. p5는 메모리에 드롭된 모든 파일을 로드하고 이를 p5.File 객체로서 콜백에 전달합니다. 동시에 여러 파일을 드롭할 경우, 콜백이 여러 번 호출됩니다. 선택적으로, raw 드롭 이벤트에 등록될 2번째 콜백을 전달할 수 있습니다. +drop__description__1 = 이 경우, 콜백에 본래 DragEvent도 제공됩니다. 동시에 여러 파일을 드롭하면 2번째 콜백이 드롭당 한 번씩 발생하며, 1번째 콜백은 로드된 파일당 한 번씩 발생합니다. +drop__params__callback = 함수: 로딩된 파일을 사용할 콜백 함수. 파일이 드롭될 때마다 호출됩니다. +drop__params__fxn = 함수: (선택 사항) 파일들이 드롭될 경우 단 한번만 호출될 콜백 함수. diff --git a/src/data/localization/ko/p5.Envelope.ftl b/src/data/localization/ko/p5.Envelope.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.FFT.ftl b/src/data/localization/ko/p5.FFT.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.File.ftl b/src/data/localization/ko/p5.File.ftl new file mode 100644 index 0000000000..5dcab1a7d6 --- /dev/null +++ b/src/data/localization/ko/p5.File.ftl @@ -0,0 +1,8 @@ +description__0 = 파일을 위한 기본 클래스입니다. Element.drop()과 createFileInput()에 사용됩니다. +params__file = 파일: 래핑된 파일 +file__description__0 = 기본 파일 객체. 모든 일반 File 메소드를 호출할 수 있습니다. +type__description__0 = 파일 유형 (이미지, 텍스트 등) +subtype__description__0 = 파일 하위 유형 (주로 jpg, png, xml 등의 파일 확장자) +name__description__0 = 파일명 +size__description__0 = 파일 크기 +data__description__0 = 이미지 데이터를 담는 URL 문자열 diff --git a/src/data/localization/ko/p5.Filter.ftl b/src/data/localization/ko/p5.Filter.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Font.ftl b/src/data/localization/ko/p5.Font.ftl new file mode 100644 index 0000000000..e41680804d --- /dev/null +++ b/src/data/localization/ko/p5.Font.ftl @@ -0,0 +1,15 @@ +description__0 = 폰트 조정을 위한 기본 클래스 +params__pInst = P5: (선택 사항) p5 인스턴스 포인터 +font__description__0 = 기본 개방형 글꼴 구현 +textBounds__description__0 = 이 폰트로 지정된 텍스트 문자열에 대한 바운딩 박스를 반환합니다. (현재 텍스트 한 줄씩만 지원합니다.) +textBounds__returns = 객체: x, y, w, h의 속성을 가진 직사각형의 객체 +textBounds__params__line = 문자열: 텍스트 한 줄 +textBounds__params__x = 숫자: x 위치 +textBounds__params__y = 숫자: y 위치 +textBounds__params__fontSize = 숫자: (선택 사항) 사용할 폰트의 크기. 기본값은 12. +textBounds__params__options = 객체: (선택 사항) OTF (OpenType Font) 파일의 설정 옵션. OpenType 폰트는 정렬과 기준 선 (baseline) 옵션이 있습니다. 기본값은 'LEFT'와 'alphabetic'입니다. +textToPoints__description__0 = 지정된 텍스트 경로를 따르는 점들의 배열을 계산합니다. +textToPoints__params__txt = 문자열: 텍스트 한 줄 +textToPoints__params__x = 숫자: x 위치 +textToPoints__params__y = 숫자: y 위치 +textToPoints__params__fontSize = 숫자: (선택 사항) 사용할 폰트의 크기. 기본값은 12. diff --git a/src/data/localization/ko/p5.Gain.ftl b/src/data/localization/ko/p5.Gain.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Geometry.ftl b/src/data/localization/ko/p5.Geometry.ftl new file mode 100644 index 0000000000..ec54fb4665 --- /dev/null +++ b/src/data/localization/ko/p5.Geometry.ftl @@ -0,0 +1,9 @@ +description__0 = p5 기하 클래스 +params__detailX = 정수: (선택 사항) 수평 표면 위의 꼭짓점 개수 +params__detailY = 정수: (선택 사항) 수직 표면 위의 꼭짓점 개수 +params__callback = 함수: 객체를 인스턴스화할 때 호출할 함수 +computeFaces__description__0 = 꼭짓점 기준으로 도형의 면들을 생성합니다. +computeNormals__description__0 = 꼭짓점 당 부드러운 법선을 각 면의 평균으로서 만듧니다. +averageNormals__description__0 = 꼭짓점 법선의 평균을 구합니다. 곡면에 사용됩니다. +averagePoleNormals__description__0 = 극점 법선의 평균을 구합니다. 구형의 기초 조형에 사용됩니다. +normalize__description__0 = 모든 꼭짓점이 -100부터 100사이의 중심에 오도록 수정합니다. diff --git a/src/data/localization/ko/p5.Graphics.ftl b/src/data/localization/ko/p5.Graphics.ftl new file mode 100644 index 0000000000..7136c9328d --- /dev/null +++ b/src/data/localization/ko/p5.Graphics.ftl @@ -0,0 +1,7 @@ +description__0 = 렌더러을 둘러싼 얇은 래퍼(wrapper)로, 그래픽 버퍼 객체를 생성하는 데에 사용합니다. 화면 밖 그래픽 버퍼에 그리려면 이 클래스를 사용합니다. 2개의 매개변수는 너비와 높이를 픽셀 단위로 지정합니다. 이 클래스의 필드와 메소드는 확장성이 있으나, p5를 위한 일반적인 그리기 API를 반영합니다. p5.Element를 확장합니다. +params__w = 숫자: 너비값 +params__h = 숫자: 높이값 +params__renderer = 상수: 사용할 렌더러, P2D 또는 WEBGL +params__pInst = P5: (선택 사항) p5 인스턴스에 대한 포인터 +reset__description__0 = 그래픽 버퍼 객체로 자동 재설정되지 않은 특정값들(예: 레퍼런스 중 변형(Transform) 또는 조명(Light) 항목에 해당하는 함수들로서 지정된 값들). 이 메소드를 draw() 함수 안에서 호출하면, 기본 캔버스의 행위를 복제합니다. +remove__description__0 = 페이지에서 그래픽 객체를 제거하고 이 객체에 연결된 모든 소스들을 연결 해제합니다. diff --git a/src/data/localization/ko/p5.HighPass.ftl b/src/data/localization/ko/p5.HighPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Image.ftl b/src/data/localization/ko/p5.Image.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.LowPass.ftl b/src/data/localization/ko/p5.LowPass.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.MediaElement.ftl b/src/data/localization/ko/p5.MediaElement.ftl new file mode 100644 index 0000000000..5dd76fd98f --- /dev/null +++ b/src/data/localization/ko/p5.MediaElement.ftl @@ -0,0 +1,41 @@ +description__0 = 오디오/비디오 처리를 위해 p5.Element를 확장합니다. p5.Element의 메소드 뿐 아니라, 미디어 제어를 위한 메소드도 포함합니다. p5.MediaElements는 직접 호출되지 않지만, createVideo, createAudio, CreateCapture 호출을 통해 생성됩니다. +params__elt = 문자열: 래핑된 DOM 노드 +src__description__0 = 미디어 요소 소스 경로 +src__returns = 문자열: 소스 +play__description__0 = HTML5 미디어 요소를 재생합니다. +stop__description__0 = HTML5 미디어 요소를 중지합니다. (현재 시간을 0으로 설정) +pause__description__0 = HTML5 미디어 요소를 일시정지합니다. +loop__description__0 = HTML5 미디어 요소의 반복을 참(true)로 설정하고, 재생 시작합니다. +noLoop__description__0 = HTML5 미디어 요소의 반복을 거짓(false)으로 설정합니다. 종료 시점에 도달하면 요소가 중지합니다. +autoplay__description__0 = HTML5 미디어 요소 자동재생 여부 설정 +autoplay__params__shouldAutoplay = 불리언: 요소의 자동재생 여부 +volume__description__0 = HTML5 미디어 요소의 볼륨을 설정합니다. 별도로 지정한 인수가 없으면, 현재 볼륨을 반환합니다. +volume__returns = 숫자: 현재 볼륨 +volume__params__val = 숫자: 0.0과 1.0 사이의 볼륨 +speed__description__0 = 별도로 지정한 인수가 없으면, 요소의 현재 재생 속도를 반환하빈다. 속도 매개변수는 2.0일 때 2배속으로, 0.5일 때 0.5배속으로, -1일 때 정상 속도로 역재생합니다. (모든 브라우저가 역재생을 지원하지 않으며, 일부 지원 브라우저에서도 부드럽게 재생되지 않을 수 있습니다.) +speed__returns = 숫자: 요소의 현재 재생 속도 +speed__params__speed = 숫자: 배속도 매개변수 +time__description__0 = 별도로 지정한 인수가 없을 경우, 요소의 현재 시간을 반환합니다. 인수가 지정될 경우, 요소의 현재 시간이 해당 인수로 설정됩니다. +time__returns = 숫자: 현재 시간 (초) +time__params__time = 숫자: 설정할 시간 (초) +duration__description__0 = HTML5 미디어 요소의 지속 시간을 반환합니다. +duration__returns = 숫자: 지속 시간 +onended__description__0 = 오디오/비디오 요소가 종료 시점에 도달할 때 호출할 이벤트를 예약합니다. 요소가 반복하는 경우 호출되지 않습니다. 요소는 oneded 콜백에 인수로 전달됩니다. +onended__params__callback = 함수: 오디오/비디오 요소가 끝났을 때 호출될 함수. 요소는 콜백 함수의 인자값으로 지정됩니다. +connect__description__0 = 요소가 출력한 오디오를 특정 audioNode나 p5.sound 객체로 보냅니다. 요소가 없는 경우, p5의 마스터 출력에 연결합니다. 모든 연결은 .disconnect() 메소드로 제거할 수 있습니다. +connect__description__1 = p5.sound.js 추가적 라이브러리로 이러한 방법을 사용할 수 있습니다. +connect__params__audioNode = AudioNode|객체: 웹 오디오 API의 AudioNode, 또는 p5.sound 라이브러리의 객체 +disconnect__description__0 = 마스터 출력을 비롯하여 모든 웹 오디오 라우팅을 분리합니다. 사용 예: 오디오 효과를 통해 출력을 다시 라우팅할 때 +showControls__description__0 = 웹 브라우저가 지정한 기본 미디어 요소(MediaElement) 컨트롤을 나타냅니다. +hideControls__description__0 = 기본 미디어 요소(MediaElement) 컨트롤을 숨깁니다. +addCue__description__0 = 오디오/비디오와 같은 미디어 요소(MediaElement)가 재생 큐 지점에 도달할 때 발생할 이벤트를 예약합니다. +addCue__description__1 = 콜백 함수, 콜백이 발생할 시간(초 단위), 콜백에 대한 선택적 매개변수를 허용합니다. +addCue__description__2 = 첫 번째 매개변수는 시간(time)을, 두 번째 매개변수는 param을 콜백 함수에 전달합니다. +addCue__returns = 숫자: 큐의 ID. removeCue(id) 함수에 유용함. +addCue__params__time = 숫자: 요소에 대한 초 단위의 시산. 예를 들어, 2초마다 이벤트를 발생시킬 시, 숫자 '2'를 인자값으로 합니다. 이 숫자는 콜백 함수의 첫 매개변수로 전달됩니다. +addCue__params__callback = 함수: 호출될 함수. 콜백 함수는 매개변수로 'time'과 'param'을 받습니다. +addCue__params__value = 객체: (선택 사항) 콜백 함수에 전달될 객체. +removeCue__description__0 = ID를 기반으로 콜백을 제거합니다. ID는 addCue 메소드로 반환됩니다. +removeCue__params__id = 숫자: addCue에서 반환되는 cue의 ID +clearCues__description__0 = addCue 메소드로 예약된 모든 콜백을 제거합니다. +clearCues__params__id = 숫자: addCue에서 반환되는 cue의 ID diff --git a/src/data/localization/ko/p5.MonoSynth.ftl b/src/data/localization/ko/p5.MonoSynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Noise.ftl b/src/data/localization/ko/p5.Noise.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.NumberDict.ftl b/src/data/localization/ko/p5.NumberDict.ftl new file mode 100644 index 0000000000..b75d08c5ec --- /dev/null +++ b/src/data/localization/ko/p5.NumberDict.ftl @@ -0,0 +1,21 @@ +description__0 = 숫자를 위한 간단한 사전 클래스
        p5.TypedDict를 확장합니다. +add__description__0 = 특정 키에 현재 저장된 값에 사용자가 지정한 숫자를 더하고, 그 결과값은 사전 안에 저장되어있던 기존값을 대체합니다. +add__params__Key = 숫자: 숫자를 더하고 싶은 키 +add__params__Number = 숫자: 값에 더할 숫자 +sub__description__0 = 특정 키에 현재 저장된 값에서 사용자가 지정한 숫자를 빼고, 그 결과값은 사전 안에 저장되어있던 기존값을 대체합니다. +sub__params__Key = 숫자: 숫자를 뻬고 싶은 키 +sub__params__Number = 숫자: 값에서 뺄 숫자 +mult__description__0 = 특정 키에 현재 저장된 값에 사용자가 지정한 숫자를 곱하고, 그 결과값은 사전 안에 저장되어있던 기존값을 대체합니다. +mult__params__Key = 숫자: 숫자를 곱하고 싶은 키 +mult__params__Amount = 숫자: 값에 곱할 숫자 +div__description__0 = 특정 키에 현재 저장된 값을 사용자가 지정한 숫자로 나누고, 그 몫은 사전 안에 저장되어있던 기존값을 대체합니다. +div__params__Key = 숫자: 숫자로 나누고 싶은 키 +div__params__Amount = 숫자: 값으로부터 나눌 숫자 +minValue__description__0 = 사전 안에 현재 저장된 값들 중 가장 낮은 숫자를 반환합니다. +minValue__returns = 숫자: 가장 낮은 숫자 +maxValue__description__0 = 사전 안에 현재 저장된 값들 중 가장 높은 숫자를 반환합니다. +maxValue__returns = 숫자: 가장 높은 숫자 +minKey__description__0 = 사전에서 사용된 키들 중 가장 낮은 키를 반환합니다. +minKey__returns = 숫자: 가장 낮은 키 +maxKey__description__0 = 사전에서 사용된 키들 중 가장 높은 키를 반환합니다. +maxKey__returns = 숫자: 가장 높은 키 diff --git a/src/data/localization/ko/p5.OnsetDetect.ftl b/src/data/localization/ko/p5.OnsetDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Oscillator.ftl b/src/data/localization/ko/p5.Oscillator.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Panner3D.ftl b/src/data/localization/ko/p5.Panner3D.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Part.ftl b/src/data/localization/ko/p5.Part.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.PeakDetect.ftl b/src/data/localization/ko/p5.PeakDetect.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Phrase.ftl b/src/data/localization/ko/p5.Phrase.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.PolySynth.ftl b/src/data/localization/ko/p5.PolySynth.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.PrintWriter.ftl b/src/data/localization/ko/p5.PrintWriter.ftl new file mode 100644 index 0000000000..28e3e50f25 --- /dev/null +++ b/src/data/localization/ko/p5.PrintWriter.ftl @@ -0,0 +1,8 @@ +params__filename = 문자열: +params__extension = 문자열: (선택 사항) +write__description__0 = PrintWriter 스트림에 데이터를 작성합니다. +write__params__data = 배열: PrintWriter가 작성할 모든 데이터 +print__description__0 = PrintWriter 스트림에 데이터를 작성하고, 마지막에 새로운 한 줄을 추가합니다. +print__params__data = 배열: PrintWriter가 프린트 할 모든 데이터 +clear__description__0 = PrintWriter 객체에 이미 작성된 데이터를 제거합니다. +close__description__0 = PrintWriter를 종료합니다. diff --git a/src/data/localization/ko/p5.Pulse.ftl b/src/data/localization/ko/p5.Pulse.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Renderer.ftl b/src/data/localization/ko/p5.Renderer.ftl new file mode 100644 index 0000000000..00ac1c4516 --- /dev/null +++ b/src/data/localization/ko/p5.Renderer.ftl @@ -0,0 +1,4 @@ +description__0 = 그래픽과 렌더링의 기초되는 클래스이며, p5.js의 코어 (core)에 사용되는 기초적 API입니다. Render2D와 Renderer3D 클래스들의 부모클래스로 사용됩니다. +params__elt = 문자열: DOM 노드 +params__pInst = P5: (선택 사항) p5 인스턴스에 향한 포인터 +params__isMainCanvas = 불리언: (선택 사항) 메인 캔버스임의 여부 diff --git a/src/data/localization/ko/p5.Reverb.ftl b/src/data/localization/ko/p5.Reverb.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.SawOsc.ftl b/src/data/localization/ko/p5.SawOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Score.ftl b/src/data/localization/ko/p5.Score.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.Shader.ftl b/src/data/localization/ko/p5.Shader.ftl new file mode 100644 index 0000000000..43f80690be --- /dev/null +++ b/src/data/localization/ko/p5.Shader.ftl @@ -0,0 +1,7 @@ +description__0 = WebGL 모드를 위한 셰이더 클래스 +params__renderer = p5.RendererGL: 새로운 p5.Shader에 GL 문맥을 제공하는 p5.RendererGL 인스턴스 +params__vertSrc = 문자열: 버텍스 셰이더의 소스 코드 (문자열 형식) +params__fragSrc = 문자열: 프래그먼트 셰이더의 소스 코드 (문자열 형식) +setUniform__description__0 = gl.uniform 함수들을 감싸는 래퍼. uniform (셰이더의 변수)의 데이터를 셰이더에 저장하면서 타입 검증을 한 후 알맞은 함수를 호출합니다. +setUniform__params__uniformName = 문자열: 셰이더 프로그램에 있는 uniform 속성의 이름 +setUniform__params__data = 객체|숫자|불리언|숫자 배열[]: 선택한 uniform과 연관시킬 데이터; 타입은 다양합니다 (숫자 하나, 배열, 매트릭스, 또는 텍스쳐/샘플러 참고자료). diff --git a/src/data/localization/ko/p5.SinOsc.ftl b/src/data/localization/ko/p5.SinOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.SoundFile.ftl b/src/data/localization/ko/p5.SoundFile.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.SoundLoop.ftl b/src/data/localization/ko/p5.SoundLoop.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.SoundRecorder.ftl b/src/data/localization/ko/p5.SoundRecorder.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.SqrOsc.ftl b/src/data/localization/ko/p5.SqrOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.StringDict.ftl b/src/data/localization/ko/p5.StringDict.ftl new file mode 100644 index 0000000000..3156eab9d0 --- /dev/null +++ b/src/data/localization/ko/p5.StringDict.ftl @@ -0,0 +1 @@ +description__0 = 문자열을 위한 간단한 사전. diff --git a/src/data/localization/ko/p5.Table.ftl b/src/data/localization/ko/p5.Table.ftl new file mode 100644 index 0000000000..7f9f7686e2 --- /dev/null +++ b/src/data/localization/ko/p5.Table.ftl @@ -0,0 +1,76 @@ +description__0 = 테이블 객체는 기존의 스프레트 시트처럼 복수의 행과 열에 데이터를 저장합니다. 동적으로 새로운 테이블을 생성하거나, 기존 파일 데이터를 사용하여 생성할 수 있습니다. +params__rows = p5.TableRow 배열[]: (선택 사항) p5.TableRow 객체의 배열 +columns__description__0 = 테이블의 행명을 담는 배열. 테이블의 헤더(header)를 함께 불러올 경우, header 매개변수. +rows__description__0 = 테이블의 행을 채우는 p5.TableRow 객체의 배열. getRows() 호출과 동일한 결과를 갖습니다. +addRow__description__0 = addRow()를 사용하여 p5.Table 객체에 새로운 행 데이터를 추가할 수 있습니다. 기본값으로 빈 행이 생성됩니다. 일반적으로, TableRow 객체에 있는 새로운 행에 레퍼런스를 저장하고 (위의 예제 중 newRow 참고), set()을 사용하여 각각의 개별값을 설정합니다. p5.TableRow 객체를 매개변수로 지정할 경우, 행을 복제하여 테이블에 추가합니다. +addRow__returns = p5.TableRow: 추가된 행 +addRow__params__row = p5.TableRow: (선택 사항) 추가될 행 +removeRow__description__0 = 테이블 객체에서 행을 제거합니다. +removeRow__params__id = 정수: 제거할 행의 ID +getRow__description__0 = 지정된 p5.TableRow에 레퍼런스를 반환합니다. 반환된 레퍼런스는 지정된 행의 값을 받아오거나 설정할 때 사용할 수 있습니다. +getRow__returns = p5.TableRow: p5.TableRow 객체 +getRow__params__rowID = 정수: 찾을 행의 ID +getRows__description__0 = 테이블의 모든 행을 받아옵니다. p5.TableRow 배열들을 반환합니다. +getRows__returns = p5.TableRow 배열[]: p5.TableRow의 배열 +findRow__description__0 = 지정된 값을 포함하는 테이블 행 중 1번째 행을 검색하고, 해당 행의 레퍼런스를 반환합니다. 여러 개의 행들이 지정된 값을 포함하더라도, 오직 1번째 행만 반환됩니다. ID 또는 제목(title) 설정을 통해 검색할 열도 지정가능합니다. +findRow__returns = p5.TableRow: +findRow__params__value = 문자열: 검색할 값 +findRow__params__column = 정수|문자열: 검색할 열의 ID 또는 제목 +findRows__description__0 = 지정된 값을 포함하는 테이블 행들을 검색하고, 해당 행들의 레퍼런스를 반환합니다. 반환된 배열은 위의 예제처럼 모든 행을 반복 처리하는 데에 사용됩니다.ID 또는 제목(title) 설정을 통해 검색할 열도 지정가능합니다. +findRows__returns = p5.TableRow 배열[]: p5.TableRow의 배열 +findRows__params__value = 문자열: 검색할 값 +findRows__params__column = 정수|문자열: 검색할 열의 ID 또는 제목 +matchRow__description__0 = 지정된 정규표현식과 매칭하는 테이블 행 중 1번째 행을 검색하고, 해당 행의 레퍼런스를 반환합니다. 반환된 배열은 모든 행을 반복 처리하는 데에 사용됩니다. ID 또는 제목(title) 설정을 통해 검색할 열도 지정가능합니다. +matchRow__returns = p5.TableRow: p5.TableRow 객체 +matchRow__params__regexp = 문자열|RegExp: 검색할 정규표현식 +matchRow__params__column = 문자열|정수: 검색할 열의 ID 또는 제목 +matchRows__description__0 = 지정된 정규표현식과 매칭하는 테이블 행들을 검색하고, 해당 행들의 배열을 반환합니다. 반환된 배열은 모든 행을 반복 처리하는 데에 사용됩니다. ID 또는 제목(title) 설정을 통해 검색할 열도 지정가능합니다. +matchRows__returns = p5.TableRow[]: p5.TableRow의 배열 +matchRows__params__regexp = 문자열: 검색할 정규표현식 +matchRows__params__column = 문자열|정수: (선택 사항) 검색할 열의 ID 또는 제목 +getColumn__description__0 = 특정 열의 모든 값들을 가져와 배열로 반환합니다. 열은 그 ID 또는 제목(title)으로 지정가능합니다. +getColumn__returns = 배열: 열 값들의 배열 +getColumn__params__column = 문자열|숫자: 반환할 열의 ID 또는 제목 +clearRows__description__0 = 테이블로부터 모든 행을 제거합니다. 모든 행들이 제거되어도 열과 열 제목은 유지됩니다. +addColumn__description__0 = addColumn()을 사용하여 p5.Table 객체에 새로운 열 데이터를 추가할 수 있습니다. 일반적으로 열 제목을 설정하여 이후 쉽게 참조되도록 합니다. (별도의 제목을 지정하지 않는 경우, 새로운 열의 제목은 null이 됩니다.) +addColumn__params__title = 문자열: (선택 사항) 해당 열의 제목 +getColumnCount__description__0 = 테이블의 전체 열 개수를 반환합니다. +getColumnCount__returns = 정수: 테이블의 열 개수 +getRowCount__description__0 = 테이블의 전체 행 개수를 반환합니다. +getRowCount__returns = 정수: 테이블의 행 개수 +removeTokens__description__0 = 지정된 문자(또는 '토큰')을 제거합니다. 별도의 열을 지정하지 않는 경우, 모든 행과 열 속 값들이 처리됩니다. 열은 ID 또는 제목으로 참조가능합니다. +removeTokens__params__chars = 문자열: 제거할 문자들의 문자열 +removeTokens__params__column = 문자열|정수: (선택 사항) 열 ID (숫자) 또는 제목 (문자열) +trim__description__0 = 문자열 테이블 값에서 스페이스나 탭과 같은 선행 및 후행 공백을 자릅니다. 별도의 열을 지정하지 않는 경우, 모든 행과 열 속 값들이 처리됩니다. 열은 ID 또는 제목으로 참조가능합니다. +trim__params__column = 문자열|정수: (선택 사항) 열 ID (숫자) 또는 제목 (문자열) +removeColumn__description__0 = removeColumn()을 사용하여 테이블 객체로부터 특정 열을 제거합니다. 제거될 열은 그 제목(문자열) 또는 인덱스 값(정수)로 식별할 수 있습니다. removeColumn(0)은 1번째 열을, removeColumn(1)은 2번째 열을 제거합니다. +removeColumn__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +set__description__0 = 테이블 중 지정된 행과 열에 값을 저장합니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +set__params__row = 정수: row ID +set__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +set__params__value = 문자열|숫자: 저장할 값 +setNum__description__0 = 테이블 중 지정된 행과 열에 실수(float)값을 저장합니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +setNum__params__row = 정수: row ID +setNum__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +setNum__params__value = 숫자: 저장할 값 +setString__description__0 = 테이블 중 지정된 행과 열에 문자열 값을 저장합니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +setString__params__row = 정수: row ID +setString__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +setString__params__value = 문자열: 저장할 값 +get__description__0 = 테이블 중 지정된 행과 열에 값을 받아옵니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +get__returns = 문자열|숫자: 지정된 행과 열에 값 +get__params__row = 정수: 행 ID +get__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +getNum__description__0 = 이블 중 지정된 행과 열에 실수(float)값을 받아옵니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +getNum__returns = 숫자: 실수값 +getNum__params__row = 정수: 행 ID +getNum__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +getString__description__0 = 테이블 중 지정된 행과 열에 문자열 값을 받아옵니다. 행은 ID로, 열은 ID 또는 제목으로 지정가능합니다. +getString__returns = 문자열: 문자열 값 +getString__params__row = 정수: 행 ID +getString__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +getObject__description__0 = 모든 테이블 데이터를 받아와 객체로 반환합니다. 열 이름이 전달될 경우, 각 행 객체는 해당 속성을 제목으로 저장합니다. +getObject__returns = 객체: 테이블 객체 +getObject__params__headerColumn = 문자열: (선택 사항) 행의 제목을 정할 열의 제목/이름 +getArray__description__0 = 모든 테이블 데이터를 받아와 다차원 배열로 반환합니다. +getArray__returns = 배열: 다차원 배열 diff --git a/src/data/localization/ko/p5.TableRow.ftl b/src/data/localization/ko/p5.TableRow.ftl new file mode 100644 index 0000000000..411cef4104 --- /dev/null +++ b/src/data/localization/ko/p5.TableRow.ftl @@ -0,0 +1,23 @@ +description__0 = TableRow 객체는 테이블 중 열에 저장된 데이터 값들의 단일 행을 표현합니다. +description__1 = 테이블 행은 정렬된 배열과 정렬되지 않은 JSON 객체를 모두 포함합니다. +description__2 = +params__str = 문자열: (선택 사항) 구분 기호로 분리된 문자열값으로 행 채우기 +params__separator = 문자열: (선택 사항) 기본값은 쉼표 단위 구분(csv) +set__description__0 = TableRow의 지정된 열에 값을 저장합니다. 열은 ID 또는 제목으로 지정가능합니다. +set__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +set__params__value = 문자열|숫자: 저장될 값 +setNum__description__0 = TableRow의 지정된 열에 실수(float)값을 저장합니다. 열은 ID 또는 제목으로 지정가능합니다. +setNum__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +setNum__params__value = 숫자|문자열: 저장될 값 as a Float +setString__description__0 = TableRow의 지정된 열에 문자열 값을 저장합니다. 열은 ID 또는 제목으로 지정가능합니다. +setString__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +setString__params__value = 문자열|숫자|불리언|객체: 저장될 값 +get__description__0 = TableRow의 지정된 열로부터 값을 받습니다. 열은 ID 또는 제목으로 지정가능합니다. +get__returns = 문자열|숫자: +get__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +getNum__description__0 = TableRow의 지정된 열로부터 실수(float)값을 받습니다. 열은 ID 또는 제목으로 지정가능합니다. +getNum__returns = 숫자: 실수 +getNum__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) +getString__description__0 = TableRow의 지정된 열로부터 문자열 값을 받습니다. 열은 ID 또는 제목으로 지정가능합니다. +getString__returns = 문자열: String +getString__params__column = 문자열|정수: 열 ID (숫자) 또는 제목 (문자열) diff --git a/src/data/localization/ko/p5.TriOsc.ftl b/src/data/localization/ko/p5.TriOsc.ftl new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/data/localization/ko/p5.TypedDict.ftl b/src/data/localization/ko/p5.TypedDict.ftl new file mode 100644 index 0000000000..c7925ad602 --- /dev/null +++ b/src/data/localization/ko/p5.TypedDict.ftl @@ -0,0 +1,11 @@ +description__0 = 모든 p5.Dictionary 유형을 위한 기본 클래스 입니다. 사용자가 지정한 사전(Dictionary) 클래스는 이 클래스를 상속할 수 있습니다. +size__description__0 = 사전 안에 현재 저장된 키-값(key-value) 쌍의 개수를 반환합니다. +hasKey__description__0 = 지정된 키(key)가 사전 안에 존재할 경우 참(true)을, 그렇지 않으면 거짓(false)를 반환합니다. +get__description__0 = 지정된 키에 저장된 값을 반환합니다. +set__description__0 = 지정된 키가 사전 안에 존재할 경우 연관된 값을 반환합니다. 그렇지 않으면 새로운 키-값 쌍이 추가됩니다. +create__description__0 = 새로운 키-값 쌍을 사전 안에 생성합니다. +clear__description__0 = 기존에 저장된 모든 키-값 쌍들을 사전으로부터 제거합니다. +remove__description__0 = 특정 키에 저장된 키-값 쌍을 사전으로부터 제거합니다. +print__description__0 = Dictionary에 현재 저장된 항목들의 로그를 콘솔창에 출력합니다. +saveTable__description__0 = 로컬 다운로드를 위해 사전을 CSV 파일로 변환합니다. +saveJSON__description__0 = 로컬 다운로드를 위해 사전을 JSON 파일로 변환합니다. diff --git a/src/data/localization/ko/p5.Vector.ftl b/src/data/localization/ko/p5.Vector.ftl new file mode 100644 index 0000000000..c9028d1e79 --- /dev/null +++ b/src/data/localization/ko/p5.Vector.ftl @@ -0,0 +1,133 @@ +description__0 = 2차원 및 3차원 벡터, 특히 유클리드 (기하학) 벡터를 설명하는 클래스입니다. 벡터는 크기와 방향을 모두 지닌 개체입니다. 하지만, 그 데이터 유형은 벡터의 성분(2D의 경우 x와 y, 3D의 경우 x, y, z)을 저장합니다. 크기와 방향은 각각 mag() 및 heading() 메소드를 통해 접근할 수 있습니다. +description__1 = p5.Vector는 위치, 속도, 가속을 다루는 수많은 p5.js 예제에서 사용됩니다. 예를 들어, 화면을 가로질러 움직이는 직사각형을 만들려면, 이 물체의 위치(원점에서 그 위치를 가리키는 벡터), 속도(단위 시간당 객체의 위치가 변하는 속도, 벡터로 표시), 그리고 가속도(단위 시간당 객체의 속도가 변하는 속도, 벡터로 표시)를 반드시 고려해야 합니다. +description__2 = 벡터는 그룹화된 값들을 나타냅니다. 따라서, 전통적인 덧셈/곱셈 대신, p5.Vector 클래스 내부의 벡터 수학 메소드를 사용해서 계산해야 합니다. +params__x = 숫자: (선택 사항) 벡터의 x성분 +params__y = 숫자: (선택 사항) 벡터의 y성분 +params__z = 숫자: (선택 사항) 벡터의 z성분 +x__description__0 = 벡터의 x성분 +y__description__0 = 벡터의 y성분 +z__description__0 = 벡터의 z성분 +set__description__0 = 두 세개의 개별 변수, p5.Vector 데이터, 또는 실수(float) 배열의 값들을 사용하여 벡터의 x, y, z 성분을 설정합니다. +set__params__x = 숫자: (선택 사항) 벡터의 x 성분 +set__params__y = 숫자: (선택 사항) 벡터의 x 성분 +set__params__z = 숫자: (선택 사항) 벡터의 z 성분 +set__params__value = p5.Vector|숫자 배열[]: 설정할 벡터 +copy__description__0 = 벡터의 복사본을 가져와 p5.Vector 객체를 반환합니다. +copy__returns = p5.Vector: p5.Vector 객체의 복사본 +add__description__0 = x, y, z 성분을 벡터에 더하거나, 한 벡터를 다른 벡터에 더하거나, 또는 2개의 독립 벡터를 더합니다. 2개의 독립 벡터를 더하는 메소드는 정적 메소드에 해당하며, p5.Vector를 반환합니다. 다른 메소드들은 벡터에 직접 작용합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +add__params__x = 숫자: 추가할 벡터의 x 성분 +add__params__y = 숫자: (선택 사항) 추가할 벡터의 y 성분 +add__params__z = 숫자: (선택 사항) 추가할 벡터의 z 성분 +add__params__value = p5.Vector|숫자 배열[]: 추가할 벡터 +add__params__v1 = p5.Vector: 추가할 p5.Vector +add__params__v2 = p5.Vector: 추가할 p5.Vector +add__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +rem__description__0 = 한 벡터를 다른 벡터로 나눌 때의 나머지(remainder)를 구합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +rem__params__x = 숫자: 나누는 벡터의 x 성분 +rem__params__y = 숫자: 나누는 벡터의 y 성분 +rem__params__z = 숫자: 나누는 벡터의 z 성분 +rem__params__value = p5.Vector | 숫자 배열[]: 나누는 벡터 +rem__params__v1 = p5.Vector: 나누어지는 p5.Vector +rem__params__v2 = p5.Vector: 나누는 p5.Vector +sub__description__0 = x, y, z성분을 벡터에서 빼거나, 한 벡터에서 다른 벡터를 빼거나, 또는 2개의 독립 벡터를 뺍니다. 2개의 독립 벡터를 빼는 메소드는 정적 메소드에 해당하며, p5.Vector를 반환합니다. 다른 메소드들은 벡터에 직접 작용합니다. 자세한 내용은 예제를 참고할 수 있습니다. +sub__params__x = 숫자: 뺄샘할 벡터의 x 성분 +sub__params__y = 숫자: (선택 사항) 뺄샘할 벡터의 y 성분 +sub__params__z = 숫자: (선택 사항) 뺄샘할 벡터의 z 성분 +sub__params__value = p5.Vector|숫자 배열[]: 뺄샘할 벡터 +sub__params__v1 = p5.Vector: 뺄샘할 p5.Vector +sub__params__v2 = p5.Vector: 뺄샘할 p5.Vector +sub__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +mult__description__0 = 벡터에 스칼라를 곱합니다. 정적 메소드인 경우 새로운 p5.Vector를 생성하는 반면, 정적 메소드가 아닌 경우 벡터에 직접 작용합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +mult__params__n = 숫자: 벡터로 곱할 숫자 +mult__params__x = 숫자: 벡터의 x 성분에 곱할 숫자 +mult__params__y = 숫자: 벡터의 y 성분에 곱할 숫자 +mult__params__z = 숫자: (선택 사항) 벡터의 z 성분에 곱할 숫자 +mult__params__arr = 숫자 배열[]: 벡터의 성분들에 곱할 숫자 배열 +mult__params__v = p5.Vector: 원본 벡터의 성분들에 곱할 벡터 +mult__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +mult__params__v0 = p5.Vector +mult__params__v1 = p5.Vector +div__description__0 = 벡터를 스칼라로 나눕니다. 정적 메소드인 경우 새로운 p5.Vector를 생성하는 반면, 정적 메소드가 아닌 경우 벡터에 직접 작용합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +div__params__n = 숫자: 벡터를 나눌 숫자 +div__params__x = 숫자: 벡터의 x 성분에 나눌 숫자 +div__params__y = 숫자: 벡터의 y 성분에 나눌 숫자 +div__params__z = 숫자: (선택 사항) 벡터의 z 성분에 나눌 숫자 +div__params__arr = 숫자 배열[]: 벡터의 성분들을 나눌 숫자 +div__params__v = p5.Vector: 원본 벡터의 성분들을 나눌 벡터 +div__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +div__params__v0 = p5.Vector +div__params__v1 = p5.Vector +mag__description__0 = 벡터의 크기(길이)를 계산하고 그 결과를 실수(float)으로 반환합니다. (이는 수식 sqrt(x*x + y*y + z*z)과도 같습니다.) +mag__returns = 숫자: 벡터의 크기(길이) +mag__params__vecT = p5.Vector: 크기를 찾을 벡터 +magSq__description__0 = 벡터의 제곱 크기를 계산하고 그 결과를 실수(float)로 반환합니다. (이는 수식 sqrt(x*x + y*y + z*z)과도 같습니다.) 벡터를 비교하는 등의 경우에서 실제 길이를 포함하지 않으면 더 빠르게 계산됩니다. +magSq__returns = 숫자: 벡터 크기의 제곱 +dot__description__0 = 두 벡터의 내적을 계산합니다. 2개의 독립 벡터의 내적을 계산하는 메소드는 정적 메소드에 해당합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +dot__returns = 숫자: the dot product +dot__params__x = 숫자: 벡터의 x 성분 +dot__params__y = 숫자: (선택 사항) 벡터의 y 성분 +dot__params__z = 숫자: (선택 사항) 벡터의 z 성분 +dot__params__value = p5.Vector: 벡터의 내적 값 또는 p5.Vector 객체 +dot__params__v1 = p5.Vector: 첫 번째 p5.Vector 객체 +dot__params__v2 = p5.Vector: 두 번째 p5.Vector 객체 +cross__description__0 = 두 벡터의 외적으로 구성된 벡터를 계산하고 반환합니다. 정적 및 비정적 메소드 모두 새로운 p5.Vector를 반환합니다. 자세한 내용을 위해서 예제를 참고할 수 있습니다. +cross__returns = p5.Vector: 외적을 가진 p5.Vector 객체 +cross__params__v = p5.Vector: 외적을 구할 p5.Vector 객체 +cross__params__v1 = p5.Vector: 첫 번째 p5.Vector 객체 +cross__params__v2 = p5.Vector: 두 번째 p5.Vector 객체 +dist__description__0 = 두 점 사이의 유클리드 거리를 계산합니다 (점을 벡터 객체로 간주). +dist__returns = 숫자: 두 점 사이의 거리 +dist__params__v = p5.Vector: x, y, z 좌표를 가진 p5.Vector +dist__params__v1 = p5.Vector: 첫 번째 p5.Vector 객체 +dist__params__v2 = p5.Vector: 두 번째 p5.Vector 객체 +normalize__description__0 = 벡터를 길이 1로 정규화합니다. (단위 벡터로 만듭니다.) +normalize__returns = p5.Vector: 정규화된 p5.Vector 객체 +normalize__params__v = p5.Vector: 정규화할 벡터 +normalize__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +limit__description__0 = 벡터의 크기를 매개변수 max의 값으로 제한합니다. +limit__params__max = 숫자: 벡터의 최댓값 +setMag__description__0 = 벡터의 크기를 매개변수 len의 값으로 제한합니다. +setMag__params__len = 숫자: 벡터의 새로운 크리 +heading__description__0 = 벡터의 회전 각도를 계산합니다. (2D 벡터만 해당) +heading__returns = 숫자: 회전 각도 +setHeading__description__0 = 벡터를 회전시킵니다 (2D 벡터만 해당. 벡터의 크기는 유지됩니다. +setHeading__params__angle = 숫자: 회전의 각도 +rotate__description__0 = 벡터를 특정 각도로 회전하되 (2D 벡터만 해당), 크기는 동일하게 유지합니다. +rotate__params__angle = 숫자: 회전의 각도 +rotate__params__v = p5.Vector +rotate__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +angleBetween__description__0 = 두 벡터 사이의 각도 (라디안 단위)를 계산하고 반환합니다. +angleBetween__returns = 숫자: 벡터 사이의 각도 (라디안 단위) +angleBetween__params__value = p5.Vector: p5.Vector 객체의 x, y, z 성분 +lerp__description__0 = 한 벡터와 다른 벡터를 선형적으로 보간합니다. +lerp__params__x = 숫자: 벡터의 x 성분 +lerp__params__y = 숫자: 벡터의 y 성분 +lerp__params__z = 숫자: 벡터의 z 성분 +lerp__params__amt = 숫자: 보간의 정도; 0.0 (구 벡터)과 1.0 (신 벡터) 사이의 값. 0.9은 새로운 벡터에 가까운 값입니다. 0.5은 두 벡터의 정중앙입니다. +lerp__params__v = p5.Vector: 선형적 보간을 할 p5.Vector 객체 +lerp__params__v1 = p5.Vector +lerp__params__v2 = p5.Vector +lerp__params__target = p5.Vector: (선택 사항) 결과를 받을 벡터 +reflect__description__0 = 2D 선 또는 3D 평면의 법선에 들어오는 벡터를 반영합니다. 이 메소드는 벡터에 직접 작용합니다. +reflect__params__surfaceNormal = p5.Vector: 반영 법선이 될 p5.Vector 객체가 정규화됩니다. +array__description__0 = 벡터의 표현을 실수 배열로 반환합니다. 이는 일시적으로만 사용됩니다. 다른 경우에도, p5.Vector.copy() 메소드를 통해 배열에 내용을 복사해야 합니다. +array__returns = 숫자 배열[]: 3 가지 값을 가진 배열 +equals__description__0 = p5.Vector에 대한 평등 검사 +equals__returns = 불리언: 벡터의 평등함 여부 +equals__params__x = 숫자: (선택 사항) 벡터의 x 성분 +equals__params__y = 숫자: (선택 사항) 벡터의 y 성분 +equals__params__z = 숫자: (선택 사항) 벡터의 z 성분 +equals__params__value = p5.Vector|배열: 비교할 벡터 +fromAngle__description__0 = 특정 각도에서 새로운 2D 벡터를 생성합니다. +fromAngle__returns = p5.Vector: 새로운 p5.Vector 객체 +fromAngle__params__angle = 숫자: 원하는 라디안 단위의 각도 (angleMode에 영향받지 않은 가도) +fromAngle__params__length = 숫자: (선택 사항) 새로운 벡터의 크리 (기본값은 1) +fromAngles__description__0 = 구면각 (spherical angle)의 쌍에서 새로운 3D 벡터를 생성합니다. +fromAngles__returns = p5.Vector: 새로운 p5.Vector 객체 +fromAngles__params__theta = 라디안 단위, 극각 (0는 위로 향함) +fromAngles__params__phi = 숫자: 라디안 단위, 방위각 (0은 화면 바깥에 있음) +fromAngles__params__length = 숫자: (선택 사항) 새로운 벡터의 크리 (기본값은 1) +random2D__description__0 = 임의의 각도에서 새로운 2D 단위 벡터를 생성합니다. +random2D__returns = p5.Vector: 새로운 p5.Vector 객체 +random3D__description__0 = 새로운 임의의 3D 단위 벡터를 생성합니다. +random3D__returns = p5.Vector: 새로운 p5.Vector 객체 diff --git a/src/data/localization/ko/p5.XML.ftl b/src/data/localization/ko/p5.XML.ftl new file mode 100644 index 0000000000..b2c5fafe01 --- /dev/null +++ b/src/data/localization/ko/p5.XML.ftl @@ -0,0 +1,46 @@ +description__0 = XML은 XML 코드를 구문 분석할 수 있는 XML 객체의 표현입니다. loadXML()을 사용하여 외부 XML 파일을 불러와 XML 객체를 생성합니다. +getParent__description__0 = 요소 부모의 복사본을 가져와, 부모를 또다른 p5.XML 객체로 반환합니다. +getParent__returns = p5.XML: 부모 객체 +getName__description__0 = 요소의 전체 이름을 가져와 문자열로 반환합니다. +getName__returns = 문자열: 요소의 이름 +setName__description__0 = 문자열로 설정된 요소 이름을 지정합니다. +setName__params__the = 문자열: 요소의 새 이름 +hasChildren__description__0 = 요소의 자식 유무 여부를 확인하고, 그 결과를 불리언으로 반환합니다. +hasChildren__returns = 불리언: +listChildren__description__0 = 모든 요소의 자식 이름을 가져와 그 값들을 문자열 배열로 반환합니다. 이는 각 자식 요소마다 getName()을 호출하는 것과 동일한 효과를 갖습니다. +listChildren__returns = 문자열 배열[]: 요소의 자식요소의 배열 +getChildren__description__0 = 요소의 모든 자식을 p5.XML 객체 배열로 반환합니다. 이름 매개변수를 지정할 경우, 해당 변수명과 일치하는 모든 자식을 반환합니다. +getChildren__returns = p5.XML 배열[]: 요소의 자식 +getChildren__params__name = 문자열: (선택 사항) 요소의 이름 +getChild__description__0 = 이름 매개변수 또는 지정된 인덱스의 자식과 일치하는 요소의 1번째 자식을 반환합니다. 일치하는 자식을 찾지 못하는 경우, 'undefined'를 반환합니다. +getChild__returns = p5.XML: +getChild__params__name = 문자열|정수: 요소의 이름 또는 배열값 +addChild__description__0 = 요소에 새로운 자식을 추가합니다. 자식은 문자열로 지정될 수 있으며, 이는 새로운 태그명 또는 기존 p5.XML 객체에 대한 레퍼런스로서 사용할 수 있습니다. 새로 추가된 자식에 대한 레퍼런스는 p5.XML 객체로 반환됩니다. +addChild__params__node = p5.XML: a p5.XML 자식요소가 될 요소 또는 객체 +removeChild__description__0 = 이름 또는 인덱스로 지정된 요소를 제거합니다 +removeChild__params__name = 문자열|정수: 요소 이름 또는 배열값 +getAttributeCount__description__0 = 지정된 요소의 속성 개수를 숫자로 반환합니다. +getAttributeCount__returns = 정수: 요소의 속성 개수 +listAttributes__description__0 = 지정된 요소의 모든 속성을 가져와 문자열 배열로 반환합니다. +listAttributes__returns = 문자열 배열[]: 속성의 이름들을 담은 문자열 배열 +hasAttribute__description__0 = 요소가 지정된 속성을 갖는지 여부를 확인합니다. +hasAttribute__returns = 불리언: 속성이 있을 시 참, 없을 시 거짓 +hasAttribute__params__the = 문자열: 확인할 요소 +getNum__description__0 = 요소의 속성값을 숫자로 반환합니다. 매개변수 defaultValue가 지정되고 속성이 존재하지 않으면 defaultValue를 반환합니다. 매개변수 defaultValue가 지정되지 않고 속성이 존재하지 않으면 값 0을 반환합니다. +getNum__returns = 숫자: +getNum__params__name = 문자열: 속성의 부분적 이름 +getNum__params__defaultValue = 숫자: (선택 사항) 속성의 기본값 +getString__description__0 = 요소의 속성값을 문자열로 반환합니다. 매개변수 defaultValue가 지정되고 속성이 존재하지 않으면 'defaultValue'를 반환합니다. 매개변수 defaultValue가 지정되지 않고 속성이 존재하지 않으면 null을 반환합니다. +getString__returns = 문자열: +getString__params__name = 문자열: 속성의 부분적 이름 +getString__params__defaultValue = 숫자: (선택 사항) 속성의 기본값 +setAttribute__description__0 = 요소 속성의 내용을 설정합니다. 1번째 매개변수는 속성명을, 2번째 매개변수는 새로운 내용을 지정합니다. +setAttribute__params__name = 문자열: 속성의 부분적 이름 +setAttribute__params__value = 숫자|문자열|불리언: 속성의 값 +getContent__description__0 = 요소의 내용을 반환합니다. 매개변수 defaultValue가 지정되고 내용이 존재하지 않으면 'defaultValue'를 반환합니다. 매개변수 defaultValue가 지정되지 않고 내용이 존재하지 않으면 null을 반환합니다. +getContent__returns = 문자열: 요소의 내용 +getContent__params__defaultValue = 문자열: (선택 사항) 내용이 없을 시 반환될 문자열 +setContent__description__0 = 요소의 내용을 설정합니다. +setContent__params__text = 문자열: 새로운 내용 +serialize__description__0 = 요소를 문자열로 직렬화합니다. 요소의 내용을 http 요청으로 전송하거나 파일 저장을 준비할 때 사용됩니다. +serialize__returns = 문자열: 요소의 문자열 직렬화 diff --git a/src/data/localization/ko/p5.ftl b/src/data/localization/ko/p5.ftl new file mode 100644 index 0000000000..daa61d3023 --- /dev/null +++ b/src/data/localization/ko/p5.ftl @@ -0,0 +1,1552 @@ +description__0 = p5 인스턴스 생성자 입니다. +description__1 = p5 인스턴스는 p5 스케치와 관련된 모든 속성과 메소드(method)를 보유합니다. 도래할 스케치 클로저(closure)를 예상하고, 생성된 p5 캔버스를 노드에 연결하기 위해 선택적으로 노드 매개변수를 취할 수 있습니다. 스케치 클로저는 새로이 생성된 p5 인스턴스를 유일한 인수로 취하며, 또 선택적으로, 스케치 실행을 위해 preload(), setup(), 그리고/또는 draw() 속성을 담을 수 있습니다. +description__2 = p5 스케치는 "전역" 또는 "인스턴스" 모드에서 실행됩니다: "전역 모드" - 모든 속성과 메소드가 윈도우에 속함 "인스턴스 모드" - 모든 속성과 메소드가 특정 p5 객체에 구속됨 +returns = P5: p5 인스턴스 +params__sketch = 함수: 주어진 p5 인스턴스에 선택적으로 preload(), setup(), 그리고/또는 draw() 속성을 설정할 수 있는 클로저 +params__node = HTML Element: (선택 사항) 캔버스에 속할 요소 +describe__description__0 = 스크린리더 (Screen Reader)를 위한 캔버스의 전체적인 서술적 묘사를 설정합니다. 첫 번째 매개변수는 문자열이며, 설정할 묘사입니다. 두 번째 매개변수는 선택 사항이며, 묘사의 표시법을 지정합니다. +describe__description__1 = describe(text, LABEL)은 설명을 모든 사용자에게 박물관 라벨/캡션을 캔버스 옆
        칸 안에 나타냅니다. CSS를 통해서 스타일을 자유자재로 바꿀 수 있습니다. +describe__description__2 = describe(text, FALLBACK)는 설정된 묘사를 스크린리더 사용자들에게만 이용가능케 하며, 캔버스의 부가적 문서객체모델 (DOM)에 설정됩니다. 두번 째 매개변수가 없을 시, 기본적으로 묘사는 스크린리더 사용자들에게만 이용가능합니다. +describe__params__text = 문자열: 켄버스의 설명 +describe__params__display = 상수: (선택 사항) LABEL 또는 FALLBACK +describeElement__description__0 = 스크린리더 (Screen Reader)를 위한 캔버스의 요소(도형, 또는 도형의 모임)의 서술적 묘사를 설정합니다. 첫 번째 매개변수는 묘사할 요소의 이름입니다. 두 번째 매개변수는 문자열이며 설정할 묘사입니다. 세 번째 매개변수는 선택 사항이며, 묘사의 표시법을 지정합니다. +describeElement__description__1 = describe(text, LABEL)은 설명을 모든 사용자에게 박물관 라벨/캡션을 캔버스 옆
        칸 안에 나타냅니다. CSS를 통해서 스타일을 자유자재로 바꿀 수 있습니다. +describeElement__description__2 = describeElement(name, text, FALLBACK)는 설정된 묘사를 스크린리더 사용자들에게만 이용가능케 하며, 캔버스의 부가적 문서객체모델 (DOM)에 설정됩니다. 두번 째 매개변수가 없을 시, 기본적으로 묘사는 스크린리더 사용자들에게만 이용가능합니다. +describeElement__params__name = 문자열: 요소의 이름 +describeElement__params__text = 문자열: 요소의 설명 및 묘사 +describeElement__params__display = 상수: (선택 사항) LABEL 또는 FALLBACK +textOutput__description__0 = textOutput() 함수는 스크린리더 (Screen Reader)를 위한 도형의 설명을 출력합니다. 이 설명은 자동적으로 만들어지며, 첫 부분은 캔버스의 높이 및 너비, 배경색, 그리고 캔버스상 요소 (도형, 또는 도형의 모임)의 개수를 출력합니다 (예: 'Your output is a, 400 by 400 pixels, lavender blue canvas containing the following 4 shapes:'). 다음은 각 요소의 색, 위치, 넓이 등의 정보를 출력합니다 (예: "orange ellipse at top left covering 1% of the canvas"). 각 요소에 대한 구체적 정보는 선택해서 볼 수 있습니다. 요소들의 목록이 제공됩니다. 이 목록에는 도형, 색, 위치, 좌표와 넓이가 묘사되어 있습니다 (예: "orange ellipse location=top left area=2"). +textOutput__description__1 = textOutput()texOutput(FALLBACK)은 출력물을 스크린리더 (Screen Reader)에 사용되는 캔버스의 부가적 문서객체모델 (DOM)에 제공합니다. textOutput(LABEL)은 캔버스 옆 추가적인 div요소를 만들고 그 안에 설명을 출력합니다. 이는 스크린리더를 사용하지 않지만 코딩하는 동안 출력물을 보면서 하고 싶어하는 유저들에게 유용합니다. 하지만 LABEL을 사용할 시 스크린리더 사용자들에게는 의미없는 중복성을 만들 수 있습니다. 그 이유로 LABEL은 스케치를 만드는 동안에만 사용하고 스케치를 출판하거나 스크린리더 사용자들에게 나누기 전에 지우는 것을 권장합니다. +textOutput__params__display = 상수: (선택 사항) FALLBACK 또는 LABEL +gridOutput__description__0 = gridOutput()은 캔버스의 내용물을 위치적에 따라 격자 (grid) 형식으로 나열합니다. 이 테이블을 출력하기 전에 컨버스의 전반적 설명을 출력합니다. 캔버스의 높이 및 너비, 배경색, 그리고 캔버스상 요소 (도형, 또는 도형의 모임)의 개수를 출력합니다 (예: 'Your output is a, 400 by 400 pixels, lavender blue canvas containing the following 4 shapes:'). 그리드는 내용물을 위치적으로 설명하며, 각 요소는 위치의 격자 위 셀 (cell)에 놓입니다. 각 셀에는 특정 요소의 색상과 모양이 저장되어 있습니다 (예: "orange ellipse"). 각 요소에 대한 구체적 정보는 선택해서 볼 수 있습니다. 각 요소의 모양, 색, 위치, 넓이 등의 정보가 표기되어 있는 목록 (예: "orange ellipse location=top left area=1%")도 사용 가능합니다. +gridOutput__description__1 = gridOutput() and gridOutput(FALLBACK)은 출력물을 스크린리더 (Screen Reader)에 사용되는 캔버스의 부가적 문서객체모델 (DOM)에 제공합니다. gridOutput(LABEL)은 캔버스 옆 추가적인 div요소를 만들고 그 안에 설명을 출력합니다. 이는 스크린리더를 사용하지 않지만 코딩하는 동안 출력물을 보면서 하고 싶어하는 유저들에게 유용합니다. 하지만 LABEL을 사용할 시 스크린리더 사용자들에게는 의미없는 중복성을 만들 수 있습니다. 그 이유로 LABEL은 스케치를 만드는 동안에만 사용하고 스케치를 출판하거나 스크린리더 사용자들에게 나누기 전에 지우는 것을 권장합니다. +gridOutput__params__display = 상수: (선택 사항) FALLBACK 또는 LABEL +alpha__description__0 = 픽셀 배열로부터 알파값을 추출합니다. +alpha__returns = 알파값 +alpha__params__color = p5.Color|숫자 배열[]| 문자열: p5.Color 객체, 색상 요소 또는 CSS 색상 +blue__description__0 = 색상 또는 픽셀 배열로부터 파랑값을 추출합니다. +blue__returns = 파랑값 +blue__params__color = p5.Color 객체, 색상 요소, CSS 색상 +brightness__description__0 = 색상 또는 픽셀 배열로부터 HSB 밝기값을 추출합니다. +brightness__returns = 밝기값 +brightness__params__color = p5.Color 객체, 색상 요소, CSS 색상 +color__description__0 = 색상 함수를 이용해 색상 데이터의 매개변수를 저장합니다. 이 때, 매개변수는 colorMode()의 설정에 따라 RGB 또는 HSB 값으로 처리됩니다. 기본 모드인 RGB값은 0부터 255까지이며, 따라서 color(255,204,0)와 같은 함수는 밝은 노랑색을 반환하게 됩니다. +color__description__1 = 만약에 color() 함수에 매개변수가 1개만 적히면, 회색 음영(grayscale)값으로 처리됩니다. 여기에 추가되는 두번째 변수는 투명도를 설정할 수 있는 알파값으로서 처리됩니다. 세번째 변수가 추가되었을 때 비로소 RGB나 HSB값으로 처리됩니다. RGB나 HSB값을 정하는 3개의 변수가 존재할 때 추가되는 네번째 변수는 알파값으로 적용됩니다. +color__description__2 = 나아가, p5는 RGB, RGBA, Hex CSS 색상 문자열과 모든 색상명 문자열 역시 지원합니다. 그 경우, 알파값은 괄호 내 2번째 매개변수 추가를 통해서가 아닌, RGBA 형식에 따라 지정될 수 있습니다. +color__returns = 색상 결과 +color__params__gray = 숫자: 흑과 백 사이의 값 지정 +color__params__alpha = 숫자: 현재 색상 범위(기본값: 0-255)에 대한 알파값 +color__params__v1 = 숫자: 현재 색상 범위 내 빨강색(R) 또는 색조값 지정 +color__params__v2 = 숫자: green or saturation value relative to the current color range +color__params__v3 = 숫자: 현재 색상 범위 내 파랑색(B) 또는 색조값 지정 +color__params__value = 문자열: 색상 문자열 +color__params__values = 숫자 배열[]: RGB 및 알파값을 포함한 숫자 배열 +color__params__color = p5.Color +green__description__0 = 색상 또는 픽셀 배열로부터 초록값을 추출합니다. +green__returns = 초록값 +green__params__color = p5.Color 객체, 색상 요소, CSS 색상 +hue__description__0 = 색상 또는 픽셀 배열로부터 색조를 추출합니다. +hue__description__1 = 색조는 HSB와 HSL상 모두 존재합니다. 이 함수는 HSB 색상 객체를 사용할 경우(또는 HSB 색상 모드로 지정된 픽셀 배열을 사용할 경우) HSB로 표준화된 색조 값을 반환합니다. 기본값으로는 HSL로 표준화된 색조를 반환합니다. (단, 최대 색조를 별도 지정한 경우 다른 값을 반환합니다.) +hue__returns = 색조 +hue__params__color = 객체, 색상 요소 또는 CSS 색상 +lerpColor__description__0 = 두 가지 색상을 혼합하고, 그 사이에 존재하는 제 3의 색상을 찾습니다. 여기서 매개변수 amt는 두 개의 값 사이를 선형적으로 보간합니다. 예를 들어, 0.0은 첫 번째 값과 동일한 색상값을, 0.1은 첫 번째 값에 매우 가까운 색상값을, 0.5는 두 값 사이의 중간 색상값을 나타내는 식입니다. 이 때, 0 미만의 값은 0으로, 1이상의 값은 1로 자동 변환됩니다. 이 점에서 lerpColor()는 lerp()와 다르게 작동하는 셈인데, 이처럼 lerpColor()는 색상값을 0과 1사이로 조정하여 지정된 범위를 벗어난 색상 생성을 방지합니다. +lerpColor__description__1 = 색상이 보간되는 방식은 현재 지정된 색상 모드에 따라 달라집니다. +lerpColor__returns = p5.Color: 선형적으로 보간된 색상 +lerpColor__params__c1 = 이 색상으로부터 선형 보간 +lerpColor__params__c2 = 이 색상을 향해 선형 보간 +lerpColor__params__amt = 숫자: 0과 1 사이의 숫자 +lightness__description__0 = 색상 또는 픽셀 배열로부터 HSL 명도를 추출합니다. +lightness__returns = 숫자: 명도 +lightness__params__color = p5.Color|숫자 배열[]|문자열: p5.Color 객체, 색상 요소 또는 CSS 색상 +red__description__0 = 색상 또는 픽셀 배열로부터 빨강값을 추출합니다. +red__returns = 숫자: 빨강값 +red__params__color = p5.Color|숫자 배열[]|문자열: p5.Color 객체, 색상 요소 또는 CSS 색상 +saturation__description__0 = 색상 또는 픽셀 배열로부터 채도값을 추출합니다. 채도값은 HSB와 HSL에서 각각 다르게 측정됩니다. 이 함수는 HSL 채도를 기본값으로 제공합니다. 하지만, HSB 색상 객체가 제공 될 때 (또는 색상 모드가 HSB이면서 픽셀 배열이 제공될 때) HSB 채도값을 반환합니다. +saturation__description__1 = Saturation is scaled differently in HSB and HSL. This function will return the HSB saturation when supplied with an HSB color object (or when supplied with a pixel array while the color mode is HSB), but will default to the HSL saturation otherwise. +saturation__returns = 숫자: 채도값 +saturation__params__color = p5.Color|숫자 배열[]|문자열: p5.Color 객체, 색상 요소 또는 CSS 색상 +background__description__0 = background() 함수는 p5.js 캔버스의 배경색을 설정합니다. 배경색의 기본값은 투명입니다. 이 함수는 주로 draw() 함수 안에 위치하며, 매 프레임마다 캔버스 화면을 초기화하기 위해 사용됩니다. 하지만, 애니메이션의 첫 프레임 배경을 지정하거나 배경색을 최초 한번만 지정할 경우, setup() 함수 안에 쓰이기도 합니다. +background__description__1 = 색상은 현재 색상 모드(colorMode)에 따라 RGB, HSB, 또는 HSL값으로 지정됩니다. (기본값으로 제공되는 색상 모드는 RGB이고, 그 색상 범위는 0부터 255까지 해당합니다.) 알파값의 기본 제공 범위 역시 0부터 255까지입니다. +background__description__2 = 단일한 문자열 인수에 대해 RGB, RGBA, Hex CSS 색상 문자열과 더불어 명명된 모든 색상 문자열이 지원됩니다. 단, 투명도인 알파값을 설정하기 위해서는 반드시 RGBA를 사용해야 합니다. +background__description__3 = p5.Color 객체를 통해 배경색을 설정할 수 있습니다. +background__description__4 = p5.Image를 통해 배경 이미지를 설정할 수 있습니다. +background__params__color = p5.Color: color() 함수로 생성된 모든 값 +background__params__colorstring = 문자열, 지원되는 문자열 형식: 색상 문자열, 정수의 rgb()나 rgba(), 백분율의 rgb()나 rgba(), 3자리 숫자의 hex, 6자리 숫자의 hex +background__params__a = 숫자: (선택 사항) 현재 색상 범위에 따른 배경색 투명도 (기본값은 0-255) +background__params__gray = 숫자: 흑과 백 사이의 값 지정 +background__params__v1 = 숫자: 빨강값 또는 색조값 (현재 색상 모드에 따라 상이) +background__params__v2 = 숫자: 초록값 또는 채도값 (현재 색상 모드에 따라 상이) +background__params__v3 = 숫자: 파랑값 또는 밝기값 (현재 색상 모드에 따라 상이) +background__params__values = 숫자 배열[]: 빨강값, 초록값, 파랑값, 알파값을 포함한 배열 +background__params__image = p5.Image: loadImage()나 createImage()로 생성된 이미지를 배경 이미지로 설정하는 경우 (스케치 화면과 반드시 동일한 사이즈일 것) +clear__description__0 = 버퍼에 있는 픽셀들을 지우는 함수로, 오직 캔버스만 비게 됩니다. createVideo()나 createDiv()와 같은, createX()류의 메소드로 지정된 객체들을 제거하진 않습니다. 메인 그래픽이 아닌, createGraphics()로 생성된 부가적인 그래픽의 경우, 그 전체 또는 일부를 투명하게 처리할 수 있습니다. 이 함수는 모든 픽셀을 100% 투명하게 만듭니다. +colorMode__description__0 = colorMode()는 p5.js가 색상 데이터를 해석하는 방식을 결정합니다. 기본값으로, fill(), stroke(), background(), color()의 매개변수는 RGB 색상 모드에서 처리되며, 그 범위는 0부터 255까지입니다. 이 기본값은 colorMode(RGB, 255)와 동일한 효과를 지닙니다. colorMode(HSB)로 설정을 변경하면 HSB 색상 시스템을 사용할 수 있습니다. HSB 색상 시스템은 그 기본값으로 colorMode(HSB, 360, 100, 100, 1)와 같이 설정됩니다. 색상 모드는 HSL로도 설정가능합니다. +colorMode__description__1 = 참고: 모든 색상 객체들은 생성 당시에 지정된 색상 모드를 반영합니다. 따라서, 이미 생성된 색상 객체 중 일부에만 적용되는 색상 모드를 지정할 수도 있습니다. +colorMode__params__mode = 상수: RGB(빨강Red/초록Green/파랑색Blue), HSB(색조Hue/채도Saturation/밝기Brightness), HSL(색조Hue/채도Saturation/명도Lightness) 중 하나 +colorMode__params__max = 숫자: (선택 사항) 모든 값들의 범위 +colorMode__params__max1 = 숫자: (선택 사항) 모든 값들의 범위 +colorMode__params__max2 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 빨강값 또는 색조값 +colorMode__params__max3 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 초록값 또는 채도값 +colorMode__params__maxA = 숫자: (선택 사항) 알파값의 범위 +fill__description__0 = 도형의 면을 채울 색상을 지정합니다. 예를 들어, fill(204, 102, 0) 함수를 실행하면, 이 명령어 다음에 그려진 모든 도형들이 주황색으로 칠해집니다. 이 때, 색상값은 colorMode()로 지정된 현재의 색상 모드에 따라 RGB 또는 HSB로 지정됩니다. (기본값으로 제공되는 색상 모드는 RGB이고, 그 색상 범위는 0부터 255까지 해당합니다.) 알파값의 기본 제공 범위 역시 0부터 255까지입니다. +fill__description__1 = 단일한 문자열 인수에 대해 RGB, RGBA, Hex CSS 색상 문자열과 더불어 명명된 모든 색상 문자열이 지원됩니다. 단, 투명도인 알파값을 설정하기 위해서는 반드시 RGBA를 사용해야 합니다. +fill__description__2 = Color 객체로도 색상을 지정할 수 있습니다. +fill__params__v1 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 빨강값 또는 색조값 +fill__params__v2 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 초록값 또는 채도값 +fill__params__v3 = 숫자:현재 지정된 색상 모드의 색상 범위에 따른 파랑값 또는 밝기값 +fill__params__alpha = 숫자: (선택사항) +fill__params__value = 문자열: 색상 문자열 +fill__params__gray = 숫자: 회색값 +fill__params__values = 숫자 배열[]: 색상의 빨강값, 초록값, 파랑값, 그리고 알파값을 포함한 배열 +fill__params__color = p5.Color: 면채우기 색상 +noFill__description__0 = 도형에 색을 채우지 않도록 설정합니다. noStroke()과 noFill()을 동시에 사용하면, 화면에 아무것도 나타나지 않습니다. +noStroke__description__0 = 선이나 윤곽선을 그리지 않도록 설정합니다. noStroke()과 noFill()을 동시에 사용하면, 화면에 아무것도 나타나지 않습니다. +stroke__description__0 = 그려질 선 또는 도형 윤곽선의 색상을 설정합니다. 이 때, 색상값은 colorMode()로 지정된 현재의 색상 모드에 따라 RGB 또는 HSB로 지정됩니다. (기본값으로 제공되는 색상 모드는 RGB이고, 그 색상 범위는 0부터 255까지 해당합니다.) +stroke__description__1 = 단일한 문자열 인수에 대해 RGB, RGBA, Hex CSS 색상 문자열과 더불어 명명된 모든 색상 문자열이 지원됩니다. 단, 투명도인 알파값을 설정하기 위해서는 반드시 RGBA를 사용해야 합니다. +stroke__description__2 = p5.Color 객체를 통해 선의 색상을 설정할 수 있습니다. +stroke__params__v1 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 빨강값 또는 색조값 +stroke__params__v2 = 숫자: 현재 지정된 색상 모드의 색상 범위에 따른 초록값 또는 채도값 +stroke__params__v3 = 숫자:현재 지정된 색상 모드의 색상 범위에 따른 파랑값 또는 밝기값 +stroke__params__alpha = 숫자: (선택사항) +stroke__params__value = 문자열: 색상 문자열 +stroke__params__gray = 숫자: 회색값 +stroke__params__values = 숫자 배열[]: 색상의 빨강값, 초록값, 파랑값, 그리고 알파값을 포함한 배열 +stroke__params__color = p5.Color: 선의 색상 +erase__description__0 = erase() 함수의 영향을 받는 모든 드로잉을 캔버스로부터 지웁니다. 지워진 영역은 캔버스 이면의 웹 페이지 화면을 드러냅니다. 이러한 지우기 행위는 noErase()로 취소할 수 있습니다. +erase__description__1 = erase() 함수와 noErase() 함수 사이에서 image()background()로 그려진 드로잉은 캔버스에서 지워지지 않습니다. +erase__params__strengthFill = 숫자: (선택 사항) 도형의 면을 지우는 강도로서의 (0부터 255사이) 숫자. 별도 지정한 숫자가 없는 경우, 최고 강도인 255가 기본값으로 적용 +erase__params__strengthStroke = 숫자: (선택 사항) 도형의 테두리를 지우는 강도로서의 (0부터 255사이) 숫자. 별도 지정한 숫자가 없는 경우, 최고 강도인 255가 기본값으로 적용 +noErase__description__0 = erase()의 지우기 행위를 중단합니다. fill(), stroke(), 그리고 blendMode() 함수로 설정된 사항들은 erase() 함수가 호출되기 전의 상태로 돌아갑니다. +arc__description__0 = 화면에 호, 즉 아치형 선을 그립니다. x좌표, y좌표, w(너비), h(높이), 시작점, 끝점을 지정하면 호는 열린 파이 조각의 형태로 그려집니다. 모드 변수를 설정하기에 따라, 호는 각각 반원(OPEN), 닫힌 반원(CHORD), 닫힌 파이 조각(PIE) 형태로 그려집니다. ellipseMode() 함수를 이용하면 시작점을 변경할 수 있습니다. +arc__description__1 = 호는 언제나 시계방향으로 시작점으로부터 끝점까지 그려집니다. 만약 원 하나를 그리기 위해 arc()의 시작점을 0으로, 끝점을 TWO_PI으로 설정할 경우, 시작점과 끝점이 동일하여 아무것도 그려지지 않습니다. 원을 그릴 때는 ellipse() 함수를, 원의 일부를 그릴 때는 arc() 함수를 이용할 수 있습니다. +arc__params__x = 숫자: 호를 포함하는 원의 x좌표 +arc__params__y = 숫자: 호를 포함하는 원의 y좌표값 +arc__params__w = 숫자: 호를 포함하는 원의 너비값 +arc__params__h = 숫자: 호를 포함하는 원의 높이값 +arc__params__start = 숫자: 라디안 단위, 호의 시작점 각도값 +arc__params__stop = 숫자: 라디안 단위, 호의 끝점 각도값 +arc__params__mode = 상수: (선택 사항) 호를 그리는 방식들로, CHORD, PIEC, OPEN 중 선택 가능 +arc__params__detail = 숫자: (선택 사항) 호의 윤곽선을 구성하는 꼭짓점 개수를 지정. 기본값은 25. (WebGL 모드용) +ellipse__description__0 = 화면에 타원을 그립니다. 너비와 높이가 동일한 값으로 지정될 경우, 원이 그려집니다. 처음 두 변수는 각각 타원의 x좌표와 y좌표를, 3번째와 4번째 변수는 각각 타원의 너비와 높이를 지정합니다. 높이값 입력을 생략할 경우, 너비값이 높이값으로 동일하게 적용됩니다. 너비나 높이에 음수로 입력해도 그 절대값이 반영됩니다. +ellipse__description__1 = ellipseMode() 함수를 이용하면 타원의 시작점을 원의 중심으로 지정할 지의 여부를 결정할 수 있습니다. +ellipse__params__x = 숫자: 타원의 x좌표 +ellipse__params__y = 숫자: 타원의 y좌표값 +ellipse__params__w = 숫자: 타원의 너비값 +ellipse__params__h = 숫자: (선택사항) 타원의 높이값 +ellipse__params__detail = 정수: (선택사항) 타원을 몇 개의 부분으로 나누어 그릴 것인지 지정 (WebGL 모드용) +circle__description__0 = 화면에 원을 그립니다. 원은 닫힌 도형으로, 중심점으로부터 주어진 거리에있는 모든 점들의 집합입니다.이 함수는 높이와 너비가 다른 타원을 그려내는 ellipse() 함수와는 달리, 너비와 높이가 모두 동일한 원을 그립니다. 이 경우, 높이와 너비는 원의 지름과 같습니다. 기본값으로, 처음 두 매개변수는 원의 중심 위치를 설정하고, 세 번째 매개 변수는 원의 지름을 설정합니다. +circle__params__x = 숫자: 원 중심점의 x좌표 +circle__params__y = 숫자: 원 중심점의 y좌표 +circle__params__d = 숫자: 원의 지름 +line__description__0 = 화면에 선분, 즉 두 점을 연결하는 곧은 선을 그립니다. line() 함수에 4개의 변수를 입력하여 이차원 평면에 선을 그릴 수 있습니다. stroke() 함수를 사용해 선의 색상을 지정할 수 있습니다. 선은 면을 갖지 않으므로, 면채우기 함수인 fill()은 적용되지 않습니다. 기본값으로 제공되는 선의 두께는 1픽셀이며, 이를 변경하기 위해 strokeWeight() 함수를 사용할 수 있습니다. +line__params__x1 = 숫자: 1번째 점의 x좌표값 +line__params__y1 = 숫자: 1번째 점의 y좌표값 +line__params__x2 = 숫자: 2번째 점의 y좌표값 +line__params__y2 = 숫자: 1번째 점의 z좌표값 +line__params__z1 = 숫자: 2번째 점의 x좌표값 +line__params__z2 = 숫자: 2번째 점의 z좌표값 +point__description__0 = 화면 좌표에 해당하는, 1픽셀 크기의 점을 그립니다. 첫 번째 매개변수는 점의 x좌표값을, 두 번째 매개변수는 점의 y좌표값입니다. 점의 색상은 stroke() 함수로 변경할 수 있습니다. 점의 크기는 strokeWeight() 함수로 변경할 수 있습니다. +point__params__x = 숫자: x좌표값 +point__params__y = 숫자: y좌표값 +point__params__z = 숫자: z좌표값 (WebGL 모드용) +point__params__coordinate_vector = p5.Vector: 좌표 벡터 +quad__description__0 = 사각형을 그립니다. 사각형은 4개의 변을 가진 다각형으로, 얼핏 직사각형과 유사하게 들리나 직사각형과는 달리 변 사이의 각도가 90도로 고정되어 있지 않습니다. 처음 한 쌍의 변수는 최초의 꼭짓점을 설정하며, 뒤이은 다른 쌍들은 시계 방향이나 반시계 방향에 따라 나머지 3개의 꼭짓점 위치를 설정합니다. z 변수는 WebGL 모드에서 quad() 함수를 사용하는 경우에만 적용됩니다. +quad__params__x1 = 숫자: 1번째 꼭짓점의 x좌표값 +quad__params__y1 = 숫자: 1번째 꼭짓점의 y좌표값 +quad__params__x2 = 숫자: 2번째 꼭짓점의 y좌표값 +quad__params__y2 = 숫자: 3번째 꼭짓점의 x좌표값 +quad__params__x3 = 숫자: 4번째 꼭짓점의 x좌표값 +quad__params__y3 = 숫자: 4번째 꼭짓점의 y좌표값 +quad__params__x4 = 숫자: 2번째 꼭짓점의 z좌표값 +quad__params__y4 = 숫자: 3번째 꼭짓점의 z좌표값 +quad__params__detailX = 숫자: (선택 사항) 가로축에 있는 세그멘트의 수 +quad__params__detailY = 숫자: (선택 사항) 세로축에 있는 세그멘트의 수 +quad__params__z1 = 숫자: 2번째 꼭짓점의 x좌표값 +quad__params__z2 = 숫자: 3번째 꼭짓점의 y좌표값 +quad__params__z3 = 숫자: 1번째 꼭짓점의 z좌표값 +quad__params__z4 = 숫자: 4번째 꼭짓점의 z좌표값 +rect__description__0 = 화면에 직사각형을 그립니다. 직사각형은 변이 4개이고 모든 변 사이의 각도가 90도인 도형을 뜻합니다. 처음 두 변수는 좌측 상단 꼭짓점의 좌표를, 3번째 변수는 사각형의 너비를, 4번째 변수는 그 높이를 설정합니다. rectMode() 함수로 사각형 그리기 모드를 변경하면, 모든 매개변수값들이 달리 해석됩니다. +rect__description__1 = 5번째, 6번째, 7번째, 8번째 매개변수를 입력하면, 각각 좌측 상단, 우측 상단, 우측 하단, 좌측 하단 모퉁이들의 각도를 지정하게 됩니다. 이 때 특정 각도 변수가 누락되면, 직전에 입력된 변수와 동일한 값이 적용됩니다. +rect__params__x = 숫자: 직사각형의 x좌표값 +rect__params__y = 숫자: 직사각형의 y좌표값 +rect__params__w = 숫자: 직사각형의 너비값 +rect__params__h = 숫자: 직사각형의 높이값 +rect__params__tl = 숫자: (선택 사항) 좌측 상단 모퉁이 각도값. +rect__params__tr = 숫자: (선택 사항) 우측 상단 모퉁이 각도값. +rect__params__br = 숫자: (선택 사항) 우측 하단 모퉁이 각도값. +rect__params__bl = 숫자: (선택 사항) 좌측 하단 모퉁이 각도값. +rect__params__detailX = 정수: (선택 사항) x축 방향의 선분 수 (WebGL 모드용) +rect__params__detailY = 정수: (선택 사항) y축 방향의 선분 수 (WebGL 모드용) +square__description__0 = 화면에 정사각형을 그립니다. 정사각형은 동일한 길이의 네 개의 변을 갖고, 모든 변 사이의 각도가 90도인 도형을 뜻합니다. 이 함수는 rect()함수의 특수한 사례와도 같은데, 너비와 높이가 같고 변의 길이를 라는 매개변수로 처리하게 됩니다. 기본값으로, 처음 두 변수는 처음 두 변수는 좌측 상단 꼭짓점의 좌표를, 3번째 변수는 변의 길이를 지정합니다. rectMode() 함수로 사각형 그리기 모드를 변경하면, 모든 매개변수값들이 달리 해석됩니다. +square__description__1 = 5번째, 6번째, 7번째매개변수를 입력하면, 각각 좌측 상단, 우측 상단, 우측 하단, 좌측 하단 모퉁이들의 각도를 지정하게 됩니다. 이 때 특정 각도 변수가 누락되면, 직전에 입력된 변수와 동일한 값이 적용됩니다. +square__params__x = 숫자: 정사각형의 x좌표값 +square__params__y = 숫자: 정사각형의 y좌표값 +square__params__s = 숫자: 정사각형의 너비 및 높이값 +square__params__tl = 숫자: (선택 사항) 좌측 상단 모퉁이 각도값. +square__params__tr = 숫자: (선택 사항) 우측 상단 모퉁이 각도값. +square__params__br = 숫자: (선택 사항) 우측 하단 모퉁이 각도값. +square__params__bl = 숫자: (선택 사항) 좌측 하단 모퉁이 각도값. +triangle__description__0 = 삼각형은 세 개의 점을 이어 만들어진 평면을 뜻합니다. 처음 두 인수는 1번째 꼭짓점을, 중간의 두 변수는 2번째 꼭짓점을, 마지막 두 인수는 3번째 꼭짓점을 지정합니다. +triangle__params__x1 = 숫자:1번째 꼭짓점의 x좌표값 +triangle__params__y1 = 숫자:1번째 꼭짓점의 y좌표값 +triangle__params__x2 = 숫자:2번째 꼭짓점의 x좌표값 +triangle__params__y2 = 숫자:2번째 꼭짓점의 y좌표값 +triangle__params__x3 = 숫자:3번째 꼭짓점의 x좌표값 +triangle__params__y3 = 숫자:3번째 꼭짓점의 y좌표값 +ellipseMode__description__0 = ellipse(), circle(), 그리고 arc() 함수의 매개변수들이 해석되는 방식을 변경하여, 타원이 그려지는 시작점 위치를 변경합니다. +ellipseMode__description__1 = 기본적으로 제공되는 모드는 ellipseMode(CENTER) 함수와도 같습니다. 이는 ellipse() 함수의 처음 두 매개변수를 타원의 중심점으로, 3번째와 4번째 변수를 각각 그 너비와 높이값으로서 해석합니다. +ellipseMode__description__2 = ellipseMode(RADIUS) 역시 ellipse() 함수의 처음 두 매개변수를 타원의 중심점으로 해석하나, 3번째와 4번째 변수를 각각 너비와 높이의 중간 지점값으로 해석합니다. +ellipseMode__description__3 = ellipseMode(CORNER)는 ellipse() 함수의 처음 두 매개변수를 도형의 좌측 상단을 기준으로 해석하고, 3번째와 4번째 변수를 각각 그 너비와 높이로 해석합니다. +ellipseMode__description__4 = ellipseMode(CORNERS)는 ellipse() 함수의 처음 두 매개변수를 도형의 바운딩 박스 중 한 모퉁이의 위치값으로서 해석합니다. 그리고, 3번째와 4번째 변수는 그 정반대 모퉁이의 위치값으로 해석합니다. +ellipseMode__description__5 = 이 함수의 모든 매개변수(CENTER, RADIUS, CORNER, CORNERS)들은 반드시 대문자로 작성되어야 합니다. 자바스크립트에서는 대소문자 구분이 매우 중요하답니다. +ellipseMode__params__mode = 상수:CENTER, RADIUS, CORNER, 또는 CORNERS +noSmooth__description__0 = 모든 그래픽의 가장자리를 울퉁불퉁하게 처리합니다. smooth() 함수는 2D 모드상 언제나 기본값으로 활성화되며, 그래픽을 부드럽게 처리합니다. 따라서, noSmooth() 함수를 호출해야만 도형, 이미지, 폰트 등의 부드러운 처리를 비활성화할 수 있습니다. 반면, 3D 모드에서는 noSmooth()가 기본값으로 활성화됩니다. 따라서, smooth() 함수를 호출해야만 부드러운 처리가 가능합니다. +rectMode__description__0 = rect() 함수의 매개변수들이 해석되는 방식을 변경하여, 직사각형이 그려지는 시작점 위치를 변경합니다. +rectMode__description__1 = 기본적으로 제공되는 모드는 rectMode(CORNER) 함수와도 같습니다. 이는 rect() 함수의 처음 두 매개변수를도형의 좌측 상단을 기준으로 해석하고, 3번째와 4번째 변수를 각각 그 너비와 높이값로서 해석합니다. +rectMode__description__2 = rectMode(CORNERS)는 rect() 함수의 처음 두 매개변수를 한 모퉁이의 위치값으로 서 해석합니다. 그리고, 3번째와 4번째 변수는 그 정반대 모퉁이의 위치값으로 해석합니다. +rectMode__description__3 = ellipseMode(CENTER)는 rect() 함수의 처음 두 매개변수를 타원의 중심점으로, 3번째와 4번째 변수를 각각 그 너비와 높이값으로서 해석합니다. +rectMode__description__4 = rectMode(RADIUS) 역시 rect() 함수의 처음 두 매개변수를 타원의 중심점으로 해석하나, 3번째와 4번째 변수를 각각 너비와 높이의 중간 지점값으로 해석합니다. +rectMode__description__5 = 이 함수의 모든 매개변수(CORNER, CORNERS, CENTER, RADIUS)들은 반드시 대문자로 작성되어야 합니다. 자바스크립트에서는 대소문자 구분이 매우 중요하답니다. +rectMode__params__mode = 상수:CORNER, CORNERS, CENTER 또는 RADIUS +smooth__description__0 = 모든 그래픽을 부드럽게 처리하며, 불러온 이미지 또는 크기가 재조정된 이미지의 화질을 향상합니다. smooth()는 2D 모드상 언제나 기본값으로 활성화되며. 따라서, noSmooth() 함수를 호출해야만 도형, 이미지, 폰트 등의 부드러운 그래픽 처리를 비활성화할 수 있습니다. 반면, 3D 모드에서는 noSmooth()가 기본값으로 활성화됩니다. 따라서, smooth() 함수를 호출해야만 부드러운 그래픽 처리가 가능합니다. +strokeCap__description__0 = 선의 양끝에 대한 렌더링 스타일을 설정합니다. 선의 양끝은 매개변수 SQAURE로 각지게, PROJECT로 조금 더 길게, 그리고 ROUND로 둥글게 처리될 수 있습니다. 이 중에서 ROUND는 기본값으로 적용됩니다. +strokeCap__description__1 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +strokeCap__params__cap = 상수:SQUARE, PROJECT 또는 ROUND +strokeJoin__description__0 = 두 선분 간의 이음새에 대한 스타일을 설정합니다. 이음새는 매개변수 MITER로 각지게, BEVEL로 베벨 처리되듯 비스듬히 깎인 형태로, ROUND로 둥글게 처리될 수 있습니다. 이 중에서 MITER는 기본값으로 적용됩니다. +strokeJoin__description__1 = The parameter to this method must be written in ALL CAPS because they are predefined as constants in ALL CAPS and Javascript is a case-sensitive language. +strokeJoin__params__join = 상수:MITER, BEVEL 또는 ROUND +strokeWeight__description__0 = 선, 점, 그리고 도형 윤곽선을 그릴 때 쓰이는 함수인 stroke()의 결과값 두께를 설정합니다. 모든 두께는 픽셀 단위로 지정됩니다. +strokeWeight__params__weight = 숫자:선의 두께 (픽셀 단위) +bezier__description__0 = 화면에 3차 베지에 곡선을 그립니다. 베지에 곡선은 일련의 고정점 및 제어점들로 정의됩니다. 처음 두 매개변수는 1번째 고정점을, 마지막 두 매개변수는 마지막 고정점을 지정합니다. 중간의 두 매개변수는 두 개의 제어점을 지정하며, 이는 곧 곡선의 모양을 정의하게 됩니다. 여기서 제어점은 그 자신을 향해 곡선을 당기는 역할을 합니다. +bezier__description__1 = 베지에 곡선은 프랑스 출신 자동차 엔지니어인 피에르 베지에(Pierre Bezier)가 개발하였으며, 컴퓨터 그래픽상 부드럽게 경사진 곡선을 정의하는 데에 주로 사용됩니다. curve() 함수와도 관련있습니다. +bezier__params__x1 = 숫자: 1번째 고정점의 x좌표값 +bezier__params__y1 = 숫자: 1번째 고정점의 y좌표값 +bezier__params__x2 = 숫자: 1번째 제어점의 x좌표값 +bezier__params__y2 = 숫자: 1번째 제어점의 y좌표값 +bezier__params__x3 = 숫자: 2번째 제어점의 x좌표값 +bezier__params__y3 = 숫자: 2번째 제어점의 y좌표값 +bezier__params__x4 = 숫자: 2번째 고정점의 x좌표값 +bezier__params__y4 = 숫자: 2번째 고정점의 y좌표값 +bezier__params__z1 = 숫자: 1번째 고정점의 z좌표값 +bezier__params__z2 = 숫자: 1번째 제어점의 z좌표값 +bezier__params__z3 = 숫자: 2번째 제어점의 z좌표값 +bezier__params__z4 = 숫자: 2번째 고정점의 z좌표값 +bezierDetail__description__0 = 베지에 곡선들의 해상도를 설정합니다. 기본값은 20입니다. +bezierDetail__description__1 = 이 함수는 WebGL 렌더러용으로만 사용되며, 기본 캔버스 렌더러에서는 이 함수를 사용하지 않습니다. +bezierDetail__params__detail = 숫자: 곡선들의 해상도값 +bezierPoint__description__0 = 점 a, b, c, d로 정의된 베지에 곡선에서 위치 t를 계산합니다. 매개변수 a와 d는 각각 곡선의 1번째 점과 마지막 점에, b와 c는 제어점에 해당합니다. 마지막 매개변수인 t는 0과 1사이에서 표현됩니다. 함수는 먼저 x좌표를 호출한 다음, y좌표를 호출하여 위치 t를 찾게됩니다. +bezierPoint__returns = 숫자: 위치 t에 해당하는 베지에 곡선의 값 +bezierPoint__params__a = 숫자: 곡선의 1번째 점 좌표값 +bezierPoint__params__b = 숫자: 1번째 제어점 좌표값 +bezierPoint__params__c = 숫자: 2번째 제어점 좌표값 +bezierPoint__params__d = 숫자: 곡선의 2번째 점 좌표값 +bezierPoint__params__t = 숫자: 0과 1 사이의 값 +bezierTangent__description__0 = 위치 t에서 곡선의 점 a, b, c, d에 대한 탄젠트를 계산합니다. 매개변수 a와 d는 각각 곡선의 1번째 점과 마지막 점에, b와 c는 제어점에 해당합니다. 마지막 매개변수인 t는 0과 1사이에서 표현됩니다. +bezierTangent__returns = 숫자: 위치 t에 해당하는 탄젠트 +bezierTangent__params__a = 숫자: 곡선의 1번째 점 좌표값 +bezierTangent__params__b = 숫자: 1번째 제어점 좌표값 +bezierTangent__params__c = 숫자: 2번째 제어점 좌표값 +bezierTangent__params__d = 숫자: 곡선의 2번째 점 좌표값 +bezierTangent__params__t = 숫자: 0과 1 사이의 값 +curve__description__0 = 화면에 두 점 사이에 위치한 곡선을 그립니다. 이 때, 곡선의 형태는 함수의 매개변수들 중 가운데 네 개를 통해 정의됩니다. 처음 두 매개변수는 1번째 제어점의 좌표값을 지정하는데, 마치 이 제어점에서 곡선이 비롯된 것처럼 보이게 됩니다. 마지막 두 매개변수들은 마찬가지 원리로 또다른 제어점의 좌표를 지정합니다. curve() 함수를 조합하거나 curveVertex()를 사용하여 좀 더 긴 곡선을 만들 수 있습니다. 부가적으로, curveTightness()을 통해 곡선의 화질을 조절할 수 있습니다. curve() 함수는 캣멀롬 스플라인(Catmull-Rom Spline)을 구현합니다. +curve__params__x1 = 숫자: 최초 제어점의 x좌표값 +curve__params__y1 = 숫자: 최초 제어점의 y좌표값 +curve__params__x2 = 숫자: 1번째 점의 y좌표값 +curve__params__y2 = 숫자: 2번째 점의 x좌표값 +curve__params__x3 = 숫자: 마지막 제어점의 x좌표값 +curve__params__y3 = 숫자: 마지막 제어점의 y좌표값 +curve__params__x4 = 숫자: 1번째 점의 z좌표값 +curve__params__y4 = 숫자: 2번째 점의 z좌표값 +curve__params__z1 = 숫자: 1번째 점의 x좌표값 +curve__params__z2 = 숫자: 2번째 점의 y좌표값 +curve__params__z3 = 숫자: 최초 제어점의 z좌표값 +curve__params__z4 = 숫자: 마지막 제어점의 z좌표값 +curveDetail__description__0 = 곡선들의 해상도를 설정합니다.
        기본값은 20이고, 최소값은 3입니다. +curveDetail__description__1 = 이 함수는 WebGL 렌더러용으로만 사용되며, 기본 캔버스 렌더러에서는 이 함수를 사용하지 않습니다. +curveDetail__description__2 = +curveDetail__params__resolution = 숫자: 곡선들의 해상도값 +curveTightness__description__0 = curve()와 curveVertex() 함수를 사용하여 모양을 변경합니다. 곡선의 팽팽함(tightness)을 지정하는 매개변수 t는, 두 꼭짓점 사이에 곡선이 들어맞는 정도를 결정합니다. 값 0.0은 곡선의 팽팽함에 대한 기본값이며(이 값을 통해 곡선을 캣멀롬 스플라인으로 정의), 값 1.0은 모든 점을 직선 상태로 연결하게 됩니다. -5.0와 5.0 사이의 값들은 화면상 인식 가능한 범위 내에서 값의 크기에 비례하여 곡선을 변형합니다. +curveTightness__params__amount = 숫자: 원래 꼭짓점으로부터 변형된 정도의 양 +curvePoint__description__0 = 점 a, b, c, d로 정의된 곡선에서 위치 t를 계산합니다. 매개변수 a와 d는 곡선의 제어점에, b와 c는 각각 곡선의 시작점과 끝점에 해당합니다. 마지막 매개변수인 t는 0과 1사이에서 표현됩니다. 함수는 먼저 x좌표를 호출한 다음, y좌표를 호출하여 위치 t를 찾게됩니다. +curvePoint__returns = 숫자: 위치 t에 해당하는 베지어값 +curvePoint__params__a = 숫자: 곡선의 1번째 제어점 좌표값 +curvePoint__params__b = 숫자: 1번째 점 좌표값 +curvePoint__params__c = 숫자: 2번째 점 좌표값 +curvePoint__params__d = 숫자: 곡선의 2번째 제어점 좌표값 +curvePoint__params__t = 숫자: 0과 1 사이의 값 +curveTangent__description__0 = 위치 t에서 곡선의 점 a, b, c, d에 대한 탄젠트를 계산합니다. 매개변수 a와 d는 각각 곡선 위 점에, b와 c는 제어점에 해당합니다. 마지막 매개변수인 t는 0과 1사이에서 표현됩니다. +curveTangent__returns = 숫자: 위치 t에 해당하는 탄젠트 +curveTangent__params__a = 숫자: 곡선의 1번째 점 좌표값 +curveTangent__params__b = 숫자: 1번째 제어점 좌표값 +curveTangent__params__c = 숫자: 2번째 제어점 좌표값 +curveTangent__params__d = 숫자: 곡선의 2번째 점 좌표값 +curveTangent__params__t = 숫자: 0과 1 사이의 값 +beginContour__description__0 = beginContour()와 endContour() 함수를 사용하여 특정 도형 내부에 그 음수 좌표에 상응하는 동일한 도형 윤곽선을 그릴 수 있습니다. 예를 들어, 동그라미의 안쪽에 또다른 작은 동그라미를 그릴 수 있습니다. beginContour()는 도형의 꼭짓점을 기록하기 시작하고, endContour()는 그 기록을 중지합니다. 이 때, 안쪽의 도형을 정의하는 꼭짓점은 바깥쪽의 도형과 반대 순서로 그려져야 합니다. 먼저 바깥에 위치한 원래 도형의 꼭짓점을 시계 방향으로 그리고, 그 다음 내부의 도형을 시계 반대 방향으로 그립니다. +beginContour__description__1 = beginContour()/endContour() 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야 합니다. 또한, beingContour()/endContour() 함수 사이에는 translate(), rotate(), scale()과 같은 변형 함수나 ellipse() 및 rect()와 같은 도형그리기 함수가 사용될 수 없습니다. +beginContour__description__2 = +beginShape__description__0 = beginShape()endShape()를 사용하여 좀 더 복잡한 모양을 만들 수 있습니다. beingShape()은 도형의 꼭짓점을 기록하기 시작하고, endShape()은 그 기록을 중지합니다. 함수의 매개변수를 통해 꼭짓점으로 어떤 도형을 그릴지 결정할 수 있습니다. 별도의 매개변수가 지정되지 않으면, 비정형의 다각형이 그려집니다. +beginShape__description__1 = beginShape()에 쓰이는 매개변수로는 POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP, 그리고 TESS(WebGL 전용)가 있습니다. beginShape() 함수를 호출한 다음, 꼭짓점 지정을 위해 vertex() 명령문을 반드시 작성해야 합니다. 도형그리기를 멈추려면 endShape() 함수를 호출하면 됩니다. 각 도형은 현재 지정된 선그리기(stroke) 및 면채우기(fill) 색상으로 그려집니다. +beginShape__description__2 = beginShape()endShape() 함수들 사이에는 translate(), rotate(), scale()과 같은 변형 함수나 ellipse(), rect()와 같은 도형그리기 함수를 사용할 수 없습니다. +beginShape__description__3 = LINES - 여려 개의 분리 된 선들을 그립니다. +beginShape__description__4 = TRIANGLES - 여러 개의 분리 된 삼각형들을 그립니다. +beginShape__description__5 = TRIANGLE_FAN - 여러 개의 연결 된 삼각형들을 그립니다. 이 삼각형들은 첫 꼭짓점을 공통적으로 하며 부채 모양으로 그려집니다. +beginShape__description__6 = TRIANGLE_STRIP - 여러 개의 연결 된 삼각형들을 그립니다. 이 삼각형들은 한 줄로 그려집니다. +beginShape__description__7 = QUADS - 여러 개의 분리 된 사각형들을 그립니다. +beginShape__description__8 = QUAD_STRIP - 여러 개의 연결 된 사각형들을 한 줄로 그립니다. +beginShape__description__9 = TESS (WebGl만 가능) - 모자이크 세공 (tessellation)을 위한 불규칙적 도형을 그립니다. +beginShape__description__10 = beginShape() 함수는 호출할 시, 이후에 여러 개의 vertex() 명령들을 호출해야 합니다.그림 그리기를 멈추려면 endShape() 함수를 호출합니다. 각 도형은 현재의 윤곽선 색으로 그려지며, 면은 현재의 면 색으로 채워집니다. +beginShape__description__11 = translate(), rotate(), 또는 scale()와 같은 변형 함수들은 beginShape() 함수 안에서 사용할 수 없습니다. 또한, ellipse()rect() 같은 함수들을 beginShape() 함수 안에서 사용할 수 없습니다. +beginShape__params__kind = 상수: (선택 사항) POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS 또는 QUAD_STRIP +bezierVertex__description__0 = 베지에 곡선의 꼭짓점 좌표를 지정합니다. bezierVertex()은 매 호출마다 베지에 곡선의 제어점 2개와 고정점 1개의 위치를 정의하고, 이 새로운 선분을 선 또는 도형에 더합니다. bezierVertex()는 WebGL상 2D 및 3D 모드 모두에 적용될 수 있습니다. 2D 모드에서는 6개의 매개변수가, 3D 모드에서는 9개의 매개변수(z좌표값 포함)가 필요합니다. +bezierVertex__description__1 = beginShape() 함수 안에 작성된 bezierVertex()를 호출하기에 앞서, vertex() 함수를 bezierVertex() 윗줄에 작성하여 곡선의 1번째 고정점을 설정해야 합니다. bezierVertex() 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야하며, beginShape() 함수에 MODE나 POINTS 매개변수가 지정되지 않은 경우에만 사용가능 합니다. +bezierVertex__params__x2 = 숫자: 1번째 제어점의 x좌표값 +bezierVertex__params__y2 = 숫자: 1번째 제어점의 y좌표값 +bezierVertex__params__x3 = 숫자: 2번째 제어점의 x좌표값 +bezierVertex__params__y3 = 숫자: 2번째 제어점의 y좌표값 +bezierVertex__params__x4 = 숫자: 고정점의 x좌표값 +bezierVertex__params__y4 = 숫자: 고정점의 y좌표값 +bezierVertex__params__z2 = 숫자: 1번째 제어점의 z좌표값 (WebGL 모드용) +bezierVertex__params__z3 = 숫자: 2번째 제어점의 z좌표값 (WebGL 모드용) +bezierVertex__params__z4 = 숫자: 고정점의 z좌표값 (WebGL 모드용) +curveVertex__description__0 = 곡선의 꼭짓점 좌표를 지정합니다. 이 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야하며, beginShape() 함수에 MODE나 POINTS 매개변수가 지정되지 않은 경우에만 사용가능 합니다. 또한, 이 함수는 WebGL상 2D 및 3D 모드 모두에 적용될 수 있습니다. 2D 모드에서는 2개의 매개변수가, 3D 모드에서는 3개의 매개변수가 필요합니다. +curveVertex__description__1 = curveVertex()로 그려진 일련의 선들 중 1번째 점과 마지막 점을 통해 각각 전체 곡선의 시작점과 끝점을 알 수 있습니다. 2번째와 3번째 사이에도 작은 곡선을 만들기 위해선 최소 4개의 점들이 필요합니다. curveVertex() 함수로 5번째 점을 추가하면 함수는 2번째, 3번째, 4번째 점들 사이에 곡선을 그립니다. curveVertex() 함수는 캣멀롬 스플라인(Catmull-Rom Spline)을 구현합니다. +curveVertex__params__x = 숫자: 꼭짓점의 x좌표값 +curveVertex__params__y = 숫자: 꼭짓점의 y좌표값 +curveVertex__params__z = 숫자: (선택 사항) 꼭짓점의 z좌표값 (WebGL 모드용) +endContour__description__0 = beginContour()와 endContour() 함수를 사용하여 특정 도형 내부에 그 음수 좌표에 상응하는 동일한 도형 윤곽선을 그릴 수 있습니다. 예를 들어, 동그라미의 안쪽에 또다른 작은 동그라미를 그릴 수 있습니다. beginContour()는 도형의 꼭짓점을 기록하기 시작하고, endContour()는 그 기록을 중지합니다. 이 때, 안쪽의 도형을 정의하는 꼭짓점은 바깥쪽의 도형과 반대 순서로 그려져야 합니다. 먼저 바깥에 위치한 원래 도형의 꼭짓점을 시계 방향으로 그리고, 그 다음 내부의 도형을 시계 반대 방향으로 그립니다. +endContour__description__1 = beginContour()/endContour() 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야 합니다. 또한, beingContour()/endContour() 함수 사이에는 translate(), rotate(), scale()과 같은 변형 함수나 ellipse() 및 rect()와 같은 도형그리기 함수가 사용될 수 없습니다. +endShape__description__0 = endShape()beginShape()과 한 쌍을 이루는 함수로, 반드시 beginShape() 다음에 호출될 수 있습니다. endShape() 함수가 호출되면, beginShape() 함수가 호출된 이래로 정의된 모든 이미지 데이터가이미지 버퍼로서 처리됩니다. endShape()의 MODE 매개변수로는 상수 CLOSE를 씁니다. +endShape__params__mode = 상수: CLOSE로 도형 닫기 +quadraticVertex__description__0 = 2차 베지에 곡선의 꼭짓점 좌표를 지정합니다. quadraticVertex()은 매 호출마다 베지에 곡선의 제어점 1개와 고정점 1개의 위치를 정의하고, 이 새로운 선분을 선 또는 도형에 더합니다. beginShape() 함수 안에 작성된 quadraticVertex()를 호출하기에 앞서, vertex() 함수를 quadraticVertex() 윗줄에 작성하여 곡선의 1번째 고정점을 설정해야 합니다. quadraticVertex()는 WebGL상 2D 및 3D 모드 모두에 적용될 수 있습니다. 2D 모드에서는 6개의 매개변수가, 3D 모드에서는 9개의 매개변수(z좌표값 포함)가 필요합니다. +quadraticVertex__description__1 = quadraticVertex() 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야하며, beginShape() 함수에 MODE나 POINTS 매개변수가 지정되지 않은 경우에만 사용가능 합니다. +quadraticVertex__params__cx = 숫자: 제어점의 x좌표값 +quadraticVertex__params__cy = 숫자: 제어점의 y좌표값 +quadraticVertex__params__x3 = 숫자: 고정점의 y좌표값 +quadraticVertex__params__y3 = 숫자: 제어점의 z좌표값 (WebGL 모드용) +quadraticVertex__params__cz = 숫자: 고정점의 x좌표값 +quadraticVertex__params__z3 = 숫자: 고정점의 z좌표값 (WebGL 모드용) +vertex__description__0 = 모든 도형들은 꼭짓점 연결을 통해 구축됩니다. vertex() 함수를 사용하여 점, 선, 삼각형, 사각형, 그리고 다각형의 꼭짓점 좌표를 지정할 수 있습니다.는 데에 쓰입니다. 이 때, vertex() 함수는 반드시 beginShape()//Shape">endShape() 함수 사이에 작성되어야합니다. +vertex__params__x = 숫자: 꼭짓점의 x좌표값 +vertex__params__y = 숫자: 꼭짓점의 y좌표값 +vertex__params__z = 숫자: 꼭짓점의 z좌표값 +vertex__params__u = 숫자: (선택 사항) 꼭짓점의 u좌표값 +vertex__params__v = 숫자: (선택 사항) 꼭짓점의 v좌표값 +normal__description__0 = 이후에 vertex() 함수로 그려질 꼭짓점들을 위한 3D 꼭짓점의 노멀 (normal)을 설정합니다. 도형의 면에 수직방향이 노멀 벡터이며, 이는 빛의 반사량을 지정합니다. +normal__params__vector = 벡터: 노멀을 표시하는 p5.Vector. +normal__params__x = 숫자: 꼭짓점의 x좌표값 +normal__params__y = 숫자: 꼭짓점의 y좌표값 +normal__params__z = 숫자: 꼭짓점의 z좌표값 +VERSION__description__0 = 본 p5.js 버전. +P2D__description__0 = 기본적 이차원적 렌더러 (2D Renderer). +WEBGL__description__0 = p5.js의 렌더 모드들 중 하나: P2D (기본)와 WEBGL. WEBGL은 제 3의 차원, 'Z'를 추가함으로서 3D 렌더를 가능하게 합니다. +HALF_PI__description__0 = HALF_PI는 1.57079632679489661923 값을 갖는 상수입니다. 지름에 대한 원주율의 절반에 해당하며, 삼각 함수 sin()과 cos()와 함께 쓰면 더욱 유용합니다. +PI__description__0 = PI는 3.14159265358979323846 값을 갖는 상수입니다. 지름에 대한 원주율을 의미하며, 삼각 함수 sin()과 cos()와 함께 쓰면 더욱 유용합니다. +QUARTER_PI__description__0 = QUARTER_PI는 0.7853982 값을 갖는 상수입니다. 지름에 대한 원주율의 1/4에 해당하며, 삼각 함수 sin()과 cos()와 함께 쓰면 더욱 유용합니다. +TAU__description__0 = TAU는 TWO_PI의 약어로, 이는 6.28318530717958647693 값을 갖는 상수입니다. 지름에 대한 원주율의 2배에 해당하며, 삼각 함수 sin()과 cos()와 함께 쓰면 더욱 유용합니다. +TWO_PI__description__0 = TWO_PI는6.28318530717958647693 값을 갖는 상수입니다. 지름에 대한 원주율의 2배에 해당하며, 삼각 함수 sin()과 cos()와 함께 쓰면 더욱 유용합니다. +DEGREES__description__0 = p5.js가 각도를 해석하고 계산하는 방법을 설정하기 위해, angleMode() 함수와 그 매개변수(DEGREES 또는 RADIANS)를 사용합니다. +RADIANS__description__0 = p5.js가 각도를 해석하고 계산하는 방법을 설정하기 위해, angleMode() 함수와 그 매개변수(DEGREES 또는 RADIANS)를 사용합니다. +HSB__description__0 = HSB (색도, 채도값, 발기)는 색상 모델의 일종입니다. 이 링크를 통해 더 자세히 배울 수 있습니. +AUTO__description__0 = AUTO는 특정 요소의 높이나 너비 (둘 중 하나)를 그 요소의 너비나 높이에 따라 자동적으로 정할 수 있게 합니다. 따라서 size()에 AUTO를 지정할 수 있는 매개변수는 1 개로 제한됩니다. +print__description__0 = print() 함수는 브라우저 콘솔창에 출력할 때 사용됩니다. 프로그램이 생성하는 데이터를 확인할 때 주로 도움됩니다. 함수는 매번 호출될 때마다 콘솔창에 새로운 텍스트 줄을 만듭니다. 개별 요소는 큰따옴표로 분리하고, 더하기 연산자(+)로 두 요소를 결합할 수 있습니다. +print__description__1 = + 인수없이 print()를 호출하면, window.print()와 동일하게 브라우저상 인쇄 기능을 켭니다. 콘솔창에 빈 줄을 출력하려면 print(' + ')을 작성하면 됩니다. +print__params__contents = 전부: 출력할 숫자, 문자열, 객체, 불리언, 배열의 조합 +frameCount__description__0 = 시스템 변수 frameCount는 프로그램 시작 이후 화면에 나타난 프레임의 개수를 측정합니다. setup() 함수의 기본값은 0이고, draw() 함수의 첫 번째 반복 실행이 마치면 1씩 증가하는 식입니다. +deltaTime__description__0 = deltaTime 은 전 프레임의 시작 시간과 본 프레임의 시작 시간의 차를 저장합니다. +deltaTime__description__1 = 이 변수는 시간적으로 민감한 애니매시션, 또는 프레임레이트와 관계없이 일정해야 하는 물리학적 계산에 유용합니다. +focused__description__0 = p5.js 프로그램이 등장하는 화면창의 초점이 맞는지 여부를 확인하며, 이는 곧 스케치가 마우스나 키보드 입력을 허용한다는 것을 의미합니다. 화면창의 초점이 맞으면 변수는 true이고, 그렇지 않으면 false입니다. +cursor__description__0 = 마우스 커서를 사전에 정의된 기호나 이미지로 설정하거나, 숨김 상태일 경우 이를 해제합니다. 특정 이미지를 커서로 설정할 경우, 권장 사이즈는 16x16 또는 32x32 입니다. 매개변수 x와 y의 값은 이미지의 실제 크기보다 훨씬 더 작아야 합니다. +cursor__params__type = 문자열|상수: ARROW, CROSS, HAND, MOVE, TEXT, WAIT. CSS 요소인 'grab', 'progress', 'cell' 등. 외부: 커서 이미지의 경로(허용 파일 확장자:.cur, .gif, .jpg, .jpeg, .png, url 주소. 참고: https://developer.mozilla.org/ko/docs/Web/CSS/cursor +cursor__params__x = 숫자: (선택 사항) 커서의 수평 활성 지점 (32미만으로 지정) +cursor__params__y = 숫자: (선택 사항) 커서의 수직 활성 지점 (32미만으로 지정) +frameRate__description__0 = 화면에 나타날 프레임 수를 매 초단위로 지정합니다. 예를 들어, frameRate(30)은 초당 30회씩 새로 고침을 시도합니다. 프로세서가 지정된 속도를 유지할만큼 빠르지 않다면, 프레임 속도에 달성되지 않습니다. setup() 함수 내에서 프레임 속도를 설정하는 것을 권장합니다. 기본값으로 제공되는 프레임 속도는 디스플레이의 프레임 속도('새로 고침 빈도')를 기준으로 합니다. 초당 24 프레임 정도면 애니메이션을 부드럽게 재생할 수 있습니다. 이 함수는 setFrameRate(val)와 동일한 효과를 갖습니다. +frameRate__description__1 = 별도의 인수없이 frameRate() 함수를 호출하면 현재 프레임 속도가 반환됩니다. 프레임 속도를 반환하기 위해서는 draw() 함수를 한 번 이상 실행해야 합니다. 이는 getFrameRate() 함수와도 동일합니다. +frameRate__description__2 = 숫자형이 아니거나 양수가 아닌 숫자형의 인수로 frameRate() 함수를 호출하면 마찬가지로 현재 프레임 속도를 반환합니다. +frameRate__params__fps = 숫자:1초 동안 화면에 나타날 프레임 수 +noCursor__description__0 = 화면상 커서를 숨깁니다. +displayWidth__description__0 = pixelDensity 함수의 기본값에 따라 화면의 너비값을 저장하는 시스템 변수입니다. 모든 디스플레이에서 프로그램을 전체 화면으로 실행시킬 때 사용합니다. 실제 화면 크기값을 반환하려면 여기에 pixelDensity를 곱하면 됩니다. +displayHeight__description__0 = pixelDensity 함수의 기본값에 따라 화면의 높이값을 저장하는 시스템 변수입니다. 모든 디스플레이에서 프로그램을 전체 화면으로 실행시킬 때 사용합니다. 실제 화면 크기값을 반환하려면 여기에 pixelDensity를 곱하면 됩니다. +windowWidth__description__0 = 사용자의 윈도우 화면 너비값을 저장해주는 시스템 변수로, window.innerWidth에 매핑됩니다. +windowHeight__description__0 = 사용자의 윈도우 화면 높이값을 저장해주는 시스템 변수로, window.innerHeight에 매핑됩니다. +windowResized__description__0 = windowResized() 함수는 브라우저 창의 크기가 조정될 때마다 한 번씩 호출됩니다. 캔버스 크기를 재조정하거나 새 윈도우 화면의 크기에 맞춰 조정할 때 유용합니다. +windowResized__params__event = 객체: (선택 사항) 이벤트 콜백 (callback) 인자값. +width__description__0 = 생성된 캔버스의 너비값을 저장하는 시스템 변수입니다. 이 값은 createCanvas() 함수의 1번째 매개변수로 지정됩니다. createCanvas(320, 240)는 너비 변수를 320으로 설정한 사례입니다. 프로그램에 createCanvas()를 사용하지 않을 경우, 너비는 기본값인 100으로 설정됩니다. +height__description__0 = 생성된 캔버스의 높이값을 저장하는 시스템 변수입니다. 이 값은 createCanvas() 함수의 2번째 매개변수로 지정됩니다. createCanvas(320, 240)는 높이 변수를 240으로 설정한 사례입니다. 프로그램에 createCanvas()를 사용하지 않을 경우, 높이는 기본값인 100으로 설정됩니다. +fullscreen__description__0 = 사용자가 지정한 인수값을 기준으로 스케치를 전체 화면으로 설정합니다. 인수를 지정하지 않으면 현재 전체 화면 모드를 반환합니다. 위의 예제는 브라우저 제한으로 인해 마우스 입력과같은 사용자 입력이 있을 때 이 함수를 호출합니다. +fullscreen__returns = 불리언: 현재 전체 화면 상태 +fullscreen__params__val = 불리언: (선택 사항) 스케치를 전체 화면 모드로 실행할 지의 여부 +pixelDensity__description__0 = 픽셀 밀도가 높은 디스플레이의 픽셀 크기를 조정합니다. pixelDensity()는 그 기본값으로 화면의 픽셀 밀도와 일치하도록 설정되어 있으며, pixelDensity(1)를 호출하여 이를 해제할 수 있습니다. 별도의 인수없이 pixelDensity() 함수를 호출하면, 스케치의 현재 픽셀 밀도가 반환됩니다. +pixelDensity__params__val = 숫자: 스케치의 픽셀 크기를 조정할 지 여부 또는 조정값 +displayDensity__description__0 = 스케치가 실행 중인 현재 디스플레이의 픽셀 밀도를 반환합니다. +displayDensity__returns = 숫자: 디스플레이의 현재 픽셀 밀도 +getURL__description__0 = 현재 URL을 받아옵니다. +getURL__returns = 문자열: url +getURLPath__description__0 = 현재 URL 경로를 배열로 받아옵니다. +getURLPath__returns = 문자열 배열[]:경로 요소의 배열 +getURLParams__description__0 = 현재 URL 매개변수들을 객체로 받아옵니다. +getURLParams__returns = 객체: URL 매개변수들 +preload__description__0 = preload() 함수는 setup() 함수 직전에 호출되며, 외부 파일의 비동기 불러오기를 차단하기 위해 사용됩니다. preload() 함수로 외부 파일 사전 불러오기가 설정되면, setup() 함수는 불러오기 호출이 완료될 때까지 대기합니다. 불러오기 호출 이외의 다른 함수(loadImage, loadJOSN, loadFont, loadString)는 preload() 함수 안에 포함되지 않아야 합니다. 만약 비동기 불러오기를 선호한다면, 불러오기 메소드를 setup() 함수 안에 포함시키거나, 그 외의 영역에서 callback 매개변수를 사용하여 호출하면 됩니다. +preload__description__1 = 기본값으로 'loading..'이라는 텍스트가 화면에 나타납니다. 나만의 로딩 페이지를 만들려면 id가 p5_loading으로 지정된 HTML 요소를 추가하면 됩니다. 자세한 정보는 여기에 있습니다. +setup__description__0 = setup() 함수는 프로그램 실행시 단 한번 호출됩니다. 함수는 화면 크기나 배경색 등의 초기 환경 요소를 정의하고, 또 이미지나 폰트같은 미디어 파일을 불러오는 데에 쓰입니다. setup() 함수는 프로그램당 한 개씩만 존재할 수 있으며, 최초 한 번 실행된 이후에는 재호출되지 않아야 합니다. +setup__description__1 = 참고: setup() 함수 안에 선언된 변수는, draw() 함수를 비롯한 여타 함수들이 접근할 수 없습니다. +setup__description__2 = +draw__description__0 = draw() 함수는 setup() 함수 직후에 호출되며, 프로그램 실행이 중단되거나 noLoop() 함수가 호출되기 전까지 블록 내에 포함된 코드들을 계속 실행합니다. 만약 setup() 함수에서 noLoop()가 호출된다면, draw() 함수는 단 한 번 실행됩니다. draw() 함수는 자동으로 호출되며, 명시적으로 호출하면 안됩니다. +draw__description__1 = draw() 함수는 항상 noLoop(), redraw(), 그리고 loop() 함수로 제어됩니다. noLoop()함수가 draw() 함수에 포함된 코드 실행을 멈추면, redraw() 함수가 draw() 함수 안에 포함된 코드들을 한 번만 실행하게 됩니다. loop() 함수의 경우, draw() 함수 안에 있는 코드를 계속해서 반복적으로 실행되게 합니다. +draw__description__2 = draw() 함수가 초당 호출되는 횟수는 frameRate() 함수를 통해 조정할 수 있습니다. +draw__description__3 = draw() 함수는 한 스케치당 한 번만 작성되어야 하며, 코드를 계속 실행하거나 mousePressed()와 같은 이벤트를 처리할 때 반드시 필요합니다. 때로는 위의 예제처럼 비어있는 draw() 함수를 호출하기도 합니다. +draw__description__4 = 드로잉의 좌표계가 매 draw() 함수가 호출될 때마다 리셋되는 점에 유의해야 합니다. draw() 함수 안에서 변형 함수(scale, rotate, translate)가 실행될 경우, draw() 함수가 재호출되는 시점에 그 효과들은 무효화되고, 따라서 시간이 지나도 변형 내용이 누적되지 않습니다. 반면, 한 번 선언된 스타일(fill, stroke 등)은 계속해서 적용됩니다. +remove__description__0 = 전체 p5 스케치를 제거합니다. 이 함수는 캔버스와 p5.js로 생성한 모든 요소들을 제거합니다. 또한, 그리기 반복(draw loop)를 중지하고, 윈도우 전역 범위에서 선언된 속성이나 메소드의 구속력을 해제합니다. 새로운 p5 스케치를 만들고자 할 경우에는 변수 p5를 남겨둡니다. 원한다면 p5 = null로 처리하여 이를 제거할 수 있습니다. p5 라이브러리로 생성한 모든 함수, 변수, 그리고 객체가 제거되지만, 사용자가 코드로 생성한 여타 전역 변수들은 그대로 유지됩니다. +disableFriendlyErrors__description__0 = 스케치를 만드는 동안 '친근한 에러 시스템 (Friendly Error System, FES)'을 필요시 비활성화하여 성능을 향상시킵니다. 친근한 에러 시스템 비활성화하기에 더 자세히 기록되어 있습니다. +let__description__0 = 새로운 변수를 생성하고 그 이름을 지정합니다. 변수는 값을 담는 컨테이너입니다. +let__description__1 = let으로 선언된 변수는 블록 단위의 적용 범위를 갖습니다. 즉, 변수가 작성된 블록 내에서만 존재하고 사용될 수 있음을 뜻합니다. +let__description__2 = MDN Entry에서 발췌: 블록 범위의 지역 변수를 선언하고, 선택적으로 그 값을 초기화합니다. +const__description__0 = 새로운 상수를 생성하고 그 이름을 지정합니다. 마치 let으로 생성된 변수처럼, const로 생성된 상수는 값을 담는 컨테이너입니다. 하지만, 상수는 한 번 산언된 다음 변경할 수 없습니다. +const__description__1 = const로 선언된 상수는 블록 단위의 적용 범위를 갖습니다. 즉, 상수가 작성된 블록 내에서만 존재하고 사용될 수 있음을 뜻합니다. 상수는 자신이 존재하고 있는 범위 내에서 재선언될 수 없습니다. +const__description__2 = MDN Entry에서 발췌: 읽기만 가능한 상수를 선언합니다. const는 블록 단위로 적용되며, let으로 선언된 변수들과 유사합니다. 상수값은 재지정을 통해 변경될 수 없으며, 재선언될 수 없습니다. +===__description__0 = 완전 항등 연산자 '===' 는 두 값이 같으면서 동시에 동일한 유형인지 여부를 확인합니다. +===__description__1 = 비교 표현식은 항상 불리언으로 연산됩니다. +===__description__2 = MDN Entry에서 발췌: 이 연산자는 피연산자들이 동일한 값이 아니고/또는 동일한 유형이 아닐 때 참(true)을 반환합니다. +===__description__3 = 웹상의 몇몇 예제에서 피연산자 간의 비교를 위해 이중 등호(==)를 사용하는 것을 볼 수 있습니다. 이는 자바스크립트상의 완전 항등 연산자(===)에 해당하지 않으며, 두 피연산자의 값들을 비교하기에 앞서, 그 유형이 동일한지의 여부를 비교하게 됩니다. +>__description__0 = 비교 연산자 > 는 왼쪽 값이 오른쪽 값보다 큰 경우 참(true)으로 연산합니다. +>__description__1 = MDN 발췌 비교 연산자 상세 설명은 여기에 있습니다. +>=__description__0 = 비교 연산자 >= 는 왼쪽 값이 오른쪽 값보다 크거나 같은 경우 참(true)로 연산합니다. +>=__description__1 = MDN 발췌 비교 연산자 상세 설명은 여기에 있습니다. +>=__description__2 = +<__description__0 = 비교 연산자 < 는 왼쪽 값이 오른쪽 값보다 작은 경우 참(true)으로 연산합니다. +<__description__1 = MDN 발췌 비교 연산자 상세 설명은 여기에 있습니다. +<__description__2 = +<=__description__0 = 비교 연산자 <= 는 왼쪽 값이 오른쪽 값보다 작거나 같은 경우 참(true)로 연산합니다. +<=__description__1 = MDN 발췌 비교 연산자 상세 설명은 여기에 있습니다. +if-else__description__0 = if-else문으로 코드의 흐름을 제어할 수 있습니다. +if-else__description__1 = 'if' 바로 다음 괄호 안에 조건을 지정할 수 있으며, 조건이 참(truthy)으로 연산되면 뒤따른 중괄호 사이의 코드가 실행됩니다. 조건이 거짓(falsy)으로 연산되면 'else' 뒤에 오는 중괄호 사이의 코드가 대신 실행됩니다. +if-else__description__2 = MDN Entry에서 발췌: 지정된 조건이 참일 경우, if문은 명령문을 실행합니다. 조건이 거짓이면 다른 명령문을 실행할 수 잇습니다. +function__description__0 = 새로운 함수 (function)를 생성하고 함수명을 지정합니다. 함수란, 작업을 수행하는 일련의 명령문을 뜻합니다. +function__description__1 = 선택적으로, 함수는 매개변수를 가질 수 있습니다.매개변수(parameter)란, 특정 함수에만 그 사용 범위가 지정된 변수를 뜻하며 함수 호출시 그 값을 지정할 수 있습니다. +function__description__2 = MDN Entry에서 발췌: 사용자가 지정한 매개변수를 사용하여 함수를 선언합니다. +return__description__0 = 함수가 반환할 값을 지정합니다.
        MDN Entry 발췌 함수(function) 상세 설명 +boolean__description__0 = 불리언 (boolean)은 자바스크립트에서 지정한 7개의 기본 데이터 유형 중 하나입니다. 불리언은 참(true) 또는 거짓(false)으로 값을 나타냅니다. +boolean__description__1 = MDN Entry에서 발췌: 불리언은 논리적 개체를 나타내며 참(true) 또는 거짓(false)이라는 두 개의 값만 갖습니다. +boolean__returns = 불리언: 특정 값의 불리언형 표식 +boolean__params__n = 문자열|불리언|숫자|배열[]: 분해할 값 +string__description__0 = 문자열(string)은 자바스크립트에서 지정한 7개의 기본 데이터 유형 중 하나입니다. 문자열은 일련의 텍스트 문자들을 뜻하며, 자바스크립트에서 문자열 값은 작은 따옴표나 큰따옴표로 묶여 표현됩니다. +string__description__1 = MDN Entry에서 발췌: 문자열은 텍스트를 나타낼 때 사용하는 일련의 문자들입니다. +number__description__0 = 숫자(number)는 자바스크립트에서 지정한 7개의 기본 데이터 유형 중 하나입니다. 숫자는 정수 또는 10진수로 표현됩니다. +number__description__1 = MDN Entry 발췌 숫자(number) 상세 설명은 여기에 있습니다. +object__description__0 = MDN Entry 발췌 객체(object) 기초 설명: 객체(object)는 데이터 그리고/또는 함수의 모음을 뜻합니다. 일반적으로 여러 개의 변수와 함수로 구성됩니다. 변수와 함수가 객체 안에 포함된 경우, 각각을 속성(property)과 메소드(method)라 부릅니다. +class__description__0 = 클래스(class)를 생성하고 그 이름을 지정합니다. 클래스는 객체(object) 생성을 위한 하나의 템플릿입니다. +class__description__1 = MDN Entry에서 발췌: 클래스 선언을 통해 새로운 Class를 생성합니다. 이 때, 새로운 Class의 이름은 프로토타입 기반 상속을 통해 지정됩니다. +for__description__0 = for문을 사용하여 특정 부분의 코드에 대한 반복문(loop)을 만듭니다. +for__description__1 = 'for 반복문 (for loop)'은 괄호 속 3개의 다른 표현식들로 구성되며, 각각의 표현식은 모두 선택 사항입니다. 이 표현식들은 반복 실행(loop)의 횟수를 제어합니다. 1번째 표현식은 반복문의 초기 상태를 설정하는 명령문입니다. 2번째 표현식은 매 반복 실행에 앞서 조건 충족 여부를 확인합니다. 이 표현식이 거짓(false)를 반환하면 반복 실행이 종료됩니다. 3번째 표현식은 반복문의 가장 마지막 단계에 실행됩니다. +for__description__2 = for 반복문의 본문(중괄호 사이의 영역)에 포함된 코드는 2번째와 3번째 표현식의 연산과정 사이에 실행됩니다. +for__description__3 = 여타 반복문과 마찬가지로, for 반복문 역시 반복이 '종료'되는 시점이나, 조건을 더이상 충족하지 않아 거짓(false)으로 연산되는 시점을 명시해야 합니다. 앞서 설명된 2번째 표현식을 통해, for 반복문의 조건이 거짓으로 연산되는 시점을 정할 수 있습니다. for반복문의 조건이 언젠가 거짓으로 처리되는 시점을 지정함으로써, 해당 반복문이 무한으로 실행되지 않도록 처리하기 위함입니다. 그렇지 않으면, 브라우저가 중단될 수 있습니다. +for__description__4 = MDN Entry에서 발췌: for 반복문은 조건이 거짓(false)으로 연산될 때까지 지정된 명령문을 실행합니다. 명령문을 실행한 후에는 조건 충족 여부를 다시 평가하여, 명령문이 최소 1번 실행되도록 합니다. +while__description__0 = while문을 사용하여 특정 부분의 코드에 대한 반복문(loop)을 만듭니다. +while__description__1 = 'while 반복문(while loop)'을 사용하면, 소괄호 속 조건이 거짓(false)이 될 때까지 중괄호 속 본문의 코드가 반복적으로 실행됩니다. for 반복문과 달리, while 반복문은 그 본문 속 코드를 실행하기 앞서 조건 충족 여부를 먼저 확인합니다. 따라서, 최초 실행시 조건이 거짓일 경우, while문 속 본문과 명령문은 절대 실행되지 않습니다. +while__description__2 = 여타 반복문과 마찬가지로, while 반복문 역시 반복이 '종료'되는 시점이나, 조건을 더이상 충족하지 않아 거짓(false)으로 연산되는 시점을 명시해야 합니다. while 반복문의 조건이 언젠가 거짓으로 처리되는 시점을 지정함으로써, 해당 반복문이 무한으로 실행되지 않도록 처리하기 위함입니다. 그렇지 않을 경우, 브라우저가 중단될 수 있습니다. +while__description__3 = MDN Entry에서 발췌: while 반복문은 조건이 참(true)인 경우에 한해 지정된 명령문을 실행합니다. 명령문 실행에 앞서 조건 충족 여부가 평가됩니다. +createCanvas__description__0 = 캔버스를 생성하고 픽셀 단위로 크기를 설정합니다. createCanvas()setup() 함수 시작시 단 한 번만 실행되어야 합니다. createCanvas()를 한 번 이상 호출하면 스케치가 예기치 못한 반응을 보일 수 있습니다. 두 개 이상의 캔버스가 필요하다면 createGraphics()를 이용합니다. +createCanvas__description__1 = 설정된 캔버스 사이즈는 시스템 변수인 너비(width)와 높이(height)에 각각 저장됩니다. createCanvas() 함수를 생략하면, 스케치의 크기는 기본값인 100x100 픽셀로 지정됩니다. +createCanvas__description__2 = 캔버스의 위치 지정 방법은 캔버스 위치 지정하기 위키 페이지에 있습니다. +createCanvas__returns = p5.Renderer +createCanvas__params__w = 숫자: 캔버스의 너비값 +createCanvas__params__h = 숫자: 캔버스의 높이값 +createCanvas__params__renderer = 상수: (선택 사항) P2D 또는 WEBGL +resizeCanvas__description__0 = 사용자가 지정한 너비와 높이로 캔버스 크기를 재조정합니다. 이 함수를 사용하면 캔버스는 클리어되며, draw() 함수가 곧바로 호출되어 스케치를 재조정된 크기의 캔버스로 다시 렌더링되게 합니다. +resizeCanvas__params__w = 숫자: 캔버스의 너비값 +resizeCanvas__params__h = 숫자: 캔버스의 높이값 +resizeCanvas__params__noRedraw = 불리언: (선택 사항) 캔버스를 곧바로 다시 그리지 않도록 처리할지의 여부 +noCanvas__description__0 = 캔버스가 불필요한 p5 스케치를 위해 기본적으로 제공되는 캔버스를 제거합니다. +createGraphics__description__0 = 새로운 p5.Renderer 객체를 생성하고 반환합니다. 화면 밖 그래픽 버퍼(off-screen graphic buffer)에 그리려면 이 클래스를 사용합니다. 2개의 매개변수는 너비와 높이를 픽셀 단위로 지정합니다. +createGraphics__returns = p5.Graphics: 화면 밖 그래픽 버퍼 +createGraphics__params__w = 숫자: 화면 밖 그래픽 버퍼의 너비값 +createGraphics__params__h = 숫자: 화면 밖 그래픽 버퍼의 높이값 +createGraphics__params__renderer = 상수:P2D 또는 WEBGL, 기본값은 P2D +blendMode__description__0 = 사용자가 지정한 모드에 따라 디스플레이 화면상의 픽셀들을 혼합합니다. 소스 픽셀 (A)를 디스플레이 화면 (B)상에 있는 픽셀과 혼합하기 위해 다음 모드를 선택할 수 있습니다:
        • BLEND - 색상 선형 보간:C = (A)*계수 + (B). 기본 혼합 모드입니다.
        • ADD - (A)와 (B)의 합
        • DARKEST - 가장 어두운 색상만 혼합됩니다:C = min(A*계수, B).
        • LIGHTEST - 가장 밝은 색상만 혼합됩니다.:C = max(A*계수, B).
        • DIFFERENCE - 기본 이미지에서 색상값을 뺄셈합니다.
        • EXCLUSION - DIFFERENCE와 유사하지만 덜 극적입니다.
        • MULTIPLY - 색상을 곱하는 것으로, 결과값은 좀 더 어둡습니다.
        • SCREEN - MULTIPLY와 반대로 색상의 반전된 값을 사용합니다.
        • REPLACE - 픽셀이 다른 픽셀을 완전히 대체하며 알파값(투명도)를 사용하지 않습니다.
        • OVERLAY - MULTIPLY와 SCREEN의 혼합으로, 어두운 값을 곱하고 밝은 값의 반전된 값을 사용합니다. (2D)
        • HARD_LIGHT - 회색값이 50%보다 높으면 SCREEN로, 낮으면 MULTIPLY로 처리합니다. (2D)
        • SOFT_LIGHT - DARKEST와 LIGHTEST 혼합으로, OVERLAY처럼 작동하나 덜 강합니다. (2D)
        • DODGE - 밝은 색조를 더 밝게 처리하고 대비를 높이며, 어두운 영역은 무시합니다. (2D)
        • BURN - 어두운 영역이 적용되어 대비가 증가하고 밝기는 무시됩니다. (2D)
        • SUBTRACT - (A)와 (B)의 나머지(3D)
        +blendMode__description__1 = (2D)는 2D 렌더러에서만 작동하는 혼합 모드를 뜻합니다. +blendMode__description__2 = (3D)는 WEBGL 렌더러에서만 작동하는 혼합 모드를 뜻합니다. +blendMode__description__3 = +blendMode__params__mode = 상수:캔버스에 설정되는 혼합 모드. BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT, SOFT_LIGHT, DODGE, BURN, ADD, REMOVE 또는 SUBTRACT 중 하나 +drawingContext__description__0 = p5.js API는 다양한 그래픽 제작 기능들을 제공하지만, p5에 노출되지 않는 HTML5 고유의 캔버스 기능이 있습니다. 그러한 기능들은 예제처럼 drawingContext 변수를 사용하여 직접 호출할 수 있습니다. 이는 canvas.getContext('2d') 또는 canvas.getContext('webgl') 함수를 호출하는 것과도 같습니다. 호출 가능한 함수는 기본 캔버스 API 레퍼런스에 있습니다. +noLoop__description__0 = p5.js가 draw() 함수 안에 포함된 코드를 계속 실행하지 않도록 합니다. loop() 함수가 호출될 경우, draw() 함수 안의 코드가 다시 계속 실행 됩니다. setup() 함수 안에 noLoop() 함수를 사용할 경우, setup() 함수 블록의 가장 마지막 줄에 작성합니다. +noLoop__description__1 = noLoop()을 사용하면, mousePressed()나 keyPressed()와 같은 이벤트 처리 함수를 통해 화면에 접근하거나 조정할 수 없습니다. 대신, redraw()나 loop() 함수들을 이용하여, 화면 업데이트 함수인 draw()를 재실행시켜 이벤트 처리 함수를 실행할 수 있습니다. 다시 말해, noLoop() 함수가 호출된다는 것은 draw()가 실행되지 않으며, saveFrames()이나 loadPixels()와 같은 함수 역시 사용할 수 없음을 뜻합니다. +noLoop__description__2 = 스케치 크기를 재조정하면, noLoop() 함수가 호출되지 않더라도 redraw()가 호출되어 스케치를 업데이트하는 점에 유의해야 합니다. 그렇지 않으면, 스케치는 loop()가 호출될 때까지 예기치 못한 반응을 보일 수 있습니다. +noLoop__description__3 = loop()의 상태를 확인할 때 isLooping()를 사용합니다. +loop__description__0 = 기본적으로 p5.js는 draw() 함수 안에 포함된 코드를 계속해서 반복 실행(loop)합니다. 하지만 draw() 함수의 반복 실행 기능은 noLoop() 함수를 통해 중단할 수 있습니다. 이때 draw()의 반복 실행 기능은 loop() 함수를 통해 재개할 수 있습니다. +loop__description__1 = setup() 함수 안에서 loop()의 사용을 권장하지 않습니다. +loop__description__2 = loop()의 상태를 확인할 때 isLooping()를 사용합니다. +isLooping__description__0 = 기본적으로 p5.js는 draw() 함수 안에 포함된 코드를 계속해서 반복 실행(loop)합니다. 하지만 draw() 함수의 반복 실행 기능은 noLoop() 함수를 통해 중단할 수 있고 draw()의 반복 실행 기능은 loop() 함수를 통해 재개할 수 있습니다. 이때 isLooping()은 현재 상태를 반환합니다. +push__description__0 = push() 함수는 현재의 드로잉 스타일 설정과 변형을 저장하고, pop() 함수는 이 설정들을 복구합니다. 이 함수들은 항상 함께 쓰이는 점에 유의해야 합니다. 이 함수들을 통해 스타일과 변형 설정을 변경한 뒤에도 이전 설정 상태로 돌아갈 수 있습니다. push()와 pop() 함수들은 설정 사항에 대해 좀 더 많은 권한을 제공합니다. (두 번째 예제를 참고) +push__description__1 = push()는 다음의 함수들을 통해 지정된 현재 변형 상태 및 스타일 설정 사항을 저장합니다: fill(), noFill(), noStroke(), stroke(), tint(), noTint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix(), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +push__description__2 = WebGL 모드에서는 다음의 함수들을 통해 지정된, 더욱 다양한 스타일 설정 사항이 저장될 수 있습니다: setCamera(), ambientLight(), directionalLight(), pointLight(), texture(), specularMaterial(), shininess(), normalMaterial(), 그리고 shader() +push__description__3 = +push__description__4 = +pop__description__0 = push() 함수는 현재의 드로잉 스타일 설정과 변형을 저장하고, pop() 함수는 이 설정들을 복구합니다. 이 함수들은 항상 함께 쓰이는 점에 유의해야 합니다. 이 함수들을 통해 스타일과 변형 설정을 변경한 뒤에도 이전 설정 상태로 돌아갈 수 있습니다. push()와 pop() 함수들은 설정 사항에 대해 좀 더 많은 권한을 제공합니다. (두 번째 예제.) +pop__description__1 = push()는 다음의 함수들을 통해 지정된 현재 변형 상태 및 스타일 설정 사항을 저장합니다: fill(), noFill(), noStroke(), stroke(), tint(), noTint(), strokeWeight(), strokeCap(), strokeJoin(), imageMode(), rectMode(), ellipseMode(), colorMode(), textAlign(), textFont(), textSize(), textLeading(), applyMatrix(), resetMatrix(), rotate(), scale(), shearX(), shearY(), translate(), noiseSeed(). +pop__description__2 = WebGL 모드에서는 다음의 함수들을 통해 지정된, 더욱 다양한 스타일 설정 사항이 저장될 수 있습니다: setCamera(), ambientLight(), directionalLight(), pointLight(), texture(), specularMaterial(), shininess(), normalMaterial(), 그리고 shader() +pop__description__3 = +pop__description__4 = +redraw__description__0 = draw() 함수 안에 포함된 코드를 한 번 재실행합니다. 이 함수를 통해 필요시에만 화면을 업데이트할 수 있습니다. mousePressed()나 keyPressed()가 지정한 이벤트를 발생시킬 때가 그 예입니다. +redraw__description__1 = 프로그램의 구조를 고려하면, mousePressed()와 같은 이벤트 함수에 redraw()를 호출하는 것이 좋습니다. 이는 redraw()draw()함수를 즉각적으로 실행시키지 않기 때문입니다. redraw()는 화면 업데이트가 필요함을 알리는 표식 설정만합니다. +redraw__description__2 = +redraw__description__3 = +redraw__description__4 = +redraw__params__n = 정수: (선택 사항) n번 간 redraw() 함수 실행. 기본값은 1 +p5__description__0 = p5() 생성자로 전역 모드 대신 인스턴스 모드를 활성화할 수 있습니다. 이는 고급 활용 사례에 해당합니다. 간단한 설명과 예제가 아래에 있습니다. 자세한 내용은 다니엘 쉬프만(Dan Shiffman)의 코딩 트레인(Coding Train) 비디오 튜토리얼 또는 이 페이지에 있습니다. +p5__description__1 = 기본적으로 모든 p5.js 함수들은 전역 네임스페이스에 속합니다. (즉, 화면창 객체에 구속됩니다.) 이는, p5.js 함수들을 ellipse(), fill()과 같은 이름으로 불러올 수 있음을 뜻합니다. 하지만, 이러한 방식은 자바스크립트의 여타 (동기식 또는 비동기식) 라이브러리를 사용하거나 긴 코딩을 작성할 때 다소 불편할 수 있습니다. 따라서, p5.js는 인스턴스 모드를 통해 이 문제를 해결할 수 있는 방법을 지원합니다. 인스턴스 모드에서는 모든 p5 함수의 전역 네임 스페이스를 오염시키는 대신, 이를 단일 변수에 구속되게 만듭니다. +p5__description__2 = 선택적으로 캔버스나 다른 요소에 추가할 두 번째 인수로서 기본 컨테이너를 지정할 수 있습니다. HTML상 요소의 id나 노드 자체를 추가(append)할 수 있습니다. +p5__description__3 = 이처럼 인스턴스를 만들면, 단일 웹페이지에 두 개 이상의 p5 스케치를 사용할 수 있게 됩니다. 각각의 고유한 설정 변수에 의거하기 때문입니다. 물론, 전역 모드에서도 iframe 기능을 이용하면 복수의 스케치를 웹페이지에 사용할 수 있습니다. +p5__params__sketch = 객체: p5.js 스케치를 포함하는 함수 +p5__params__node = 문자열|객체: 스케치를 포함할 HTML DOM 노드 ID 또는 포인터 +applyMatrix__description__0 = 현재 행렬(matrix)에 매개변수로 지정된 행렬을 곱합니다. 평행 이동과 같은 연속 이동(translate), 크기 조정(scale), 전단(shear), 회전(rotate)을 한 번에 수행할 수 있습니다. 변환행렬 위키피디아에서 더 많은 정보를 확인할 수 있습니다. +applyMatrix__description__1 = 이 때, 인수들은 WHATWG 사양에 따라 그 이름이 지정되며, 다음과 같은 형식의 변환 행렬에 상응합니다:

        applyMatrix() 함수 호출시 사용되는 변환 행렬

        +applyMatrix__description__2 = +applyMatrix__description__3 = +applyMatrix__params__a = 숫자: 곱할 2x3 행렬 정의 +applyMatrix__params__b = 숫자: 곱할 2x3 행렬 정의 +applyMatrix__params__c = 숫자: 곱할 2x3 행렬 정의 +applyMatrix__params__d = 숫자: 곱할 2x3 행렬 정의 +applyMatrix__params__e = 숫자: 곱할 2x3 행렬 정의 +applyMatrix__params__f = 숫자: 곱할 2x3 행렬 정의 +resetMatrix__description__0 = 현재 행렬을 항등 행렬로 바꿉니다. +rotate__description__0 = 사용자가 지정한 각도 매개변수에 따라 도형을 회전합니다. 이 함수는 angleMode() 함수의 영향을 받으며, 괄호 안에 RADIANS 또는 DEGREES를 입력하여 각도가 해석되는 방식을 지정할 수 있습니다. +rotate__description__1 = 객체는 항상 원점에 대한 상대적 위치를 중심으로 회전하며, 양수를 입력할 경우 시계 방향으로 객체를 회전합니다. 이러한 변형(transformation) 함수는 그것이 호출된 뒤 후속적으로 호출된 모든 변형 함수들에 적용됩니다. 예를 들어, rotate(HALF_PI)를 호출한 뒤 rotate(HALF_PI)를 호출하면, 결과적으로 rotate(PI)와 동일한 효과를 갖습니다. 모든 변형은 draw() 함수가 다시 시작하는 시점에 리셋됩니다. +rotate__description__2 = 좀 더 기술적으로 설명하자면, rotate() 함수는 현재 변환 행렬에 회전 행렬을 곱하는 셈입니다. 이 함수는 push()와 pop() 함수를 통해 추가적으로 제어 가능합니다. +rotate__description__3 = +rotate__description__4 = +rotate__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 회전각 +rotate__params__axis = p5.Vector|숫자 배열[]: (선택 사항) 3D의 경우, 회전축 +rotateX__description__0 = x축을 따라 회전합니다. +rotateX__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 회전각 +rotateY__description__0 = y축을 따라 회전합니다. +rotateY__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 회전각 +rotateZ__description__0 = z축을 따라 회전합니다. (WebGL 모드 전용) +rotateZ__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 회전각 +scale__description__0 = 꼭짓점을 확장하거나 축소하여 도형의 크기를 키우거나 줄입니다. 객체의 크기는 언제나 좌표계에 대한 상대적 원점을 기준으로 조정됩니다. 크기값들은 10진수 백분율로 지정됩니다. 예를 들어, scale(2.0) 함수를 호출하면 도형의 크기를 200% 증가시킵니다. +scale__description__1 = 이러한 변형(transformation) 함수는 호출된 뒤 후속적으로 호출된 모든 변형 함수들에 적용됩니다. 예를 들어, scale(2.0)을 호출한 뒤 scale(1.5)를 호출하면, 결과적으로 scale(3.0)과 동일한 효과를 갖습니다. 모든 변형은 draw() 함수가 다시 시작하는 시점에 리셋됩니다. +scale__description__2 = 매개변수 z는 오직 WebGL 모드에서만 사용 가능합니다. 이 함수는 push()와 pop() 함수를 통해 추가적으로 제어 가능합니다. +scale__description__3 = +scale__description__4 = +scale__params__s = 숫자|p5.Vector|숫자 배열[]:객체 크기를 조정하는 백분율, 또는 여러 인수를 지정할 경우 x축에서의 객체 크기 배율을 조정하는 백분율 +scale__params__y = 숫자: (선택 사항) y축에서의 객체 크기를 조정하는 백분율 +scale__params__z = 숫자: (선택 사항) z축에서의 객체 크기를 조정하는 백분율 (WebGL 모드용) +scale__params__scales = p5.Vector|숫자 배열[]: 축을 기준으로 객체의 크기 조정 +shearX__description__0 = 사용자가 지정한 각도 매개변수에 따라 도형을 x축에서 전단(shear)합니다. 이 함수는 angleMode() 함수의 영향을 받습니다. 객체는 항상 원점에 대한 상대적 위치를 중심으로 전단되며, 양수를 입력할 경우 시계 방향으로 객체를 전단합니다. +shearX__description__1 = 이러한 변형(transformation) 함수는 호출된 뒤 후속적으로 호출된 모든 변형 함수들에 적용되어, 그 효과들이 누적됩니다. 예를 들어, shearX(PI/2)를 호출한 뒤 shearX(PI/2)를 또 호출하면, 결과적으로 shearX(PI)와 동일한 효과를 갖습니다. draw() 함수 내에서 shearX()를 호출하면, 반복 실행이 다시 시작되는 시점에 모든 변형 내용이 리셋됩니다. +shearX__description__2 = 보다 기술적으로 설명하자면, shearX() 함수는 현재 변환 행렬에 회전 행렬을 곱하는 셈입니다. 이 함수는 push()와 pop() 함수를 통해 추가적으로 제어 가능합니다. +shearX__description__3 = +shearX__description__4 = +shearX__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 전단각 +shearY__description__0 = 사용자가 지정한 각도 매개변수에 따라 도형을 y축에서 전단(shear)합니다. 이 함수는 angleMode() 함수의 영향을 받습니다. 객체는 항상 원점에 대한 상대적 위치를 중심으로 전단되며, 양수를 입력할 경우 시계 방향으로 객체를 전단합니다. +shearY__description__1 = 이러한 변형(transformation) 함수는 호출된 뒤 후속적으로 호출된 모든 변형 함수들에 적용되어, 그 효과들이 누적됩니다. 예를 들어, shearY(PI/2)를 호출한 뒤 shearY(PI/2)를 또 호출하면, 결과적으로 shearY(PI)와 동일한 효과를 갖습니다. draw() 함수 내에서 shearY()를 호출하면, 반복 실행이 다시 시작되는 시점에 모든 변형 내용이 리셋됩니다. +shearY__description__2 = 보다 기술적으로 설명하자면, shearY() 함수는 현재 변환 행렬에 회전 행렬을 곱하는 셈입니다. 이 함수는 push()와 pop() 함수를 통해 추가적으로 제어 가능합니다. +shearY__description__3 = +shearY__description__4 = +shearY__params__angle = 숫자: 현재 angleMode의 매개변수인 RADIANS(라디안) 또는 DEGREES(도)의 설정 사항에 따른 전단각 +translate__description__0 = 디스플레이 화면 내에서 객체를 이동시킬 정도를 지정합니다. 매개변수 x는 좌/우 이동을, 매개변수 y는 상/하 이동을 지정합니다. +translate__description__1 = 이러한 변형(transformation) 함수는 호출된 뒤 후속적으로 호출된 모든 변형 함수들에 적용되어, 그 효과들이 누적됩니다. 예를 들어, translate(50, 0)를 호출한 뒤 translate(20, 0)를 또 호출하면, 결과적으로 translate(70, 0)와 동일한 효과를 갖습니다. draw() 함수 내에서 translate()을 호출하면, 반복 실행이 다시 시작되는 시점에 모든 변형 내용이 리셋됩니다. +translate__description__2 = 이 함수는 push()와 pop() 함수를 통해 추가적으로 제어 가능합니다. +translate__params__x = 숫자: 좌/우 이동 +translate__params__y = 숫자: 상/하 이동 +translate__params__z = 숫자: 앞/뒤 이동 (WebGL 모드용) +translate__params__vector = p5.Vector: 이동시킬 벡터 +storeItem__description__0 = 로컬 저장소에 값을 키 이름(key name)으로 저장합니다. 로컬 저장소는 브라우저에 저장되며, 브라우징 세션과 페이지를 다시 불러오는 사이에 유지됩니다. 키(key)는 변수명과 동일하게 지정될 수 있으나, 반드시 그럴 필요는 없습니다. 저장된 항목(item)을 가져오는 방법은 getItem에 있습니다. +storeItem__description__1 = 비밀번호나 개인 정보와같이 민감한 데이터는 로컬 저장소에 저장되면 안됩니다. +storeItem__params__key = 문자열: +storeItem__params__value = 문자열|숫자|객체|불리언|p5.Color|p5.Vector: +getItem__description__0 = storeItem()로 저장한 항목(item)의 값을 로컬 저장소로부터 반환합니다. +getItem__returns = 숫자|객체|문자열|불리언|p5.Color|p5.Vector: 저장된 항목의 값 +getItem__params__key = 문자열: 로컬 저장소에 저장시 사용할 이름 +clearStorage__description__0 = 현재 영역에서 storeItem()으로 설정된 모든 로컬 저장소 항목(item)을 제거합니다. +removeItem__description__0 = storeItem()으로 저장된 항목(item)을 제거합니다. +removeItem__params__key = 문자열 +createStringDict__description__0 = 키-값(key-value) 쌍 또는 사용자가 지정한 객체를 사용하여 p5.StringDict의 새로운 인스턴스를 생성합니다. +createStringDict__returns = p5.StringDict: +createStringDict__params__key = 문자열: +createStringDict__params__value = 문자열: +createStringDict__params__object = 객체: 객체 +createNumberDict__description__0 = 키-값(key-value) 쌍 또는 사용자가 지정한 객체를 사용하여 p5.NumberDict의 새로운 인스턴스를 생성합니다. +createNumberDict__returns = p5.NumberDict: +createNumberDict__params__key = 숫자: +createNumberDict__params__value = 숫자 +createNumberDict__params__object = 객체: 객체 +select__description__0 = 지정한 ID, 클래스, 또는 태그 이름(접두어 '#'로 ID를, '.'로 클래스 지정 가능, 태그는 별도의 접두어 없음)에 해당하는 요소를 페이지 내에서 검색하고, p5.Element를 반환합니다. 클래스나 태그의 이름이 2개 이상의 요소로 지정된 경우, 1번째 요소만 반환됩니다. 문서 객체 모델 (DOM) 노드는 .elt로 검섹할 수 있습니다. 아무 것도 검색되지 않을 경우 null을 반환합니다. 검색할 컨테이너를 별도로 지정할 수 있습니다. +select__returns = 검색된 노드를 포함한 p5.Element +select__params__selectors = 문자열: 찾을 요소의 CSS 선택 문자열 (selector string) +select__params__container = 문자열|p5.Element|HTML 요소: (선택 사항) id, p5.Element, 또는 HTML 요소 내에서 검색 +selectAll__description__0 = 지정한 클래스 또는 태그 이름('.'로 클래스 지정 가능, 태그는 별도의 접두어 없음)에 해당하는 요소를 페이지 내에서 검색하고, p5.Element 배열로 반환합니다. 문서 객체 모델 (DOM) 노드는 .elt로 검색할 수 있습니다. 아무 것도 검색되지 않을 경우 빈 배열을 반환합니다. 검색할 컨테이너를 별도로 지정할 수 있습니다. +selectAll__returns = 검색된 노드를 포함한 p5.Element 배열 +selectAll__params__selectors = 문자열: 찾을 요소의 CSS 선택 문자열 (selector string) +selectAll__params__container = 문자열: (선택 사항) id, p5.Element, 또는 HTML 요소 내에서 검색 +removeElements__description__0 = createCanvase() 또는 createGraphics()로 생성된 캔버스와 그래픽을 제외하고, p5로 생성된 모든 요소를 제거합니다. 이벤트 핸들러 역시 제거되며, 요소가 문서 객체 모델 (DOM)에서 제거됩니다. +changed__description__0 = .changed() 함수는 요소값이 변경될 때 호출됩니다. 특정 요소의 이벤트 리스너와 연결하는 데에 사용됩니다. +changed__params__fxn = 함수|불리언: 요소값이 변경될 때 발생하는 함수. 거짓(false)이 전달되면 이전 실행 함수는 더이상 실행 불가 +input__description__0 = .input() 함수는 요소가 사용자 입력을 감지할 때 호출됩니다. 입력 이벤트는 키 또는 슬라이더 요소의 변경을 감지합니다. 특정 요소의 이벤트 리스너와 연결하는 데에 사용됩니다. +input__params__fxn = 함수|불리언: 요소가 사용자 입력을 감지할 때 발생하는 함수. 거짓(false)이 전달되면 이전 실행 함수는 더이상 실행 불가 +createDiv__description__0 = 주어진 내부 HTML을 사용하여 문서 객체 모델 (DOM)에
        요소를 생성합니다. +createDiv__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createDiv__params__html = 문자열: (선택 사항) 요소를 생성한 내부 HTML +createP__description__0 = 주어진 내부 HTML을 사용하여 문서 객체 모델 (DOM)에

        요소를 생성합니다. 문단형 텍스트 작성시 사용됩니다. +createP__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createP__params__html = 문자열: (선택 사항) 요소를 생성한 내부 HTML +createSpan__description__0 = 주어진 내부 HTML을 사용하여 문서 객체 모델 (DOM)에 요소를 생성합니다. +createSpan__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createSpan__params__html = 문자열: (선택 사항) 요소를 생성한 내부 HTML +createImg__description__0 = 주어진 src와 대체 텍스트(alt text)를 사용하여 문서 객체 모델 (DOM)에 요소를 생성합니다. +createImg__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createImg__params__src = 문자열: 이미지의 src 또는 url 경로 +createImg__params__alt = 문자열: 이미지가 로드되지 않을 경우 사용할 대체 텍스트. 빈 문자열(" ")로 이미지 숨기기 가능 +createImg__params__crossOrigin = 문자열: img 요소의 교차 출처 속성(crossOrigin property). '익명(anonymous)' 또는 '사용 자격 증명(use-credentials)'을 통해 교차 출처 권한이 있는 이미지를 검색할 수 있습니다. 이는 캔버스에 이미지를 사용하기 위함이며, 빈 문자열(" ")이 전달된 경우 교차 출처 리소스 공유(CORS)는 사용되지 않습니다. +createImg__params__successCallback = 함수: (선택 사항) 인수로 지정된 p5.Element가 이미지 데이터를 불러왔을 때 호출되는 콜백 함수 +createA__description__0 = 문서 객체 모델 (DOM)에 하이퍼링크를 포함한 요소를 생성합니다. +createA__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createA__params__href = 문자열: 링크될 페이지 url +createA__params__html = 문자열: 화면에 보여질 링크 요소의 내부 HTML +createA__params__target = 문자열: (선택 사항) 새로운 링크가 보여질 대상, _blank, _self, _parent, _top 중 지정 가능 +createSlider__description__0 = 문서 객체 모델 (DOM)에 슬라이더 요소를 생성합니다. .size() 함수로 슬라이더의 길이를 설정합니다. +createSlider__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createSlider__params__min = 숫자: 슬라이더의 최소값 +createSlider__params__max = 숫자: 슬라이더의 최대값 +createSlider__params__value = 숫자: (선택 사항) 슬라이더의 기본값 +createSlider__params__step = 숫자: (선택 사항) 슬라이더의 단위당 이동 크기(이동 크기가 0으로 지정된 경우, 슬라이더는 최소값과 최대값 사이를 부드럽게 이동합니다.) +createButton__description__0 = 문서 객체 모델 (DOM)에 요소를 생성합니다. .size() 함수로 버튼의 크기를 설정합니다. .mousePressed() 함수로 버튼이 클릭됐을 때의 행동을 지정합니다. +createButton__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createButton__params__label = 문자열: 버튼 위에 나타나는 레이블 +createButton__params__value = 문자열: (선택 사항) 버튼값 +createCheckbox__description__0 = 문서 객체 모델 (DOM)에 체크박스 요소를 생성합니다. .checked() 함수를 통해 체크되었는지의 여부를 반환합니다. +createCheckbox__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createCheckbox__params__label = 문자열: (선택 사항) 체크박스 위에 나타나는 레이블 +createCheckbox__params__value = 불리언: (선택 사항) 체크박스의 값. 체크는 참(true), 체크 해제는 거짓(false) +createSelect__description__0 = 문서 객체 모델 (DOM)에 드롭다운 메뉴 요소를 생성합니다. 이미 생성된 셀렉트 박스(select box)를 선택할 경우, p5.Element에 select-box 메소드를 지정하는 데에도 쓰입니다. 셀렉트 박스 생성 후, .option() 메소드로 선택지(option)를 설정할 수 있습니다. .selected() 메소드는 p5.Element 인스턴스인 현재 드롭다운 요소를 반환합니다. .selected() 메소드는 특정 선택지를 최초 페이지 로드시의 기본값으로서 설정할 수 있습니다. .disable() 메소드는 특정 선택지를 비활성화하고, 별도로 지정된 인수가 없는 경우엔 전체 드롭다운 요소를 비활성화 상태로 표시합니다. +createSelect__returns = p5.Element +createSelect__params__multiple = 불리언: (선택 사항) 드롭다운이 여러 개의 선택지를 제공할 경우 참(true) +createSelect__params__existing = 객체: 문서 객체 모델 셀렉트 요소 +createRadio__description__0 = 문서 객체 모델 (DOM)에 라디오 버튼 요소를 생성합니다. 라디오 버튼 생성 후, .option() 메소드로 옵션을 설정할 수 있습니다. .value() 메소드는 현재 선택된 옵션을 반환합니다. +createRadio__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createRadio__params__containerElement = 객체: 옵션으로 설정 될 모든 라디오 입력소들이 있는 div 또는 span의 HTML 컨테인어. +createRadio__params__name = 문자열: (선택 사항) 각 입력 요소의 매개변수 명. +createColorPicker__description__0 = 문서 객체 모델 (DOM)에 색상 입력을 위한 색상 추출(colorPicker) 요소를 생성합니다. .value() 메소드는 색상의 헥사(Hex) 문자열(#rrggbb)을 반환합니다. .color() 메소드는 현재 선택된 색상의 p5.Color 객체를 반환합니다. +createColorPicker__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createColorPicker__params__value = 문자열|p5.Color: (선택 사항) 요소의 색상 기본값 +createInput__description__0 = 문서 객체 모델 (DOM)에 텍스트 입력을 위한 요소를 생성합니다. .size() 함수로 상자의 크기를 설정합니다. +createInput__returns = p5.Element: 생성된 노드를 담고있는 p5.Element에 대한 포인터 +createInput__params__value = 문자열: (선택 사항) 입력 상자의 기본값 +createInput__params__type = 문자열: (선택 사항) 텍스트 유형 (예: text, password 등) 기본값은 text +createFileInput__description__0 = '파일(file)' 유형의 문서 객체 모델 (DOM)에 요소를 생성합니다. 스케치에 사용할 로컬 파일을 선택할 수 있게 됩니다. +createFileInput__returns = p5.Element: 생성된 DOM 요소를 담고있는 p5.Element에 대한 포인터 +createFileInput__params__callback = 함수: (선택 사항) 파일이 로드될 때의 콜백 함수 +createFileInput__params__multiple = 문자열: (선택 사항) 여러 파일 선택 허용 +createVideo__description__0 = 문서 객체 모델 (DOM)에 간단한 오디오/비디오 재생을 위한 HTML5