2010-12-01 5 views
1

alt text Ich möchte ein Quadrat von Pixeln zeichnen, die darauf warten, wie viele Elemente in einem Array sind. Das Quadrat repräsentiert die Array-Menge, so dass kleine Quadrate kleine Arrays und große Quadrate große Arrays repräsentieren. Ich finde es schwierig zu verstehen, wie ich das mache.Zeichne Pixel in einem Quadrat von innen nach außen - Java

EDIT: Ich verwende Java 2D.

Die Spirale beginnt bei 1 und bewegt sich dann gegen den Uhrzeigersinn zur Außenseite des Quadrats (d. H. 2,3,4,5 usw.). Jedes Quadrat kann durch die Datenmenge dargestellt werden, die das Quadrat darstellt.

+1

Welche Grafikbibliothek/Toolkit/System verwenden Sie? –

+0

... von innen heraus? –

+1

Stimmen Sie mit dem oben genannten überein ... Sie haben viele Details von Ihrem Problem weggelassen. Wie geschrieben, ist es unmöglich zu lösen. –

Antwort

4
public class Test { 

    enum Direction { 
     Right, 
     Up, 
     Left, 
     Down 
    } 

    public static void main(String... args) throws IOException { 

     BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); 

     int rgb = Color.BLACK.getRGB(); 

     Point p = new Point(50, 50); 
     Direction d = Direction.Right; 
     int currentSegmentLength = 1; 


     for (int i = 0; i < 100; i += 2) { 

      paintSegment(image, rgb, p, d, currentSegmentLength); 
      d = nextSegmentDirection(d); 

      paintSegment(image, rgb, p, d, currentSegmentLength); 
      d = nextSegmentDirection(d); 

      currentSegmentLength++; 
     } 


     ImageIO.write(image, "png", new File("test.png")); 
    } 

    private static void paintSegment(BufferedImage image, int rgb, Point p, 
      Direction d, int currentSegmentLength) { 

     for (int s = 0; s < currentSegmentLength; s++) { 
      image.setRGB(p.x, p.y, rgb); 

      switch (d) { 
      case Right: p.x++; break; 
      case Up: p.y--; break; 
      case Left: p.x--; break; 
      case Down: p.y++; break; 
      } 
     } 
    } 

    private static Direction nextSegmentDirection(Direction d) { 
     switch (d) { 
     case Right: return Direction.Up; 
     case Up: return Direction.Left; 
     case Left: return Direction.Down; 
     case Down: return Direction.Right; 

     default: throw new RuntimeException("never here"); 
     } 
    } 
} 
+0

Gute Arbeit ....... – slotishtype

Verwandte Themen