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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0424
大富豪数値代入の方法(Min/Max)変数の固定化9解決


大富豪

リンク

2022/4/24(Sun) 15:57:15|NO.96110

お世話になります。

リアルタイムでランダムに変化する数値の
ピークホールドとボトムホールドを作りたいのですが、
頭が回りません・・・

(dBレベルメーターのようなイメージです)
『リアルタイムでランダムに変化する数値』
マウスの座標(X/Y)を一定間隔で調べ、
動いた範囲の最大/最小の座標を記録


repeat redraw 0 color:boxf pos 0,0:color 200,200,200 mes ""+cn+"" mes ""+mousex+" / "+mousey+"" px=mousex:py=mousey mes ""+px+" / "+py+"" ;pxに代入した現在値mousexが ;次の回にそれより大きい小さいか判断。 ;大きい場合はpx=最小値pxMinとして記録し、 ; その大きな数値をpxMaxとする。 ;小さい場合はpx=最大値pxMaxとして記録。 ; その小さな数値をpxMinとする。 ;現在値がpxMin<mousex<pxMaxの範囲内なら何もしない。 ;一定間隔(cn=100回)で更新またはMin/Max値を保持 cn+=1:if cn=100:cn=0 redraw 1 wait 8 loop


変動する現在値を固定値として置き換えるのがうまく行きません・・・。
他に何か良い方法があればお願いします。



この記事に返信する


Makoto

リンク

2022/4/24(Sun) 17:11:52|NO.96111

もし質問の内容を勘違いしていたら申しわけないのですが
こういった感じで良いのでしょうか
単純に現在値が
最小値より小さかったら最小値を更新し
最大値より大きかったら最大値を更新しています

pxMIN = 320 ; 最小最大初期値 pxMAX = 320 pyMIN = 240 pyMAX = 240 repeat redraw 0 color:boxf pos 0,0:color 200,200,200 mes ""+cn+"" mes ""+mousex+" / "+mousey+"" px=mousex:py=mousey if px < pxMIN { pxMIN = px } ; 現在値が最小より小さかったら更新 if px > pxMax { pxMAX = px } ; 現在値が最大より大きかったら更新 if py < pyMIN { pyMIN = py } if py > pyMax { pyMAX = py } mes "MIN ("+pxMIN+" , "+pyMIN+")" mes "MAX ("+pxMAX+" , "+pyMAX+")" boxf pxMIN , pyMIN , pxMAX , pyMAX cn+=1 if cn=30 { ; 一定間隔でリセット cn=0 pxMIN = 320 pxMAX = 320 pyMIN = 240 pyMAX = 240 } redraw 1 wait 8 loop



大富豪

リンク

2022/4/24(Sun) 18:25:35|NO.96112

>Makoto 様
ご回答大変ありがとうございます。

少しニュアンスが違います;
質問の説明不足だと思います、
申し訳ありません。

・初期値は設定しない。
・もしマウスが全く動いていないときは、
 Min=Max=マウス座標になるハズです。

(似た動き)
https://www.youtube.com/watch?v=myTcnK1lRUA

音楽ソフトで音量を一定時間測定して、
最大音量を固定バーで表示する”ピークメーター”がありますが、
そんな感じです。

1:50あたり,振れているメーターの先端に
細い棒がありますがそれがピークバーです。

ボトムメーターが付いているのは殆ど無いと思いますが、
音源の場合は無音を除外した最低レベルになります。
(⇒マウス座標の最小値)

(音量⇒マウス座標とした感じです)
返って分かりにくくなりますかね;



大富豪

リンク

2022/4/24(Sun) 18:41:52|NO.96113

分かりにくいと思いますので、
イメージ画像を作りました。
https://photos.google.com/photo/AF1QipNfhx44BiREgukZKF0lYcXUdcrJ80wNgwuUrLNA
(クシャクシャと書いているのがマウスを動かしたイメージです)

任意のループ回数内でマウスが動いた範囲を測定し、
座標の最小/最大値を表示。

マウスが停止している時は、
Min=Max=マウス座標になります。



Makoto

リンク

2022/4/24(Sun) 20:24:59|NO.96114

イメージ画像がエラー404で見られなかったのですが
一応ピークメーター的な動きになるように
ちょっと手を加えてみました(変化量は適当)

「任意のループ回数で」という部分が実現できてないので
これもお望みの物とは違うかもしれませんが
動作としてはたぶん説明通りになっているとおもいます

実のところ私はあまりこういった面は得意ではないので
他の方法をお持ちの方がおられましたら回答お願いします

pxMIN = 320 ; 最小最大初期値(boxf描画用) pxMAX = 320 pyMIN = 240 pyMAX = 240 repeat redraw 0 color:boxf pos 0,0:color 200,200,200 mes ""+cn+"" mes ""+mousex+" / "+mousey+"" px=mousex:py=mousey if px < pxMIN { pxMIN = px } ; 現在値が最小より小さかったら更新 else { ; そうでなければマウス座標に近づける pxMIN +=10 if pxMIN >= px { pxMIN = px } } if px > pxMAX { pxMAX = px } else { pxMAX -=10 if pxMAX <= px { pxMAX = px } } if py < pyMIN { pyMIN = py } else { pyMIN +=10 if pyMIN >= py { pyMIN = py } } if py > pyMax { pyMAX = py } else { pyMax -=10 if pyMAX <= py { pyMAX = py } } mes "MIN ("+pxMIN+" , "+pyMIN+")" mes "MAX ("+pxMAX+" , "+pyMAX+")" boxf pxMIN , pyMIN , pxMAX , pyMAX redraw 1 wait 8 loop



zrs90(5さい)

リンク

2022/4/24(Sun) 20:29:49|NO.96115

間違いならすみません。
私も使った事ないのですが
一定範囲内の整数(実数)を返す
関数があります。

条件判定に、limit 関数を組み合わせて
使ってみてはどうでしょうか?

詳しくは、limit をHDLで、調べて下さい。



大富豪

リンク

2022/4/24(Sun) 21:32:46|NO.96116

>Makotoさん
(GooglePhotoなんですがエラーでしたか;)
お手数をお掛けして申し訳ありません;
ちょと動作のイメージが・・・;

良いのかどうか分かりませんが、
https://firestorage.jp/というサイトさんにイメージ絵をUPしました。
(PASS:8888)
https://xfs.jp/BqZBUv


>zrs90(5さい)さん
ありがとうございます。

多次元配列変数っていうんですかね、
それを取得してソートなども考えたのですが、
シンプルに出来ないものかと思いまして。

repeat 10
;現在のマウス座標を10回取得[x*]
;x1 .... x10 =10,8,50,100,....,4,350 //
wait 10
loop

で取得すれば、xMin=8 / xMax=350
と出来るとは思いますが

現在のマウス座標を次の比較対象に置き換えができれば簡単と思ったのですが、
よけいに難しくなるのかも・・・ですかね。


val = limit(p1,p2,p3)

これはp1に前記のような配列変数を入れれば、
一発でp2=Min数値 / p3=Max数値が出るんですかね。

抽出というよりは比較式のような感じ・・・でしょうか。

ちょっとやってみます、
ありがとうございます。



Makoto

リンク

2022/4/25(Mon) 16:56:36|NO.96119

乗りかかった船なのでもうちょっとやってみます
イメージ画像と今までの説明から考えると
一定間隔ごとに最小最大値を取得していけば良いのではと思うのですがどうでしょうか
一定間隔ごとの最小最大値は latest_ が付いた変数に格納されます
なおマウスの座標を記録していますが
これは動作確認のための移動軌跡描画用に使っているだけです

#const interval_time 50 ; 計測する間隔 dim rec_X , interval_time ; マウス移動軌跡(描画用) dim rec_y , interval_time repeat latest_X_MIN = pxMIN ; 最新の最小最大値 latest_X_MAX = pxMAX latest_Y_MIN = pyMIN latest_Y_MAX = pyMAX pxMIN = mousex ; 最小最大値リセット pxMAX = mousex pyMIN = mousey pyMAX = mousey repeat interval_time ; 計測間隔のループ redraw 0 color 0 , 0 , 0 boxf pos 0 , 0 color 255 , 255 , 255 mes "COUNT:" + cnt + "/" + interval_time mes "latest MIN (" + latest_X_MIN + " , " + latest_Y_MIN + ")" mes "latest MAX (" + latest_X_MAX + " , " + latest_Y_MAX + ")" px = mousex py = mousey if px < pxMIN { pxMIN = px } ; 最小最大値更新 if px > pxMAX { pxMAX = px } if py < pyMIN { pyMIN = py } if py > pyMax { pyMAX = py } rec_X(cnt) = px ; マウスの座標を記録(描画用) rec_Y(cnt) = py color 0 , 127 , 255 ; マウスの軌跡を描画 c = cnt repeat interval_time - 1 if c > cnt { line rec_X(cnt) , rec_Y(cnt) , rec_X(cnt + 1) , rec_Y(cnt + 1) } loop color 127 , 127 , 0 ; 更新中の最小最大値の範囲 line pxMIN , 0 , pxMIN , 480 line pxMAX , 0 , pxMAX , 480 line 0 , pyMIN , 640 , pyMIN line 0 , pyMAX , 640 , pyMAX color 255 , 255 , 255 ; 前回の最小最大値の範囲 line latest_X_MIN , 0 , latest_X_MIN , 480 line latest_X_MAX , 0 , latest_X_MAX , 480 line 0 , latest_Y_MIN , 640 , latest_Y_MIN line 0 , latest_Y_MAX , 640 , latest_Y_MAX redraw 1 wait 8 loop loop
ちなみに limit は
p1 で指定した“数値”を p2 から p3 の範囲に収まる値で返すもので
最小値や最大値を返すものではありません

repeat 20 a = limit(cnt , 5 , 15) mes "" + cnt + " → " + a loop



zrs90(5さい)

リンク

2022/4/25(Mon) 18:48:26|NO.96121

Makoto さん のNo.96114 〜の投稿
大富豪さん のNo.96116 の投稿

を見た時に、完全な私の勘違いと、思い込みで
必要ない関数を書いてしまった事に
ようやく気づきました。

大富豪さん、大変申し訳ないです。

(※私の方が、No.96114 より時間的に
ちょっと後になってますが、掲示板システムの
関係?で順番がズレる事があるようです。)



大富豪

リンク

2022/4/25(Mon) 21:30:08|NO.96126

>Makotoさん

おおお?!
・・・出来てますね、イメージ通りです^^。
文字だけだとアレですがイメージ図で伝わったようで良かったです。
大変ありがとうございます!

毎度の事ですが、
どんな仕組みで動いているのか、
自分で理解しないとあまり意味がないので;
ジックリと勉強させて頂きます。

大袈裟かもしれませんが、
ランダム入力とかモーションの特徴を数値化させて、
AI解析とかに応用できるのでは、と考えています。

ありがとうございました。


>zrs90(5さい)

大丈夫でございます。

たぶんランダム入力に対して(limit)、
上限フィルター(threshold/peek cutとか)のような使い方ができるのかと。
下限を下回った時の繰り上げ処理がなんなのかよく分かりませんが。
他の件でも応用できると思いますので、
頭に入れておきます。

ありがとうございました。



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