プチコン3号 SmileBASIC コミュニティトピックつばさ☆ nsm21162016/05/19 19:47:15質問円の内側の判定画像のような円の中をタッチしたら処理を行うにはどうすればいいですか? GCIRなんとか っていう命令で描画しました。160,120,50です。4そうだね 13返信プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿つばさ☆ nsm21162016/5/19 19:49GCIRCLE 160,120,50でした。コメント数が0になった。2そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿あまさと しおん ShionAmasato2016/5/19 19:49透明色でOK? ならちょっとせこい方法がある 円の中だけ透明度を中途半端な値にしておくとGSPOIT()で知れる。8そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿イスターリャ arduinotexter2016/5/19 19:59天郷さんの方法のほうが速い けど 数式だけでやるなら、ピタゴラスの定理を使って 長さ=SQR(POW(タッチX-中心点X,2)+POW(タッチY-中心点Y,2)) で求められる けど、非常に遅い 加減乗除の2~3倍くらいの時間がかかる6そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿イスターリャ arduinotexter2016/5/19 20:00あ、長さは中心点からの距離だった これをIFで長さ判定してやると円の中か判定できます3そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿あまさと しおん ShionAmasato2016/5/19 20:02(長さの式なんか使おうと思った記憶がある、あの中3で習った三平方の定理の出番だったのね。)4そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿あきと SideBurnsM2016/5/19 20:20100回計算しても処理落ちしないでしょ。 重くないし正しい方法。 ちなみに円の半径を2乗して保存しておけばSQRはいらなくなる。 タッチ座標と円の中心の2点間の距離を求めて、円の半径より小さかったら内側。大きかったら外側ということです。6そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿イスターリャ arduinotexter2016/5/19 20:30ちなみに POW(変数,2) より 変数*変数 の方が軽い模様 T-PAINT Gではこの方法で若干の処理軽量化を施しているのである5そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿イスターリャ arduinotexter2016/5/19 20:31>>あきと さん 別に絶対的に重いと言っているわけではなく、ピタゴラスの定理以外の、加減乗除のみで構成された数式と比較して相対的に遅いと言っただけです2そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿Hanzo rzsense2016/5/19 20:45正確さを求めないなら、円の内部の点全てを判定せず、例えば、円に内接する正方形の内部かどうかを判定する、次のような判定式を使うことも考えられます。 IF TX>=(160-35)&& TX<=(160+35)&& TY>=(120-35)&& TY<=(120-35)THEN … TX,TYはタッチ座標、35とは、円の半径50のルート2分の1で、つまり円に内接する正方形の1辺の長さの半分です。3そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿MIKI ifconfig2016/5/19 20:57前提として sqrt は遅いってのがあって、 「なら先に計算しとこう」ってのがあきとさんの方法 これは今回みたいに半径が決まってる場合有効。 毎回半径が異なるような場合は、両辺を二乗して if 長さ^2 < 半径^2 then 内側 のようにして sqrt を回避するのが常道です。 3そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿ネタバレΖΕΧ ZEX2562016/5/19 20:59XSCREEN 2:DISPLAY 1 CX=160:CY=120:R=50 GCIRCLE CX,CY,R REPEAT:WAIT TOUCH OUT TM,TX,TY IF TM<1 THEN CONTINUE LX=TX-CX:LY=TY-CY IF SQR(LX*LX+LY*LY)<=R THEN ?"処理" ELSE ? UNTIL 02そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿あきと SideBurnsM2016/5/19 21:01加減乗除だけで書くとこうですね。 TOUCH OUT ST,TX,TY WX=TX-160 WY=TY-120 RR=50*50 IF RR<(WX*WX+WY*WY) THEN ? "内側" ELSE ? "外側" ENDIF 2そうだね プレイ済み2017/11/03 18:08:53に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿つばさ☆ nsm21162016/5/20 18:17昨日は共感しつつ返信できずすみせん… おぉ!できた。色々な方法で試してみた! ついでにSQRとかの命令やPOW(変数,2)より変数*変数の方が速いなど知らない情報がたくさん!! ありがとうございました!!!!1そうだね プレイ済み2017/11/03 18:08:53に取得