-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrush.js
124 lines (112 loc) · 2.84 KB
/
brush.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
const sketch = (p) => {
let x = 100;
let y = 100;
let brushSize = 17;
let f = false;
let spring = 2.5;
let friction = 0.4;
let v = 0.5;
let r = 0;
let vx = 0;
let vy = 0;
let splitNum = 100;
let diff = 2;
let strokeColor;
p.setup = function () {
const canvasWidth = document.getElementById("question-detail").offsetWidth;
const canvasHeight =
document.getElementById("question-detail").offsetHeight;
p.createCanvas(canvasWidth - 50, canvasHeight - 50).parent(
"question-detail"
);
p.background(255);
createColorSquares();
};
p.draw = function () {
p.stroke(strokeColor || p.color(0, 0, 255));
if (p.mouseIsPressed) {
if (!f) {
f = true;
x = p.mouseX;
y = p.mouseY;
}
vx += (p.mouseX - x) * spring;
vy += (p.mouseY - y) * spring;
vx *= friction;
vy *= friction;
v += p.sqrt(vx * vx + vy * vy) - v;
v *= 0.55;
let oldR = r;
r = brushSize - v;
for (let i = 0; i < splitNum; ++i) {
let oldX = x;
let oldY = y;
x += vx / splitNum;
y += vy / splitNum;
oldR += (r - oldR) / splitNum;
if (oldR < 1) {
oldR = 1;
}
p.strokeWeight(oldR + diff);
p.line(
x + p.random(0, 2),
y + p.random(0, 2),
oldX + p.random(0, 2),
oldY + p.random(0, 2)
);
p.strokeWeight(oldR);
p.line(
x + diff * p.random(0.1, 2),
y + diff * p.random(0.1, 2),
oldX + diff * p.random(0.1, 2),
oldY + diff * p.random(0.1, 2)
);
p.line(
x - diff * p.random(0.1, 2),
y - diff * p.random(0.1, 2),
oldX - diff * p.random(0.1, 2),
oldY - diff * p.random(0.1, 2)
);
}
} else if (f) {
vx = vy = 0;
f = false;
}
};
function createColorSquares() {
p.fill(255, 0, 0);
p.rect(10, 10, 30, 30);
p.fill(0, 255, 0);
p.rect(50, 10, 30, 30);
p.fill(0, 0, 255);
p.rect(90, 10, 30, 30);
}
p.mouseClicked = function () {
if (p.mouseX >= 10 && p.mouseX <= 40 && p.mouseY >= 10 && p.mouseY <= 40) {
strokeColor = p.color(255, 0, 0);
} else if (
p.mouseX >= 50 &&
p.mouseX <= 80 &&
p.mouseY >= 10 &&
p.mouseY <= 40
) {
strokeColor = p.color(0, 255, 0);
} else if (
p.mouseX >= 90 &&
p.mouseX <= 120 &&
p.mouseY >= 10 &&
p.mouseY <= 40
) {
strokeColor = p.color(0, 0, 255);
}
};
p.windowResized = function () {
const containerWidth =
document.getElementById("question-detail").offsetWidth;
const containerHeight =
document.getElementById("question-detail").offsetHeight;
p.resizeCanvas(containerWidth - 50, containerHeight - 50);
p.background(255);
};
};
new p5(sketch);