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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0303
びわどれが近いか3解決


びわ

リンク

2011/3/3(Thu) 16:01:41|NO.37351

クリックされた時にマウスポインタがどの■が1番近いか調べてその番号を表示させたいのですが、
1つ1つの■との差を調べて差の少ない■の番号を表示させる。という方法しか思い浮かばず、
効率が悪い気がします。
もっと効率の良い方法はありませんか?

ソースです。

dim x,10 dim y,10 randomize repeat 10 x(cnt) = rnd(640) y(cnt) = rnd(480) loop *main font "",50 repeat 10 pos x(cnt), y(cnt) mes "■" loop onclick *click stop *click



この記事に返信する


てれてれ

リンク

2011/3/3(Thu) 16:38:24|NO.37353


dim x,10 dim y,10 randomize repeat 10 x(cnt) = limit( rnd(640) , 0 , 590 ) y(cnt) = limit( rnd(480) , 0 , 430 ) loop *main repeat 10 font "",50 :color pos x(cnt), y(cnt) :mes "■" font "",25 :color 255,255,255 pos x(cnt)+18, y(cnt)+13 :mes cnt loop onclick *click stop *click mx = mousex - 25 my = mousey - 25 sel = $FFFFFF repeat 10 if powf( abs( x(cnt) - mx ) ,2 ) + powf( abs( y(cnt) - my ) ,2 ) <= sel{ sel = powf( abs( x(cnt) - mx ) ,2 ) + powf( abs( y(cnt) - my ) ,2 ) id = cnt } loop title "一番近いのは["+ID+"]
びわさんが仰るやり方ですが、別に効率は悪くないと思います。



びわ

リンク

2011/3/3(Thu) 16:44:53|NO.37354

効率は悪くないのですか。
続きまで書いて下さりありがとうございました。



だめちゃ

リンク

2011/3/6(Sun) 02:52:47|NO.37438

クラスタリングの問題ですね。
もう遅いかもしれませんが、久々に訪問したので書き込みます。

#define WINX 640 #define WINY 480 #define N 30 dim x, N dim y, N randomize repeat N x(cnt) = rnd(WINX) y(cnt) = rnd(WINY) loop gosub *voronoi *main font "",25 repeat N pos x(cnt), y(cnt) mes "■"+cnt loop onclick *click stop // ボロノイ・モザイク領域の生成 *voronoi dim vri, WINX * WINY; // 最近値の点のIDが入る // ウィンドウの大きさ分だけ繰り返す repeat WINY cy = cnt; repeat WINX cx = cnt; // 二乗距離の最小値を初期化 dist_min = WINX*WINX + WINY*WINY; id = -1; // WINX,WINYを超える点が最近値の場合はエラー // 最近値の点を検索 repeat N // 点からの距離の二乗 distance2 = (cx - x(cnt)) * (cx - x(cnt)) + (cy - y(cnt)) * (cy - y(cnt)); // 最も近いもの if ( distance2 < dist_min ) { dist_min = distance2; id = cnt; } loop // 最近値の点のIDを代入 vri( cx + cy * WINX ) = id; // if ( id == -1 ) { dialog "ERROR" } loop loop return *click dialog vri( mousex + mousey * WINX )



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