code:p5js:subtraktive-farbmischung
Differences
This shows you the differences between two versions of the page.
code:p5js:subtraktive-farbmischung [2025/04/08 14:59] – created Felix Hardmood Beck | code:p5js:subtraktive-farbmischung [2025/04/08 15:04] (current) – Felix Hardmood Beck | ||
---|---|---|---|
Line 60: | Line 60: | ||
noStroke(); | noStroke(); | ||
- | // Distance-Slider (oben) | ||
distanceSlider = createSlider(0, | distanceSlider = createSlider(0, | ||
distanceSlider.parent(" | distanceSlider.parent(" | ||
Line 67: | Line 66: | ||
distanceSlider.position(25, | distanceSlider.position(25, | ||
- | // CMY-Slider (Prozent: 0–100) | ||
cSlider = createSlider(0, | cSlider = createSlider(0, | ||
cSlider.parent(" | cSlider.parent(" | ||
Line 90: | Line 88: | ||
background(255); | background(255); | ||
- | // Prozentwerte auslesen | ||
let cPercent = cSlider.value(); | let cPercent = cSlider.value(); | ||
let mPercent = mSlider.value(); | let mPercent = mSlider.value(); | ||
let yPercent = ySlider.value(); | let yPercent = ySlider.value(); | ||
- | // Umrechnung: 0 % = 255 (hell), 100 % = 0 (vollfarbig) | ||
let c = map(cPercent, | let c = map(cPercent, | ||
let m = map(mPercent, | let m = map(mPercent, | ||
Line 117: | Line 113: | ||
let yY = cy + d * sin(PI / 6); | let yY = cy + d * sin(PI / 6); | ||
- | blendMode(MULTIPLY); | + | blendMode(MULTIPLY); |
- | fill(c, 255, 255); // Cyan-Filter | + | fill(c, 255, 255); // Cyan |
ellipse(xC, yC, radius); | ellipse(xC, yC, radius); | ||
- | fill(255, m, 255); // Magenta-Filter | + | fill(255, m, 255); // Magenta |
ellipse(xM, yM, radius); | ellipse(xM, yM, radius); | ||
- | fill(255, 255, y); // Yellow-Filter | + | fill(255, 255, y); // Yellow |
ellipse(xY, yY, radius); | ellipse(xY, yY, radius); | ||
Line 140: | Line 136: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== 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, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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, | ||
+ | noStroke(); | ||
+ | |||
+ | distanceSlider = createSlider(0, | ||
+ | distanceSlider.position(25, | ||
+ | distanceSlider.style(" | ||
+ | |||
+ | cSlider = createSlider(0, | ||
+ | cSlider.position(20, | ||
+ | cSlider.style(" | ||
+ | |||
+ | mSlider = createSlider(0, | ||
+ | mSlider.position(220, | ||
+ | mSlider.style(" | ||
+ | |||
+ | ySlider = createSlider(0, | ||
+ | ySlider.position(420, | ||
+ | ySlider.style(" | ||
+ | } | ||
+ | |||
+ | function draw() { | ||
+ | background(255); | ||
+ | |||
+ | let cPercent = cSlider.value(); | ||
+ | let mPercent = mSlider.value(); | ||
+ | let yPercent = ySlider.value(); | ||
+ | |||
+ | let c = map(cPercent, | ||
+ | let m = map(mPercent, | ||
+ | let y = map(yPercent, | ||
+ | |||
+ | 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(" | ||
+ | text(" | ||
+ | text(" | ||
+ | text(" | ||
+ | } | ||
+ | </ |
/var/www/vhosts/ct-lab.info/wiki.ct-lab.info/data/attic/code/p5js/subtraktive-farbmischung.1744124375.txt.gz · Last modified: 2025/04/08 14:59 by Felix Hardmood Beck