ViP.at - Drahtmodelle darstellen
> Meine Frage ist , hat einer eine Algorithmus zur Berechnung der Koordinaten auf dem Bildschirm.
> Dieser Algorithmus sollte die Punkte nach der geschwenkten Gradzahl in X Y Z in 2D Koordinaten umrechnen.
Ich habe mich vor laengerer Zeit mal hingehockt und mich genau damit beschaeftigt. Herausgekommen ist ein BASIC-Programm:
'Darstellung von Drahtmodellen
SCREEN 1,320,256,2,1
WINDOW 2,"3D",(0,0)-(311,241),0,1
'Variablendefinition
Bx= 150 : By=156 : Bz=121 'Betrachterpunkt
Cx=-600 : Cy=156 : Cz=121 'Drehpunkt
pi=3.141592
A=11 : B=A*4 'Anzahl der Flächen,Punkte
DIM Ex1(B) ,Ey1(B) ,Ez1(B) , Ex2(B) ,Ey2(B) ,Ez2(B)
FOR t=0 TO B-1
READ Ex2(t) : READ Ey2(t) : READ Ez2(t)
NEXT t
'Hauptprogramm
re:
in$=INKEY$
IF in$= "" THEN re
IF in$="7" THEN wx=wx+(2*pi/360)*10
IF in$="4" THEN wx=wx-(2*pi/360)*10
IF in$="8" THEN wy=wy+(2*pi/360)*10
IF in$="5" THEN wy=wy-(2*pi/360)*10
IF in$="9" THEN wz=wz+(2*pi/360)*10
IF in$="6" THEN wz=wz-(2*pi/360)*10
GOSUB drehen
CLS
GOSUB abbilden
GOTO re
GOTO loop
'Schleife zum Anzeigen der Linien
abbilden:
q=0
FOR A1=1 TO A
FOR A2=0 TO 3
Dx = Ex1(q)-Bx
Dy = Ey1(q)-By
Dz = Ez1(q)-Bz
l = (-Bx+(Bx-100))/Dx '(Bx-100): Bildebene mitversch.
y = (By+Dy*l)+(156-By)/2 'x-Koordinate
z = 242-(Bz+Dz*l)-(121-Bz)/2 'y-Koordinate
y=INT(y+.5) : z=INT(z+.5) 'Aufrunden der Koord.
IF A2=0 THEN y1=y : z1=z : GOTO W1
LINE (yy,zz)-(y,z),1
W1:
yy=y : zz=z
q=q+1
NEXT A2
LINE (yy,zz)-(y1,z1),1
NEXT A1
RETURN
'Die Rotationsmatrix
drehen:
'x ,y ,z -Rotation
FOR t=0 TO B-1
Ex1= Ex2(t)
Ey1=( (Ey2(t)-Cy)*COS(wx) - (Ez2(t)-Cz)*SIN(wx) )+Cy
Ez1=( (Ez2(t)-Cz)*COS(wx) + (Ey2(t)-Cy)*SIN(wx) )+Cz
Ex2=( (Ex1-Cx)*COS(wy) - (Ez1-Cz)*SIN(wy) )+Cx
Ey2= Ey1
Ez2=( (Ez1-Cz)*COS(wy) + (Ex1-Cx)*SIN(wy) )+Cz
Ex1(t)=( (Ex2-Cx)*COS(wz) - (Ey2-Cy)*SIN(wz) )+Cx
Ey1(t)=( (Ey2-Cy)*COS(wz) + (Ex2-Cx)*SIN(wz) )+Cy
Ez1(t)= Ez2
NEXT t
RETURN
'Die Daten der Objekte
'Wuerfel
'DATA -100,106,71 , -100,106,171, -100,206,171, -100,206,71
'DATA -200,106,71 , -200,106,171, -200,206,171, -200,206,71
'DATA -100,206,171, -100,206,71 , -200,206,71 , -200,206,171
'DATA -100,106,71 , -100,106,171, -200,106,171, -200,106,71
'DATA -100,106,171, -100,206,171, -200,206,171, -200,106,171
'DATA -100,106,71 , -100,206,71 , -200,206,71 , -200,106,71
'Haus
DATA -850, 6, 271, -850, 6, -29, -850, 306, -29, -850, 306, 271
DATA -850, 6, 271, -850, 6, -29, -350, 6, -29, -350, 6, 271
DATA -350, 6, 271, -350, 6, -29, -350, 306, -29, -350, 306, 271
DATA -850, 306, 271, -850, 306, -29, -350, 306, -29, -350, 306, 271
DATA -850, 6, 271, -350, 6, 271, -400, 156, 421, -800, 156, 421
DATA -850, 306, 271, -800, 156, 421, -400, 156, 421, -350, 306, 271
DATA -700, 306, 471, -700, 306, -29, -700, 356, -29, -700, 356, 471
DATA -700, 306, 471, -600, 306, 471, -600, 356, 471, -700, 356, 471
DATA -600, 306, 471, -600, 306, 171, -600, 356, 171, -600, 356, 471
DATA -600, 306, 171, -550, 306, 121, -550, 356, 121, -600, 356, 171
DATA -550, 306, 121, -550, 306, -29, -550, 356, -29, -550, 356, 121
![]()
Design by comdes