Animate the midpoints of a 3d "Rhombic dodecahedron"

I need help in animating a Rhombic dodecahedron. I want to enlarge and to shrink the midpoints (center points) with FuncAnimation from Matplotlib. I wanted to use the δ for this (make smaller/bigger) and for this an animation. But just don’t know how. I successfully created a 3d Rhombic dodecahedron but now I’m stuck… .

This is the code:

%matplotlib notebook
fig = plt.figure()
ax = Axes3D(fig)
δ = symbols('δ')
δ = 0.3

points = [
    (0.5, 0.5, 0.5),
    (0.5, 0.5, -0.5),
    (0.5, -0.5, 0.5),
    (0.5, -0.5, -0.5),
    (-0.5, 0.5, 0.5),
    (-0.5, 0.5, -0.5),
    (-0.5, -0.5, 0.5),
    (-0.5, -0.5, -0.5),
    (0, 0,(0.5 + δ)), 
    (0, 0, -(0.5 + δ)), 
    (0,(0.5 + δ), 0),
    (0, -(0.5 + δ), 0), 
    ((0.5 + δ), 0, 0), 
    (-(0.5 + δ), 0, 0)
]

surfaces = [
    [points[0], points[1], points[12]], #front
    [points[1], points[3], points[12]],
    [points[3], points[2], points[12]],
    [points[2], points[0], points[12]],
    
    [points[6], points[4], points[13]], #behind
    [points[4], points[5], points[13]],
    [points[5], points[7], points[13]],
    [points[7], points[6], points[13]],
    
    [points[6], points[4], points[8]], #top
    [points[4], points[0], points[8]],
    [points[0], points[2], points[8]],
    [points[2], points[6], points[8]],
    
    [points[3], points[1], points[9]], #below
    [points[1], points[5], points[9]],
    [points[5], points[7], points[9]],
    [points[7], points[3], points[9]],
    
    [points[0], points[4], points[10]], #right
    [points[4], points[5], points[10]],
    [points[5], points[1], points[10]],
    [points[1], points[0], points[10]],
    
    [points[2], points[6], points[11]], #left
    [points[6], points[7], points[11]],
    [points[7], points[3], points[11]],
    [points[3], points[2], points[11]]
]

ax.set_xlim3d(-1,1)
ax.set_ylim3d(-1,1)
ax.set_zlim3d(-1,1)

ax.add_collection3d(Poly3DCollection(surfaces, edgecolors = "k"))

fig.show()

I tried to animate it with older code which I used to animate a 2d graph but I couldn’t really figure it out because I’m new to this stuff.

This is the old 2d animation code for the graph which I tried to reuse with some adjustments:

fig, ax = plt.subplots()  
xdata, ydata = [], []  
ln, = plt.plot([], [], '-')

xdata = np.linspace(1, 5, 2000)  
  
def afunc(frame):
    result = []  
    for i in xdata:  
        result.append(np.sin(3*i+frame))  
    return result  
  
def init():  
    ax.set_xlim(1, 5)  
    ax.set_ylim(-1, 1)
    ax.spines['left'].set_position('center')
    ax.spines['bottom'].set_position('center')
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    return ln  
  
def update(frame):  
    ydata = afunc(frame)  
    ln.set_data(xdata, ydata)  
    return ln  
  
step = 100
frames = np.arange(0, 1001, step)
  
ani = FuncAnimation(fig, update, frames,init_func=init, interval=30)

plt.show() 

The imports are:

from mpmath import *
from sympy import *
from sympy.interactive import printing
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
from sympy.plotting import plot3d
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

Could someone help with code examples/working 3d animations for the midpoints of the 3d “Rhombic dodecahedron”? I’m stuck for some hours now… .

(I tried to reuse the old code for a 2d graph animation, then I tried some adjustments to it to make it 3d and fitting for the “Rhombic dodecahedron” but I couldn’t really get it to work at all. English is not my native language and I’m beginner with python so it would be nice if you could be considerate about it.)

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.