円と直線の当たり判定です。
円と直線の距離を測って、半径より小さければ、当たってると判断します。
;=========================================================== ; 2009/04/18 ; 円と直線の判定 ; GAM-22 ;=========================================================== if 0 { #defcfunc dis_line_circle double l, double m, double n, int x, int y ;----------------------------------------------------------- ; 点と直線の距離 ;----------------------------------------------------------- ; ; p1,p2,p3 : 直線(lx+mx+n=0)の、 l,m,n ; p4,p5 : 点の座標(x,y) ;----------------------------------------------------------- return absf(l*x +m*y +n) /sqrt(l*l +m*m) #deffunc circle2 int x, int y, int r ;----------------------------------------------------------- ; 円を描画 ;----------------------------------------------------------- ; ; p1,p2,p3 : 中心座標、半径 ;----------------------------------------------------------- circle x-r,y-r, x+r,y+r return } ;----------------------------------------------------------- ly = -1.0 lr = 0.0 repeat redraw 0 ; 背景 color 255,255,255 : boxf ; 円 color ,,255 : circle2 mousex,mousey, 32 ; 直線 color 255 : line 0, ln, 640, -(lx*640)/ly +ln ; 判定 pos 0,0 : mes "左右クリックで、回転" if dis_line_circle(lx,ly,ln, mousex,mousey) <= 32 { mes "当たってる" } redraw stick key, 256|512 if key&256 : lr -= 0.02 if key&512 : lr += 0.02 lx = tan(lr) ln = 240.0 -lx*320 await 20 loop
距離は、数IIの教科書に載っていた公式を使って求めています。
作ったのは良いですが、使い道が無さそうです。