home *** CD-ROM | disk | FTP | other *** search
/ PC Underground / UNDERGROUND.ISO / doom / source / _math.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-02-05  |  2.9 KB  |  111 lines

  1. {----------------------------------------------------------------------------
  2.   9bit fixed point vector math - DOS 16bit realmode (Turbo Pascal version)
  3.   Copyright (c) 1994,95 by J.E. Hoffmann
  4.   All rights reserved
  5.  ----------------------------------------------------------------------------}
  6. {$A+,B-,D-,E-,F-,G+,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X+,Y-}
  7. unit _Math;
  8.  
  9.  
  10.  
  11. interface
  12.  
  13.  
  14.  
  15. const
  16.   x     = 0;
  17.   y     = 1;
  18.   z     = 2;
  19.  
  20. type
  21.   P2D = ^T2D;
  22.   T2D = array[x..y] of Integer;
  23.  
  24.   P3D = ^T3D;
  25.   T3D = array[x..z] of LongInt;
  26.  
  27.   P3D2D = ^T3D2D;
  28.   T3D2D = RECORD
  29.     P3  :T3D;
  30.     P2  :T2D;
  31.   end;
  32.  
  33.   P3DList = ^T3DList;
  34.   T3DList = array[0..2047] of T3D;
  35.  
  36.   P2DList = ^T2DList;
  37.   T2DList = array[0..2047] of T2D;
  38.  
  39.   P3D2DList = ^T3D2DList;
  40.   T3D2DList = array[0..2047] of T3D2D;
  41.  
  42.   PMatrix = ^TMatrix;
  43.   TMatrix = array[0..3, 0..3] of LongInt;
  44.  
  45.   PPoints = ^TPoints;
  46.   TPoints = array[0..$FF] of T2D;
  47.  
  48.  
  49.  
  50. procedure VecAdd2D(A,B :T2D; var C :T2D);
  51. procedure VecSub2D(A,B :T2D; var C :T2D);
  52.  
  53. procedure VecZero(var C :T3D);
  54. procedure Vec(vx,vy,vz :LongInt; var C :T3D);
  55. procedure UnVec(A :T3D; var vx,vy,vz :LongInt);
  56. procedure VecAdd(A,B :T3D; var C :T3D);
  57. procedure VecSub(A,B :T3D; var C :T3D);
  58. function VecDot(A,B :T3D) :LongInt;
  59. procedure VecCross(A,B :T3D; var C :T3D);
  60. function VecDistance(A :T3D) :LongInt;
  61. function VecLen(A :T3D) :LongInt;
  62. procedure VecScalMul(k :LongInt; A :T3D; var C :T3D);
  63. procedure VecNormalize(var C :T3D);
  64.  
  65. procedure Zero(var C :TMatrix);
  66. procedure Cross(var A,B :TMatrix; var C :TMatrix);
  67. procedure Transform(A :T3D; M :TMatrix; var C :T3D);
  68. procedure Project(A :T3D; var C:T2D);
  69. procedure Rotate(rx,ry,rz :Integer; var R :TMatrix);
  70. procedure Create(tx,ty,tz, sx,sy,sz :LongInt; rx,ry,rz :Integer; var M :TMatrix);
  71.  
  72.  
  73.  
  74. implementation
  75.  
  76.  
  77.  
  78. procedure VecAdd2D(A,B :T2D; var C :T2D); external;
  79. procedure VecSub2D(A,B :T2D; var C :T2D); external;
  80.  
  81. procedure VecZero(var C :T3D); external;
  82. procedure Vec(vx,vy,vz :LongInt; var C :T3D); external;
  83. procedure UnVec(A :T3D; var vx,vy,vz :LongInt); external;
  84. procedure VecAdd(A,B :T3D; var C :T3D); external;
  85. procedure VecSub(A,B :T3D; var C :T3D); external;
  86. function VecDot(A,B :T3D) :LongInt; external;
  87. procedure VecCross(A,B :T3D; var C :T3D); external;
  88. function VecDistance(A :T3D) :LongInt; external;
  89. function VecLen(A :T3D) :LongInt; external;
  90. procedure VecScalMul(k :LongInt; A :T3D; var C :T3D); external;
  91. procedure VecNormalize(var C :T3D); external;
  92.  
  93. procedure Zero(var C :TMatrix); external;
  94. procedure Cross(var A,B :TMatrix; var C :TMatrix); external;
  95. procedure Transform(A :T3D; M :TMatrix; var C :T3D); external;
  96. procedure Rotate(rx,ry,rz :Integer; var R :TMatrix); external;
  97. procedure Create(tx,ty,tz, sx,sy,sz :LongInt; rx,ry,rz :Integer; var M :TMatrix); external;
  98. {$L _MATH.OBJ}
  99.  
  100.  
  101.  
  102. procedure Project(A :T3D; var C:T2D);
  103. begin
  104.   C[x] := 160+ (A[x] div (A[z] div $200));
  105.   C[y] := 100- (A[y] div (A[z] div $200));
  106. end;
  107.  
  108.  
  109.  
  110. end.
  111.