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 Merkulov
(Posted 20 years ago)
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

Mortifer Nex
(Posted 19 years ago)
Sorry to bother you, but the plural of vertex is verticies.

_33
(Posted 19 years ago)
Vertices.

LineOf7s
(Posted 19 years ago)
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)

Wayne
(Posted 19 years ago)
Making a typo in a correction, priceless.

Code Archives Forum