    //܂̌vZBn > 1{BOutToInFvYɐNȂtrueAEoȂfalseB
    //ϐFܑΏۊpxAEʊpxA΋ܗAiA|sin(r)|̏
    function RefractAngle(Ang, AngP, n, OutToIn, MaxSinr)
    {
        Ang -= AngP;			//Eʂ0deg.ɁB
        Ang = Ang360(Ang);		//px(-180, 180]ɒB
        let Type = ceil( (Ang + 180) / 90 );	//یǂ
        let i;			//ˊp

        alternative(Type)	//ˊp̒`
        case(1) {i = - Ang - 90;}	//x <= 0, y < 0, Ang = (-180, -90]
        case(2) {i = Ang + 90;}	//x > 0, y <= 0, Ang = (-90, 0]
        case(3) {i = - Ang + 90;}	//x >= 0, y > 0, Ang = (0, 90]
        case(4) {i = Ang - 90;}	//x < 0, y >= 0, Ang = (90, 180]

        if(OutToIn) {n = 1 / n;}			//KvȂܗtɁB

        if ( absolute(n * sin(i)) >= MaxSinr )		//S˔B(_Iɂ1Aɂɏ߂ɐݒ)
        {
            return(- Ang + AngP);
        }

        let r = asin(n * sin(i));			//܊p

        alternative(Type)	//܊pAng
        case(1) {Ang = - r - 90;}
        case(2) {Ang = r - 90;}
        case(3) {Ang = - r + 90;}
        case(4) {Ang = r + 90;}

        return(Ang + AngP);
    }


    //px(-180, 180]ɂȂ悤
    function Ang360(Ang)
    {
        while(Ang > 180) {Ang -= 360;}
        while(Ang <= -180) {Ang += 360;}
        return(Ang);
    }