コード例 #1
0
ファイル: Program.cs プロジェクト: lionel-git/TestSphere
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world");

            var O = new P3D(0, 0, 0);

            var rs = new RandomSphere();
            var p  = new P3D[4];

            int N    = 100000000;
            int nbIn = 0;

            for (int k = 0; k < N; k++)
            {
                for (int i = 0; i < p.Length; i++)
                {
                    p[i] = rs.GenPoint();
                    //Console.WriteLine($"{p[i]} {p[i].N2()}");
                }

                // Centre dans tetrahedre (A, B, C, D) ?
                var b = RandomSphere.isCenterInTetrahedre(p);
                if (b)
                {
                    nbIn++;
                }
            }
            Console.WriteLine($"{nbIn} {N} {(double)nbIn/N}");
        }
コード例 #2
0
ファイル: RandomSphere.cs プロジェクト: lionel-git/TestSphere
        private static bool IsGoodSide(P3D A, P3D B, P3D C, P3D D, P3D M)
        {
            var n = P3D.CrossProduct(B - A, C - A); // n = AB x AC, normale au plan (A,B,C)
            var d = P3D.ScalarProduct(n, D - A);    // n.AD
            var m = P3D.ScalarProduct(n, M - A);    // n.AM

            return(d * m > 0);                      // si d et m sont de meme signes M et D sont du meme coté
        }
コード例 #3
0
ファイル: P3D.cs プロジェクト: lionel-git/TestSphere
 public static double ScalarProduct(P3D A, P3D B)
 {
     return(A.x * B.x + A.y * B.y + A.z * B.z);
 }
コード例 #4
0
ファイル: P3D.cs プロジェクト: lionel-git/TestSphere
 public static P3D CrossProduct(P3D A, P3D B)
 {
     return(new P3D(+A.y * B.z - A.z * B.y, -A.x * B.z + A.z * B.x, +A.x * B.y - A.y * B.x));
 }