public static InfinitySafe ( Vector3D input ) : Vector3D | ||
input | Vector3D | |
return | Vector3D |
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); }
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); }