Zeichnung drehen

  • Themenstarter Themenstarter Stefan000
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Stefan000

Gast
Dies soll eine Rakete darstellen: ein Dreieck , wessen spitzer winkel nach oben zeigt ,
an den unteren beiden ecken ist ein rechteck , mit den längern seiten nach unten zeigend.

Code:
 public void paint(Graphics g)
       {
       	final SpaceObject spacecraft = new SpaceObject();
       	int x;
       	int y;
       	
        x=(int)spacecraft.x;
        y=(int)spacecraft.y;
       
       	
       	g.drawLine(x,y,x+10,y+10);    // Koordinate:  (x,y,x+20,y+20)                  /*
       	g.drawLine(x,y,x-10,y+10);    //              (x,y,x-20,y+20)                   * Dreieck ( spitze raumschiff )
       	g.drawLine(x+10,y+10,x-10,y+10);    //              (x+20,y+20,x-20,y+20)       */  
       	g.drawLine(x+10,y+10,x+10,y+40);    //        *
       	g.drawLine(x-10,y+10,x-10,y+40);   //         * unteres Viereck.
       	g.drawLine(x-10,y+40,x+10,y+40);   //         *  
        
       	
       }


Die Linien , die gezeichnet werden , beziehen sich alle auf die Koordinaten "x" Und "y". , sodass das Raumschiff
immer an der neuen Stelle gezeichnet wird wenn sich x,y ändern.

Mein Problem ist aber , dass noch ein Winkel übergeben wird , der bestimmt ob das Raumschiff gerade steht oder schief.
(( wenn der winkel zb 90° dann ist dann zeigt die spitze nach rechts , bei 0° ist das raumschiff augerichtet,
spitze nach oben ))


Da ich noch Anfänger mit Java bin , habe ich überhaubt keine Ahnung wie ich das machen soll.

Natürlich könnte ich mit If´-Anwweißungen zu jedem winkel ein neues Raumschiff zeichnen , aber da gibt es bestimmt eine bessere möglichkeit.



Ich hoffe mir kann einer helfen ,
Danke
 
wo kann ich mir das anschauen ? xD


könnt ich dann sowas machen wie
[alpha ist der winkel]

rotate(double alpha)
{
Zeichnung vom Raumschiff.

}

?
 
hier mal ein beispiel was dann in etwa in der paintComponent methode stehen sollte
Code:
	Graphics2D g2 = (Graphics2D) g;
			

			

				int cx = getWidth() / 2;
				int cy = getHeight() / 2;
				int imageWidth = scaledBild.getWidth(this);
				int imageHeight = scaledBild.getHeight(this);
				int x_pos = -imageWidth / 2;
				int y_pos = -imageHeight / 2;
				g2.translate(cx, cy);
				g2.rotate(rotieren);
				g2.drawImage(scaledBild, x_pos, y_pos, this);
 
versteh ich nicht ^^
kann nur mit public void paint(Graphics g) linien zeichnen
Und wofür braucht man die ganzen variablen ?
 
Code:
    public void paintComponent(Graphics g) 
    { 
      try{ 
        Graphics2D g2d = (Graphics2D) g; 
        if(ANTIANALISING) 
        { 
          RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,  RenderingHints.VALUE_ANTIALIAS_ON); 
          qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
          g2d.setRenderingHints(qualityHints); 
        } 

        AffineTransform origXform = g2d.getTransform(); 
        AffineTransform newXform = (AffineTransform)(origXform.clone()); 
        //center of rotation is center of the panel 
        int xRot = this.getWidth()/2; 
        int yRot = this.getHeight()/2; 
        newXform.rotate(Math.toRadians(rotate), xRot, yRot); 
        g2d.setTransform(newXform); 
        //draw image centered in panel 
        super.paintComponent(g2d); 
        g2d.setTransform(origXform); 

      }catch(Exception ex) 
      { 
        ex.printStackTrace(System.out); 
      } 
    }
Wo wird denn da etwas gezeichnet ??
Ich möchte ja nur
das hier zeichnen lassen und mit dem winkel alpha der noch übergeben wird drehen können.

Code:
         final SpaceObject spacecraft = new SpaceObject(); 
          int x; 
          int y; 
           
        x=(int)spacecraft.x; 
        y=(int)spacecraft.y; 
        
           
          g.drawLine(x,y,x+10,y+10);    // Koordinate:  (x,y,x+20,y+20)                  /* 
          g.drawLine(x,y,x-10,y+10);    //              (x,y,x-20,y+20)                   * Dreieck ( spitze raumschiff ) 
          g.drawLine(x+10,y+10,x-10,y+10);    //              (x+20,y+20,x-20,y+20)       */  
          g.drawLine(x+10,y+10,x+10,y+40);    //        * 
          g.drawLine(x-10,y+10,x-10,y+40);   //         * unteres Viereck. 
          g.drawLine(x-10,y+40,x+10,y+40);   //
 
ich meinte das was in der paintMethode ist 😉

Du machst einfach das was in der paint Methode ist (also genau das was du rauskopiert hast)
Kannst ggf, den ANTIANLISING Abfrage raustun!

Aber ansonsten einfach auf dein g anwenden!
 
http://666kb.com/i/aoj78prwnexq6v8sy.jpg

Sowas?

Einfach bevor du zeichnest, schon die graphics drehen!

Code:
    JLabel label = new JLabel(){
      public void paint(Graphics g)
      {
        int x;
        int y;
        
        x=(int)10;
        y=(int)20;
        Graphics2D g2d = (Graphics2D)g;
        AffineTransform origXform = g2d.getTransform();
        AffineTransform newXform = (AffineTransform)(origXform.clone());
        //center of rotation is center of the panel
        int xRot = (x + 10)/2;
        int yRot = (y + 40)/2;
        newXform.rotate(Math.toRadians(180), xRot, yRot);
        g2d.setTransform(newXform); 

        
        g.drawLine(x,y,x+10,y+10);    // Koordinate:  (x,y,x+20,y+20)                  /*
        g.drawLine(x,y,x-10,y+10);    //              (x,y,x-20,y+20)                   * Dreieck ( spitze raumschiff )
        g.drawLine(x+10,y+10,x-10,y+10);    //              (x+20,y+20,x-20,y+20)       */ 
        g.drawLine(x+10,y+10,x+10,y+40);    //        *
        g.drawLine(x-10,y+10,x-10,y+40);   //         * unteres Viereck.
        g.drawLine(x-10,y+40,x+10,y+40);   //         * 
        
        
      }
    };

Beim rotX und rotY müssen die maximalWerte für die x und y Achse (länge und breite) angegeben werden! Sonst rotiert er irgendwo und du siehst gar nüschts!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben