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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0612
shade範囲内(円内)でクリックした際の動作について3解決


shade

リンク

2012/6/12(Tue) 21:07:52|NO.47237

クリックした際の動作はonclickなどの命令で可能ですが
特定の範囲でクリックした際の動作ではgetkeyで左クリックが押された&mousex及びmouseyでマウスの座標を所得して
実現してます。
例えば、

repeat getkey click, 1 if(click = 1 && 0 <= mousex && mousex <= 100 && 0 <= mousey && mousey <= 100){ mes "範囲内でクリックされました" break } wait 1 loop
とあった場合、(x,y)=(0~100,0~100)でクリックされたら「範囲内でクリックされました」とでます。
これは範囲が四角形であるがために条件が短いですが、円を長方形の集まりと考えた際に、以上のやり方で
実現しようと考えたら長い条件式となってしまいます。


screen 0,300,300 i = 0 repeat 360 dx = cos(deg2rad(i)) * 80 + 150 dy = sin(deg2rad(i)) * 80 + 120 //dx dyの80は半径、150と120は円の中心を真ん中に持ってくるため pos dx, dy :mes "+" i++ wait 1 loop
上記では、「+」を中心から80離れた位置に表示つまり円を描いているのですが、
この360個の座標を用いて長方形をイメージし、それら360個の長方形の範囲内である&クリックされた
これで実現できるのではないか?と考えております。
円の範囲内を表現する方法がこれしか浮かばずとても苦戦しております。

こうした方がよい、このような方法があるなど教えていただければと思います。
質問の方よろしくお願いします



この記事に返信する


ZAP

リンク

2012/6/12(Tue) 21:21:26|NO.47238

円の中心からの距離が半径の長さ以内かどうか、で判定すれば一発で判定可能です。

2点間の距離の公式
http://ja.ftext.org/%E5%BA%A7%E6%A8%99%E5%B9%B3%E9%9D%A2%E4%B8%8A%E3%81%AE2%E7%82%B9%E9%96%93%E3%81%AE%E8%B7%9D%E9%9B%A2

を用いて、中心とマウス座標の距離を求め、それが半径以内なら円内、という理屈です。

ただ、単純に長さを比較するだけなら、ルートを素直にプログラミングするのは面倒なので、
この場合、両辺を二乗して

半径の二乗>=X方向の距離の二乗+Y方向の距離の二乗

として判定するのが楽でしょう。



kino

リンク

2012/6/12(Tue) 21:30:25|NO.47239

2点間の距離で判定するなら
http://hsp.tv/play/pforum.php?mode=pastwch&num=30058
過去ログにありますね



shade

リンク

2012/6/13(Wed) 00:15:37|NO.47244

回答の方ありがとうございます。
中心とマウス座標の距離を求めて、半径以内なら円内という考えにまったく至らなかったです・・
とても参考になりました!
やっぱり、考え方というのはとても大事ですね・・・
解決しました。ありがとうございました!



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