下面实现一个半圆形的进度条:
1 PGraphics P1; 2 PGraphics P2; 3 float att; 4 int num=16; 5 float ang = PI/(num-1); 6 float x1[]=new float [num]; 7 float y1[]=new float [num]; 8 float x2[]=new float [num]; 9 float y2[]=new float [num]; 10 float x3[]=new float [num]; 11 float y3[]=new float [num]; 12 float x4[]=new float [num]; 13 float y4[]=new float [num]; 14 float r1=300, r2=400; 15 float at=PI/40; 16 float t; 17 void setup() { 18 size(900, 600); 19 smooth(); 20 frameRate(25); 21 t=1; 22 P1 = createGraphics(width, height); 23 P2 = createGraphics(width, height); 24 att =-at; 25 } 26 void draw() { 27 background(0); 28 translate(width/2, 500); 29 rotate(PI); 30 //循环绘制16个环绕的四边形 31 for (int i=0; i<num; i++) { 32 stroke(100); 33 strokeWeight(6); 34 fill(100, 100); 35 quad(x1[i], y1[i], x2[i], y2[i], x3[i], y3[i], x4[i], y4[i]); 36 x1[i]=r1*cos(i*ang-at); 37 y1[i]=r1*sin(i*ang-at); 38 x2[i]=r2*cos(i*ang-at); 39 y2[i]=r2*sin(i*ang-at); 40 x3[i]=r2*cos(i*ang+at); 41 y3[i]=r2*sin(i*ang+at); 42 x4[i]=r1*cos(i*ang+at); 43 y4[i]=r1*sin(i*ang+at); 44 } 45 //绘制16个环绕的点 46 for (int i=0; i<num; i++) { 47 stroke(255); 48 strokeWeight(3); 49 point(410*cos(i*ang), 410*sin(i*ang)); 50 } 51 //绘制一条半圆弧 52 noFill(); 53 strokeWeight(2); 54 arc(0, 0, 560, 560, -at, PI+at); 55 //小三角运动路径 56 noStroke(); 57 curve(320, -3450, -430, 0, 430, 0, -322, -3450); 58 float x = curvePoint(320, -430, 430, -320, t); 59 float y =curvePoint(-3450, 0, 0, -3450, t); 60 float tx=curveTangent(320, -430, 430, -320, t); 61 float ty = curveTangent(-3450, 0, 0, -3450, t); 62 float radian = atan2(ty, tx); 63 t -=0.00165; 64 if (t<0) { 65 t=0; 66 } 67 push(); 68 translate(x, y); 69 rotate(radian-PI); 70 fill(255, 0, 0); 71 triangle(0, 16, -10, -8, 10, -8); 72 pop(); 73 //绘制环绕分布四边形的图形 74 P1.beginDraw(); 75 P1.translate(width/2, 500); 76 P1.rotate(PI); 77 for (int i=0; i<num; i++) { 78 P1.noStroke(); 79 P1.fill(255); 80 P1.quad(x1[i], y1[i], x2[i], y2[i], x3[i], y3[i], x4[i], y4[i]); 81 x1[i]=r1*cos(i*ang-at); 82 y1[i]=r1*sin(i*ang-at); 83 x2[i]=r2*cos(i*ang-at); 84 y2[i]=r2*sin(i*ang-at); 85 x3[i]=r2*cos(i*ang+at); 86 y3[i]=r2*sin(i*ang+at); 87 x4[i]=r1*cos(i*ang+at); 88 y4[i]=r1*sin(i*ang+at); 89 } 90 P1.endDraw(); 91 //绘制动态蒙版图形 92 P2.beginDraw(); 93 P2.translate(width/2, 500); 94 P2.rotate(PI); 95 P2.noFill(); 96 P2.stroke(#00D387); 97 P2.strokeCap(SQUARE); 98 P2.strokeWeight(100); 99 P2.arc(0, 0, 700, 700, -at, att); 100 att +=0.0054; 101 if (att>PI+at) { 102 att = PI+at; 103 } 104 P2.endDraw(); 105 //应用图形蒙版 106 resetMatrix(); //重置坐标原点 107 P2.mask(P1); 108 image(P2, 0, 0); 109 }
显示效果为: