Ein n-Dimensionaler Würfel
Übersicht BlitzBasic Codearchiv
SteffenBetreff: Ein n-Dimensionaler Würfel |
So, Dez 14, 2003 12:21 Antworten mit Zitat |
|
---|---|---|
Mit diesem Code kann man einen "n-Dimensionalen Würfel" anzeigen lassen. Mit folgenden Tasten lässt er sich manipulieren:
-Mit F1 und F2 wählt man die aktive Achse(grün) aus. -1 und 2 verlängern/verkürzen die Achse. -Mit Q,W,A,S,Y,X wird die Achse gedreht. -Mit E,R,D,F,C,V kann man das ganze Koordinatensystem drehen Ihr könnt gerne mit dem Code rumspielen oder sonst was damit machen. Code: [AUSKLAPPEN] ;Auflösung
Const aufl_x%=1024 Const aufl_y%=768 ;Anzahl der Dimensionen Const dimension%=4 ;maximale Länge der Achsen beim Start Const laenge%=200 ;Faktor beim verlängern der Achsen Const faktor#=1.1 ;Winkel um den gedreht wird Const winkel%=1 ;Nullpunkt auf dem Bildschirm Local null_x%=aufl_x%/2 Local null_y%=aufl_y%/2 ;Achsen erstellen Dim achsen#(dimension%-1,2) SeedRnd MilliSecs() For i%=0 To (dimension%-1) achsen#(i%,0)=Rand(-Sqr(laenge%^2/3),Sqr(laenge%^2/3)) achsen#(i%,1)=Rand(-Sqr(laenge%^2/3),Sqr(laenge%^2/3)) achsen#(i%,2)=Rand(-Sqr(laenge%^2/3),Sqr(laenge%^2/3)) Next ;Punkte erstellen: ;Für die Koordinaten ergeben sich alle Kombinationen aus 1en und 0en ;z.B. (0,1,1,0,0) für einen 5D Punkt Local anzahl_punkte%=2^dimension% Dim koordinaten%(anzahl_punkte%-1,dimension%-1) For i%=0 To (anzahl_punkte%-1) For j%=0 To (dimension%-1) koordinaten%(i%,j%)=((2^j%)And(i%))/(2^j%) Next Next ;verbundene Punkte festlegen: ;Jeder Punkt ist mit den Punkten verbunden, ;die sich nur in einer Koordinate von ihm unterscheiden Dim verbundene_punkte%(anzahl_punkte%-1,dimension%-1) For i%=0 To (anzahl_punkte%-1) For j%=0 To (dimension%-1) verbundene_punkte%(i%,j%)=i% Xor 2^j Next Next ;ein Array für die Koordinaten auf dem Bildschirm Dim echte_koordinaten%((anzahl_punkte%-1),1) ;Grafik initialisieren Graphics aufl_x%,aufl_y% SetBuffer BackBuffer() SetFont LoadFont("Arial",16,False,False,False) Local zeit1%=MilliSecs()-1 Local aktive_achse%=0 ;Mainloop Repeat ;aktive Achse festlegen aktive_achse%=(aktive_achse%+KeyHit(59)-KeyHit(60)+dimension%)Mod dimension% ;Achse verlängern laeng%=KeyDown(2)-KeyDown(3) achsen#(aktive_achse%,0)=achsen#(aktive_achse%,0)*faktor#^laeng% achsen#(aktive_achse%,1)=achsen#(aktive_achse%,1)*faktor#^laeng% achsen#(aktive_achse%,2)=achsen#(aktive_achse%,2)*faktor#^laeng% ;Drehung der aktiven Achse im 3D Raum dreh1%=KeyDown(16)-KeyDown(17);um z-Achse achsen#(aktive_achse%,0)=achsen#(aktive_achse%,0)*Cos(winkel%*dreh1%)+achsen#(aktive_achse%,1)*Sin(winkel%*dreh1%) achsen#(aktive_achse%,1)=-achsen#(aktive_achse%,0)*Sin(winkel%*dreh1%)+achsen#(aktive_achse%,1)*Cos(winkel%*dreh1%) dreh2%=KeyDown(30)-KeyDown(31);um y-Achse achsen#(aktive_achse%,1)=achsen#(aktive_achse%,1)*Cos(winkel%*dreh2%)+achsen#(aktive_achse%,2)*Sin(winkel%*dreh2%) achsen#(aktive_achse%,2)=-achsen#(aktive_achse%,1)*Sin(winkel%*dreh2%)+achsen#(aktive_achse%,2)*Cos(winkel%*dreh2%) dreh3%=KeyDown(44)-KeyDown(45);um x-Achse achsen#(aktive_achse%,2)=achsen#(aktive_achse%,2)*Cos(winkel%*dreh3%)+achsen#(aktive_achse%,0)*Sin(winkel%*dreh3%) achsen#(aktive_achse%,0)=-achsen#(aktive_achse%,2)*Sin(winkel%*dreh3%)+achsen#(aktive_achse%,0)*Cos(winkel%*dreh3%) ;Drehung des gesamten Koordinatensystem im 3D Raum dreh1%=KeyDown(18)-KeyDown(19);um z-Achse dreh2%=KeyDown(32)-KeyDown(33);um y-Achse dreh3%=KeyDown(46)-KeyDown(47);um x-Achse For i=0 To (dimension%-1) achsen#(i%,0)=achsen#(i%,0)*Cos(winkel%*dreh1%)+achsen#(i%,1)*Sin(winkel%*dreh1%) achsen#(i%,1)=-achsen#(i%,0)*Sin(winkel%*dreh1%)+achsen#(i%,1)*Cos(winkel%*dreh1%) achsen#(i%,1)=achsen#(i%,1)*Cos(winkel%*dreh2%)+achsen#(i%,2)*Sin(winkel%*dreh2%) achsen#(i%,2)=-achsen#(i%,1)*Sin(winkel%*dreh2%)+achsen#(i%,2)*Cos(winkel%*dreh2%) achsen#(i%,2)=achsen#(i%,2)*Cos(winkel%*dreh3%)+achsen#(i%,0)*Sin(winkel%*dreh3%) achsen#(i%,0)=-achsen#(i%,2)*Sin(winkel%*dreh3%)+achsen#(i%,0)*Cos(winkel%*dreh3%) Next ;Die Punkte auf dem Bildschirm berechnen For i%=0 To (anzahl_punkte%-1) ;Auf den Nullpunkt setzen echte_koordinaten%(i%,0)=null_x% echte_koordinaten%(i%,1)=null_y% For j%=0 To (dimension%-1) echte_koordinaten%(i%,0)=echte_koordinaten%(i%,0)+achsen#(j%,0)*koordinaten%(i%,j%) echte_koordinaten%(i%,1)=echte_koordinaten%(i%,1)+achsen#(j%,1)*koordinaten%(i%,j%) Next Next ;Linien Anzeigen Cls Color 255,255,255 zeit2%=zeit1% zeit1%=MilliSecs() Text 10,10,(1000/(zeit1%-zeit2%))+" fps" For i%=0 To (anzahl_punkte%-1) For j%=0 To dimension%-1 Line echte_koordinaten%(i%,0),echte_koordinaten%(i%,1),echte_koordinaten%((verbundene_punkte%(i%,j%)),0),echte_koordinaten%((verbundene_punkte%(i%,j%)),1) Next Next ;Achsen anzeigen ;Die ausgewählte Achse ist grün, die anderen rot For i%=0 To dimension%-1 If (aktive_achse%=i%) Then Color 0,255,0 Else Color 255,0,0 EndIf Line null_x%,null_y%,null_x%+achsen#(i%,0),null_y%+achsen#(i%,1) Next Color 255,0,0 Flip Until KeyHit(1) End |
||
morszeckGast |
So, Dez 14, 2003 12:44 Antworten mit Zitat |
|
---|---|---|
Sieht cool aus! | ||
mr x |
Di, Dez 23, 2003 17:46 Antworten mit Zitat |
|
---|---|---|
is ja goil!! | ||
besser heimlich schlau, als unheimlich blöd |
Eisrabe |
Fr, Jan 30, 2004 3:55 Antworten mit Zitat |
|
---|---|---|
mach daraus doch mal ein kleines demo.
lass sich den würfel in einem algorythmus verformen und drehen, während tekkno hämmert wäre bestimmt nett |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group