Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Java: drawRect ( Höhe und Breite)


DerböseWolf
2014-01-06, 08:49:15
Hallo


Eine kurze Frage.


Wenn ich in einem Applet ein Rechteck zeichne

z.b. im Programm dann mal irgendwo


g.drawRect (10,10,50,50)


dann ist ja mein Rechteck auf den ersten Blick 50 Pixel breit und 50 Pixel hoch.

Sind es jetzt aber eigentlich 50 oder 51?

Monger
2014-01-06, 09:45:05
Die Funktion ist definiert als:

drawRect(int x, int y, int width, int height)

Was du angibst ist also die Breite, nicht der Offset. Wenn du eine Breite von 50 angibst, sollte es anschließend auch 50 breit sein, sonst ist es ein Bug. Das heißt auch, das eine Breite von 0 unzulässig sein sollte, und zu einer ArgumentException führen sollte.

DerböseWolf
2014-01-06, 09:54:11
Hmmm... habe die Frage einfach mal so gestellt. In meinem Skript von der Uni steht nämlich, das bei drawRect die Breite dann width+1 und die Höhe height+1 ist. Finde das sonst nirgends.

Irgendwie kann das schon einleuchtend sein. Er zählt die 0 auch mit. Ist ja keine Länge sonder eine Anzahl von Pixel.

Wenn ich drawRect(10,10,0,0) ausführe, dann sehe ich einen kleinen Punkt.

Ganon
2014-01-06, 10:15:05
Ja, die Dokumentation beschreibst das nicht so wirklich gut:

http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#drawRect(int, int, int, int)


Draws the outline of the specified rectangle. The left and right edges of the rectangle are at x and x + width. The top and bottom edges are at y and y + height. The rectangle is drawn using the graphics context's current color.


Somit ergibt eine Breite/Höhe von 0 einen Punkt, obwohl das recht unsinnig ist.

Milchkanne
2014-01-06, 13:07:39
Auch aus der Dokumentation:
Coordinates are infinitely thin and lie between the pixels of the output device. Operations that draw the outline of a figure operate by traversing an infinitely thin path between pixels with a pixel-sized pen that hangs down and to the right of the anchor point on the path.
Es wird also immer ein Pfad gezeichnet, egal ob er ausgedehnt ist oder nicht.
Auch dass "drawRect (10,10,1,1)" ein 2x2 Quadrat malt lässt sich so erklären.
Ob das Sinn macht ist eine andere Frage.