コード例 #1
0
        static void GetPointOnPlane(Random random, float centralExclusion, float span, ref Vector3 anchor, ref Vector3 normal, out Vector3 point)
        {
            Vector2 localPoint;
            var     exclusionSquared = centralExclusion * centralExclusion;

            do
            {
                localPoint = span * (new Vector2((float)random.NextDouble(), (float)random.NextDouble()) - new Vector2(0.5f));
            } while (localPoint.LengthSquared() < exclusionSquared);

            Vector3 basisX;
            float   basisXLengthSquared;

            do
            {
                GetUnitDirection(random, out var randomDirection);
                Vector3x.Cross(normal, randomDirection, out basisX);
                basisXLengthSquared = basisX.LengthSquared();
            } while (basisXLengthSquared < 1e-7f);
            Vector3x.Cross(normal, basisX, out var basisZ);
            point = anchor + basisX * localPoint.X + basisZ * localPoint.Y;
        }
コード例 #2
0
        //public static float TestTransformScalarOld(int iterationCount)
        //{
        //    bVector3 v1 = new bVector3(1, 2, 3);
        //    bVector3 v2 = new bVector3(1, 2, 3);
        //    float accumulator = 0;
        //    for (int i = 0; i < iterationCount; ++i)
        //    {
        //        bVector3 r0, r1;
        //        bVector3.Cross(ref v1, ref v2, out r0);
        //        bVector3.Cross(ref r0, ref v2, out r1);
        //        bVector3.Cross(ref r1, ref v2, out r0);
        //        bVector3.Cross(ref r0, ref v2, out r1);
        //        bVector3.Cross(ref r1, ref v2, out r0);
        //        bVector3.Cross(ref r0, ref v2, out r1);
        //        bVector3.Cross(ref r1, ref v2, out r0);
        //        bVector3.Cross(ref r0, ref v2, out r1);
        //        bVector3.Cross(ref r1, ref v2, out r0);
        //        bVector3.Cross(ref r0, ref v2, out r1);
        //        accumulator += 0.000001f * r1.X;
        //    }
        //    return accumulator;
        //}

        public static float TestTransformScalar(int iterationCount)
        {
            Vector3 v1          = new Vector3(1, 2, 3);
            Vector3 v2          = new Vector3(1, 2, 3);
            float   accumulator = 0;

            for (int i = 0; i < iterationCount; ++i)
            {
                Vector3 r0, r1;
                Vector3x.Cross(ref v1, ref v2, out r0);
                Vector3x.Cross(ref r0, ref v2, out r1);
                Vector3x.Cross(ref r1, ref v2, out r0);
                Vector3x.Cross(ref r0, ref v2, out r1);
                Vector3x.Cross(ref r1, ref v2, out r0);
                Vector3x.Cross(ref r0, ref v2, out r1);
                Vector3x.Cross(ref r1, ref v2, out r0);
                Vector3x.Cross(ref r0, ref v2, out r1);
                Vector3x.Cross(ref r1, ref v2, out r0);
                Vector3x.Cross(ref r0, ref v2, out r1);
                accumulator += 0.000001f * r1.X;
            }
            return(accumulator);
        }