===== 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);
}