code:p5js:additive-farbmischung
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
code:p5js:additive-farbmischung [2025/04/08 14:39] – created Felix Hardmood Beck | code:p5js:additive-farbmischung [2025/04/08 15:01] (current) – [Erklärung der additiven Farbmischung] Felix Hardmood Beck | ||
---|---|---|---|
Line 4: | Line 4: | ||
< | < | ||
<script src=" | <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; | ||
+ | } | ||
+ | </ | ||
</ | </ | ||
< | < | ||
Line 9: | Line 53: | ||
< | < | ||
- | let rSlider, gSlider, bSlider, distanceSlider; | + | |
- | function setup() { | + | |
- | createCanvas(600, | + | let canvas = createCanvas(600, |
- | noStroke(); | + | |
+ | | ||
- | | + | |
- | const style = createElement(' | + | |
- | .custom-slider | + | |
- | -webkit-appearance: | + | distanceSlider.class(" |
- | width: 100%; | + | |
- | | + | |
- | background: #888; | + | |
- | border-radius: | + | |
- | outline: none; | + | |
- | } | + | |
- | | + | // RGB-Slider (unten) |
- | -webkit-appearance: | + | rSlider = createSlider(0, |
- | | + | rSlider.parent(" |
- | | + | rSlider.class(" |
- | height: 16px; | + | |
- | background: #fff; | + | |
- | border-radius: 50%; | + | |
- | cursor: pointer; | + | |
- | border: 2px solid #000; | + | |
- | } | + | |
- | .custom-slider:: | + | gSlider = createSlider(0, |
- | width: 16px; | + | |
- | | + | |
- | | + | |
- | border-radius: 50%; | + | |
- | | + | |
- | border: 2px solid #000; | + | |
- | } | + | |
- | `); | + | |
- | style.parent(document.head); | + | |
- | // Distance-Slider (oben) | + | bSlider |
- | distanceSlider | + | |
- | | + | |
- | | + | bSlider.style("width", " |
- | | + | |
+ | } | ||
- | // RGB-Slider | + | function draw() { |
- | | + | |
- | rSlider.position(20, | + | |
- | rSlider.style(' | + | |
- | rSlider.addClass(' | + | |
- | gSlider | + | let r = rSlider.value(); |
- | gSlider.position(220, height - 80); | + | let g = gSlider.value(); |
- | gSlider.style(' | + | let b = bSlider.value(); |
- | | + | |
- | bSlider | + | // Invertierter Abstand: bei Slider-Wert 200 → d = 0 (volle Überlagerung) |
- | | + | let sliderVal = distanceSlider.value(); |
- | | + | let maxDistance = 200; |
- | | + | let d = maxDistance |
- | } | + | |
- | function draw() { | + | let radius = 200; |
- | | + | let cx = width / 2; |
+ | let cy = height / 2 - 30; | ||
- | | + | |
- | let g = gSlider.value(); | + | let yR = cy - d; |
- | let b = bSlider.value(); | + | |
- | let d = distanceSlider.value(); | + | |
- | | + | |
- | let cx = width / 2; | + | let yG = cy + d * sin(PI |
- | let cy = height | + | |
- | | + | |
- | let yR = cy - d; | + | let yB = cy + d * sin(PI / 6); |
- | let xG = cx - d * cos(PI / 6); | + | blendMode(ADD); |
- | | + | |
+ | ellipse(xR, yR, radius); | ||
+ | fill(0, g, 0); | ||
+ | ellipse(xG, | ||
+ | fill(0, 0, b); | ||
+ | ellipse(xB, yB, radius); | ||
+ | blendMode(BLEND); | ||
- | let xB = cx + d * cos(PI / 6); | + | |
- | let yB = cy + d * sin(PI / 6); | + | textSize(14); |
- | + | text(" | |
- | blendMode(ADD); | + | text("Red: " |
- | fill(r, 0, 0); | + | text("Green: |
- | ellipse(xR, yR, radius); | + | text("Blue: " |
- | fill(0, g, 0); | + | } |
- | ellipse(xG, yG, radius); | + | |
- | fill(0, 0, b); | + | |
- | ellipse(xB, yB, radius); | + | |
- | blendMode(BLEND); | + | |
- | + | ||
- | | + | |
- | textSize(14); | + | |
- | text(' | + | |
- | text('Red: ' | + | |
- | text('Green: | + | |
- | text('Blue: ' | + | |
- | } | + | |
</ | </ | ||
</ | </ | ||
Line 117: | Line 137: | ||
Additive Farbmischung ist ein physikalisches Prinzip der Farberzeugung, | Additive Farbmischung ist ein physikalisches Prinzip der Farberzeugung, | ||
- | Grundprinzipien der additiven Farbmischung: | + | Grundprinzipien der additiven Farbmischung |
* Die Primärfarben der additiven Farbmischung sind: | * Die Primärfarben der additiven Farbmischung sind: | ||
* Rot | * Rot | ||
* Grün | * Grün | ||
* Blau | * Blau | ||
- | (RGB-Farbmodell) | + | |
Werden zwei dieser Farben überlagert, | Werden zwei dieser Farben überlagert, | ||
Line 131: | Line 151: | ||
* Wird kein Licht ausgesendet (alle Werte = 0) => Schwarz (dunkelste Stufe) | * Wird kein Licht ausgesendet (alle Werte = 0) => Schwarz (dunkelste Stufe) | ||
+ | Siehe auch [[code: | ||
===== Beispiel p5.js Code ===== | ===== Beispiel p5.js Code ===== | ||
Line 141: | Line 161: | ||
noStroke(); | noStroke(); | ||
- | | + | // Distance-Slider (oben): 0 = weit auseinander, |
- | const style = createElement(' | + | distanceSlider = createSlider(0, 200, 100); |
- | .custom-slider { | + | distanceSlider.position(25, 20); |
- | -webkit-appearance: | + | distanceSlider.style("width", "550px"); |
- | width: 100%; | + | |
- | height: 10px; | + | |
- | background: #888; | + | |
- | border-radius: | + | |
- | outline: none; | + | |
- | } | + | |
- | + | ||
- | .custom-slider:: | + | |
- | -webkit-appearance: | + | |
- | appearance: none; | + | |
- | 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; | + | |
- | } | + | |
- | `); | + | |
- | style.parent(document.head); | + | |
- | + | ||
- | | + | |
- | distanceSlider = createSlider(50, 200, 115); | + | |
- | distanceSlider.position(20, 20); | + | |
- | distanceSlider.style('width', '550px'); | + | |
- | distanceSlider.addClass(' | + | |
// RGB-Slider (unten) | // RGB-Slider (unten) | ||
rSlider = createSlider(0, | rSlider = createSlider(0, | ||
- | rSlider.position(20, | + | rSlider.position(20, |
- | rSlider.style('width', '150px'); | + | rSlider.style("width", "150px"); |
- | rSlider.addClass(' | + | |
gSlider = createSlider(0, | gSlider = createSlider(0, | ||
- | gSlider.position(220, | + | gSlider.position(220, |
- | gSlider.style('width', '150px'); | + | gSlider.style("width", "150px"); |
- | gSlider.addClass(' | + | |
bSlider = createSlider(0, | bSlider = createSlider(0, | ||
- | bSlider.position(420, | + | bSlider.position(420, |
- | bSlider.style('width', '150px'); | + | bSlider.style("width", "150px"); |
- | bSlider.addClass(' | + | |
} | } | ||
Line 203: | Line 186: | ||
let g = gSlider.value(); | let g = gSlider.value(); | ||
let b = bSlider.value(); | let b = bSlider.value(); | ||
- | let d = distanceSlider.value(); | + | |
+ | // Umgekehrte Distanz: Max-Wert (200) → volle Überlagerung (d = 0) | ||
+ | let sliderVal | ||
+ | let maxDistance = 200; | ||
+ | let d = maxDistance - sliderVal; | ||
let radius = 200; | let radius = 200; | ||
Line 209: | Line 196: | ||
let cy = height / 2 - 30; | let cy = height / 2 - 30; | ||
+ | // Positionen im gleichseitigen Dreieck | ||
let xR = cx; | let xR = cx; | ||
let yR = cy - d; | let yR = cy - d; | ||
Line 218: | Line 206: | ||
let yB = cy + d * sin(PI / 6); | let yB = cy + d * sin(PI / 6); | ||
+ | // Additive Farbmischung | ||
blendMode(ADD); | blendMode(ADD); | ||
fill(r, 0, 0); | fill(r, 0, 0); | ||
Line 227: | Line 216: | ||
blendMode(BLEND); | blendMode(BLEND); | ||
+ | // Textanzeige | ||
fill(255); | fill(255); | ||
textSize(14); | textSize(14); | ||
- | text(' | + | text(" |
- | text('Red: ' | + | text("Red: " |
- | text('Green: | + | text("Green: |
- | text('Blue: ' | + | text("Blue: " |
} | } | ||
</ | </ |
/var/www/vhosts/ct-lab.info/wiki.ct-lab.info/data/attic/code/p5js/additive-farbmischung.1744123187.txt.gz · Last modified: 2025/04/08 14:39 by Felix Hardmood Beck