投稿
範囲で見る時は、 2つ不等式を書かないといけないんだよなぁ。 もっと良い方法無いかなぁ~。
4そうだね
プレイ済み
返信[1]
親投稿
れい rei-nntnd
ないorz 速度とか読みやすさ考えても場合分けするしかない
1そうだね
プレイ済み
返信[2]
親投稿
ツララ LongIceSword
うえこうさん冴えてる!もしかしたら数直線を模したスプライトで当たり判定を使えば一発で判別出来たりしません? もしくは[判定する変数],[範囲下限],[範囲上限]の3つの引数からTRUEかFALSEを返す範囲判定用の関数を作っちゃうとか。
2そうだね
プレイ済み
返信[3]
親投稿
けい kei0baisoku
ツララさんに同じですが、範囲とクランプはよくやるので関数作ってやってます。(・ω・)/ DEF RANGE(V,MI,MA) RETURN MI<=V && V<=MA END DEF CLAMP(V,MI,MA) IF V<MI THEN RETURN MI ELSEIF MA<V THEN RETURN MA ENDIF RETURN V END
4そうだね
プレイ済み
返信[4]
親投稿
ツララさん» 関数かぁ。それ僕も思った。 けいさん» くらんぷ? なにそれどんなときにおいしいの?
0そうだね
プレイ済み
返信[5]
親投稿
ああ!カーソル座標とかに使うのか! 便利そうだから覚えとこ。φ(._.)メモメモ
0そうだね
プレイ済み
返信[6]
親投稿
れい rei-nntnd
範囲制限したい場合は俺はこんなの使ってる min(max(xx,最小値),最大値)
3そうだね
プレイ済み
返信[7]
親投稿
な、なるほど! そんな便利な書き方があったなんて! これでIF文減らして見やすくなる!
0そうだね
プレイ済み
返信[8]
親投稿
けい kei0baisoku
既存命令のフル活用凄いw もう伝わってるかもしれませんが一応説明。 「クランプ」と言うのは締めるとか固定するとかいう意味で、プログラムでは「値を最小値と最大値の範囲に収める」意味でよく使われます。 お察しの通り、座標や速度を最大値と最小値の範囲に収めたい時に、IF文使ってよくやってるヤツです。
2そうだね
プレイ済み
返信[9]
親投稿
れい rei-nntnd
IF減らしたら見やすくなるか、っていうとそれは場合によるし 範囲制限にmin max使うのは最小最大の指定あたりが取り違えやすくて混乱する場合もあるので これが最適ってわけじゃないから気を付けて。 短さは最強だが見やすさは最弱、みたいな。 速度は…自分で測って見ると面白いかな。 Ifでやる場合、defで作る場合、それぞれで見やすさ長さ速さ違うから。
2そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
「なんとかしてよ~マスえもん~」 「しょうがないなあ。絶対値~~~~(パンパカパーン)」 「これはある実数が特定の範囲に入っているかどうか一回の比較でわかる道具なんだ」 0 < h かつ h < 60 ⇔ -30 < h-30 かつ h-30 < 30 (各辺から 30 を引いた) ⇔ |h-30| < 30 (|x|<a⇔-a<x<a の公式より)
0そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
仮想インタプリタによるステップ数 (a) 0 < h && h < 60 h<=0の場合 push 0, push ^h, eval, less_than (4step) h>0の場合 push 0, push ^h, eval, less_than, push ^h, eval, push 60, less_than (8step) (b) abs(h-30) < 30 push ^h, eval, push 30, minus, abs, push 30, less_than (7step)
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
IF 0<=H && H<60 THEN ならばIF !FLOOR(H/60)THEN に置き換えることができます。 HSVをRGBに変換するための判定ならばあらかじめ60で割って整数化したものを別の変数に入れておけばその変数の値が0の場合、1の場合、中略、5の場合の6通りの場合分けをするだけ済みます。 ただし、この場合はあらかじめHの値を0以上360未満にしておく必要があります。 Hの値がこの範囲外の時はどのようにするかで処理方法が変わりますがH=420をH=60とするならばH=((H MOD 360)+360)MOD 360とすれば良いです。(MOD 360を2回使っているのは負数の場合の例外処理のため) 整数化には様々な方法があるし、0から360の範囲に制限するのも様々な方法があるのでお好きなやり方でいいと思います。
0そうだね
プレイ済み
返信[13]
親投稿
MODってなんだろう? よく見かけるけど、 何してるかはわからない・・・。 ちなみに僕なら H=H-H DIV 360*360 って書きます。(合ってるかな? つまり、360で割った余りを 出せばいいってことですよね? (Hが-だった時の処理がいるけど。 もっと簡単な書き方無いかなぁ? mk2みたいに%使えたらなぁ。
0そうだね
プレイ済み
返信[14]
親投稿
麗(れい)さん» もう完全に覚えちゃったので、 自分で見るならこっちの方が コンパクトで見やすいかも。 (知らない人から見たら混乱しますね。 X=MIN(MAX(X,0),400) Y=MIN(MAX(Y,0),240) SPOFS 0,X,Y 'コンナカンジ みき★さん» もう何がなんだかさっぱりわからない・・・。
0そうだね
プレイ済み
返信[15]
親投稿
MIKI ifconfig
え、中学で絶対値習わないんだっけ? |x| = {x (x>=0の場合), -x (x<0の場合)} |x| = (xの符号取ったもの) という理解でもいい。とりあえず。 if 0<h && 0<60 は if abs(h-30)<30 と書けるという意味です。 仮想なんたらがどうしたというのはゴミなんで無視してちょうだい。
0そうだね
プレイ済み
返信[16]
親投稿
ボク、まだ中2です。 でも、ABSは使うので、 説明できないけど、意味は理解しました。 で、むしろめんどくさくなった気g(殴
0そうだね
プレイ済み
返信[17]
親投稿
けい kei0baisoku
>あっキーさん 「MOD」命令のヘルプを見るのだ
0そうだね
プレイ済み
返信[18]
親投稿
れい rei-nntnd
工夫をしたり、一見して理解できないコードを書く場合は理由がいる。 速かったり、メモリ消費が少なかったり、コード量が少なかったり、信心深かったり。 HSV変換の場合、30±30の範囲をみたいわけでも60でわった商が1より大きいかをみたおわけではなく、0~60に入っているかを見たい。 なおかつabsもfloorも遅い。 メモリ消費もコード量もいして変わらん。 他にも三角関数つかったり、ふくそ変換使ったり、スプライト使う方法もあるが、どれも適切じゃない。 宗教上の理由がないなら、今回は普通にifを重ねるのが最良だろうよ。 もちろんいろいろな可能性を探る能力は必要だが。 素直に
3そうだね
プレイ済み
返信[19]
親投稿
スナオニヘルプミロヨオレ(°д°;)
1そうだね
プレイ済み
返信[20]
親投稿
MIKI ifconfig
負の場合どうなるのかな? (C言語の % だと処理系定義です) basic は伝統的に a mod b = a - a div b * b だったような気がします。
1そうだね
プレイ済み
返信[21]
親投稿
ナツキ natukin1978
考えた事を考えた通りに書く。簡単な様で何と難しい事よ。
0そうだね
プレイ済み