p5.js创意编程——Q版人像绘制

news/2024/11/17 4:28:47/

目录

  • 主要函数介绍
    • 贝塞尔曲线
    • Shape
    • frameRate
  • 完整代码
  • 实现效果

主要函数介绍

贝塞尔曲线

在这里插入图片描述
如图,是p5.js官方reference上关于贝塞尔曲线的说明,一次可以画出一条贝塞尔曲线。但在作图中往往是不够用的,画画时我们大多是绘制一个不规则的闭合区域,故会用到接下来的函数。

Shape

在这里,为了绘制出闭合图形,我们使用了 beginShape()endShape() 函数,如下代码可绘制出人物的头发部分。

  fill(51,51,51); // 设置填充颜色stroke(10); // 设置描边颜色strokeWeight(8); // 设置变现粗细beginShape(); // 开始vertex(255,434);bezierVertex(256,401,334,281,309,368);bezierVertex(349,369,423,201,372,326);bezierVertex(464,323,494,294,533,228);bezierVertex(532,255,557,321,589,360);bezierVertex(600,386,577,232,647,448);bezierVertex(654,362,686,373,672,266);bezierVertex(666,202,644,102,506,57);bezierVertex(398,32,305,82,263,154);bezierVertex(216,232,213,329,255,437);endShape(); // 形成闭合图形

frameRate

在这里插入图片描述
p5.js中实现的动态效果无非就是一个快速重新绘制的过程,这里使用 frameRate() 函数来设置动态的fps。

完整代码

let fr = 0;function setup() {createCanvas(900,900);frameRate(5);
}function draw() {background(255);fill(40);noStroke();rect(330,490,240,280); //衣服fill(0);beginShape(); // 外袍vertex(244,842);bezierVertex(288,846,422,846,431,739);bezierVertex(399,570,371,490,339,489);bezierVertex(237,506,283,516,327,546);bezierVertex(306,888,128,806,241,846);endShape();beginShape();vertex(533,501);bezierVertex(508,560,473,666,478,747);bezierVertex(455,828,588,847,645,847);bezierVertex(753,820,659,841,618,749);bezierVertex(588,656,577,643,564,544);bezierVertex(680,512,612,490,533,505);endShape();fill(255);stroke(2,42,0);strokeWeight(5);triangle(372,520,434,545,381,560); // 领子triangle(465,545,527,523,522,560);fill(6,63,18);stroke(2,42,0);strokeWeight(5);triangle(430,535,468,535,451,562); // 领带quad(451,562,430,663,451,705,476,663);beginShape(); // 帽子vertex(424,693);bezierVertex(397,567,374,513,366,519);bezierVertex(382,530,371,490,339,489);bezierVertex(237,506,283,516,327,546);bezierVertex(378,611,411,680,418,682);endShape();beginShape();vertex(477,695);bezierVertex(504,588,505,522,553,493);bezierVertex(571,487,696,504,570,545);bezierVertex(503,652,535,597,485,689);endShape();fill(255,243,211);stroke(254,218,186);strokeWeight(8);beginShape(); // 脸vertex(279,356);bezierVertex(311,514,358,509,406,529);bezierVertex(492,548,521,525,547,510);bezierVertex(607,472,579,420,627,355);bezierVertex(641,200,622,305,627,355);bezierVertex(427,122,487,127,537,145);bezierVertex(284,297,278,192,361,154);endShape();fill(255);noStroke();ellipse(368,321,90,140); // 眼ellipse(524,321,90,140); fill(27,61,45);ellipse(368,321,82,132);ellipse(524,321,82,132);fill(90,150,90);ellipse(373,324,40,70);ellipse(520,324,40,70);fill(255,243,211);rect(320,246,100,70);rect(473,246,100,70);stroke(2,42,0);strokeWeight(5);line(485,305,535,305);stroke(2,42,0);strokeWeight(10);line(310,316,410,316);line(480,316,580,316);fill(255);noStroke();ellipse(361,330,23,10);ellipse(503,330,23,10);stroke(159,12,52);strokeWeight(8);line(429,465,450,483);line(450,483,473,465);fill(51,51,51);stroke(10);strokeWeight(8);beginShape(); // 头发vertex(255,434);bezierVertex(256,401,334,281,309,368);bezierVertex(349,369,423,201,372,326);bezierVertex(464,323,494,294,533,228);bezierVertex(532,255,557,321,589,360);bezierVertex(600,386,577,232,647,448);bezierVertex(654,362,686,373,672,266);bezierVertex(666,202,644,102,506,57);bezierVertex(398,32,305,82,263,154);bezierVertex(216,232,213,329,255,437);endShape();// 动态效果if(fr <= 10) {fr += 1;drawObjects(-fr);} else if(fr <= 20) {fr += 1;drawObjects(fr - 10);} else {fr = 0;}}function drawObjects(fr) {stroke(119,60,19); // 魔杖strokeWeight(6);line(114,430 + fr,200,579 + fr);strokeWeight(10);line(200,579 + fr,238,644 + fr);stroke(90,150,90);strokeWeight(3);if(fr % 5 == 0) {line(89,469 + fr,98,455 + fr);line(69,436 + fr,84,435 + fr);line(84,401 + fr,96,410 + fr);line(126,389 + fr,123,405 + fr);line(140,423 + fr,155,422 + fr);}fill(100,47,152); // 魔药noStroke();ellipse(733,650 - fr,75);fill(255);rect(690,602 - fr,90,40);noFill();stroke(0);strokeWeight(3);ellipse(733,650 - fr,75);quad(751,565 - fr,773,574 - fr,755,625 - fr,732,618 - fr);beginShape();vertex(751,565 - fr);bezierVertex(717,529 - fr,821,568 - fr,773,574 - fr);endShape();fill(255);noStroke();quad(755,558 - fr,773,570 - fr,752,630 - fr,732,623 - fr); fill(135,96,218);ellipse(739,677 - fr,5);ellipse(720,662 - fr,10);ellipse(746,653 - fr,15);
}

实现效果

在这里插入图片描述


http://www.ppmy.cn/news/897890.html

相关文章

绘制CIE1931

轮廓坐标: 360 0.17556 0.005294 361 0.175483 0.005286 362 0.1754 0.005279 363 0.175317 0.005271 364 0.175237 0.005263 365 0.175161 0.005256 366 0.175088 0.005247 367 0.175015 0.005236 368 0.174945 0.005226 369 0.17488 0.005221 370 0.174821 0.0052…

Python机器学习基础篇二《监督学习》

前言 前期回顾&#xff1a; Python机器学习基础篇一《为什么用Python进行机器学习》 前面说过&#xff0c;监督学习是最常用也是最成功的机器学习类型之一。本章将会详细介绍监督学 习&#xff0c;并解释几种常用的监督学习算法。我们在第 1 章已经见过一个监督学习的应用&am…

多元线性回归分析spss结果解读_多重线性回归分析SPSS操作与解读

转自个人微信公众号【Memo_Cleon】的统计学习笔记:多元线性回归。 这次笔记的内容是多元线性回归的SPSS操作及解读。严格来讲,这种一个因变量多个自变量的线性回归叫多变量线性回归或者多因素线性回归更合适一些。多元或者多变量往往指的是多个因变量。 在线性回归中,残差是…

若要实现计算机在线采集和控制,精馏实验 北京化工大学

(2)数据处理 a . 始数据处理&#xff1a; 原始数据记录处理如下&#xff1a; 以第一组塔顶数据为例计算&#xff1a; 平均折光率 3588.13 3590 .13588.13586.13321 D D D D N N N n 乙醇质量分数 8734.03588.11941.422068.581941.422068.58?--D n m 乙醇摩尔分数 9000.060 /)8…

识别圆的强化RANSAC算法

识别圆的强化RANSAC算法 什么是RANSAC算法&#xff1f; ​ 随机抽样一致算法&#xff08;RANdom SAmple Consensus,RANSAC&#xff09;&#xff0c;是一种采用迭代的方式从一组包含噪音的数据中找到想要的数学模型。这个算法的使用前提是给定一组数据&#xff0c;存在一种…

数学建模程序部分之绘图可视化

数学建模程序部分之绘图可视化 计划实现语言&#xff1a;python 参考https://zhuanlan.zhihu.com/p/347717545 https://matplotlib.org/stable/gallery/index.html In [6]: import matplotlib.pyplot as plt #调用pyplot&#xff0c;以这个包为基础应该能满足数学建模基础作…

stats | 线性回归(五)——亚组模型、加权模型和逐步回归

本篇是线性回归系列的第五篇推文&#xff0c;也是最后一篇。示例数据如下&#xff1a; data <- mtcars8 亚组模型 在进行模型分析时&#xff0c;为了研究某分类变量对结果是否具有异质性影响&#xff0c;常会进行亚组分析&#xff0c;即根据某变量的取值将样本分成若干份再分…

【日常篇】006_从黑体辐射到RGB——如何定量计算光谱的颜色?

在《恒星结构与演化》这门课上&#xff0c;曾经用mesa进行过恒星演化的模拟。当时在绘制各种恒星的演化动画时&#xff0c;想到如果能将恒星的有效温度映射到具体对应的颜色上&#xff0c;画出来的动画是不是就更加生动形象了&#xff1f;于是我就到网上四处搜集黑体温度与颜色…