revisions to pentagons.2
@ -53,6 +53,14 @@ class PolyData:
|
||||
vertex_count: int
|
||||
edge_count: int
|
||||
|
||||
@classmethod
|
||||
def from_hexagons(cls, hexagon_count: int):
|
||||
return cls(
|
||||
hexagon_count=hexagon_count,
|
||||
vertex_count=2*hexagon_count + 20,
|
||||
edge_count=3*hexagon_count + 30,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class GoldbergData:
|
||||
@ -151,6 +159,11 @@ Thus, by asserting that the figure is composed of pentagons and hexagons,
|
||||
This is the case even if there are no hexagons, in which case we are describing a dodecahedron
|
||||
(which, incidentally, has 20 vertices).
|
||||
|
||||
Consequently, we get an expression for the number of vertices and edges in terms of the number of hexagons.
|
||||
|
||||
- $3V = 6F_6 + 5 F_5 = 6F_6 + 60 = 3V \implies V = 2F_6 + 20$
|
||||
- $2V = 6F_6 + 5 F_5 \implies E = 3F_6 + 30$
|
||||
|
||||
|
||||
### Duality
|
||||
|
||||
@ -417,7 +430,7 @@ $$
|
||||
\end{align*}
|
||||
$$
|
||||
|
||||
Giving an equal share of triangles to each pentagon as before, each has $\|(a, b)\|$ triangles.
|
||||
Giving an equal share of triangles to each pentagon as before, each has $\|a + bu\|$ triangles.
|
||||
|
||||
|
||||
### Triangles to Hexagons
|
||||
@ -455,8 +468,8 @@ Beyond Soccer Balls
|
||||
-------------------
|
||||
|
||||
The three cases of paths as described above are also used to delineate classes of Goldberg polyhedra.
|
||||
Only class I and II polyhedra produce figures which are mirror-symmetric.
|
||||
Class III polyhedra come in chiral pairs, due to the choice of a clockwise turn in their construction.
|
||||
Only class I and II polyhedra produce figures which are mirror-symmetric ($I_h$, which contains $I$).
|
||||
Class III polyhedra lack this; they come in chiral pairs due to the choice of a clockwise turn in their construction.
|
||||
|
||||
|
||||
### Basic Conway Operators
|
||||
@ -630,12 +643,7 @@ goldberg_classes = {
|
||||
def poly_from_dodecahedral_goldberg_parameter(parameter: tuple[int, int]):
|
||||
a, b = parameter
|
||||
hexagon_count = 10*(a*a + a*b + b*b - 1)
|
||||
vertex_count = (60 + 6*hexagon_count) // 3
|
||||
return PolyData(
|
||||
hexagon_count=hexagon_count,
|
||||
vertex_count=vertex_count,
|
||||
edge_count=(vertex_count * 3) // 2,
|
||||
)
|
||||
return PolyData.from_hexagons(hexagon_count)
|
||||
|
||||
|
||||
def goldberg_table_row(data: GoldbergData) -> list[str]:
|
||||
@ -655,7 +663,7 @@ def goldberg_table_row(data: GoldbergData) -> list[str]:
|
||||
|
||||
Markdown(tabulate(
|
||||
[
|
||||
([class_] if i == 0 else [""]) + goldberg_table_row(item)
|
||||
([class_ if i == 0 else ""]) + goldberg_table_row(item)
|
||||
for class_, items in goldberg_classes.items()
|
||||
for i, item in enumerate(items)
|
||||
],
|
||||
|
||||
|
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 314 KiB |
|
Before Width: | Height: | Size: 491 KiB After Width: | Height: | Size: 491 KiB |
|
Before Width: | Height: | Size: 348 KiB After Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 431 KiB After Width: | Height: | Size: 431 KiB |
BIN
posts/pentagons/2/edge_solution_triangles.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
posts/pentagons/2/edge_whirl_net.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 497 KiB After Width: | Height: | Size: 497 KiB |
BIN
posts/pentagons/2/edge_whirl_paths.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
posts/pentagons/2/edge_whirl_planar.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
1
posts/pentagons/2/goldberg_triangles.py
Symbolic link
@ -0,0 +1 @@
|
||||
../1/goldberg_triangles.py
|
||||
|
Before Width: | Height: | Size: 428 KiB |
|
Before Width: | Height: | Size: 449 KiB |
|
Before Width: | Height: | Size: 342 KiB |
|
Before Width: | Height: | Size: 551 KiB |