...
Code Block |
---|
int gridWidth = 40; int gridHeight = 40; int screenWidth = 700; int screenHeight = 700; int xOffset; int yOffset; int distX; int distY; PVector reactorPosition; ArrayList <VectorLine> vectLineList = new ArrayList<VectorLine>(); void setup() { reactorPosition = new PVector(0, 0); size(700, 700); background(255); smooth(); int xOffset = floor(width/2-(distX*gridWidth/2)); int yOffset = floor(height/2-(gridHeight*distY/2)); int distX = width/gridWidth+1; int distY = height/gridHeight+1; for (int i = 0; i<gridWidth; i++ ) { for (int j = 0; j<gridHeight; j++ ) { vectLineList.add(new VectorLine(i*distX, j*distY)); } } }; void draw() { background(255); for (int i = 0; i<vectLineList.size(); i++ ) { vectLineList.get(i).draw(reactorPosition); }; }; void mouseMoved() { reactorPosition.x = mouseX; reactorPosition.y = mouseY; }; class VectorLine { PVector _pos; PVector _vector; float reactorScaler = .07; VectorLine(int x, int y) { _vector = new PVector(0, 5); _pos = new PVector(x, y); _vector.add(_pos); } void draw(PVector reactor) { float reactorDistance = dist(reactor.x, reactor.y, _pos.x, _pos.y); float scaler = reactorDistance*reactorScaler; PVector _reactor = reactor.copy(); stroke(0); _reactor.sub(_pos); _vector = _reactor.copy(); _vector.normalize(); _vector.rotate(PI/4); // _vector.mult(scaler); _vector.add(_pos); line(_pos.x, _pos.y, _vector.x, _vector.y); ellipse(_vector.x, _vector.y, 5, 5); } } |
Example
This is an example solution for the exercises to create a tear-drop form.
Code Block |
---|
int gridWidth = 20;
int gridHeight = 20;
int screenWidth = 700;
int screenHeight = 700;
int xOffset;
int yOffset;
int distX;
int distY;
PVector reactorPosition;
ArrayList <VectorLine> vectLineList = new ArrayList<VectorLine>();
void setup() {
reactorPosition = new PVector(0, 0);
size(700, 700);
int xOffset = floor(width/2-(distX*gridWidth/2));
int yOffset = floor(height/2-(gridHeight*distY/2));
int distX = width/gridWidth+1;
int distY = height/gridHeight+1;
background(255);
smooth();
for (int i = 0; i<gridWidth; i++ ) {
for (int j = 0; j<gridHeight; j++ ) {
vectLineList.add(new VectorLine(i*distX, j*distY));
}
}
};
void draw() {
background(255);
for (int i = 0; i<vectLineList.size(); i++ ) {
vectLineList.get(i).draw(reactorPosition);
};
};
void mouseMoved() {
reactorPosition.x = mouseX;
reactorPosition.y = mouseY;
};
class VectorLine {
PVector _pos;
PVector _vector;
float reactorScaler = .1;
VectorLine(int x, int y) {
_vector = new PVector(0, 5);
_pos = new PVector(x, y);
_vector.add(_pos);
}
void draw(PVector reactor) {
float reactorDistance = dist(reactor.x, reactor.y, _pos.x, _pos.y);
float scaler = reactorDistance*reactorScaler;
point(_pos.x, _pos.y);
PVector _reactor = reactor.get();
stroke(0);
_reactor.sub(_pos);
_vector = _reactor.get();
_vector.normalize();
_vector.rotate(PI/4);
PVector _pointTwo = _vector.get();
_pointTwo.rotate(PI/2);
_pointTwo.mult(8);
PVector _pointTree = _pointTwo.get();
_pointTree.rotate(PI/2);
PVector _pointFour = _pointTree.get();
_pointFour.rotate(PI/2);
_pointTwo.add(_pos);
_pointTree.add(_pos);
_pointFour.add(_pos);
_vector.mult(scaler);
_vector.add(_pos);
fill(0, 0, 0);
line(_pos.x, _pos.y, _vector.x, _vector.y);
fill(255, 0, 0);
fill(100, 100, 100);
beginShape();
curveVertex(_vector.x, _vector.y);
curveVertex(_vector.x, _vector.y);
curveVertex(_pointTwo.x, _pointTwo.y);
curveVertex(_pointTree.x, _pointTree.y);
curveVertex(_pointFour.x, _pointFour.y);
curveVertex(_vector.x, _vector.y);
curveVertex(_vector.x, _vector.y);
endShape();
}
}
|