Ich habe in den letzten Tagen ein Programm mit Processing 3 erstellt (das erste Mal ging ich zurück auf Processing seit Intro to Computer Science im Jahr 2009) und behielt dieses Problem :Eingebaute Variablen, die in bestimmten Fällen nicht verwendbar sind (Verarbeitung 3)
public class PolarMap {
...
PVector[][] mapping = new PVector[width][height];
PVector[][] cartesian = new PVector[width][height];
PVector cart = new PVector();
PVector polar = new PVector();
/**
Maps every pixel on the cartesian plane to a polar coordinate
relative to some origin point.
*/
public void Map(float originX, float originY){
for (int x=0; x < width; x++){
for (int y=0; y < height; y++){
...
cart.add(x, y);
polar.add(r, theta);
mapping[x][y] = polar; ***
cartesian[x][y] = cart;
}
}
}
...
}
Auf der Linie mit dem ***, würde ich immer ein Array Index Out Of Bounds geworfen bekommen. Ich suchte SO, Reddit und Processing eigene Dokumentation, um herauszufinden, warum. Wenn Sie mit der Verarbeitung nicht vertraut sind, sind Breite und Höhe beides eingebaute Variablen und entsprechen der Anzahl der Pixel hoch und über Ihre Zeichenfläche hinweg, wie in der setup() -Methode deklariert (in meinem Fall 800x800). Aus irgendeinem Grund wurden beide Arrays nicht auf diesen Wert initialisiert - stattdessen wurden sie auf den Standardwert dieser Variablen initialisiert: 100.
Also, weil es keinen Sinn machte, aber es war eine dieser Zeiten, ich versucht, neue Variablen zu deklarieren:
int high = height;
int wide = width;
und initialisiert das Array mit diesen Variablen. Und wusstest du das nicht, das hat das Problem gelöst. Ich habe jetzt zwei 800x800-Arrays.
Also hier ist meine Frage: WARUM waren die eingebauten Variablen nicht wie erwartet, wenn verwendet, um die Arrays zu initialisieren, aber tat genau das, was sie sollten, wenn sie einer definierten Variablen zugewiesen?
Der problematische Array-Initialisierer und die Deklaration der Arbeitsvariablen befinden sich beide in demselben Bereich, weit entfernt von der Methode setup() in der Hauptklasse. Allerdings .... Es ist mir gerade eingefallen, dass ich Map (originX, originY) mit einem Wert fütterte, der über der setup() -Methode in der Hauptklasse deklariert wurde. Basierend auf dem, was Sie gerade geschrieben haben, vermute ich * das * war der Ursprung meines Problems. Und nachdem Sie es getestet haben, haben Sie absolut Recht! Cool, danke! – pyansharp
@pyansharp Ja, es hat nichts direkt mit dem Bereich zu tun, es ist alles in der Reihenfolge der Ereignisse. Eine einfache Möglichkeit wäre es, 'print()' Anweisungen hinzuzufügen, um zu sehen, was zuerst passiert, aber wenn 'width' und' height' '100' sind, dann wird 'size()' noch nicht aufgerufen. –