dimension x

dimension y

dimension z

dimension ω

x

y

z

ω

Dimensions in GeoGebra: Building a Tesseract

This tutorial lets you practice your animation skills, while showing the fundamentals of building simple models 
taking up more than 2 dimensions in GeoGebra's 2D-interface. It allows the user to walk through ''building'' 4-space
by moving objects of lower dimensions along orthogonal directions.

Step 1: Create the vector basis

☛ Create the vectors i = (1, 0) and  j = (0, 1) 
for the x and y axes.
☛ The vectors k and l can be constructed 
using vectors i and j.
☛ Optional: Use rays instead of vectors
to illustrate the four axes x, y, z and ω.

Step 2: Create the building blocks

☛ For each dimension, create an animation 
slider.
☛ For each point, translate the origin using 
the vectors i, j, k, l, and their linear 
combinations. Don't forget to multiply the 
vectors by the corresponding slider's value!
☛ Connect relevant points using segments.
Tip: Connect only points that moved in one
more direction (Example: The point that moved
in the direction i + j with points that moved in
the directions i and j, as well as points that
moved in directions i + j + k, and i + j + l.)

Done!

d_x = 0 (slider from 0 to 1, step 0.01)
O = Intersect(xAxis, yAxis)
I = Point(xAxis)
i = Vector(O, I)
J = Point(yAxis)
j = Vector(O, J)
K = Translate(O, Vector[1 / sqrt(8) * (-i - j)])
L = Translate(O, Vector[1 / sqrt(8) * (-i + j)])
k = Vector(O, K)
l = Vector(O, L)
Ox = Translate(O, Vector[d_x * i])
oox = Segment(O, Ox)
d_y = 0 (slider from 0 to 1, step 0.01)
d_z = 0 (slider from 0 to 1, step 0.01)
d_ω = 0 (slider from 0 to 1, step 0.01)
Oy = Translate(O, Vector[d_y * j])
Oz = Translate(O, Vector[d_z * k])
Oω = Translate(O, Vector[d_ω * l])
Oxy = Translate(O, Vector[d_x * i + d_y * j])
Oxz = Translate(O, Vector[d_x * i + d_z * k])
Oyz = Translate(O, Vector[d_y * j + d_z * k])
oxoxy = Segment(Ox, Oxy)
oyoxy = Segment(Oy, Oxy)
oxoxz = Segment(Ox, Oxz)
ozoxz = Segment(Oz, Oxz)
ozoyz = Segment(Oz, Oyz)
oyoyz = Segment(Oy, Oyz)
Oxω = Translate(O, Vector[d_x * i + d_ω * l])
Oyω = Translate(O, Vector[d_y * j + d_ω * l])
Ozω = Translate(O, Vector[d_z * k + d_ω * l])
Oxyz = Translate(O, Vector[d_x * i + d_y * j + d_z * k])
Oxyω = Translate(O, Vector[d_x * i + d_y * j + d_ω * l])
Oxzω = Translate(O, Vector[d_x * i + d_z * k + d_ω * l])
Oyzω = Translate(O, Vector[d_y * j + d_z * k + d_ω * l])
Oxyzω = Translate(O, Vector[d_x * i + d_y * j + d_z * k + d_ω * l])
ozozω = Segment(Oz, Ozω)
oωozω = Segment(Oω, Ozω)
oyoyω = Segment(Oy, Oyω)
oxoxω = Segment(Ox, Oxω)
oωoxω = Segment(Oω, Oxω)
oyzoxyz = Segment(Oyz, Oxyz)
oxzoxyz = Segment(Oxz, Oxyz)
oxyoxyz = Segment(Oxy, Oxyz)
oxyoxyω = Segment(Oxy, Oxyω)
oyωoxyω = Segment(Oyω, Oxyω)
oxωoxyω = Segment(Oxω, Oxyω)
oxzoxzω = Segment(Oxz, Oxzω)
oxωoxzω = Segment(Oxω, Oxzω)
ozωoxzω = Segment(Ozω, Oxzω)
oyωoyzω = Segment(Oyω, Oyzω)
oyzoyzω = Segment(Oyz, Oyzω)
ozωoyzω = Segment(Ozω, Oyzω)
oωoyω = Segment(Oω, Oyω)
oxyzoxyzω = Segment(Oxyz, Oxyzω)
oxyωoxyzω = Segment(Oxyω, Oxyzω)
oxzωoxyzω = Segment(Oxzω, Oxyzω)
oyzωoxyzω = Segment(Oyzω, Oxyzω)
ooz = Segment(O, Oz)
ooω = Segment(O, Oω)
ooy = Segment(O, Oy)
axis_x = Ray(O, I)
axis_y = Ray(O, J)
axis_z = Ray(O, K)
axis_ω = Ray(O, L)
process = 2 (slider from 0 to 2, step 1)