Equations of facelets of dodecahedron

1k Views Asked by At

I'm referring to the article on dodecahedrons from Wikipedia - https://en.wikipedia.org/wiki/Regular_dodecahedron

It says that the vertices are given by -

$$(\pm 1, \pm 1, \pm 1)$$ $$(0, \pm \phi, \pm \frac{1}{\phi})$$ $$(\pm \frac{1}{\phi}, 0, \pm \phi)$$ $$(\pm \phi, \pm \frac{1}{\phi}, 0)$$

I plotted these and it definitely checks out (looks like a legit dodecahedron). Now, it also says the equations of the faces are given by -

$$\phi x \pm y = \pm \phi^2$$ $$\phi y \pm z = \pm \phi^2$$ $$\phi z \pm x = \pm \phi^2$$

Now, this does not seem to check out. Each face should be satisfied by five vertices. Take the very first face - $\phi x + y = \phi^2$. This is satisfied by $(1,1,1)$ and that seems to be it.

Is there an error in the face equations? And more generally, is there a way to find these equations given the vertices? What about for an Icosahedron?

1

There are 1 best solutions below

6
On BEST ANSWER

For a regular dodecahedron, it's simple to get the equation for one of the facial planes. If we wrote $\vec{r_v}=\vec{r_p}+\vec{r_n}$ for vector to a vertex of one of the facial planes where $\vec{r_p}$ is parallel to the plane and $\vec{r_n}$ is normal to the plane and $C_5$ is a rotation about the symmetry axis of the face, $$\sum_{i=0}^4C_5^i\vec{r_p}=\vec0$$ and $$\sum_{i=0}^4C_5^i\vec{r_n}=5\vec{r_n}$$ because the symmetry axis is parallel to $\vec{r_n}$ and normal to $\vec{r_p}$. Thus all you have to do is to sum the coordinates of the facial vertices and you have a vector normal to the face. Over the top face that tilts towards $y$, this is $$\langle-\frac1{\phi},0,\phi\rangle+\langle\frac1{\phi},0,\phi\rangle+\langle1,1,1\rangle+\langle-1,1,1\rangle+\langle0,\phi,\frac1{\phi}\rangle=\sqrt5\phi\langle0,1,\phi\rangle$$ Now we just need one of the vertices to apply $\vec r\cdot\vec n=\vec{r_0}.\vec n$ $$\langle1,1,1\rangle\cdot\langle0,1,\phi\rangle=\phi^2$$ so we get $$y+\phi z=\phi^2$$ Gotta run. EDIT: Here is a program that does all that for you

program dodeca
   implicit none
   real phi
   real vertices(3,20)
   real r(3,3,4)
   integer i, j
   logical adjacency(20,20)
   real near
   integer cycle(5)
   character(13) label(3)
   integer count
   phi = (sqrt(5.0)+1)/2
   vertices(:,1) = [1/phi,0.0,phi]
   r = reshape([ &
          1, 0, 0,   -1, 0, 0,   0, 0, 1,  1, 0, 0, &
          0,-1, 0,    0, 1, 0,   1, 0, 0,  0, 1, 0, &
          0, 0,-1,    0, 0,-1,   0, 1, 0,  0, 0,-1], &
          shape(r), order = [2,3,1])
   do j = 2, 3
      vertices(:,j) = matmul(r(:,:,3),vertices(:,j-1))
   end do
   vertices(:,4:6) = matmul(r(:,:,2),vertices(:,1:3))
   vertices(:,7:12) = matmul(r(:,:,1),vertices(:,1:6))
   vertices(:,13) = [1, 1, 1]
   vertices(:,14) = matmul(r(:,:,4),vertices(:,13))
   vertices(:,15:16) = matmul(r(:,:,2),vertices(:,13:14))
   vertices(:,17:20) = matmul(r(:,:,1),vertices(:,13:16))
   write(*,'(a)') '$$\begin{array}{c|ccc}'
   write(*,'(a)') '\text{Vertex} & x & y & z \\ \hline'
   do j = 1, 20
      call set_label(vertices(:,j),label)
      write(*,'(*(g0))') j,(' & ',trim(adjustl(label(i))), i = 1, 3), ' \\'
   end do
   write(*,'(a)') '\end{array}$$'
   near = minval([((norm2(vertices(:,i)-vertices(:,j)),i=j+1,12),j=1,11)])
   adjacency = .FALSE.
   do j = 1, 19
      do i = j+1, 20
         if(abs(norm2(vertices(:,i)-vertices(:,j))-near)<5*epsilon(1.0)) then
            adjacency(i,j) = .TRUE.
            adjacency(j,i) = .TRUE.
         end if
      end do
   end do
   write(*,'(a)') '$$\begin{array}{c|ccccc|c}'
   write(*,'(a)') '\text{Face} & V_1 & V_2 & V_3 & V_4 & V_5 & \text{Equation}\\ \hline'
   count = 0
   do j = 1, 16
      cycle(1) = j
      call find_cycle(cycle,1)
   end do
   write(*,'(a)') '\end{array}$$'
   contains
      recursive subroutine find_cycle(cycle,depth)
         integer cycle(5)
         integer depth
         integer i
         real normal(3)
         character(13) label(3)
         character, parameter :: var(3) = ['x','y','z']
         logical first
         if(depth < 5) then
            do i = cycle(1)+1, 20
               if(adjacency(cycle(depth),i)) then
                  cycle(depth+1) = i
                  call find_cycle(cycle,depth+1)
               end if
            end do
         else
            if(adjacency(cycle(5),cycle(1)) .AND. cycle(2) < cycle(5)) then
               count = count+1
               write(*,'(*(g0))',advance='no') count, (' & ',cycle(i), i = 1, 5)
               normal = sum(vertices(:,cycle),dim=2)/(sqrt(5.0)*phi)
               call set_label(normal,label)
               first = .TRUE.
               do i = 1, 3
                  if(abs(normal(i)) > 0.5*epsilon(1.0)) then
                     if(first) write(*,'(a)',advance='no') ' & '
                     if(.NOT. first .AND. normal(i) > 0) write(*,'(a)',advance='no') '+'
                     first = .FALSE.
                     if(label(i)(2:) == '1') label(i)(2:) = ''
                     write(*,'(*(g0))',advance='no') trim(adjustl(label(i))), ' ',var(i)
                  end if
               end do
               write(*,'(*(g0))') ' =', &
                  merge('-',' ',dot_product(normal,vertices(:,cycle(1))) < 0), '\phi^2 \\'
            end if
         end if
      end subroutine find_cycle
      subroutine set_label(vector,label)
         real vector(3)
         character(13) label(3)
         integer i
         label = ''
         do i = 1, 3
            if(abs(abs(vector(i))-1) < 5*epsilon(1.0)) then
               label(i) = merge('-',' ',vector(i) < 5*epsilon(1.0))//'1'
            else if(abs(abs(vector(i))-1/phi) < 5*epsilon(1.0)) then
               label(i) = merge('-',' ',vector(i) < 5*epsilon(1.0))//'1/\phi'
            else if(abs(abs(vector(i))-phi) < 5*epsilon(1.0)) then
               label(i) = merge('-',' ',vector(i) < 5*epsilon(1.0))//'\phi'
            else if(abs(vector(i)) < 5*epsilon(1.0)) then
               label(i) = '0'
            end if
         end do
      end subroutine set_label
end program dodeca

And its output: $$\begin{array}{c|ccc} \text{Vertex} & x & y & z \\ \hline 1 & 1/\phi & 0 & \phi \\ 2 & \phi & 1/\phi & 0 \\ 3 & 0 & \phi & 1/\phi \\ 4 & -1/\phi & 0 & -\phi \\ 5 & -\phi & 1/\phi & 0 \\ 6 & 0 & \phi & -1/\phi \\ 7 & 1/\phi & 0 & -\phi \\ 8 & \phi & -1/\phi & 0 \\ 9 & 0 & -\phi & -1/\phi \\ 10 & -1/\phi & 0 & \phi \\ 11 & -\phi & -1/\phi & 0 \\ 12 & 0 & -\phi & 1/\phi \\ 13 & 1 & 1 & 1 \\ 14 & 1 & 1 & -1 \\ 15 & -1 & 1 & -1 \\ 16 & -1 & 1 & 1 \\ 17 & 1 & -1 & -1 \\ 18 & 1 & -1 & 1 \\ 19 & -1 & -1 & 1 \\ 20 & -1 & -1 & -1 \\ \end{array}$$ $$\begin{array}{c|ccccc|c} \text{Face} & V_1 & V_2 & V_3 & V_4 & V_5 & \text{Equation}\\ \hline 1 & 1 & 10 & 16 & 3 & 13 & y+\phi z = \phi^2 \\ 2 & 1 & 10 & 19 & 12 & 18 & - y+\phi z = \phi^2 \\ 3 & 1 & 13 & 2 & 8 & 18 & \phi x+ z = \phi^2 \\ 4 & 2 & 8 & 17 & 7 & 14 & \phi x- z = \phi^2 \\ 5 & 2 & 13 & 3 & 6 & 14 & x+\phi y = \phi^2 \\ 6 & 3 & 6 & 15 & 5 & 16 & - x+\phi y = \phi^2 \\ 7 & 4 & 7 & 14 & 6 & 15 & y-\phi z = \phi^2 \\ 8 & 4 & 7 & 17 & 9 & 20 & - y-\phi z = \phi^2 \\ 9 & 4 & 15 & 5 & 11 & 20 & -\phi x- z = \phi^2 \\ 10 & 5 & 11 & 19 & 10 & 16 & -\phi x+ z = \phi^2 \\ 11 & 8 & 17 & 9 & 12 & 18 & x-\phi y = \phi^2 \\ 12 & 9 & 12 & 19 & 11 & 20 & - x-\phi y = \phi^2 \\ \end{array}$$