/// <summary> /// Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits /// vorhandenen Farben und markiert sie als belegt. /// </summary> /// <returns>Neue Farbe.</returns> public Farbe ErzeugeUndBelegeFarbe() { Farbe farbe = ErzeugeFarbe(); BelegeFarbe(farbe); return(farbe); }
/// <summary> /// Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits /// vorhandenen Farben, verändert sie leicht und markiert sie als belegt. /// </summary> /// <returns>Neue Farbe.</returns> public Farbe ErzeugeUndBelegeFarbe(int streuung) { Farbe farbe = ErzeugeFarbe(streuung); BelegeFarbe(farbe); return(farbe); }
/// <summary> /// Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits /// vorhandenen Farben und verändert sie leicht. /// </summary> /// <returns>Neue Farbe.</returns> public Farbe ErzeugeFarbe(int streuung) { Farbe farbe = ErzeugeFarbe(); Random zufall = new Random(); return (new Farbe ( (farbe.Rot * 100) / (100 + zufall.Next(-streuung, streuung)), (farbe.Grün * 100) / (100 + zufall.Next(-streuung, streuung)), (farbe.Blau * 100) / (100 + zufall.Next(-streuung, streuung)))); }
private int bestimmeMinimalenAbstand(Farbe farbe) { int besterAbstand = int.MaxValue; for (int f = 0; f < farben.Count; f++) { int abstand = farben[f] - farbe; if (abstand < besterAbstand) { besterAbstand = abstand; } } return(besterAbstand); }
/// <summary> /// Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits /// vorhandenen Farben. /// </summary> /// <returns>Neue Farbe.</returns> public Farbe ErzeugeFarbe() { int besterAbstand = 0; Farbe besteFarbe = new Farbe(0, 0, 0); int r, g, b; int r0 = 0, g0 = 0, b0 = 0; int abstand; Farbe farbe; for (r = 8; r < 256; r += 16) { for (g = 8; g < 256; g += 16) { for (b = 8; b < 256; b += 16) { farbe = new Farbe(r, g, b); abstand = bestimmeMinimalenAbstand(farbe); if (abstand > besterAbstand) { besterAbstand = abstand; r0 = r; g0 = g; b0 = b; } } } } for (r = -8; r < 8; r++) { for (g = -8; g < 8; g++) { for (b = -8; b < 8; b++) { farbe = new Farbe(r0 + r, g0 + g, b0 + b); abstand = bestimmeMinimalenAbstand(farbe); if (abstand > besterAbstand) { besterAbstand = abstand; besteFarbe = farbe; } } } } return(besteFarbe); }
/// <summary> /// Entfernt eine vorhandene Farbe. /// </summary> /// <param name="farbe">Vorhandene Farbe.</param> public void EntferneFarbe(Farbe farbe) { farben.Remove(farbe); }
/// <summary> /// Markiert eine neue Farbe als bereits vorhanden. /// </summary> /// <param name="farbe">Neue Farbe.</param> public void BelegeFarbe(Farbe farbe) { farben.Add(farbe); }