Hallo,
ich möchte Quadrate auf den Bildschirm zeichnen, wenn ein Benutzer mit der Maus in ein Fenster klickt. Die Quadrate sollen 40 x 40 Pixel groß sein.
Damit die Quadrate ordentlich in Reihen und Spalten stehen, habe ich folgende Formel geschrieben, um sie korrekt anzuordnen:
if (x % 40 < 20)
{
x -= x % 40;
}
else
{
x += (40 - x % 40);
}
Ich bin mir sicher, dass es auch eine Universalformel ohne If gibt. Kann mir da jemand auf die Sprünge helfen?
Vielen Dank
Christoph
Hallo SeboStone,
Round und Abs kenne ich.
Round rundet kaufmännisch, Abs rundet ab.
Aber ich muss ja auf 0, 40, 80, 120, ... runden.
Christoph
Hallo,
geht auch mit
(x / 40) * 40
wenn x kein int ist, musst Du ihn noch casten, damit das Ergebnis der Division auch int wird.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Ungetestet:
const int m = 40;
return ((n + m/2)/m)*m;
Edit: Fipptehler in formel korrigiert.
Hallo MarsStein,
vielen Dank für deinen Denkanstoß.
Folgendermaßen geht es:
(x + 20) / 40 * 40
Christoph
Aber ich muss ja auf 0, 40, 80, 120, ... runden.
Stimmt, hab Deinen Post nicht vollständig gelesen. 😉
Round und Abs kenne ich.
Round rundet kaufmännisch, Abs rundet ab.
Seit wann denn das?
Hallo SlyFox,
Round rundet kaufmännisch, Abs rundet ab.
das stimmt so nicht. Math.Round()
kann auch mathematisch runden, wenn MidpointRounding.ToEven
gesetzt ist. Math.Abs()
rundet gar nicht, sondern gibt den Betrag der übergebenen Zahl zurück, wobei "Abs" für "Absolutwert" steht.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg