Пример #1
0
        private static Cube[] GetCubeFromVector(int n, Vector3D vector)
        {
            var cubes = new List <Cube>();
            var o     = new Vector3D(0, 0, 0);
            var vs    = VectorVariantFinder.FindAllVariantsAtRightAnglesTo(vector);
            var bs    = vs.Where(v => Math.Abs(v.LengthSquared - vector.LengthSquared) < 1e-9 &&
                                 Math.Abs(Math.Abs(Vector3D.AngleBetween(v, vector)) - 90) < 1e-9);

            foreach (var b in bs)
            {
                var c = Vector3D.CrossProduct(vector, b);
                c *= (vector.Length / c.Length);
                Cube cube;
                if (Cube.TryMakeCubeFrom(o, vector, b, c, out cube) && !cubes.Contains(cube))
                {
                    cubes.Add(cube);
                }
            }
            if (!cubes.Any())
            {
                throw new InvalidOperationException($"No cubes found for vector {vector}");
            }
            cubes.RemoveAll(cube => !cube.Dimensions.All(d => d <= n));
            return(cubes.Distinct().ToArray());
        }