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
Java Rectangle2D.Double ist ungenau
-
-
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.
-
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
-
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.
-
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
-
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. -
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.)
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!