2016-03-28 8 views
0

So habe ich ein Problem, das ich zuvor (durch Zufall) in einfacheren Programmen beheben konnte, aber immer noch nicht weiß, was das eigentliche Problem ist.Verarbeitung Klasse/Objekt Variable stapeln

Ich habe eine Klasse erstellt, die die folgenden Variablen g1.display(tableHr, hrMeasure, 37, 10, 20,160, 0); enthält. Das Problem ist, wenn ich ein Objekt der Klasse ausführen, ist alles in Ordnung und ein nettes Diagramm wird erstellt. Wenn ich jedoch zwei Objekte der Klasse ausführe, läuft der erste Graph im Programm gut und der zweite wird unproportional gemorpht. Fast wie Variablen stapeln oder multiplizieren sich gegenseitig.

Wer kennt dieses Problem?

der Haupt Skizze Code:

Graph g1 = new Graph(); 
Button b1 = new Button(); 

TableRow hrMeasure; 
TableRow spoMeasure; 
TableRow tempMeasure; 

Table tableHr; 
Table tableSpo; 
Table tableAbp; 
Table tableResp; 
Table tableTemp; 

int i; 
int border; 
float p; 

PFont font; 
PFont font2; 
String alarmColor; 


void setup(){ 
    font = loadFont("data/OpenSans-36.vlw"); 
    textFont(font,36); 

    frameRate(15); 
    smooth(8); 
    size(1024,768); 

    tableHr = loadTable("testfile.csv", "header"); 
    tableSpo = loadTable("testfile2.csv", "header"); 
    tableAbp = loadTable("testfile3.csv", "header"); 
    tableResp = loadTable("testfile4.csv", "header"); 
    tableTemp = loadTable("testfile5.csv", "header"); 

} 

void draw(){ 

    retrieveData(); 
    GUI(); 
    relativeGraph(); 
    buttons(); 

    g1.display(tableHr, hrMeasure, 40, 15, 25,200,100); 
// g1.display(tableSpo, spoMeasure, 37, 1, 3,160,2); 
// g1.display(tableTemp, tempMeasure, 37, 1, 3,160,3); 
// g1.display(tableHr, hrMeasure, 37, 13, 18,160,4); 
// g1.display(tableHr, hrMeasure, 37, 13, 18,160,5); 
} 

//retrieving data from the csv file 
void retrieveData(){ 
    i++; 
    hrMeasure = tableHr.getRow(i); 
    spoMeasure = tableSpo.getRow(i); 
    tempMeasure = tableTemp.getRow(i); 
} 

Klasse:

class Graph { 
int adjustment; 
float p; 
int greenRelative, yellowRelative, redRelative; 
float[] measure = new float[1500000]; 
String alarmColor; 
int timer, counter; 
int greenTimer, yellowTimer, redTimer; 
int graphHeight = 80; 
int graphLength = 800; 

void display(Table table, TableRow measurement, int average, int bound1, int bound2,int x, int y){ 

p = measurement.getFloat("value"); 

pushMatrix(); 
translate(width,0); 
scale(-1,1); 

for (int i = 0; i < table.getRowCount(); i++){ 

    adjustment = width-table.getRowCount()-x; // adjustment to the x-coordinate, so every graph will start at 0 

//if statement for green readings 
    if(measure[i] > average-bound1 && measure[i] < average+bound1){  
    stroke(0, 255, 0); 
    strokeWeight(1); 
    alarmColor = "green"; 
}else{ 

//if statement for yellow readings 
    if(measure[i] <= average-bound1 && measure[i] > average-bound2|| measure[i] >= average+bound1 && measure[i] < average+bound2){ 
    stroke(255, 255, 0); 
    strokeWeight(1); 

    alarmColor = "yellow"; 

//else red 
}else{stroke(255, 0, 0); 
    strokeWeight(1); 

    alarmColor = "red"; 
}} 
line(i+adjustment, graphHeight-map(measure[i], average-bound1-bound2, 37, 0,graphHeight/2)+y, (i+1)+adjustment, graphHeight-map(measure[i+1], average-bound1-bound2, 37, 0,graphHeight/2)+y); 
} 
popMatrix(); 

for(int i=0; i < table.getRowCount(); i++){ 
measure[i] = measure[i+1]; 
measure[i+1] = p; 
println(measure[i]); 
} 
+0

Die Haupt Skizze der Graphen mit nicht sichtbar ist, deshalb ist es schwer zu sagen, ob das Problem damit zusammenhängt, wie die Diagramme gezeichnet werden (und Systemkoordinatentransformationen) oder die verwendeten Daten (z.B Hat jeder Graph eine separate Tabelleninstanz? etc.) –

+0

Ich poste die Hauptskizze –

+0

Im aktuellen Code kann eine einzelne Grafik Instanz sehen. –

Antwort

1

Stellen Sie sicher, Sie unabhängige Instanzen verwenden zum Beispiel:

Graph g1 = new Graph(); 
Graph g2 = new Graph(); 

dann in draw():

g1.display(tableHr, hrMeasure, 40, 15, 25,200,100); 
g2.display(tableSpo, spoMeasure, 37, 1, 3,160,2); 

Vollständige Auflistung:

Graph g1 = new Graph(); 
Graph g2 = new Graph(); 
Graph g3 = new Graph(); 
Graph g4 = new Graph(); 
Graph g5 = new Graph(); 
Button b1 = new Button(); 

TableRow hrMeasure; 
TableRow spoMeasure; 
TableRow tempMeasure; 

Table tableHr; 
Table tableSpo; 
Table tableAbp; 
Table tableResp; 
Table tableTemp; 

int i; 
int border; 
float p; 

PFont font; 
PFont font2; 
String alarmColor; 


void setup(){ 
    font = loadFont("data/OpenSans-36.vlw"); 
    textFont(font,36); 

    frameRate(15); 
    smooth(8); 
    size(1024,768); 

    tableHr = loadTable("testfile.csv", "header"); 
    tableSpo = loadTable("testfile2.csv", "header"); 
    tableAbp = loadTable("testfile3.csv", "header"); 
    tableResp = loadTable("testfile4.csv", "header"); 
    tableTemp = loadTable("testfile5.csv", "header"); 

} 

void draw(){ 

    retrieveData(); 
    GUI(); 
    relativeGraph(); 
    buttons(); 

    g1.display(tableHr, hrMeasure, 40, 15, 25,200,100); 
    g2.display(tableSpo, spoMeasure, 37, 1, 3,160,2); 
    g3.display(tableTemp, tempMeasure, 37, 1, 3,160,3); 
    g4.display(tableHr, hrMeasure, 37, 13, 18,160,4); 
    g5.display(tableHr, hrMeasure, 37, 13, 18,160,5); 
} 

//retrieving data from the csv file 
void retrieveData(){ 
    i++; 
    hrMeasure = tableHr.getRow(i); 
    spoMeasure = tableSpo.getRow(i); 
    tempMeasure = tableTemp.getRow(i); 
} 

class Graph { 
int adjustment; 
float p; 
int greenRelative, yellowRelative, redRelative; 
float[] measure = new float[1500000]; 
String alarmColor; 
int timer, counter; 
int greenTimer, yellowTimer, redTimer; 
int graphHeight = 80; 
int graphLength = 800; 

void display(Table table, TableRow measurement, int average, int bound1, int bound2,int x, int y){ 

p = measurement.getFloat("value"); 

pushMatrix(); 
translate(width,0); 
scale(-1,1); 

for (int i = 0; i < table.getRowCount(); i++){ 

    adjustment = width-table.getRowCount()-x; // adjustment to the x-coordinate, so every graph will start at 0 

//if statement for green readings 
    if(measure[i] > average-bound1 && measure[i] < average+bound1){  
    stroke(0, 255, 0); 
    strokeWeight(1); 
    alarmColor = "green"; 
}else{ 

//if statement for yellow readings 
    if(measure[i] <= average-bound1 && measure[i] > average-bound2|| measure[i] >= average+bound1 && measure[i] < average+bound2){ 
    stroke(255, 255, 0); 
    strokeWeight(1); 

    alarmColor = "yellow"; 

//else red 
}else{stroke(255, 0, 0); 
    strokeWeight(1); 

    alarmColor = "red"; 
}} 
line(i+adjustment, graphHeight-map(measure[i], average-bound1-bound2, 37, 0,graphHeight/2)+y, (i+1)+adjustment, graphHeight-map(measure[i+1], average-bound1-bound2, 37, 0,graphHeight/2)+y); 
} 
popMatrix(); 

for(int i=0; i < table.getRowCount(); i++){ 
measure[i] = measure[i+1]; 
measure[i+1] = p; 
println(measure[i]); 
} 
+0

Eine weitere Folgefrage: Ist es auch möglich, ein Array von sich bewegenden Objekten zu erstellen? Wenn ich versuche ein Array zu erstellen, Es scheint, das Problem besteht immer noch. –

+0

Können Sie bitte eine separate Frage, so dass ich sehen kann, wie Sie versucht haben, die Array-Version zu implementieren? –

+0

Sicher, ich werde den Link in ein paar Minuten. –