|
/* |
|
* val4 is an array of 4 numbers that range from [0,100] |
|
* size is the number of pixels for width and height |
|
* use p5.js to draw a round grawscale glpyh within the bounding box |
|
*/ |
|
var pointArray = Array(8); |
|
|
|
function glyph4(values, size) { |
|
//set initial fill/size values |
|
var midx = size/2.0; |
|
var midy = size/2.0; |
|
var fillCol = map(values[0], 0, 100, 40, 220); |
|
fill(fillCol); |
|
stroke(fillCol - 40); |
|
var m = size/64; |
|
strokeWeight(m); |
|
strokeCap(PROJECT); |
|
|
|
//generate points on circle edge |
|
|
|
var newSize = size; |
|
|
|
var relativeCoords = generatePoint(midx, midy, newSize/2.0, -PI/4.0); |
|
pointArray[0] = relativeCoords; |
|
relativeCoords = generatePoint(midx, midy, newSize/2.0, 3*PI/4.0); |
|
pointArray[1] = relativeCoords; |
|
|
|
newSize = map(values[2], 0, 100, 5, size); |
|
relativeCoords = generatePoint(midx, midy, newSize/2.0, PI/4.0); |
|
pointArray[2] = relativeCoords; |
|
relativeCoords = generatePoint(midx, midy, newSize/2.0, 5*PI/4.0); |
|
pointArray[3] = relativeCoords; |
|
|
|
newSize = size; |
|
relativeCoords = generatePoint(midx, midy, size/2.0, 0); |
|
pointArray[4] = relativeCoords; |
|
relativeCoords = generatePoint(midx, midy, size/2.0, PI/2.0); |
|
pointArray[5] = relativeCoords; |
|
|
|
newSize = map(values[2], 0, 100, 5, size); |
|
relativeCoords = generatePoint(midx, midy, size/2.0, PI); |
|
pointArray[6] = relativeCoords; |
|
relativeCoords = generatePoint(midx, midy, size/2.0, -PI/2.0); |
|
pointArray[7] = relativeCoords; |
|
|
|
fill(fillCol); |
|
|
|
//set values to determine the squash-ball shape |
|
var strapWidth = map(values[1], 0, 100, 2, size/2.56); |
|
var dist = strapWidth/2.0; |
|
var xoffset = dist*cos(PI/4.0); |
|
var yoffset = dist*sin(PI/4.0); |
|
var dif = size/6.4; |
|
var ext = size/25.6; |
|
|
|
//draw backfill of squash-ball |
|
noStroke(); |
|
beginShape(); |
|
vertex(pointArray[0].x, pointArray[0].y); |
|
bezierVertex(pointArray[4].x+ext, pointArray[4].y-dif, pointArray[4].x+ext, pointArray[4].y+dif, pointArray[2].x+xoffset, pointArray[2].y-yoffset); |
|
bezierVertex(pointArray[2].x, pointArray[2].y, pointArray[2].x, pointArray[2].y, pointArray[2].x-xoffset, pointArray[2].y+yoffset); |
|
bezierVertex(pointArray[5].x+dif, pointArray[5].y+ext, pointArray[5].x-dif, pointArray[5].y+ext, pointArray[1].x, pointArray[1].y); |
|
bezierVertex(pointArray[6].x-ext, pointArray[6].y+dif, pointArray[6].x-ext, pointArray[6].y-dif, pointArray[3].x-xoffset, pointArray[3].y+yoffset); |
|
bezierVertex(pointArray[3].x, pointArray[3].y, pointArray[3].x, pointArray[3].y, pointArray[3].x+xoffset, pointArray[3].y-yoffset); |
|
bezierVertex(pointArray[7].x-dif, pointArray[7].y-ext, pointArray[7].x+dif, pointArray[7].y-ext, pointArray[0].x, pointArray[0].y); |
|
endShape(); |
|
|
|
//draw outer colour bleed of squash-ball |
|
strokeWeight(m+(size/16)); |
|
stroke(fillCol - 10); |
|
noFill(); |
|
beginShape(); |
|
vertex(pointArray[0].x, pointArray[0].y); |
|
bezierVertex(pointArray[4].x+ext, pointArray[4].y-dif, pointArray[4].x+ext, pointArray[4].y+dif, pointArray[2].x+xoffset, pointArray[2].y-yoffset); |
|
bezierVertex(pointArray[2].x, pointArray[2].y, pointArray[2].x, pointArray[2].y, pointArray[2].x-xoffset, pointArray[2].y+yoffset); |
|
bezierVertex(pointArray[5].x+dif, pointArray[5].y+ext, pointArray[5].x-dif, pointArray[5].y+ext, pointArray[1].x, pointArray[1].y); |
|
bezierVertex(pointArray[6].x-ext, pointArray[6].y+dif, pointArray[6].x-ext, pointArray[6].y-dif, pointArray[3].x-xoffset, pointArray[3].y+yoffset); |
|
bezierVertex(pointArray[3].x, pointArray[3].y, pointArray[3].x, pointArray[3].y, pointArray[3].x+xoffset, pointArray[3].y-yoffset); |
|
bezierVertex(pointArray[7].x-dif, pointArray[7].y-ext, pointArray[7].x+dif, pointArray[7].y-ext, pointArray[0].x, pointArray[0].y); |
|
endShape(); |
|
|
|
//draw outline of squash-ball |
|
strokeWeight(m); |
|
stroke(fillCol - 40); |
|
noFill(); |
|
beginShape(); |
|
vertex(pointArray[0].x, pointArray[0].y); |
|
bezierVertex(pointArray[4].x+ext, pointArray[4].y-dif, pointArray[4].x+ext, pointArray[4].y+dif, pointArray[2].x+xoffset, pointArray[2].y-yoffset); |
|
bezierVertex(pointArray[2].x, pointArray[2].y, pointArray[2].x, pointArray[2].y, pointArray[2].x-xoffset, pointArray[2].y+yoffset); |
|
bezierVertex(pointArray[5].x+dif, pointArray[5].y+ext, pointArray[5].x-dif, pointArray[5].y+ext, pointArray[1].x, pointArray[1].y); |
|
bezierVertex(pointArray[6].x-ext, pointArray[6].y+dif, pointArray[6].x-ext, pointArray[6].y-dif, pointArray[3].x-xoffset, pointArray[3].y+yoffset); |
|
bezierVertex(pointArray[3].x, pointArray[3].y, pointArray[3].x, pointArray[3].y, pointArray[3].x+xoffset, pointArray[3].y-yoffset); |
|
bezierVertex(pointArray[7].x-dif, pointArray[7].y-ext, pointArray[7].x+dif, pointArray[7].y-ext, pointArray[0].x, pointArray[0].y); |
|
endShape(); |
|
|
|
//draw ellipses |
|
var wid = map (values[3], 0, 100, 3, size/3.2); |
|
var dotDist = size/6.4; |
|
fill(fillCol+20); |
|
ellipse(pointArray[0].x-(dotDist*cos(PI/4.0)), pointArray[0].y+(dotDist*sin(PI/4.0)), wid, wid); |
|
ellipse(pointArray[1].x+(dotDist*cos(PI/4.0)), pointArray[1].y-(dotDist*sin(PI/4.0)), wid, wid); |
|
fill(fillCol + 60); |
|
noStroke(); |
|
ellipse(pointArray[0].x-(dotDist*cos(PI/4.0)), pointArray[0].y+(dotDist*sin(PI/4.0)), 2*wid/3.0, 2*wid/3.0); |
|
ellipse(pointArray[1].x+(dotDist*cos(PI/4.0)), pointArray[1].y-(dotDist*sin(PI/4.0)), 2*wid/3.0, 2*wid/3.0); |
|
|
|
//draw decorative lines |
|
stroke(fillCol - 40); |
|
line(pointArray[0].x, pointArray[0].y, pointArray[1].x, pointArray[1].y); |
|
line(pointArray[2].x, pointArray[2].y, pointArray[3].x, pointArray[3].y); |
|
|
|
//draw strap |
|
newSize = map(values[2], 0, 100, 5, size); |
|
var strapWidth = map(values[1], 0, 100, 2, size/2.56); |
|
var dist = strapWidth/2.0; |
|
strokeWeight(m); |
|
fill(fillCol+60); |
|
stroke(fillCol-20); |
|
push(); |
|
rectMode(CENTER); |
|
translate(midx, midy); |
|
rotate(PI/4.0); |
|
rect(0, 0, newSize+(size/16), strapWidth); |
|
fill(fillCol + 35); |
|
noStroke(); |
|
rect(0, 0, newSize+(size/16)-2, strapWidth/2.0) |
|
pop(); |
|
|
|
//draw decorative points |
|
stroke(fillCol - 60); |
|
strokeWeight((size/32)+2); |
|
for (i = 0; i < 2; i++) { |
|
point(pointArray[i].x, pointArray[i].y); |
|
} |
|
} |
|
|
|
function generatePoint(midx, midy, radius, angle) { |
|
var returnPoint = createVector(midx + radius*cos(angle), midy + radius*sin(angle)); |
|
return returnPoint; |
|
} |
|
|
|
/* |
|
* val8 is an array of 8 numbers that range from [0,100] |
|
* size is the number of pixels for width and height |
|
* use p5.js to draw a square color glpyh within the bounding box |
|
*/ |
|
function glyph8(values, size) { |
|
|
|
//set styling |
|
noStroke(); |
|
|
|
//map width of top left square from values |
|
var wid = map(values[0], 0, 100, 2, size/2.0); |
|
|
|
//draw top left square with fill taken from values - dark blue |
|
fill(map(values[4], 0, 100, 0, 255),map(values[4], 0, 100, 50, 255), 255); |
|
rect(size/2.0 - wid, 0, wid, size/2.0); |
|
fill(map(values[4], 0, 100, 0, 255)-55,map(values[4], 0, 100, 50, 255)-55, 200); |
|
rect(size/2.0 - wid, (size/2.0)-(size/20.0), wid, size/20.0); |
|
|
|
//map width of top right square from values |
|
wid = map(values[1], 0, 100, 2, size/2.0); |
|
|
|
//draw top right square with fill taken from values - pink |
|
fill(255,map(values[5], 0, 100, 0, 255), 255); |
|
rect(size/2.0, size/2.0-wid, size/2.0, wid); |
|
fill(200,map(values[5], 0, 100, 0, 255)-55, 200); |
|
rect(size/2.0, size/2.0-wid, size/20.0, wid); |
|
|
|
//map width of bottom right square from values |
|
wid = map(values[2], 0, 100, 2, size/2.0); |
|
|
|
//draw bottom right square with fill taken from values - cyan |
|
fill(map(values[6], 0, 100, 0, 255),255, 255); |
|
rect(size/2.0, size/2.0, wid, size/2.0); |
|
fill(map(values[6], 0, 100, 0, 255)-55,200, 200); |
|
rect(size/2.0, size/2.0, wid, size/20.0); |
|
|
|
//map width of bottom left square from values |
|
wid = map(values[3], 0, 100, 2, size/2.0); |
|
|
|
//draw bottom left square with fill taken from values - yellow |
|
fill(255,255, map(values[7], 0, 100, 0, 255)); |
|
rect(0, size/2.0, size/2.0, wid); |
|
fill(200,200, map(values[7], 0, 100, 0, 255)-55); |
|
rect((size/2.0)-(size/20.0), size/2.0, size/20.0, wid); |
|
|
|
} |