Unerklärbare Werte bei Frame Farbverlaufbeispiel

  • Themenstarter Themenstarter Blace
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Blace

Gast
Hallo,
ich gehe momentan ein Online Java tutorial durch und bin nun auf ein Programmbeispiel gestoßen, was ich mir so
nicht erklären kann, was aber auch nicht weiter in dem Tutorial erläutert wird.
Es handelt sich um Folgenden Code (Quelle: http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/java/kurs/Grafik.html)

Code:
import javax.swing.*;
import java.awt.*;

class TestCanvas extends Canvas
{   public void paint (Graphics g)
    {   Dimension d=getSize();
        int w=d.width,h=d.height;
        int i=0;
        Color C;
        while (i<=w-1-i && i<=h-1-i)
        {   // Beschaffe neue Farbe:
            if (2*i<256) C=new Color(2*i,255-2*i,255);
            else C=new Color(255,0,255);
            g.setColor(C); // setze Farbe
            g.drawRect(i,i,w-1-2*i,h-1-2*i);
            i++;
        }
    }
}

public class RingBuffer
{   public static void main (String args[])
    {   JFrame F=new JFrame();
        F.setTitle("Test");
        F.setSize(300,300);
        F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        F.add(new TestCanvas());
        F.setVisible(true);
    }
}

Hier wird ein Fenster mit einem Farbverlauf gefüllt.
Was dabei für mich so unklar ist, ist die Zeile: g.drawRect(i,i,w-1-2*i,h-1-2*i);
Warum wird hier das i mit 2 multipliziert? Ich habe es versucht weg zu lassen, was jedoch zu einer Fehlerhaften Darstellung des Bildes führte. Anscheinend habe ich hier einen Denkfehler aber ich bin selbst durch eine Skizzierung des Fensters mit Koordinaten nicht drauf gekommen warum hier das i mal 2 genommen werden muss.
Müsste für eine gleichmäßige Zeichnung der Quadrate die Zeile nicht: g.drawRect(i,i,w-1-i,h-1-i); lauten?
Danke schonmal für eure Antworten
Gruß
Blace
 
testen testen testen und Werte ausgeben und Papier + Bleistift?
alles hilft, oder einfach denken 😉

i = 15;
Code:
---------------
1


15  = i
|
|     Differenz  = 70 = 100 - 2*i
|
85  = 100-i


100
---------------

Höhe sei 100, i ist 15,
das Quadrat geht also von 15 bis 85,
Höhe ist 70 = 100 -2*i
 
danke danke 🙂
Ja, hatte wie vermutet nen Denkfehler... bin die ganze Zeit davon ausgegangen, dass beim Quadrat bei allen 4 Übergabewerten die Koords eingesetzt werden und nicht, wie es der Fall ist bei den letzten beiden Wertübergaben nur die breite bzw. länge.
Alte angewohnheit aus C++ :lol:
 
Würde das jetzt gerne abhaken, aber das scheint als unregistrierter Nutzer nicht zu gehen :/ .
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben