HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0610
うぼーだんだんと色が変わっていくようにしたい5解決


うぼー

リンク

2012/6/10(Sun) 18:49:08|NO.47148

repeat-loop内で色を変えていきたいのですが、うまく出来ません
指定した色(sr,sg,sb)から、別に指定した色(er,eg,eb)にrepeat-loop内で
色を変えていきたいです
例えばループ回数が100回で、最初(sr,sg,sb)が255,255,0、最後(er,eg,eb)が0,255,255
の場合、ループ50回目の色が、127,255,127と中間になるようにしたいのです

; sr , sg , sb は初めの色(RGB) ; er , eg , eb は変化後の色(RGB) ; as はループ回数 sr = 255.0: sg = 255.0: sb = 0.0 ;はじめの色 R=255,G=255,B= 0 (=黄色) er = 0.0: eg = 255.0: eb = 255.0 ;変化後の色 R= 0,G=255,B=255 (=水色) as = 100 repeat as RR = er + (double(as - cnt)/as) * sr GG = eg + (double(as - cnt)/as) * sg BB = eb + (double(as - cnt)/as) * sb color int(RR),int(GG),int(BB) pset XX,1 pset XX,2 pset XX,3 pset XX,4 pset XX,5 XX++ await loop
単略化したのがこちらになります
これだと、RGBのG(緑)が最初0から始まり、252.45で止まってしまいます
Rは255から0に、緑は255から変わらず、青は0から255に変化するようにしたいです
この場合、どう書けばいいのでしょうか?
よろしくお願いします
(少数の切り捨て誤差などによりキッチリ255ではなく252などになってしまっても問題ありません)



この記事に返信する


spider

リンク

2012/6/10(Sun) 19:01:07|NO.47149

; sr , sg , sb  は初めの色(RGB)
; er , eg , eb は変化後の色(RGB) ; as はループ回数 sr = 255.0: sg = 255.0: sb = 0.0 ;はじめの色 R=255,G=255,B= 0 (=黄色) er = 0.0: eg = 255.0: eb = 255.0 ;変化後の色 R= 0,G=255,B=255 (=水色) as = 100 r = sr g = sg b = sb cr = (er-sr)/as cg = (eg-sg)/as cb = (eb-eg)/as repeat as color r, g, b r+=cr g+=cg b+=cb pset cnt, 1 pset cnt, 2 pset cnt, 3 pset cnt, 4 pset cnt, 5 loop
こんなんどうよ?
psetにこだわらずlineでいいがこんな感じだろう。

しかしグラデーションなら、gradfでできるんだが。



spider

リンク

2012/6/10(Sun) 19:03:54|NO.47151

思いっきりしくじった。
cb = (eb-eg)/asじゃなくて
cb = (eb-sb)/as
でした。



うぼー

リンク

2012/6/10(Sun) 19:12:56|NO.47152

spiderさんご回答ありがとうございます
今回は短略化のために擬似的な矩形を使いましたが、実際はlineを繋げて描写するため、
gradfは使えませんでした

頂いたソースで、cb = (eb-eg)/asをcb = (eb-sb)/asにしたら思っていた通りの動きになりました
ご回答ありがとうございました!



うぼー

リンク

2012/6/10(Sun) 19:13:51|NO.47153

打つのに時間かかって訂正が見えませんでした…



y.ack

リンク

2012/6/10(Sun) 19:19:33|NO.47154

投稿したんですけど、かぶりました(笑)
くやしいのでリファクタリングしときました

ややこしい時は変数の命名を頑張るといいですよ

; start_R , start_G , start_B は初めの色(RGB) ; target_R , target_G , target_B は変化後の色(RGB) ; loop_kaisuu はループ回数 ;はじめの色 R=255,G=255,B= 0 (=黄色) ;変化後の色 R= 0,G=255,B=255 (=水色) start_R = 255.0: target_R=0.0 start_G = 255.0: target_G=255.0 start_B = 0.0: target_B=255.0 loop_kaisuu = 100 r = start_R g = start_G b = start_B cur_R = (target_R - start_R)/loop_kaisuu cur_G = (target_G - start_G)/loop_kaisuu cur_B = (target_B - start_B)/loop_kaisuu repeat loop_kaisuu color r, g, b r+=cur_R g+=cur_G b+=cur_B pset cnt, 1 pset cnt, 2 pset cnt, 3 pset cnt, 4 pset cnt, 5 await 50 loop



ONION software Copyright 1997-2023(c) All rights reserved.