2017-01-14 2 views
1

Ich versuche, einen Vektor zu drehen, den ich im Illustrator unter Verwendung der Verarbeitung erstellt habe. Ich möchte, dass dieser Vektor aus seiner Mitte gedreht wird, so dass er sich zu drehen scheint, als würde er sich um einen unsichtbaren Punkt bewegen. Unten ist mein Versuch:wechselndes Drehzentrum für eine Form in Bearbeitung

PShape WOE; 

void setup(){ 
    WOE = loadShape("WOE.svg"); 
    size (500, 500); 
    smooth(); 
} 

void draw(){ 
    background(20); 
    shape(WOE, width/2, height/2, WOE.width, WOE.height); //draw shape in "center" of canvas (250, 250) 
    translate(-WOE.width/2, -WOE.height/2); //move shape so that center of shape is aligned with 250, 250 
    WOE.rotate(0.01); 
} 

Aus rein logischen Sicht dieser sollte Arbeit, jedoch führt dies in dem Vektor um die Mitte der Leinwand zu drehen, aber etwa 100px entfernt. Ich habe versucht, shapeMode(CENTER); zu verwenden, aber das verursacht leider keine Verbesserung. Hoffe jemand kann helfen, danke!

Für Referenz Hier ist WOE.svg: https://www.dropbox.com/s/jp02yyfcrrnep93/WOE.svg?dl=0

+0

Können Sie bitte die Dateien 'LC.svg' und' WOE.svg' bereitstellen? Möglicherweise möchten Sie dies auch als [tag: java] -Frage entmarkieren, da dies für Processing spezifisch ist. –

+0

@KevinWorkman siehe oben, LC.svg wird derzeit nicht animiert, bitte ignorieren Sie es. – Arkadelic

+0

Ich versuche nicht, nervig zu sein, aber wir brauchen die Datei '.svg', um den Code auszuführen. Und wenn wir etwas in Ihrem Code ignorieren sollten, ist es wahrscheinlich besser, es einfach zu löschen. Siehe auch: [mcve]. –

Antwort

1

Ich denke, ein Teil des Problems ist, dass Sie mischen die Form zu drehen und die gesamte Skizze zu übersetzen. Ich würde versuchen, bei dem einen oder dem anderen zu bleiben: entweder die gesamte Skizze übersetzen und drehen oder nur die Form übersetzen und drehen.

Das gesagt, ich bin nicht überrascht, das gab dir Ärger.

Ich würde erwarten diese Arbeit:

PShape WOE; 

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

    WOE = loadShape("WOE.svg"); 
    WOE.translate(-WOE.width/2, -WOE.height/2); 
} 

void draw() { 
    background(20); 
    WOE.rotate(.01); 
    shape(WOE, width/2, height/2); 
} 

Dies ist jedoch zeigt die gleiche nicht in der Mitte Verhalten, das Sie bemerken. Aber wenn ich zum P2D Renderer wechsle, funktioniert es gut!

size (500, 500, P2D); 

Jetzt ist die Form im Fenster zentriert und dreht sich um das Zentrum der Form. Der Unterschied zwischen den Renderern scheint fehlerhaft zu sein, aber ich kann keinen offenen Bug auf GitHub finden. Edit: Ich fand this SO Frage, die zu this GitHub Problem führen.

In jedem Fall könnte es einfacher sein, die gesamte Skizze statt der Form zu drehen:

PShape WOE; 
float rotation = 0; 

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

    WOE = loadShape("WOE.svg"); 
    shapeMode(CENTER); 
} 

void draw() { 
    background(20); 

    translate(width/2, height/2); 
    rotate(rotation); 
    shape(WOE); 

    rotation += .01; 
} 

Dieser Code durch die Übersetzung der gesamte Skizze bis zur Mitte des Fensters funktioniert, dann die gesamte Skizze drehen, dann zeichne die Form. Denken Sie daran, die Kamera zu bewegen, anstatt die Form zu bewegen. Wenn Sie andere Zeichen zeichnen müssen, können Sie die Transformation mit den Funktionen pushMatrix() und popMatrix() isolieren. Dies funktioniert im Standard-Renderer und im Renderer P2D.

Verwandte Themen