Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image RemovedImage Added

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);
    smoothstroke(0);
  
 
  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) {
    PVector _reactor  = reactor.copy();
    float reactorDistance = dist(_reactor.x, _reactor.y, _pos.x, _pos.y);
 
    float scaler = reactorDistance*reactorScaler;

 
   PVector _reactor  = reactor.copysub(_pos); // subtract VectorLines position from  stroke(0);
      _reactor.sub(_pos);
 the reactors position, this effectively gives a reactor coordinate relative to our VectorLine coordinate
    _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.

Image Removed Image Added

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.getcopy();

  stroke(0);  _reactor.sub(_pos);
    _vector = _reactor.getcopy();
    _vector.normalize();
    _vector.rotate(PI/4);

    PVector _pointTwo = _vector.getcopy();
    _pointTwo.rotate(PI/2);
    _pointTwo.mult(8);

    PVector _pointTree = _pointTwo.getcopy();
    _pointTree.rotate(PI/2);

    PVector _pointFour = _pointTree.getcopy();
    _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);noStroke();
    fill(255, 0, 0);

  fill(100, 100, 100beginShape();
  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();
  }
}