moflwm
%Europe/Berlin %578 %2005, 14:52
Hey,
ik heb wat zitten experimenteren met kleurovergangen en zo in AS... dit is het resultaat:
// functie om graden om te zetten in radialen
function degToRad(angle) {
return angle/180*Math.PI;
}
// graden -> kleur!
function degToRGB (angle) {
r = Math.round((Math.cos(degToRad(angle + 000))+1)/2*0xFF);
g = Math.round((Math.cos(degToRad(angle + 120))+1)/2*0xFF);
b = Math.round((Math.cos(degToRad(angle + 240))+1)/2*0xFF);
rgb = r << 16 | g << 8 | b;
return rgb;
}
Je werkt dus met een soort kleurencirkel (0° = rood, 120° = groen, 240° = blauw) en de kleur die overeenkomt met een hoek wordt berekend dmv de cosinus van die hoek. Voorbeeld:
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360);
lineStyle(10, color, 100);
lineTo(x, 0);
}
Dat is niet erg flexibel, dus heb ik een uitgebreidere versie gemaakt:
function degToRGB (angle, args) {
rMin = (args.rMin == undefined) ? 0 : args.rMin;
gMin = (args.gMin == undefined) ? 0 : args.gMin;
bMin = (args.bMin == undefined) ? 0 : args.bMin;
rDiff = (args.rMax == undefined or args.rMax < rMin) ? 255-rMin : args.rMax-rMin;
gDiff = (args.gMax == undefined or args.gMax < gMin) ? 255-gMin : args.gMax-gMin;
bDiff = (args.bMax == undefined or args.bMax < bMin) ? 255-bMin : args.bMax-bMin;
rAngle = (args.rAngle == undefined) ? 000 : args.rAngle;
gAngle = (args.gAngle == undefined) ? 120 : args.gAngle;
bAngle = (args.bAngle == undefined) ? 240 : args.bAngle;
r = Math.round((Math.cos(degToRad(angle + rAngle))+1)/2*rDiff)+rMin;
g = Math.round((Math.cos(degToRad(angle + gAngle))+1)/2*gDiff)+gMin;
b = Math.round((Math.cos(degToRad(angle + bAngle))+1)/2*bDiff)+bMin;
rgb = r << 16 | g << 8 | b;
return rgb;
}
Zo kun je de hoeken waarop de basiskleuren zich bevinden aanpassen (rAngle, bAngle, gAngle), en hun minimum- en maximumwaarden (rMin, rMax, gMin, gMax, bMin, bMax). Twee voorbeelden hiervan:
args = {rMin: 0x99, gMax: 0x99, bMin: 0xCC, bMax: 0xCC};
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360, args);
lineStyle(10, color, 100);
lineTo(x, 20);
}
args = {rAngle: 50, gAngle: 90, bAngle: 170};
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360, args);
lineStyle(10, color, 100);
lineTo(x, 40);
}
Je kan het aan het werk zien op http://home.scarlet.be/~plinius1/kleurverandering-schuifjes.swf. (het is de bedoeling dat je die driehoekjes rechts verschuift om het effect ervan op de kleuren te bekijken :))
grz
yves
ik heb wat zitten experimenteren met kleurovergangen en zo in AS... dit is het resultaat:
// functie om graden om te zetten in radialen
function degToRad(angle) {
return angle/180*Math.PI;
}
// graden -> kleur!
function degToRGB (angle) {
r = Math.round((Math.cos(degToRad(angle + 000))+1)/2*0xFF);
g = Math.round((Math.cos(degToRad(angle + 120))+1)/2*0xFF);
b = Math.round((Math.cos(degToRad(angle + 240))+1)/2*0xFF);
rgb = r << 16 | g << 8 | b;
return rgb;
}
Je werkt dus met een soort kleurencirkel (0° = rood, 120° = groen, 240° = blauw) en de kleur die overeenkomt met een hoek wordt berekend dmv de cosinus van die hoek. Voorbeeld:
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360);
lineStyle(10, color, 100);
lineTo(x, 0);
}
Dat is niet erg flexibel, dus heb ik een uitgebreidere versie gemaakt:
function degToRGB (angle, args) {
rMin = (args.rMin == undefined) ? 0 : args.rMin;
gMin = (args.gMin == undefined) ? 0 : args.gMin;
bMin = (args.bMin == undefined) ? 0 : args.bMin;
rDiff = (args.rMax == undefined or args.rMax < rMin) ? 255-rMin : args.rMax-rMin;
gDiff = (args.gMax == undefined or args.gMax < gMin) ? 255-gMin : args.gMax-gMin;
bDiff = (args.bMax == undefined or args.bMax < bMin) ? 255-bMin : args.bMax-bMin;
rAngle = (args.rAngle == undefined) ? 000 : args.rAngle;
gAngle = (args.gAngle == undefined) ? 120 : args.gAngle;
bAngle = (args.bAngle == undefined) ? 240 : args.bAngle;
r = Math.round((Math.cos(degToRad(angle + rAngle))+1)/2*rDiff)+rMin;
g = Math.round((Math.cos(degToRad(angle + gAngle))+1)/2*gDiff)+gMin;
b = Math.round((Math.cos(degToRad(angle + bAngle))+1)/2*bDiff)+bMin;
rgb = r << 16 | g << 8 | b;
return rgb;
}
Zo kun je de hoeken waarop de basiskleuren zich bevinden aanpassen (rAngle, bAngle, gAngle), en hun minimum- en maximumwaarden (rMin, rMax, gMin, gMax, bMin, bMax). Twee voorbeelden hiervan:
args = {rMin: 0x99, gMax: 0x99, bMin: 0xCC, bMax: 0xCC};
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360, args);
lineStyle(10, color, 100);
lineTo(x, 20);
}
args = {rAngle: 50, gAngle: 90, bAngle: 170};
moveTo(0, 0);
for (x=0; x<500; x++) {
color = degToRGB(x%360, args);
lineStyle(10, color, 100);
lineTo(x, 40);
}
Je kan het aan het werk zien op http://home.scarlet.be/~plinius1/kleurverandering-schuifjes.swf. (het is de bedoeling dat je die driehoekjes rechts verschuift om het effect ervan op de kleuren te bekijken :))
grz
yves