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
  

© 1995 by Thomas Dorn
Design by comdes