忍者ブログ

GAM-22のメモ

HSPで、円と直線の当たり判定

2024.11 ← 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 →

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

HSPで、円と直線の当たり判定

HSPで、円と直線の当たり判定

円と直線の当たり判定です。

円と直線の距離を測って、半径より小さければ、当たってると判断します。

;===========================================================
;												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の教科書に載っていた公式を使って求めています。

作ったのは良いですが、使い道が無さそうです。

PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
画面のはしからはしまで線を引くことがそもそもできなかった…。
GAM-22さんは頭いいですね。
kerupaniさんのページkerupaniさん / 2011/03/30(Wed) / 編集
Re:線…
いや、頭悪いですよ
記事の場合、lx+my+n=0の形で直線を表そうとしているので、けっこう冗長なスクリプトになっています。
画面の端から端まで線を引くだけだったら、こっちの方がスマートですかね。

//
// x軸に対しθの傾きでマウス座標と交差する直線を描くテスト
//

θ = 0.0; x軸に対しての傾き

repeat
redraw 0

; 背景
color 255,255,255 : boxf

; 直線
color 255
pos 0,0 : mes "左右クリック:回転"
line 0, mousey-tan(θ)*mousex, 640, mousey+tan(θ)*(640-mousex)

redraw

stick key, 256|512
if key&256 : θ -= 0.02
if key&512 : θ += 0.02

await 20
loop
 (2011/03/30)
FPSの照準周りに使えそう。Easy3Dとかでは、そんな命令が既にありましたっけ?
funsukeさん / 2011/11/06(Sun) / 編集
この記事にトラックバックする
トラックバックURL:
カテゴリー
カウンター
最新記事
最新コメント
Twitter
人気記事
Amazon お買い得情報
Amazon お買い得情報
プロフィール
自画像
HN :
GAM-22
性別:
男性
職業:
大学1年生
HSP暦:
6年
好きなもの :
ゲーム, アニメ, マヨネーズ
嫌いなもの :
運動, 注射, ホラー映画, 英語
好きなバンド :
Muse, Radiohead
その他 :
文章能力が欠如している
バナー
Copyright © GAM-22のメモ All Rights Reserved
Powered by ニンジャブログ Designed by ピンキー・ローン・ピッグ 忍者ブログ / [PR]