processing鼠标手写后向外生长代码
时间: 2023-08-09 15:12:29 浏览: 86
以下是一个简单的 Processing 鼠标手写后向外生长的例子代码:
```java
// 定义一个空的 ArrayList 用于存储手写的坐标
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(800, 600);
stroke(255); // 设置笔画为白色
strokeWeight(3); // 设置笔画宽度为 3
noFill(); // 不填充形状
}
void draw() {
background(0); // 设置背景为黑色
// 如果 points 数组中有坐标,则画出手写的形状
if (points.size() > 0) {
beginShape();
for (int i = 0; i < points.size(); i++) {
PVector pt = points.get(i);
vertex(pt.x, pt.y);
}
endShape();
}
// 如果鼠标被按下,则将当前鼠标坐标添加到 points 数组中
if (mousePressed) {
points.add(new PVector(mouseX, mouseY));
}
}
// 当鼠标松开时,将 points 数组中的坐标向外生长
void mouseReleased() {
// 定义向外生长的距离
float growth = 50;
// 创建一个新的 ArrayList 用于存储向外生长后的坐标
ArrayList<PVector> newPoints = new ArrayList<PVector>();
// 遍历 points 数组中的每个坐标
for (int i = 0; i < points.size(); i++) {
PVector pt = points.get(i);
// 计算当前点和下一个点之间的向量
PVector vec = new PVector();
if (i < points.size() - 1) {
PVector nextPt = points.get(i+1);
vec.set(nextPt);
vec.sub(pt);
}
// 将当前点向外生长 growth 的距离,并添加到 newPoints 数组中
vec.normalize();
vec.rotate(HALF_PI); // 旋转向量 90 度,使其垂直于当前方向
vec.mult(growth);
PVector newPt = PVector.add(pt, vec);
newPoints.add(newPt);
}
// 将新的坐标替换原来的坐标
points.clear();
points.addAll(newPoints);
}
```
这个例子中,我们首先定义一个空的 ArrayList 用于存储手写的坐标。在 `draw()` 函数中,如果 points 数组中有坐标,则画出手写的形状。如果鼠标被按下,则将当前鼠标坐标添加到 points 数组中。
当鼠标松开时,我们将 points 数组中的坐标向外生长。具体来说,我们遍历 points 数组中的每个坐标,计算当前点和下一个点之间的向量,将当前点向外生长一定距离,并将新的坐标添加到一个新的 ArrayList 中。最后,将新的坐标替换原来的坐标,以实现向外生长的效果。
阅读全文