////////////////////////////////////////////////////////////////////////////////
//	_(x,y)pxangleňƕǂƂ̌_AˊpԂ
//	
//	@param x w_xW
//	@param y w_yW
//	@param angle px
//	@return ǂƂ̌_Aˊp[rx,ry,rangle] 
//	
////////////////////////////////////////////////////////////////////////////////
function GetReflectData(let x,let y,let angle){
	let rx = 0;
	let ry = 0;
	let rangle = 0;
	
	// ɂ邽߂̏I_ݒ
	let tox = x + cos(angle) * 800;	// Kɑ傫lŏI_쐬
	let toy = y + sin(angle) * 800;	// Kɑ傫lŏI_쐬
	
	// ȗ̂߁Bl̕ϐ錾Ăꍇɂ͏ĂOK
	let MinX = GetClipMinX();
	let MaxX = GetClipMaxX();
	let MinY = GetClipMinY();
	let MaxY = GetClipMaxY();
	
	// ㉺Eɑ΂Ĕs
	let PosU = Collision_Line_Line(x,y,tox,toy,MinX,MinY,MaxX,MinY);
	let PosL = Collision_Line_Line(x,y,tox,toy,MinX,MinY,MinX,MaxY);
	let PosR = Collision_Line_Line(x,y,tox,toy,MaxX,MinY,MaxX,MaxY);
	let PosB = Collision_Line_Line(x,y,tox,toy,MinX,MaxY,MaxX,MaxY);
	
	// ʂɂĂǂ̕ǂŔ˂邩I ㉺ȄŔ肳܂
	if( PosU[0] != NULL ){
		// ゾ
		rx = PosU[0];
		ry = PosU[1];
		rangle = -angle;
	}else if( PosB[0] != NULL ){
		// 
		rx = PosB[0];
		ry = PosB[1];
		rangle = -angle;
	}else if( PosL[0] != NULL ){
		// 
		rx = PosL[0];
		ry = PosL[1];
		rangle = 180 - angle;
	}else if( PosR[0] != NULL ){
		// E
		rx = PosR[0];
		ry = PosR[1];
		rangle = 180 - angle;
	}else{
		// ǂɂ˂ĂȂꍇA_~[ƂČ̒lZbg
		rx = x;
		ry = y;
		rangle = angle;
	}
	
	return [rx,ry,rangle];
}

////////////////////////////////////////////////////////////////////////////////
//	(x1,y1)-(x2,y2)Ɛ(x3,y3)-(x4,y4)̌_Ԃ
//	
//	@param x1 1̎n_xW
//	@param y1 1̎n_yW
//	@param x2 1̏I_xW
//	@param y2 1̏I_yW
//	@param x3 2̎n_xW
//	@param y3 2̎n_yW
//	@param x4 2̏I_xW
//	@param y4 2̏I_yW
//	@return 2̌_[x,y]@Ȃꍇɂ[NULL,NULL]Ԃ
//	
////////////////////////////////////////////////////////////////////////////////
function Collision_Line_Line(let x1,let y1,let x2,let y2,let x3,let y3,let x4,let y4){
	let f1 = x2 - x1;
	let g1 = y2 - y1;
	let f2 = x4 - x3;
	let g2 = y4 - y3;
	
	let det = (f2 * g1) - (f1 * g2);
	
	// det̒l0(2)̏ꍇ_݂Ȃ̂Ŗ߂
	if(det == 0){
		return [NULL,NULL];
	}else{
		// ȊȌꍇA_vZ
		let dx = x3 - x1;
		let dy = y3 - y1;
		let t1 = (f2 * dy - g2 * dx) / det;
		let t2 = (f1 * dy - g1 * dx) / det;
		
		// _̒ɑ݂Ȃ琔lvZ
		if( (0 <= t1 && t1 <= 1) && (0 <= t2 && t2 <= 1) ){
			let rx = x1 + t1 * f1;
			let ry = y1 + t1 * g1;
			
			return [rx,ry];
		}else{
			// _̉ɂꍇA_ȂƂ
			return [NULL,NULL];
		}
	}
}