InfinitySafe() public static method

public static InfinitySafe ( Vector3D input ) : Vector3D
input Vector3D
return Vector3D
示例#1
0
        private bool NewTetAfterReflect(Cell cell, Segment s, HashSet <Vector3D> completed)
        {
            foreach (Tile tile in cell.Tiles)
            {
                CircleNE newVertexCircle = tile.VertexCircle.Clone();
                newVertexCircle.Reflect(s);

                if (completed.Contains(Infinity.InfinitySafe(newVertexCircle.CenterNE)))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        private void ReflectRecursive(int level, List <Cell> cells, HashSet <Vector3D> completed)
        {
            level++;

            // Breadth first recursion.

            if (0 == cells.Count)
            {
                return;
            }

            List <Cell> reflected = new List <Cell>();

            foreach (Cell cell in cells)
            {
                foreach (Segment seg in cell.Segments)
                {
                    // Are we done?
                    if (m_cells.Count >= m_cellCount)
                    {
                        return;
                    }

                    if (!NewTetAfterReflect(cell, seg, completed))
                    {
                        continue;
                    }

                    Cell newBase = cell.Clone();
                    newBase.Level = level;
                    newBase.Reflect(seg);
                    m_cells.Add(newBase);
                    reflected.Add(newBase);
                    foreach (Tile tile in newBase.Tiles)
                    {
                        completed.Add(Infinity.InfinitySafe(tile.VertexCircle.CenterNE));
                    }
                }
            }

            ReflectRecursive(level, reflected, completed);
        }