Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

  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.

 

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();
 }
}