private static int TestVector(Vector3 Vect) { if (Vect.Length() == 0) return -1; Vect.Normalize(); Vect *= 5f; if (PerOtr(new Vector2(), new Vector2(Vect.X, Vect.Z), new Vector2(-1f, -1f), new Vector2(1f, -1f)) && PerOtr(new Vector2(), new Vector2(Vect.Y, Vect.Z), new Vector2(-1f, -1f), new Vector2(1f, -1f))) return 0; if (PerOtr(new Vector2(), new Vector2(Vect.X, Vect.Z), new Vector2(-1f, 1f), new Vector2(1f, 1f)) && PerOtr(new Vector2(), new Vector2(Vect.Y, Vect.Z), new Vector2(-1f, 1f), new Vector2(1f, 1f))) return 1; if (PerOtr(new Vector2(), new Vector2(Vect.X, Vect.Y), new Vector2(-1f, -1f), new Vector2(1f, -1f)) && PerOtr(new Vector2(), new Vector2(Vect.Z, Vect.Y), new Vector2(-1f, -1f), new Vector2(1f, -1f))) return 2; if (PerOtr(new Vector2(), new Vector2(Vect.X, Vect.Y), new Vector2(-1f, 1f), new Vector2(1f, 1f)) && PerOtr(new Vector2(), new Vector2(Vect.Z, Vect.Y), new Vector2(-1f, 1f), new Vector2(1f, 1f))) return 3; if (PerOtr(new Vector2(), new Vector2(Vect.Z, Vect.X), new Vector2(-1f, 1f), new Vector2(1f, 1f)) && PerOtr(new Vector2(), new Vector2(Vect.Y, Vect.X), new Vector2(-1f, 1f), new Vector2(1f, 1f))) return 4; if (PerOtr(new Vector2(), new Vector2(Vect.Z, Vect.X), new Vector2(-1f, -1f), new Vector2(1f, -1f)) && PerOtr(new Vector2(), new Vector2(Vect.Y, Vect.X), new Vector2(-1f, -1f), new Vector2(1f, -1f))) return 5; //0 зад //1 перед //2 низ //3 верх //4 лево //5 право return 0; }
public Vector3 GetNormalDispersion(System.Random Random_) { //Преобразование Бокса — Мюллера double x = Random_.NextDouble() * 2d - 1d; double y = Random_.NextDouble() * 2d - 1d; double z = Random_.NextDouble() * 2d - 1d; double s = x * x + y * y + z * z; while (s <= 0 || s > 1) { x = Random_.NextDouble() * 2d - 1d; y = Random_.NextDouble() * 2d - 1d; z = Random_.NextDouble() * 2d - 1d; s = x * x + y * y + z * z; } double t = System.Math.Sqrt((-3 * System.Math.Log(s)) / s); double z0 = x * t; double z1 = y * t; double z2 = z * t; Vector3 r = new Vector3((float)z0, (float)z1, (float)z2); r.Normalize(); return r; }