2016-03-25 2 views
0

Wie kann ich Sub-Pixel-Genauigkeit in der Position der Punkte erhalten, die unten gezeichnet sind? Es wird nur ganzzahlige Genauigkeit verwendet - was das beobachtete Wobbeln der sich bewegenden Punkte verursacht.rotieren/zeigen mit Sub-Pixel-Genauigkeit

int amount = 300; 
float[] x = new float[amount]; 
float[] y = new float[amount]; 
float[] z = new float[amount]; 

void setup() { 
    size(500, 400, P3D); 
    stroke(255); 
    strokeWeight(1); 
    for(int i = 0; i<amount; i++) { 
    x[i] = float(random(-150, 150)); 
    y[i] = float(random(-150, 150)); 
    z[i] = float(random(-150, 150)); 
    } 
} 
void draw() { 
    background(0); 

    translate(width/2, height/2); 

    rotateX(-0.1); 
    rotateY((frameCount/1000)*1); 

    for(int i = 0; i<amount; i++) { 
    point(x[i], y[i]/22, z[i]); 
    } 
} 

Antwort

-1

Dies ist das gleiche Problem wie Ihre andere Frage. Sie verwenden Ganzzahldivision, die den Dezimalteil abschneidet.

Diese Zeile:

rotateY((frameCount/1000)*1); 

muss dies sein:

rotateY((frameCount/1000.0)*1); 

Für die Zukunft, Probleme wie diese sind leicht durch einige Debugging entdeckt. Sie müssen durch Ihr Programm gehen und jede Annahme testen, die Sie machen. Mit anderen Worten, alles ausdrucken. Zum Beispiel:

println(frameCount/1000); 

Diese Zeile hätte Ihnen Ihr gesamtes Problem gezeigt.

+0

Danke, aber diese Änderung machte überhaupt keine sichtbare Verbesserung. – ChrisJJ

+0

@ChrisJJ Umm, bist du sicher? Das Ausführen des Codes mit dieser Änderung funktioniert perfekt für mich. –

+0

@ChrisJJ Es gibt noch eine weitere Änderung, die Sie möglicherweise benötigen. Die Zeilen, die 'float (random (-150, 150)) verwenden;' kompilieren nicht für mich, da der von 'random()' zurückgegebene Wert bereits ein 'float' ist, also in 'float()' übergeben wird Funktion ist nicht gültig. Machen Sie einfach, dass diese Zeilen 'random (-150, 150);' anstatt des 'float()' -Teils verwenden. –