Hilfe mit Java Code

vogel232002

Neues Mitglied
Kann mir jemand erklären was bei dem Programm in Zeile 4-10, 38 und 54 passiert?

Java:
int[][] result;
float t, c;

float ease(float p) {
  return 3*p*p - 2*p*p*p;
}

float ease(float p, float g) {
  return 1 - 0.8 * pow(2*(1 - p), g);
}


int numFrames = 300;

void setup() {
  size(800, 800, P3D);
  rectMode(CENTER);
  result = new int[width*height][3];
  fill(2);
  blendMode(EXCLUSION);
  noStroke();
}

color[] cs = { #00EDEB, #ED00D6, #0700ED};

float x, y, z, tt;
int N = 15;
int L = 20;
float r = 20, sp = 1.9*r;
float shift, dd, rot;

void draw() {
  background(0);
  push();

  translate(width/2, height/2); 
 
  t = (millis()/(20.0*numFrames))%1;
    
  for (int a=0; a<3; a++) {
    fill(cs[a]);
    for (int i=-N; i<N; i++) {
      for (int j=-N; j<N; j++) {
        x = (i+.1)*L;
        y = (j+.1)*L;
        
        if (j%2 != 0)
          x += 0.5*sp;
          
        dd = dist(x, y, 0, 0)/160.0;
          
        tt = 2 * t - dd + 0.02*a;
        
        shift = lerp(1, 0.9, ease(map(cos(TWO_PI*tt), 1, -1, 0, 1), 3));
      
        push();
        translate(x*shift, y*shift);
        ellipse(6, 6, 6, 6);
        pop();
      }
    }
  }
  pop();
}
 
Zeile 4-6:
Du hast da eine Methode, die einen Wert vom Typ float erwartet, mit diesem etwas herumrechnet (3xp² - 2xp³) und von diesem Herumgerechne das Ergebnis zurückliefert – als float.

Zeile 8-10:
Dito wie in Zeile 4-6, nur daß da die Rechnung eine andere ist. Pow ist eine Potenzfunktion (englsch: raise x to power of y, -> x^y). Außerdem erwartet die Methode zwei Parameter anstelle von nur einem.

Zeile 38:
millis() liefert vermutlich eine Zeit in Millisekunden. numFrames wird irgendwo mit 300 initialisiert und soweit ich weiß nicht überschrieben, soll wohl eine Konstante "Anzahl der Bilder" (number of frames). Das %1 am Ende ist die Modulofunktion und so eigentlich Schwachsinn, denn irgendwas geteilt durch Eins ergibt als Rest immer null.
Und daher wird t in Zeile 38 immer zu 0 berechnet, egal was in numFrames steht oder was millis() liefert.

Zeile 54:
Fangen wir mal in der Mitte an: Da wird die cos-Funktion auf Zwei_Pi*tt angewandt, wobei tt direkt in der vorherigen Zeile berechnet wird. Was tt sein soll weiß ich nicht, ich vermute hinter diesem Ausdruck aber den Versuch, etwas periodisch machen zu wollen.
Jedenfalls wird dieses Zwischenergebnis cos(Zwo_Pi*tt) durch eine unbekannte Methode map durchgejagt. Was map macht weiß man nicht, die Methode steht nicht in deinem Code, und dann an die Methode ease weitergereicht – die zweite Methode, die zwei Parameter entgegen nimmt.
Das Ergebnis von ease wird dann in der Methode lerp weiterverarbeitet, was die Methode macht – keine Ahnung, der Code steht nicht da. Das Ergebnis wird jedenfalls nach shift geschrieben.


Das scheint zwar wenig hilfreich zu sein, es ist auf jedenfall nicht sehr ausdrucksstark und die vielen Querverweise im Text machen es nicht besser, aber so ist das halt mit schlechtem Quellcode. Ist nicht böse gemeint falls du das geschrieben hast – sowas hätte ich irgendwann auch mal abgeliefert – aber es nutzt ja nix es schön zu reden.

Nachtrag:
millis() liefert die aktuelle Zeit in Millisekunden. Also den Wert, der herauskommen würde, wenn irgendjemand seit (ich meine es war) 01. 01. 1970 alle Millisekunden gezählt hätte.
 
Mir hat es tatsächlich sehr weitergeholfen, ist nämlich nicht mein Code, weshalb es mir schwergefallen ist zu verstehen, was das passiert. Deshalb vielen Dank für die Erklärung!
 

Neue Themen


Zurück
Oben