Translations of this page:

3D cube

Автор: Mike

Файлы cube_object.inc и Short3D.inc находяться в директории основной программы

//Code by Mike <hutchber@kingston.net>
 
resize_pixi(0,320,320)
 
INCLUDE "cube_object.inc"
obj=cube
Pnt1=new_array(3)
 Pnt2=new_array(3)
 
Angl=0 Tilt=0 
x=0 y=0 z=690 m=900
num_lines=cube[1]
num_points=cube[0]
os=10+3*num_points
Color=GREEN
 
LoopTilt:
InitPlotting   InitPerspective  
 Angl+1 //Tilt+1 
clear( BLACK )
Draw3DObject
frame(20)
go LoopTilt
stop
 
INCLUDE "Short3D.inc"
 
Draw3DObject:
	num_lines=obj[1]
	num_points=obj[0]
	os=10+3*num_points
 
	InitPlotting   InitPerspective  
k=0
LoopLine:
j=os+2*k
p1=obj[j] p2=obj[j+1] 
 
a=10+3*p1
Pnt1[0]=obj[a] Pnt1[1]=obj[a+1] Pnt1[2]=obj[a+2]
a=10+3*p2
Pnt2[0]=obj[a] 
Pnt2[1]=obj[a+1] Pnt2[2]=obj[a+2]
 
 DrawLine3D k+1
if k<num_lines {go LoopLine}
ret

Подгружаемый файл cube_object.inc

num_points=8
num_lines=12
/*
will reserve 8 spaces to make it easier if I want to add info later
*/
obj_size=10+num_points*3+num_lines*2
cube=new_array(obj_size)
cube[0]=num_points
cube[1]=num_lines
//cube[2 to 9] reserved
a=50 b=-50
cube[10]=a cube[11]=a cube[12]=a 
cube[13]=b cube[14]=a cube[15]=a 
cube[16]=b cube[17]=b cube[18]=a 
cube[19]=a cube[20]=b cube[21]=a 
cube[22]=a cube[23]=a cube[24]=b 
cube[25]=b cube[26]=a cube[27]=b 
cube[28]=b cube[29]=b cube[30]=b 
cube[31]=a cube[32]=b cube[33]=b 
 
cube[34]=0 cube[35]=1
cube[36]=1 cube[37]=2 
cube[38]=2 cube[39]=3 
cube[40]=3 cube[41]=0 
cube[42]=4 cube[43]=5 
cube[44]=5 cube[45]=6 
cube[46]=6 cube[47]=7 
cube[48]=7 cube[49]=4 
cube[50]=0 cube[51]=4 
cube[52]=1 cube[53]=5 
cube[54]=2 cube[55]=6 
cube[56]=3 cube[57]=7 

Подгружаемый файл Short3D.inc

/************************
 Three Dimensional Plotting Routines                    
*************************
 
   InitPlotting       - rotation and tilt angles
   InitPerspective    - observer location and distances
   MapCoordinates     - maps 3D space onto the 2D screen
   CartesianPlot      - plot a cartesian system point
   DrawLine3D	      - plots a line from 3D coordinates
*/
 
PixiAngle:
	/*Angle in degrees.
	512 segments in circle of 360 
	degrees
	*/
	Angle=(1800+ 						(Angle*5120))/3600
ret
 
CosD: PixiAngle /**/c=cos(Angle)
ret
 
SinD: PixiAngle/**/s=sin(Angle)
ret
 
InitPlotting://in: Angl, Tilt
/*Where Angl & Tilt are user
inputs. Angl is angle around z-axis.
Tilt is angle around off z-axis.
*/
  CentreX=0
  CentreY=0
	Angle=Angl SinD SinA=s 
	Angle=Angl CosD CosA=c
	Angle=Tilt SinD SinB=s
	Angle=Tilt CosD CosB=c 
  CosACosB=CosA*CosB//is 256^2 larger than supposed to be
  SinASinB=SinA*SinB//ibid
  CosASinB=CosA*SinB//ibid
  SinACosB=SinA*CosB//ibid
ret
 
InitPerspective:
	// x, y, z, m
//camera position in space
  Mx=x
  My=y
  Mz=z
  ds=m  //distance of camera from			 screen
ret
 
MapCoordinates://in:  X, Y, Z,
		//out:Xp, Yp
  Xt=256*Mx+X*CosA-Y*SinA
	Yt=256*My+(X*SinASinB					+Y*CosASinB)/256					+Z*CosB
	Zt=256*Mz+(X*SinACosB 					+Y*CosACosB)/256					-Z*SinB
	Xt/256 Yt/256 Zt/256 
    Xp=CentreX+(ds*Xt/Zt)
    Yp=CentreY-(ds*Yt/Zt)
ret
 
CartesianPlot3D:// X, Y, Z,  Color
	MapCoordinates//X,Y,Z, Xp,Yp
	dot(Xp, Yp, Color);
ret
 
DrawLine3D://in: Pnt1, Pnt2, Color
	X=Pnt1[0] Y=Pnt1[1] Z=Pnt1[2] 
	MapCoordinates
	Xp1=Xp Yp1=Yp
	X=Pnt2[0] Y=Pnt2[1] Z=Pnt2[2] 
	MapCoordinates
	line(Xp1, Yp1, Xp , Yp ,Color)
ret
pixi-examples/3d_cube.txt · Последние изменения: 2009/01/17 12:51 — 89.169.160.32
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki