Korrekte Zeichenposition nach vereinfachen eines Terms nicht mehr gegeben
-
Hallo,
Im Prinzip sieht der Code folgendermaßen aus:
public void Draw(Graphics gfx,Control ctrl) { switch (this.style) { case TerrainStyle.Flat: { gfx.FillRectangle(new SolidBrush(this.color), new Rectangle(0, ctrl.Height - (ctrl.Height / 3), ctrl.Width, ctrl.Height / 3)); break; } case TerrainStyle.SingleHill: { gfx.FillEllipse(new SolidBrush(this.color), new Rectangle(0, ctrl.Height - ((ctrl.Height)/3)+(ctrl.Height/6), //Hier ist der Wurm drin ctrl.Width, ctrl.Height/3)); break; } } }
Da ich sah, dass man das auch ganz simpel vereinfachen kann, tat ich Folgendes:
1. Ich nehme ctrl.Height als x.
2. Ich fasse folgendermaßen zusammen:x - (x/3) + ((x/2)/3) = x - (x/3) + (x/6) = x - ((3*x)/6)
3. Ich setze für x ctrl.Height ein.
Das Problem ist nur, dass nun ein falsches Ergebnis gezeichnet wird, meine Umformung ist korrekt, also muss es einen anderen Grund haben, welchen ich jedoch nicht erkennen kann.
Ich steh auf dem Schlauch und hoffe auf Hilfe!
Vielen Dank im Voraus!
fischlefisch
-
wtf?
-
dachte ich ehrlich gesagt auch grade :))
-
Ggf Rundungsfehler? Wie sieht denn der funktionierende Code aus?
-
x - (x/3) + (x/6)
ist bei mir
x - (1/6)*x
und nicht
x - ((3*x)/6)
-
Ma T. schrieb:
x - (x/3) + (x/6)
ist bei mir
x - (1/6)*x
und nicht
x - ((3*x)/6)
Ahja
-
David_pb schrieb:
Ahja
Nicht?
-
Ma T. schrieb:
David_pb schrieb:
Ahja
Nicht?
Doch?
-
Irgendwie nicht:
x - (x/3) + (x/6)
= x - ((2*x)/6) + (x/6) // *2
= x - [2x/6 + x/6]
= x - 3x/6
= x - x/2Funktionierender Code ist folgender:
gfx.FillEllipse(new SolidBrush(this.color), new Rectangle(0, ctrl.Height - ((ctrl.Height) / 3) + (ctrl.Height / 6), ctrl.Width, ctrl.Height/3));
Defekter Code:
gfx.FillEllipse(new SolidBrush(this.color), new Rectangle(0, ctrl.Height - (ctrl.Height/2), ctrl.Width, ctrl.Height/3));
-
David_pb schrieb:
Ggf Rundungsfehler? Wie sieht denn der funktionierende Code aus?
Nein, kein Rundungsfehler:
Debug.WriteLine("Ctrl.Height: " + ctrl.Height); Debug.WriteLine("Richtiger Code: " + (ctrl.Height - (ctrl.Height / 3) + (ctrl.Height / 6))); Debug.WriteLine("Defekter Code: " + (ctrl.Height-(ctrl.Height/2)));
liefert mir:
Ctrl.Height: 619
Richtiger Code: 516
Defekter Code: 310
-
Ma T. hat dir doch schon die richtige Antwort geschrieben: "h - h/6". Keine Ahnung wie du auf /2 kommst...
-
Tut mir sehr Leid, ich hatte die Klammern falsch gesetzt!
Selbstverständlich ist Ma T. Antwort und Umformung korrekt, Vielen Dank!