Code archives/3D Graphics - Misc/Hypercube - ribs and vertexes

This code has been declared by its author to be Public Domain code.

Download source code

Hypercube - ribs and vertexes by Matt Merkulov2007
From article: 4D Geometry (rus)
;Drawing hypercube (4D cube, tesseract) projection using cylinders as ribs and spheres as vertexes by Matt Merkulov

;Control keys: 1-6 - rotate tesseract in one of 6 4D rotational surfaces

Graphics3D 640,480,32
p=CreatePivot()
PositionEntity CreateCamera(p), 0,0,-5
RotateEntity CreateLight(), 45,45,0

; Filling a file of tops. Thus if number of each top to present in
; Binary calculation everyone of bats will define(determine) corresponding(meeting)
; Coordinate: if bats it is switched off, the coordinate is equal-1, differently - +1
Dim v#(15,4)
For n1=0 To 15
 For n2=0 To 3
 v#(n1, n2)=Sgn(n1 And(1 Shl n2))*2-1
 Next
 ; Creation of the spheres representing tops
 v(n1,4)=CreateSphere(10)
 ScaleEntity v(n1,4), .2, .2, .2
Next

; Filling a file of planes of rotation(every possible variants of pairs axes)
Dim r(5,1)
For n1=0 To 2
 For n2=n1+1 To 3
 r(n, 0)=n1
 r(n, 1)=n2
 n=n+1
 Next
Next

; A file of addresses of cylinders - edges
Dim e(15,3)
; An auxiliary vector
Dim d#(2)

; Preliminary calculations
ang#=1
sina#=Sin(ang#)
cosa#=Cos(ang#)
Repeat

 ; Turn of a body(and is more exact-tops) around of planes by pressing keys 1-6
 For n3=0 To 5
 If KeyDown(n3+2) Then
  n1=r(n3,0)
  n2=r(n3,1)
  For n=0 To 15
  c1#=v(n, n1)*cosa#-v(n, n2)*sina#
  c2#=v(n, n1)*sina#+ v(n, n2)*cosa#
  v(n, n1)=c1#
  v(n, n2)=c2#
  Next
 End If
 Next

 ; Creation of edges. A cycle on all tops
 For n1=0 To 15
 For n=0 To 3
  ; Definition of adjacent top by inclusion one bat(that is changes
  ; One of coordinates). Thus occurs(happens) otsecheni duplicating edges: number
  ; The first coordinate there should be less the second.
  n2=n1 Or(1 Shl n)
  If n1 <> n2 Then
  ; Creation of the cylinder-edge(if it is not created yet)
  If e(n1, n)=0 Then e(n1, n)=CreateCylinder(8, False)
  a=e(n1, n)
  ; Calculation of the center of an edge and installation of the cylinder in the center
  For n3=0 To 2
   d#(n3)=.5*(v(n1, n3) +v(n2, n3))
  Next
  PositionEntity a, d#(0), d#(1), d#(2)
  ; Calculations of a vector of an edge and alignment of the cylinder on it(him,them)
  dd#=0
  For n3=0 To 2
   d#(n3)=v(n1, n3)-v(n2, n3)
   dd#=dd#+ d#(n3)*d#(n3)
  Next    
  AlignToVector a, d#(0), d#(1), d#(2), 2
  ; Scaling the cylinder on length of an edge
  ScaleEntity a, .1, .5*Sqr(dd#),.1
  End If
 Next
 Next

 For n3=0 To 2
 If KeyDown(n3+8) Then  
  TurnEntity p, ang#*(n3=0), ang#*(n3=1), ang#*(n3=2)
 End If
 Next

 ; Installation of spheres
 For n=0 To 15
 PositionEntity v(n, 4), v(n, 0), v(n, 1), v(n, 2)
 Next

 RenderWorld
 Flip
Until KeyHit(1)

Comments

Yo! Wazzup?2007
Sorry to bother you, but the plural of vertex is verticies.


_332007
Vertices.


LineOf7s2007
vertex noun (pl: vertices, vertexes)

1. The point of intersection of lines or the point opposite the base of a figure

2. The highest point (of something)



Making a typo in a correction is just begging for it. :o)


Wayne2007
Making a typo in a correction, priceless.


Code Archives Forum