Java Rectangle2D.Double ist ungenau

  • Hallo Leute

    Ich bastel zur Zeit an einem Spielbrett, dass ich mit java.awt.Geom.Rectangle2D.Double(...) und Line2D(...) zeichne.

    Wenn ich jetzt die Methode draw(Shape..) von Graphics2D aufrufe zeichnet die wie ich will meine Spielfläche (mit einem Basicstroke(4)).
    Jetzt will ich Flächen, die durch vier Linien entstehen (also ein Rechteck) füllen. Habe dann erst mal die exakten Koordinaten (für die Linienstärke 0) ausgerechnet und dann die Hälfte der Linienstärke (also 2) draufaddiert, und bei Breite und Höhe jeweils das Doppelte (also 4) abgezogen.
    Das Problem ist, dass ich das ganze an die Bildschirmgröße anpassen lasse. Deshalb können auch Zahlen nicht Element N entstehen.

    Das komische ist. Trotz Double sind die Flächen z.T. um eine Pixelreihe verschoben.

    Gibt es eine Möglichkeit das ganze noch präziser zu zeichnen?

    Danke wie immer im Vorraus

  • Blöde Frage aber wie wär's wenn du das Spielbrett mit einem Grafik-Programm zeichnest und als Grafik (jpg/gif/png) einbindest? Wäre eine simple Lösung und sieht besser aus. Wenn du das Feld "dynamisch" aufbauen musst dann kannst du vielleicht mit Kacheln arbeiten, die sehen noch immer besser aus.

  • Ok, Letzteres sieht ziemlich komplex von der Thematik aus. Ich weiß ja, dass auch mal gerundet wird. Aber ich hab jetzt entdeckt, dass z.T. das ganze um 2 Pixelreihen verschoben wurde. Kann das denn so stark runden? Wird ja eigentlich erst alles berechnet mit Double... und dann gezeichnet.
    Ich werd es dann wohl mit einem Bild versuchen.
    Mal gucken.

    Danke auf jeden Fall

  • Kann das denn so stark runden? Wird ja eigentlich erst alles berechnet mit Double... und dann gezeichnet.

    Hm, weißt du überhaupt, welcher Zahlenwert zum Zeichnen verwendet wird, also hast du ihn dir auf dem Bildschirm ausgeben lassen? Könnt ja sein dass du irgendwo nicht gecastet hast oder so.

    There's no better place than 127.0.0.1!

  • Warum verwendest du überhaupt double? DrawRect/FillRect gibts auch, bzw. Rectangle Klassen mit int Koord. Wenn du nichts in 3D machst bzw. keinen echten dynamischen Inhalt hast und sowieso am pixel Raster zeichnest, kannst eigentlich gleich Integers verwenden. Wenn du skalieren möchtest, nimm dann einfach die nächst kleinere ganzzahlige Größe

    mfg Schakal

    Einmal editiert, zuletzt von Schakal (10. Februar 2009 um 11:00)

  • Hallo Schakal

    Genau das hab ich auch gedacht. ^^

    Nur wurde das mit Int dann mit mehreren Rundungsschritten so ungenau, dass das Bild am Unteren Ende total auseinander lief und nichts mehr passte. Ich versuch mal erst in Double zu rechnen und dann zu casten und dann zu zeichnen.
    Ansonsten bleibt mir immer noch die Option (wenn auch nicht so günstig), dass ich eine Grafik nehme.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!