[Processing] Bild um Punkt drehen

  • Java

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    [Processing] Bild um Punkt drehen

    Hallo,

    ich möchte, dass sich ein Bild um einen bestimmten Punkt des Fensters dreht.

    Ich habe nur folgenden Code für das Drehen eines Rechtecks um die eigene Achse gefunden:

    Java-Quellcode

    1. float angle;
    2. void setup() {
    3. size(500, 500);
    4. smooth();
    5. angle = 0;
    6. }
    7. void draw() {
    8. background(150);
    9. rectMode(CENTER);
    10. translate(250, 250);
    11. rotate(radians(angle));
    12. rect(0, 0, 200, 200);
    13. angle += 1;
    14. }


    Ich hatte auch schonmal einen für ein Bild, aber finde den Link nicht mehr :/

    Wie muss ich diesen Code umschreiben, dass er sich um einen bestimmten Punkt dreht?

    Hoffe, jemand kann helfen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    google.at/#q=site:processing.org+rotate+image

    Genauso, nur dass du das ganze mit image() zeichnest und nicht mit rect().
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Hallo @BiedermannS

    Das ist genau das gleich wie oben nur für Images, aber ich mag das Bild um einen bestimmten Punkt drehen (siehe Spoiler)


    Aber trotzdem danke wegen dem Link :)

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hi,

    das sollte für ein Image so ähnlich gehen. Bei einem Rectangle kannst du rectMode auf CENTER setzen. Da dies bei einem Image nicht geht, musst du die Location auf -image_width/2 und -image_height/2 setzen, wobei image_width und image_height jeweils Breite und Höhe des Bildes sind. Dasselbe funktioniert im Umkehrschluss auch für ein Rechtangle, falls rectMode(CENTER) nicht zur Verfügung stünde:

    Java-Quellcode

    1. int w = 100;
    2. int h = 100;
    3. //Und rectMode ist hier dann auf CORNER.
    4. rect(-w/2, -h/2, w, h);


    //EDIT: doch eigl gibt's imageMode fällt mir ein. Dann sollt's damit genauso gehen wie mit rect.
    //edit2: verdammt, zu spät :v

    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Link275“ ()

    Alex-Digital schrieb:

    um die eigene Achse gefunden
    Ohne jetzt die Java-Syntax zu kennen, probier mal:

    Quellcode

    1. Translation (dx, dy)
    2. Rotation(Alpha)
    3. Translation (-dx, -dy)
    dx, dy sind die Zielkoordinaten des Drehpunktes.
    Probier ggf. mit den anderen Vorzeichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    danke @RodFromGermany, durch folgenden Code habe ich es geschafft:

    Java-Quellcode

    1. int begin = 0;
    2. int angle = begin;
    3. PImage img;
    4. boolean right = true;
    5. void setup(){
    6. size(1000, 1000);
    7. imageMode(CENTER);
    8. img = loadImage("leuchter.jpg");
    9. img.resize(img.width / 4, img.height / 4 - 10);
    10. angle = 0;
    11. }
    12. void draw(){
    13. if(angle == begin + 45)
    14. {
    15. right = false;
    16. }
    17. if(angle == begin - 45)
    18. {
    19. right = true;
    20. }
    21. background(255);
    22. pushMatrix();
    23. translate(500, 0);
    24. rotate(radians(angle));
    25. translate(-500, 0);
    26. image(img, 500, img.height / 2 - 10);
    27. popMatrix();
    28. angle = (right) ? angle + 1 : angle - 1;
    29. }


    Ich habe nur noch ein Problem, was bestimmt ganz simpel ist, aber
    ich frage trotzdem mal kurz nach:

    Ich will den Hintergrund schwarz färben.

    Dafür habe ich ​background(0) nach ​size(1000,1000) verwendet.

    Aber der Hintergrund bleibt immer weiß. :O

    Hoffe, jemand kann mir helfen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hi,

    Zeile 24

    //EDIT: btw, schaut für mich nich so aus als würde sich das Bild um sich selbst drehen ô.O Erstens wohl nicht um sich selbst, und zweitens .. drehen? Würde mich wundern, das was hier passiert könnte man als "schaukeln" bezeichnen.

    PS: Warum nich so:

    Java-Quellcode

    1. int begin = 0;
    2. int angle = begin;
    3. PImage img;
    4. boolean right = true;
    5. void setup() {
    6. size(500, 500);
    7. imageMode(CENTER);
    8. img = loadImage("test.png");
    9. img.resize(img.width / 4, img.height / 4 - 10);
    10. angle = 0;
    11. }
    12. void draw() {
    13. background(255);
    14. pushMatrix();
    15. translate(width/2, height/2);
    16. rotate(radians(angle));
    17. //translate(-500, 0);
    18. image(img, 0, 0);
    19. popMatrix();
    20. angle+=2;
    21. }


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link275“ ()

    Hallo @Link275,

    jetzt habe ich es auch gesehen. Das Schaukeln war beabsichtigt. Es dreht sich immer nur ein bisschen und dann wieder zurück.

    Jetzt habe ich background(0) in setup() und draw() eingefügt, aber bei dem Bild kommt immer ein weißer Rand. Wie kann man diesen
    entfernen?

    Hoffe, jemand kann mir helfen.

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hi,

    vllt mit noStroke();

    Tipp: um ruckeln reinzubringen kann man sowas in der Art zusammenschustern:
    Spoiler anzeigen

    Java-Quellcode

    1. int begin = 0;
    2. int angle = begin;
    3. PImage img;
    4. boolean right = true;
    5. void setup() {
    6. size(500, 500);
    7. imageMode(CENTER);
    8. img = loadImage("test.png");
    9. img.resize(img.width / 4, img.height / 4 - 10);
    10. angle = 0;
    11. }
    12. void draw() {
    13. background(255);
    14. pushMatrix();
    15. translate(width/2, height/2);
    16. rotate(radians(angle));
    17. //translate(-500, 0);
    18. image(img, 0, 0);
    19. popMatrix();
    20. angle+=2;
    21. //Hier:
    22. //Das kannst natürlich auf deinen rotation-Code ummünzen
    23. if (second() % 2 == 0) {
    24. angle += random(-10, 10);
    25. }
    26. }



    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link275“ ()

    Hallo @Link275

    jetzt habe ich herausgefunden, dass es am Bild lag, da dieser weiße Rand bei meinem Bildbearbeitungprogramm
    nicht zu sehen war. Jetzt habe ich die weiße Linien entfernt und es geht.

    Jetzt ist das Problem gelöst!

    MFG

    Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Hi,

    super :thumbup:

    Tipp: melde dich bei OpenProcessing.org an. Bin auch dort ( klick ). Tolle Plattform, um seine Projekte zu sharen und schauen was andre so machen. Und paar Tutorials hab ich auch hier, falls reinschauen magst.

    //EDIT: auch nice: hello.processing.org/editor/

    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Link275“ ()