Example #1
0
        /// <summary>
        /// 正規化する
        /// </summary>
        void Normalize()
        {
            float f = 1.0f / vNormal.Length();

            if (f != 0)
            {
                vNormal *= f; distance *= f;
            }
        }
Example #2
0
        /// <summary>
        /// 光線r = p + tdが円sと交差しているかどうかを判定(静止している円rS1に対して交差)
        /// </summary>
        /// <param name="c1">円1</param>
        /// <param name="c2">円2</param>
        /// <param name="v1">方向ベクトル</param>
        /// <param name="v2">対象とする円</param>
        /// <return>trueを返す場合、交差していて、衝突の時間が*pfTに格納される</return>
        bool MCMovingCircleCircle(MCCircle2 c1, MCCircle2 c2, MCVector2 v1, MCVector2 v2, out float time)
        {
            time = 0;
            // 円s1をs0の半径にまで拡張
            MCCircle2 S1Ex = c2;

            S1Ex.R += c1.R;
            // s0およびs1の両方からs1の運動を引き算し、s1を静止させる
            MCVector2 v = v1 - v2;
            // これで、方向のある線分 s = s0.c + tv, v = (*pV0-*pV1)/||*pV0-*pV1|| を
            // 拡張した円に対して交差させることができる
            MCVector2 vIntersect;
            float     fVLen = v.Length();

            v /= fVLen;
            if (IntersectRayCircle(c1.C, v, S1Ex, out time, out vIntersect))
            {
                return(time <= fVLen);
            }
            return(false);
        }