-
Notifications
You must be signed in to change notification settings - Fork 0
/
paintbrushes.js
180 lines (132 loc) · 4.72 KB
/
paintbrushes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
function pen() {
// set the brush style
strokeWeight(brushSize)
// draw a line from current mouse point to previous mouse point
line(mouseX, mouseY, pmouseX, pmouseY)
}
function marker() {
// set the brush style
noStroke()
// draw a circle at the current mouse point
circle(mouseX, mouseY, brushSize * 20)
}
function beads() {
// set the brush style
noStroke()
// find the distance between the current and previous mouse points
const distance = dist(mouseX, mouseY, pmouseX, pmouseY)
// find the midpoint between the current and previous mouse points
const midX = (mouseX + pmouseX) / 2
const midY = (mouseY + pmouseY) / 2
// draw a circle at the midpoint, with distance as its diameter
circle(midX, midY, distance)
}
function wiggle() {
// set the brush style
strokeWeight(brushSize)
noFill()
// find the distance between the current and previous mouse points
const distance = dist(mouseX, mouseY, pmouseX, pmouseY)
// find the midpoint between the current and previous mouse points
const midX = (mouseX + pmouseX) / 2
const midY = (mouseY + pmouseY) / 2
// find the angle of the direction the mouse is moving in
const angle = Math.atan2(mouseY - pmouseY, mouseX - pmouseX)
// find which way to flip the arc
const flip = (frameCount % 2) * PI
// draw the arc as a half circle
arc(midX, midY, distance, distance, angle + flip, angle + PI + flip)
}
function toothpick() {
// set the brush style
noStroke()
// move the origin (0,0) to the current mouse point
translate(mouseX, mouseY)
// find the angle of the direction the mouse is moving in
// then rotate the canvas by that angle
const angle = Math.atan2(mouseY - pmouseY, mouseX - pmouseX)
rotate(angle)
// set minumum width and height of the toothpick-shaped ellipse
const minSize = 4
// find the distance between current mouse point and previous mouse point
const distance = dist(mouseX, mouseY, pmouseX, pmouseY)
// draw the toothpick-shaped ellipse
ellipse(0, 0, distance * 2 * brushSize + minSize , minSize)
}
function fountainPen() {
// set the brush style
strokeWeight(brushSize)
const width = 5
// set the number of times we lerp the line in the for loop
const lerps = 16
// repeat the slanted line with lerping
for (let i = 0; i <= lerps - 1; i++) {
// find the lerped x and y coordinates between the mouse points
const x = lerp(mouseX, pmouseX, i / lerps)
const y = lerp(mouseY, pmouseY, i / lerps)
// draw a slanted line
line(x - width, y - width, x + width, y + width)
}
}
function splatter() {
// set the brush style
strokeWeight(brushSize * 2)
// set the number of times we lerp the point in the for loop
const lerps = 8
// repeat the point with lerping
for (let i = 0; i < lerps; i++) {
// find lerped x and y coordinates of the point
const x = lerp(mouseX, pmouseX, i / lerps + lerps)
const y = lerp(mouseY, pmouseY, i / lerps + lerps)
// draw a point
point(x, y)
}
}
function hatching() {
// set the brush style
strokeWeight(brushSize)
// calculate the speed of the mouse
let speed = abs(mouseX - pmouseX) + abs(mouseY - pmouseY)
// make a vector by inverting X and Y values
const vector = createVector(mouseY - pmouseY, mouseX - pmouseX)
// set the vector magnitude (the line length) based on the mouse speed
vector.setMag(speed / 2)
// set the number of times we lerp the line
const lerps = 3
// repeat the line with lerping
for (let i = 0; i < lerps; i++) {
// find the lerped X and Y coordinates
const x = lerp(mouseX, pmouseX, i / lerps)
const y = lerp(mouseY, pmouseY, i / lerps)
// draw a line
line(x - vector.x, y - vector.y, x + vector.x, y + vector.y)
}
}
function sprayPaint() {
// set the brush style
strokeWeight(brushSize * 0.1)
// find the speed of the mouse movement
const speed = abs(mouseX - pmouseX) + abs(mouseY - pmouseY)
// set minimum radius and spray density of spraypaint brush
const minRadius = 10
const sprayDensity = 80
// find radius of the spray paint brush and radius squared
const r = speed + minRadius
const rSquared = r * r
// set the number of times we lerp the points in the for loop
const lerps = 10
// repeat the random points with lerping
for (let i = 0; i < lerps; i++) {
// find the lerped X and Y coordinates
const lerpX = lerp(mouseX, pmouseX, i / lerps)
const lerpY = lerp(mouseY, pmouseY, i / lerps)
// draw a bunch of random points within a circle
for (let j = 0; j < sprayDensity; j++) {
// pick a random position within the circle
const randX = random(-r, r)
const randY = random(-1, 1) * sqrt(rSquared - randX * randX)
// draw the random point
point(lerpX + randX, lerpY + randY)
}
}
}