Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

ForceFields

16. November 2012

Aufgabe war es, den vorgegebenen Code der ForceFields (Ext. Lektion 3) zu verändern und eine eigene Version davon zu kreieren. Meine Idee dabei war es, anstatt Linien Zacken darzustellen, die vom Mauszeiger wegzeigen. Dies ergab einen spannenden 3D-Effekt: Es sieht aus als würde sich eine Kugel bewegen, die überall mit Zacken versehen ist. Video 1: ForceFields1 Per Zufall ist noch eine weitere Version davon entstanden, indem die Normalize-Funktion der Anfangspunte der Zacken weggelassen wurde. Video 2: ForceFields2 Code:

ArrayList<ForcePoint>  forcePointList = new ArrayList<ForcePoint>();
int                     borderDist = 30;
int                     gridX = 40;
int                     gridY = 40;

void setup()
{
  size(600,600);

  // setup the grid
  float stepX = (float)(width - borderDist * 2) / (gridX - 1);
  float stepY = (float)(height - borderDist * 2) / (gridY - 1);

  for(int x=0;x < gridX;x++)
  {
    for(int y=0;y < gridY;y++)
    {
      forcePointList.add(new ForcePoint((int)(stepX * x + borderDist),(int)(stepY * y + borderDist),100,0.99f));
    }
  }

}

void draw()
{
  background(0);

  ForcePoint forcePoint;

  for(int i=0;i < forcePointList.size();i++)
  {
    forcePoint = forcePointList.get(i);

    forcePoint.update();
    forcePoint.draw();
  }
}

void mouseDragged()
{
  ForcePoint forcePoint;

  for(int i=0;i < forcePointList.size();i++)
  {
    forcePoint = forcePointList.get(i);

    forcePoint.setInput(mouseX,mouseY);
  }
}
class ForcePoint
{
  int posX;
  int posY;
  float radius;
  PVector dir;

 // PVector dir2;
  float damperValue;
  float maxDist = 50;

  ForcePoint(int x,int y,float radius,float damperValue)
  {
    posX = x;
    posY = y;

    dir = new PVector(0,0);
    this.radius = radius;
    this.damperValue = damperValue;
  }

  void setInput(int mouseX,int mouseY)
  {
    PVector mouseDist = new PVector(mouseX - posX,mouseY - posY);
    if(mouseDist.mag() < radius)
    {
      mouseDist.normalize();
      dir.add(PVector.mult(mouseDist,1));
     // dir2.add(PVector.mult(mouseDist,1));

      // check for max length
      if(dir.mag() > maxDist)
      {
        dir.normalize();
        dir = PVector.mult(dir,maxDist);
      }
    }
  }

  void update()
  {
    dir.mult(damperValue);
  }

  void draw()
  {
    stroke(255);

    //point(posX,posY);
    PVector baseDist = dir.cross(new PVector(0,0,5));
  //  baseDist.normalize();
 //   baseDist.mult(3);        //Breite der Zacken

   // PVector.mult(baseDist,1);

    line(posX-baseDist.x,posY-baseDist.y,-dir.x + posX,-dir.y + posY);

    line(posX+baseDist.x,posY+baseDist.y,-dir.x + posX,-dir.y + posY);

    stroke(255);
  }
}