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(" | ||
+ | } | ||
+ | </ |