sean_s

mat.ts

Nov 4th, 2023 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. export class matrix {
  2.  
  3. public vals : number[];
  4.  
  5. constructor() {
  6.  
  7. this.vals = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  8. }
  9.  
  10.  
  11. }
  12.  
  13. export function mul(a: any, b:any) {
  14. var a00 = a[0 * 4 + 0];
  15. var a01 = a[0 * 4 + 1];
  16. var a02 = a[0 * 4 + 2];
  17. var a03 = a[0 * 4 + 3];
  18. var a10 = a[1 * 4 + 0];
  19. var a11 = a[1 * 4 + 1];
  20. var a12 = a[1 * 4 + 2];
  21. var a13 = a[1 * 4 + 3];
  22. var a20 = a[2 * 4 + 0];
  23. var a21 = a[2 * 4 + 1];
  24. var a22 = a[2 * 4 + 2];
  25. var a23 = a[2 * 4 + 3];
  26. var a30 = a[3 * 4 + 0];
  27. var a31 = a[3 * 4 + 1];
  28. var a32 = a[3 * 4 + 2];
  29. var a33 = a[3 * 4 + 3];
  30. var b00 = b[0 * 4 + 0];
  31. var b01 = b[0 * 4 + 1];
  32. var b02 = b[0 * 4 + 2];
  33. var b03 = b[0 * 4 + 3];
  34. var b10 = b[1 * 4 + 0];
  35. var b11 = b[1 * 4 + 1];
  36. var b12 = b[1 * 4 + 2];
  37. var b13 = b[1 * 4 + 3];
  38. var b20 = b[2 * 4 + 0];
  39. var b21 = b[2 * 4 + 1];
  40. var b22 = b[2 * 4 + 2];
  41. var b23 = b[2 * 4 + 3];
  42. var b30 = b[3 * 4 + 0];
  43. var b31 = b[3 * 4 + 1];
  44. var b32 = b[3 * 4 + 2];
  45. var b33 = b[3 * 4 + 3];
  46. return [
  47. b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,
  48. b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,
  49. b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,
  50. b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,
  51. b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,
  52. b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,
  53. b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,
  54. b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,
  55. b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,
  56. b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,
  57. b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,
  58. b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,
  59. b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,
  60. b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,
  61. b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,
  62. b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33,
  63. ];
  64. }
  65.  
  66. export function project(h:number,w:number,d:number) {
  67.  
  68. console.log("w " + w);
  69. console.log("h " + h);
  70. console.log("d " + d);
  71.  
  72. return [
  73. 2 / w, 0, 0, 0,
  74. 0, -2 / h, 0, 0,
  75. 0, 0, 2 / d, 0,
  76. -1, 1, 0, 1,
  77. ];
  78.  
  79. }
  80.  
  81.  
  82. export function scale(sx:number, sy:number, sz:number ) {
  83.  
  84.  
  85. return [
  86. sx, 0, 0, 0,
  87. 0, sy, 0, 0,
  88. 0, 0, sz, 0,
  89. 0, 0, 0, 1,
  90. ];
  91.  
  92. }
  93.  
  94. export function xRotation(angleInRadians:number) {
  95.  
  96. var c = Math.cos(angleInRadians);
  97. var s = Math.sin(angleInRadians);
  98.  
  99.  
  100. console.log([ 1, 0, 0, 0,
  101. 0, c, s, 0,
  102. 0, -s, c, 0,
  103. 0, 0, 0, 1,]);
  104.  
  105. return [
  106. 1, 0, 0, 0,
  107. 0, c, s, 0,
  108. 0, -s, c, 0,
  109. 0, 0, 0, 1,
  110. ];
  111.  
  112. }
  113.  
  114.  
  115. export function yRotation(angleInRadians:number) {
  116.  
  117. var c = Math.cos(angleInRadians);
  118. var s = Math.sin(angleInRadians);
  119.  
  120. return [
  121. c, 0, -s, 0,
  122. 0, 1, 0, 0,
  123. s, 0, c, 0,
  124. 0, 0, 0, 1,
  125. ];
  126. }
  127.  
  128. export function zRotation(angleInRadians:number) {
  129. var c = Math.cos(angleInRadians);
  130. var s = Math.sin(angleInRadians);
  131.  
  132. return [
  133. c, s, 0, 0,
  134. -s, c, 0, 0,
  135. 0, 0, 1, 0,
  136. 0, 0, 0, 1,
  137. ];
  138. }
  139.  
  140.  
  141. export function translation(tx:number, ty:number, tz:number) {
  142. return [
  143. 1, 0, 0, 0,
  144. 0, 1, 0, 0,
  145. 0, 0, 1, 0,
  146. tx, ty, tz, 1,
  147. ];
  148. }
  149.  
  150. export function translate(x:number,y:number,z:number) {
  151.  
  152. var d = x,
  153. e = y,
  154. b = z;
  155.  
  156. var a = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  157. a[12] = a[0] * d + a[4] * e + a[8] * b + a[12];
  158. a[13] = a[1] * d + a[5] * e + a[9] * b + a[13];
  159. a[14] = a[2] * d + a[6] * e + a[10] * b + a[14];
  160. a[15] = a[3] * d + a[7] * e + a[11] * b + a[15];
  161.  
  162. return a;
  163.  
  164. }
  165.  
  166. export function perspective(a:number ,b: number, c: number ,d: number){
  167. a = c*Math.tan(a*Math.PI/360);
  168. b = b*a;
  169. return frustum(-b,b,-a,a,c,d)
  170.  
  171. }
  172.  
  173.  
  174. export function frustum(a: number , b: number, c: number, d: number, e: number ,g: number){
  175. var gg = new matrix();
  176. var f = gg.vals;
  177. var h=b-a;
  178. var i=d-c;
  179. var j=g-e;
  180. f[0]=2*e/h;
  181. f[1]=0;
  182. f[2]=0;
  183. f[3]=0;
  184. f[4]=0;
  185. f[5]=2*e/i;
  186. f[6]=0;
  187. f[7]=0;
  188. f[8]=(b+a)/h;
  189. f[9]=(d+c)/i;
  190. f[10]=-(g+e)/j;
  191. f[11]=-1;
  192. f[12]=0;
  193. f[13]=0;
  194. f[14]=-(2*g*e)/j;
  195. f[15]=0;
  196. return f;
  197. }
  198.  
  199.  
  200. export function inverse(a:number[]){
  201. var b =a;
  202. var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],n=a[10],o=a[11],m=a[12],p=a[13],r=a[14],s=a[15];
  203. var A=c*h-d*f, B=c*i-e*f, t=c*j-g*f, u=d*i-e*h, v=d*j-g*h, w=e*j-g*i, x=k*p-l*m, y=k*r-n*m, z=k*s-o*m;
  204. var C=l*r-n*p, D=l*s-o*p, E=n*s-o*r, q=A*E-B*D+t*C+u*z-v*y+w*x;
  205.  
  206. if(!q)return null;
  207.  
  208. q=1/q;
  209. b[0]=(h*E-i*D+j*C)*q;
  210. b[1]=(-d*E+e*D-g*C)*q;
  211. b[2]=(p*w-r*v+s*u)*q;
  212. b[3]=(-l*w+n*v-o*u)*q;
  213. b[4]=(-f*E+i*z-j*y)*q;
  214. b[5]=(c*E-e*z+g*y)*q;
  215. b[6]=(-m*w+r*t-s*B)*q;
  216. b[7]=(k*w-n*t+o*B)*q;
  217. b[8]=(f*D-h*z+j*x)*q;
  218. b[9]=(-c*D+d*z-g*x)*q;
  219. b[10]=(m*v-p*t+s*A)*q;
  220. b[11]=(-k*v+l*t-o*A)*q;
  221. b[12]=(-f*C+h*y-i*x)*q;
  222. b[13]=(c*C-d*y+e*x)*q;
  223. b[14]=(-m*u+p*B-r*A)*q;
  224. b[15]=(k*u-l*B+n*A)*q;
  225.  
  226. return b;
  227.  
  228.  
  229. }
  230.  
  231.  
  232.  
  233. export function transpose(a:number[]){
  234. var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];
  235. a[1]=a[4];
  236. a[2]=a[8];
  237. a[3]=a[12];
  238. a[4]=c;
  239. a[6]=a[9];
  240. a[7]=a[13];
  241. a[8]=d;
  242. a[9]=g;
  243. a[11]=a[14];
  244. a[12]=e;
  245. a[13]=f;
  246. a[14]=h;
  247. return a;
  248.  
  249. };
  250.  
Advertisement
Add Comment
Please, Sign In to add comment