
円と直線の当たり判定です。
円と直線の距離を測って、半径より小さければ、当たってると判断します。
;===========================================================
; 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の教科書に載っていた公式を使って求めています。
作ったのは良いですが、使い道が無さそうです。