===== Subtraktive Farbmischung – CMY (0–100 %) =====
===== Erklärung der subtraktiven Farbmischung ===== Die **subtraktive Farbmischung** beschreibt die Farberzeugung durch das **Entziehen (Subtrahieren) von Licht**. Sie ist das zentrale Prinzip bei der Arbeit mit **Pigmenten, Tinten, Druckfarben und transparenten Farbschichten**. Im Gegensatz zur additiven Mischung, bei der Lichtquellen addiert werden, basiert die subtraktive Mischung auf reflektiertem Licht: Ein Körper erscheint farbig, weil bestimmte Wellenlängen vom Material **absorbiert** und andere **reflektiert** werden. **Primärfarben** der subtraktiven Mischung (CMY-Modell): * Cyan * Magenta * Yellow **Sekundärfarben** (durch Überlagerung): * Cyan + Magenta = Blau * Cyan + Yellow = Grün * Magenta + Yellow = Rot * Cyan + Magenta + Yellow = Schwarz (idealerweise, eher ein sehr dunkles braun) Bei realen Materialien ergibt die vollständige Überlagerung meist ein **dunkles Grau oder Braun**, da Pigmente keine idealen Filter sind. Diese Mischung wird im modernen Farbdruck (z. B. Inkjet, Offset) durch das **CMYK-Modell** ergänzt, wobei „K“ für den Schwarzkanal steht. ===== Beispiel p5.js Code (CMY in 0–100 %) ===== let cSlider, mSlider, ySlider, distanceSlider; function setup() { createCanvas(600, 550); noStroke(); distanceSlider = createSlider(0, 200, 100); distanceSlider.position(25, 20); distanceSlider.style("width", "550px"); cSlider = createSlider(0, 100, 100); cSlider.position(20, height - 60); cSlider.style("width", "150px"); mSlider = createSlider(0, 100, 100); mSlider.position(220, height - 60); mSlider.style("width", "150px"); ySlider = createSlider(0, 100, 100); ySlider.position(420, height - 60); ySlider.style("width", "150px"); } function draw() { background(255); let cPercent = cSlider.value(); let mPercent = mSlider.value(); let yPercent = ySlider.value(); let c = map(cPercent, 0, 100, 255, 0); let m = map(mPercent, 0, 100, 255, 0); let y = map(yPercent, 0, 100, 255, 0); let d = 200 - distanceSlider.value(); let radius = 200; let cx = width / 2; let cy = height / 2 - 30; let xC = cx; let yC = cy - d; let xM = cx - d * cos(PI / 6); let yM = cy + d * sin(PI / 6); let xY = cx + d * cos(PI / 6); let yY = cy + d * sin(PI / 6); blendMode(MULTIPLY); fill(c, 255, 255); ellipse(xC, yC, radius); fill(255, m, 255); ellipse(xM, yM, radius); fill(255, 255, y); ellipse(xY, yY, radius); blendMode(BLEND); fill(0); textSize(14); text("Überlagerung: " + distanceSlider.value() + " / 200", 20, 15); text("Cyan: " + cPercent + "%", 20, height - 10); text("Magenta: " + mPercent + "%", 220, height - 10); text("Yellow: " + yPercent + "%", 420, height - 10); }