にっき
2006/05/17 14:27:23
いろいろないろ
ひょんなことから成分解析の要領で文字列をから〜こ〜どに変換できないかなぁ?
なんておはなしになったのでさっそく検索したら「成分解析」解析結果ってあるごりずむも載ってたけど・・・
別に本家の成分解析の結果とりんくさせる必要もないからおりぢなるで☆
仕様
1.入力文字列から『#e7faff』なかんじでおなじみのから〜こ〜どを出力☆
2.何回やっても入力された文字列に対して出力はおんなじ☆
3.色を創るのに必要な個数は固定なのでできるだけしんぷるに☆
4.でもおまけはつけたいかもにう(´ω`;【壁
共通部分
1.文字列→数値の変換は16進で返すはっしゅ関数に文字列をぽい☆
1文字ずつ文字こ〜どを見て数値にしてもいいけどこ〜どが見づらくなるのにう・・・
case1:RGBこ〜どをさくっと出力☆
1.共通部分の結果から6桁を取り出して完了 d(´ω`。【壁
この方法はほんとに簡単だけど結果の範囲をさっぱり制御できないのが問題にう・・・
case2:RGBこ〜どをそれぞれで範囲指定できるように☆
1.文字列だけでなく範囲も入力ぱらめ〜たに追加
2.共通部分の結果からてきとうに2桁以上のを3せっと取り出す
3.2で取り出したのを範囲内に補正
補正方法は『min + 元の値 % 範囲』あたりでさくっとにう?
4.3の結果をRGB順に16進変換したのをぺったんしておしまい☆
これである程度は結果の範囲を制限できるけどあんまりまとまった色にはできないのが困りものにう(つx;【壁
case3:HSV形式で色の方向性も指定できるように☆
色相,彩度,明度の3つで色を指定する方法でRBG形式よりも色の方向性を範囲指定するのが簡単なのです d(・x・。【壁
ただ範囲がRGBのようにみんな0〜255みたいにはいかないからちょっと変更して
・色相(H) {0 〜 359}
美術の教科書に載ってた色相環(虹が輪になったかんじの)を使って色を角度で表現するかんじ☆
0.0 〜 1.0 で表現することもできるけどRGBに変換するときのべ〜すになる6色を指定しづらいからぱす☆
今回使った360度の赤基準だと
こんなかんじで,基準色が変わると順番はそのままでずれるのにう☆
・彩度(S) {0 〜 100}
鮮やかさの度合いを100%満点で☆
これが高いと原色に近くなるのにう☆
・明度(V) {0 〜 100}
明るさの度合いを100%満点で☆
これが高いと白っぽくなるのにう☆
こんなかんじで範囲はちょっと違うけど値の決め方はcase2のときとおんなじでおっけぃ☆
問題はここからRGB形式への変換だけど・・・
こんなかんじでおっけぃらしいのです☆
変換式そのままだと5&6の処理はif elseかswitchで6種類描くみたいだけどなんだかにう・・・
・・・って『色を考えるのがめんど〜なときにあいてむ名から色を出しちゃえ』
ないきおいではじめたのににゃんでここまでやってるんだろう・・・ (´ω`;【壁
いちおう動くのはできてるけどもうちょっとすっきりできそうな気がするからもうちょっとがんばるにう...〆(・x・。【壁
なんておはなしになったのでさっそく検索したら「成分解析」解析結果ってあるごりずむも載ってたけど・・・
別に本家の成分解析の結果とりんくさせる必要もないからおりぢなるで☆
仕様
1.入力文字列から『#e7faff』なかんじでおなじみのから〜こ〜どを出力☆
2.何回やっても入力された文字列に対して出力はおんなじ☆
3.色を創るのに必要な個数は固定なのでできるだけしんぷるに☆
4.でもおまけはつけたいかもにう(´ω`;【壁
共通部分
1.文字列→数値の変換は16進で返すはっしゅ関数に文字列をぽい☆
1文字ずつ文字こ〜どを見て数値にしてもいいけどこ〜どが見づらくなるのにう・・・
case1:RGBこ〜どをさくっと出力☆
1.共通部分の結果から6桁を取り出して完了 d(´ω`。【壁
この方法はほんとに簡単だけど結果の範囲をさっぱり制御できないのが問題にう・・・
case2:RGBこ〜どをそれぞれで範囲指定できるように☆
1.文字列だけでなく範囲も入力ぱらめ〜たに追加
2.共通部分の結果からてきとうに2桁以上のを3せっと取り出す
3.2で取り出したのを範囲内に補正
補正方法は『min + 元の値 % 範囲』あたりでさくっとにう?
4.3の結果をRGB順に16進変換したのをぺったんしておしまい☆
これである程度は結果の範囲を制限できるけどあんまりまとまった色にはできないのが困りものにう(つx;【壁
case3:HSV形式で色の方向性も指定できるように☆
色相,彩度,明度の3つで色を指定する方法でRBG形式よりも色の方向性を範囲指定するのが簡単なのです d(・x・。【壁
ただ範囲がRGBのようにみんな0〜255みたいにはいかないからちょっと変更して
・色相(H) {0 〜 359}
美術の教科書に載ってた色相環(虹が輪になったかんじの)を使って色を角度で表現するかんじ☆
0.0 〜 1.0 で表現することもできるけどRGBに変換するときのべ〜すになる6色を指定しづらいからぱす☆
今回使った360度の赤基準だと
0&360:Red(赤)
60 :Yellow(黄色)
120 :Green(緑)
180 :Cyan(水色)
240 :Blue(青)
300 :Magenta(紫)
こんなかんじで,基準色が変わると順番はそのままでずれるのにう☆
・彩度(S) {0 〜 100}
鮮やかさの度合いを100%満点で☆
これが高いと原色に近くなるのにう☆
・明度(V) {0 〜 100}
明るさの度合いを100%満点で☆
これが高いと白っぽくなるのにう☆
こんなかんじで範囲はちょっと違うけど値の決め方はcase2のときとおんなじでおっけぃ☆
問題はここからRGB形式への変換だけど・・・
1.Sを0.01倍して0.0 〜 1.0に☆
%を小数に変換・・・っていうか型変換もあるからはじめから0.0 〜 1.0もありかもにう?
2.Vを2.55倍して0 〜 255に☆
っていうかめんど〜なら入力を0 〜 255にしちゃってもいいかもにう(´ω`;【壁
3.Sが0のときはものくろなのでVの値をRGBに入れておしまい☆
4.Hの値で色の方向性を決定☆
0 〜 59:Red(赤)系
60 〜 119:Yellow(黄色)系
120 〜 179:Green(緑)系
180 〜 239:Cyan(水色)系
240 〜 299:Blue(青)系
300 〜 359:Magenta(紫)系
5.4の結果RGB系のときは
めいんの色 :V
時計回りで2つ隣の色:V * (1.0 - S * (1.0 - (H % 60) / 60))
残りの色 :V * (1.0 - S)
6.4の結果がYCM系のときは
時計回りで隣の色 :V * (1.0 - S * (1.0 - (H % 60) / 60))
時計回りで3つ隣の色:V * (1.0 - S)
残りの色 :V * (1.0 - S * (H % 60) / 60)
7.5or6の結果をRGB順に16進変換したのをぺったんして完成☆
こんなかんじでおっけぃらしいのです☆
変換式そのままだと5&6の処理はif elseかswitchで6種類描くみたいだけどなんだかにう・・・
・・・って『色を考えるのがめんど〜なときにあいてむ名から色を出しちゃえ』
ないきおいではじめたのににゃんでここまでやってるんだろう・・・ (´ω`;【壁
いちおう動くのはできてるけどもうちょっとすっきりできそうな気がするからもうちょっとがんばるにう...〆(・x・。【壁
こめんと
投稿された内容の著作権はこめんとの投稿者に帰属するっぽいです☆また,現在 IE6 以下で Sleipnir,Lunascape,Donut じゃないゆ〜ざえ〜じぇんとからの描き込みを制限してますです☆
該当しちゃうかたはてきとうにゆ〜ざえ〜じぇんとを偽装しちゃってくださいです(´ω`;【みかん