Sie sind nicht angemeldet.

    1

    Montag, 7. Juni 2010, 17:22

    Durchgängige Linie zeichnen

    Hallo und guten Tag,

    ich hoffe mir kann jemand bei meinem Problem weiterhelfen.
    Wenn ich in Java zeichnen möchte, dann bekomme ich wenn ich den Mauszeiger zu schneller bewege keine flüssige Linie zu Stande. Es sieht dann nur sehr abgehackt aus.



    Hier einmal die Methoden:

    PHP-Quelltext

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
      class ZieheMaus extends MouseAdapter{
        public void mouseDragged(MouseEvent event){
          event.getX();
          event.getY();
          zeichnen();
        }
      }
      class DrueckeMaus extends MouseAdapter{
        public void mousePressed(MouseEvent event){
          event.getX();
          event.getY();
          zeichnen();
        }
      }
      public void zeichnen(){
        Graphics g getGraphics();
        g.setColor(color);
        if(shape == "circle"){
          g.fillOval(x-(size/2),y-(size/2),size,size);
        }
        if(shape == "square"){
          g.fillRect(x-(size/2),y-(size/2),size,size);
        }
      }


    Ich möchte nun wissen wie ich eine saubere Linie bei schnellen Mausbewegungen hinbekomme.

    MfG Grievous
    currently: Visual C#

    next tutorials: JOIN Operations, CREATE Procedure

    skills: (x)HTML, CSS(3), PHP, SQL, Java, Haskell, Prolog

    JSnake: 95%

    JMinesweeper: 30%

    2

    Montag, 14. Juni 2010, 20:45

    Eventuell hilft dir das HTML5-Element canvas weiter!

    3

    Montag, 14. Juni 2010, 21:07

    Eventuell hilft dir das HTML5-Element canvas weiter!



    Also ich glaube das Java das er meint ist das Programm Java und nicht JavaScript :D

    Zitat

    hmm also wenn ich das richtig verstehe werden die java-events zu langsam gefeuert so dass du keine vollständige linie zeichnen kannst.

    ich hab deinen lösungsansatz nicht ganz verstanden aber ich würde so vorgehen:

    1. speichere den aktuellen punkt (Xk/Yk)
    2. speichere nächsten punkt bei mausbewegung (Xk+1/Yk+1)
    3. wenn |Xk-Xk+1| > 1 || |Yk-Yk+1| > 1, dann zeichne eine gerade linie zwischen den punkten (siehe DDA oder besser noch Bresenham Algorithmus)
    4. Xk = Xk+1, Yk = Yk+1
    5. gehe zu 2


    ich glaub halt, dass das ergebnis so immer noch nicht sehr schön ausschaut, da sehr eckige linien bei sehr schnellen bewegungen

    alternativ dazu gibts noch splines (klick), was aber bedeutet dass die linien keine ecken haben können weshalb das wohl eher nicht so gut funktionieren würde..

    [Link]

    4

    Montag, 14. Juni 2010, 22:10

    Canvas hilft mir da auch nicht weiter. Ist bei mir vom Prinzip egal ob ich die Ausgabe auf einem Panel oder Canvas mache.

    Ja die Lösung mit Linien habe ich auch schon in Betracht gezogen jedoch kann ich beim Zeichnen von Linie keine Größe angeben. Sprich bei einem kreisförmigen Pinsel kann ich die Pinselgröße jederzeit ändern bei einer Linie geht das jedoch nicht, weil ich bei einer Linie nicht die Größe angeben kann.

    PHP-Quelltext

    1
    
    drawLine(int x1int y1int x2int y2)
    currently: Visual C#

    next tutorials: JOIN Operations, CREATE Procedure

    skills: (x)HTML, CSS(3), PHP, SQL, Java, Haskell, Prolog

    JSnake: 95%

    JMinesweeper: 30%

  • Grufix-Board.de - GFX Webdesign Foto & Coding Community

    Grafik-Tutorials | Coding-Tutorials | Ressourcen | SEO | Webdesign | HTML5
    W3C Validator