1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Java Rectangle2D.Double ist ungenau

  • Nicholas1991
  • 8. Februar 2009 um 23:36
  • Unerledigt
  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 8. Februar 2009 um 23:36
    • #1

    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

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 9. Februar 2009 um 02:13
    • #2

    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.

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 9. Februar 2009 um 08:36
    • #3
    Zitat von Nicholas1991

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

    Kennst du das hier ("What Every Computer Scientist Should Know About Floating-Point Arithmetic")? http://docs.sun.com/app/docs/doc/800-7895

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 9. Februar 2009 um 21:35
    • #4

    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

  • java-girl
    14
    java-girl
    Mitglied
    Reaktionen
    7
    Punkte
    2.037
    Beiträge
    357
    • 10. Februar 2009 um 08:50
    • #5
    Zitat von Nicholas1991

    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!

  • Schakal
    9
    Schakal
    Mitglied
    Reaktionen
    5
    Punkte
    780
    Beiträge
    152
    • 10. Februar 2009 um 10:58
    • #6

    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)

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 10. Februar 2009 um 17:53
    • #7

    Hallo Schakal

    Genau das hab ich auch gedacht. :grinning_face_with_smiling_eyes:

    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.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 10. Februar 2009 um 18:43
    • #8
    Zitat von Nicholas1991

    abgezogen


    http://de.wikipedia.org/wiki/Auslöschung_(numerische_Mathematik)

    Subtraktion = böse. (Mehr hab ich mir aus der alten VO/UE Computernumerik nicht gemerkt. Aber allein wegen diesem Punkt wär ich dafür, daß sowas wieder verpflichtend wird.)

    *plantsch*

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English