extras:codikon:p5js:additive-farbmischung
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| extras:codikon:p5js:additive-farbmischung [2025/07/06 07:34] – removed - external edit (Unknown date) 127.0.0.1 | extras:codikon:p5js:additive-farbmischung [2025/07/06 07:34] (current) – ↷ Links adapted because of a move operation Felix Hardmood Beck | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== Additive Farbmischung – RGB ===== | ||
| + | < | ||
| + | < | ||
| + | <script src=" | ||
| + | < | ||
| + | #p5sketch { | ||
| + | position: relative; | ||
| + | width: 600px; | ||
| + | height: 550px; | ||
| + | margin-left: | ||
| + | } | ||
| + | |||
| + | canvas { | ||
| + | position: absolute; | ||
| + | left: 0; | ||
| + | top: 0; | ||
| + | z-index: 0; | ||
| + | } | ||
| + | |||
| + | .custom-slider { | ||
| + | position: absolute; | ||
| + | -webkit-appearance: | ||
| + | height: 10px; | ||
| + | background: #888; | ||
| + | border-radius: | ||
| + | outline: none; | ||
| + | z-index: 1; | ||
| + | } | ||
| + | |||
| + | .custom-slider:: | ||
| + | -webkit-appearance: | ||
| + | width: 16px; | ||
| + | height: 16px; | ||
| + | background: #fff; | ||
| + | border-radius: | ||
| + | cursor: pointer; | ||
| + | border: 2px solid #000; | ||
| + | } | ||
| + | |||
| + | .custom-slider:: | ||
| + | width: 16px; | ||
| + | height: 16px; | ||
| + | background: #fff; | ||
| + | border-radius: | ||
| + | cursor: pointer; | ||
| + | border: 2px solid #000; | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | <div id=" | ||
| + | |||
| + | < | ||
| + | let rSlider, gSlider, bSlider, distanceSlider; | ||
| + | |||
| + | function setup() { | ||
| + | let canvas = createCanvas(600, | ||
| + | canvas.parent(" | ||
| + | noStroke(); | ||
| + | |||
| + | // Distance-Slider (oben) | ||
| + | distanceSlider = createSlider(0, | ||
| + | distanceSlider.parent(" | ||
| + | distanceSlider.class(" | ||
| + | distanceSlider.style(" | ||
| + | distanceSlider.position(25, | ||
| + | |||
| + | // RGB-Slider (unten) | ||
| + | rSlider = createSlider(0, | ||
| + | rSlider.parent(" | ||
| + | rSlider.class(" | ||
| + | rSlider.style(" | ||
| + | rSlider.position(20, | ||
| + | |||
| + | gSlider = createSlider(0, | ||
| + | gSlider.parent(" | ||
| + | gSlider.class(" | ||
| + | gSlider.style(" | ||
| + | gSlider.position(220, | ||
| + | |||
| + | bSlider = createSlider(0, | ||
| + | bSlider.parent(" | ||
| + | bSlider.class(" | ||
| + | bSlider.style(" | ||
| + | bSlider.position(420, | ||
| + | } | ||
| + | |||
| + | function draw() { | ||
| + | background(0); | ||
| + | |||
| + | let r = rSlider.value(); | ||
| + | let g = gSlider.value(); | ||
| + | let b = bSlider.value(); | ||
| + | |||
| + | // Invertierter Abstand: bei Slider-Wert 200 → d = 0 (volle Überlagerung) | ||
| + | let sliderVal = distanceSlider.value(); | ||
| + | let maxDistance = 200; | ||
| + | let d = maxDistance - sliderVal; | ||
| + | |||
| + | let radius = 200; | ||
| + | let cx = width / 2; | ||
| + | let cy = height / 2 - 30; | ||
| + | |||
| + | let xR = cx; | ||
| + | let yR = cy - d; | ||
| + | |||
| + | let xG = cx - d * cos(PI / 6); | ||
| + | let yG = cy + d * sin(PI / 6); | ||
| + | |||
| + | let xB = cx + d * cos(PI / 6); | ||
| + | let yB = cy + d * sin(PI / 6); | ||
| + | |||
| + | blendMode(ADD); | ||
| + | fill(r, 0, 0); | ||
| + | ellipse(xR, yR, radius); | ||
| + | fill(0, g, 0); | ||
| + | ellipse(xG, yG, radius); | ||
| + | fill(0, 0, b); | ||
| + | ellipse(xB, yB, radius); | ||
| + | blendMode(BLEND); | ||
| + | |||
| + | fill(255); | ||
| + | textSize(14); | ||
| + | text(" | ||
| + | text(" | ||
| + | text(" | ||
| + | text(" | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Erklärung der additiven Farbmischung ===== | ||
| + | |||
| + | Additive Farbmischung ist ein physikalisches Prinzip der Farberzeugung, | ||
| + | |||
| + | Grundprinzipien der additiven Farbmischung (RGB-Farbmodell): | ||
| + | * Die Primärfarben der additiven Farbmischung sind: | ||
| + | * Rot | ||
| + | * Grün | ||
| + | * Blau | ||
| + | |||
| + | |||
| + | Werden zwei dieser Farben überlagert, | ||
| + | * Rot + Grün = Gelb | ||
| + | * Rot + Blau = Magenta | ||
| + | * Grün + Blau = Cyan | ||
| + | * Werden alle drei Primärfarben mit voller Intensität kombiniert => Weißes Licht | ||
| + | * Wird kein Licht ausgesendet (alle Werte = 0) => Schwarz (dunkelste Stufe) | ||
| + | |||
| + | Siehe auch [[extras: | ||
| + | ===== Beispiel p5.js Code ===== | ||
| + | |||
| + | < | ||
| + | let rSlider, gSlider, bSlider, distanceSlider; | ||
| + | |||
| + | function setup() { | ||
| + | createCanvas(600, | ||
| + | noStroke(); | ||
| + | |||
| + | // Distance-Slider (oben): 0 = weit auseinander, | ||
| + | distanceSlider = createSlider(0, | ||
| + | distanceSlider.position(25, | ||
| + | distanceSlider.style(" | ||
| + | |||
| + | // RGB-Slider (unten) | ||
| + | rSlider = createSlider(0, | ||
| + | rSlider.position(20, | ||
| + | rSlider.style(" | ||
| + | |||
| + | gSlider = createSlider(0, | ||
| + | gSlider.position(220, | ||
| + | gSlider.style(" | ||
| + | |||
| + | bSlider = createSlider(0, | ||
| + | bSlider.position(420, | ||
| + | bSlider.style(" | ||
| + | } | ||
| + | |||
| + | function draw() { | ||
| + | background(0); | ||
| + | |||
| + | let r = rSlider.value(); | ||
| + | let g = gSlider.value(); | ||
| + | let b = bSlider.value(); | ||
| + | |||
| + | // Umgekehrte Distanz: Max-Wert (200) → volle Überlagerung (d = 0) | ||
| + | let sliderVal = distanceSlider.value(); | ||
| + | let maxDistance = 200; | ||
| + | let d = maxDistance - sliderVal; | ||
| + | |||
| + | let radius = 200; | ||
| + | let cx = width / 2; | ||
| + | let cy = height / 2 - 30; | ||
| + | |||
| + | // Positionen im gleichseitigen Dreieck | ||
| + | let xR = cx; | ||
| + | let yR = cy - d; | ||
| + | |||
| + | let xG = cx - d * cos(PI / 6); | ||
| + | let yG = cy + d * sin(PI / 6); | ||
| + | |||
| + | let xB = cx + d * cos(PI / 6); | ||
| + | let yB = cy + d * sin(PI / 6); | ||
| + | |||
| + | // Additive Farbmischung | ||
| + | blendMode(ADD); | ||
| + | fill(r, 0, 0); | ||
| + | ellipse(xR, yR, radius); | ||
| + | fill(0, g, 0); | ||
| + | ellipse(xG, yG, radius); | ||
| + | fill(0, 0, b); | ||
| + | ellipse(xB, yB, radius); | ||
| + | blendMode(BLEND); | ||
| + | |||
| + | // Textanzeige | ||
| + | fill(255); | ||
| + | textSize(14); | ||
| + | text(" | ||
| + | text(" | ||
| + | text(" | ||
| + | text(" | ||
| + | } | ||
| + | </ | ||
