自作した関数を記録するページ。
使ってもいいのよ。

--ステップ(対象変数,指定値,1フレームの移動量)
function _STEP(STeP1,STeP2,STeP3)
	STeP4=STeP2-STeP1
	if STeP4> STeP3 then STeP4= STeP3 end
	if STeP4<-STeP3 then STeP4=-STeP3 end
	return STeP1+STeP4 end

--リミッター(対象変数,下限,上限)
function _LIMIT(liM,liM_min,liM_max)
	if liM>liM_max then liM=liM_max end
	if liM<liM_min then liM=liM_min end
	return liM end

--ループ(対象変数,下限,上限)
function _LOOP(lP,lP_min,lP_max)
	if lP>lP_max then lP=lP_min end
	if lP<lP_min then lP=lP_max end
	return lP end

--フォントゲージ(現在値,最大値,ゲージの長さ)
function _FONTG(FoG1,FoG2,FoG3)
	if FoG1>FoG2 then FoG1=FoG2 end
	FoG4,FoG5=math.floor((FoG1/FoG2)*FoG3),""
	for loop=1,FoG4,1 do FoG5=FoG5.."!" end
	for loop=FoG4+1,FoG3,1 do FoG5=FoG5.."." end
	return FoG5 end

--2次元距離(X,Y)
function _LEN2(x,y)
	return math.sqrt(x*x+y*y) end

--3次元距離(X,Y,Z)
function _LEN3(x,y,z)
	return math.sqrt(x*x+y*y+z*z) end

--符号判別(対象変数)
function _SGN(SgN)
	if SgN>0 then SgN=1 elseif SgN<0 then SgN=-1 end
	return SgN end

--color用数値変換 (R,G,B [0-255])
function _CONCOL(COnVR,COnVG,COnVB)
	return math.floor(COnVR)*65536+math.floor(COnVG)*256+math.floor(COnVB) end

--effect用数値変換(透明度,発光度,スペキュラの強さ,スペキュラ [0-15])
function _CONEFF(COnV1,COnV2,COnV3,COnV4)
	return math.floor(COnV1*16+COnV2)*256+math.floor(COnV3*16+COnV4) end

--角度差(AgAp1xyz=ベクトル1 AgAp2xyz=ベクトル2)
function _GAP(AgAp1x,AgAp1y,AgAp1z, AgAp2x,AgAp2y,AgAp2z)
	nAi         = _NAI(AgAp1x,AgAp1y,AgAp1z,AgAp2x,AgAp2y,AgAp2z)
	xxx,gaI,xxx = _GAI(AgAp1x,AgAp1y,AgAp1z,AgAp2x,AgAp2y,AgAp2z)
	AgAp=math.deg(math.acos(nAi))*_SGN(gaI)
	if AgAp>=0 or AgAp<0 then return AgAp else return 0 end --計算エラー対策
end

--角度差2(AgAp1xyz=ベクトル1 AgAp2xyz=ベクトル2) ※正規化しない
function _GAP2(AgAp1x,AgAp1y,AgAp1z, AgAp2x,AgAp2y,AgAp2z)
	nAi         = _NAI2(AgAp1x,AgAp1y,AgAp1z,AgAp2x,AgAp2y,AgAp2z)
	xxx,gaI,xxx = _GAI2(AgAp1x,AgAp1y,AgAp1z,AgAp2x,AgAp2y,AgAp2z)
	AgAp=math.deg(math.acos(nAi))*_SGN(gaI)
	if AgAp>=0 or AgAp<0 then return AgAp else return 0 end --計算エラー対策
end

--内積(NAi123=ベクトル1 NAi456=ベクトル2)
function _NAI(NAi1,NAi2,NAi3, NAi4,NAi5,NAi6)
	NAi1,NAi2,NAi3=_SEI(NAi1,NAi2,NAi3)
	NAi4,NAi5,NAi6=_SEI(NAi4,NAi5,NAi6)
	NAi1=NAi1*NAi4+NAi2*NAi5+NAi3*NAi6
	return NAi1 end

--外積(GAi_a123=ベクトル1 GAi_b123=ベクトル2)
function _GAI(GAi_a1,GAi_a2,GAi_a3, GAi_b1,GAi_b2,GAi_b3)
	GAi_c1,GAi_c2,GAi_c3=(GAi_a2*GAi_b3-GAi_a3*GAi_b2),(GAi_a3*GAi_b1-GAi_a1*GAi_b3),(GAi_a1*GAi_b2-GAi_a2*GAi_b1)
	GAi_c1,GAi_c2,GAi_c3=_SEI(GAi_c1,GAi_c2,GAi_c3)
	return GAi_c1,GAi_c2,GAi_c3 end

--二重外積(WGAi_a123=ベクトル1 WGAi_b123=ベクトル2)
function _WGAI(WGAi_a1,WGAi_a2,WGAi_a3, WGAi_b1,WGAi_b2,WGAi_b3)
	WGAi_c1,WGAi_c2,WGAi_c3=_GAI(WGAi_a1,WGAi_a2,WGAi_a3,WGAi_b1,WGAi_b2,WGAi_b3)
	WGAi_c1,WGAi_c2,WGAi_c3=_GAI(WGAi_a1,WGAi_a2,WGAi_a3,WGAi_c1,WGAi_c2,WGAi_c3)
	return WGAi_c1,WGAi_c2,WGAi_c3 end

--正規化(ベクトル)
function _SEI(SEi1,SEi2,SEi3)
	do local length=math.sqrt(SEi1^2+SEi2^2+SEi3^2)
	if length>0 then length=1/length else length=0 end
	SEi1,SEi2,SEi3=SEi1*length,SEi2*length,SEi3*length
	return SEi1,SEi2,SEi3 end end

--内積2(NAi123=ベクトル1 NAi456=ベクトル2) ※正規化しない
function _NAI2(NAi1,NAi2,NAi3, NAi4,NAi5,NAi6)
	NAi1=NAi1*NAi4+NAi2*NAi5+NAi3*NAi6
	return NAi1 end

--外積2(GAi_a123=ベクトル1 GAi_b123=ベクトル2) ※正規化しない
function _GAI2(GAi_a1,GAi_a2,GAi_a3, GAi_b1,GAi_b2,GAi_b3)
	GAi_c1,GAi_c2,GAi_c3=(GAi_a2*GAi_b3-GAi_a3*GAi_b2),(GAi_a3*GAi_b1-GAi_a1*GAi_b3),(GAi_a1*GAi_b2-GAi_a2*GAi_b1)
	return GAi_c1,GAi_c2,GAi_c3 end

--二重外積2(WGAi_a123=ベクトル1 WGAi_b123=ベクトル2) ※正規化しない
function _WGAI2(WGAi_a1,WGAi_a2,WGAi_a3, WGAi_b1,WGAi_b2,WGAi_b3)
	WGAi_c1,WGAi_c2,WGAi_c3=_GAI2(WGAi_a1,WGAi_a2,WGAi_a3,WGAi_b1,WGAi_b2,WGAi_b3)
	WGAi_c1,WGAi_c2,WGAi_c3=_GAI2(WGAi_a1,WGAi_a2,WGAi_a3,WGAi_c1,WGAi_c2,WGAi_c3)
	return WGAi_c1,WGAi_c2,WGAi_c3 end

--交点計算・線と円(axz=Aの座標,avxz=Aから伸びるベクトル,cxz=ボールの座標,cr=ボールの半径)
function crsLC(ax,az,avx,avz, cx,cz,cr)
	local ABX, ABZ = avx-ax, avz-az
	local a,b = avz-az, ax-avx
	local c = -(a*ax+b*az)
	local EX,EZ,EY = -ABZ,ABX,0
	EX,EY,EZ = _SEI(EX,0,EZ)
	local div2=a*EX+b*EZ
	if div2 then
		local k = -(a*cx+b*cz+c)/div2
		local xp,zp = cx+k*EX, cz+k*EZ
		local S = math.sqrt(cr*cr-k*k)
			local ABNX,ABNY,ABNZ = _SEI(ABX,0,ABZ)
			local S_ABNX,S_ABNZ = S * ABNX, S * ABNZ
				local CRBX,CRBZ = xp - S_ABNX, zp - S_ABNZ
				local CRAX,CRAZ = xp + S_ABNX, zp + S_ABNZ
		local k=math.abs(k)
		return CRBX, CRBZ, CRAX, CRAZ, k end end
最終更新:2013年04月05日 12:19