matrix.pp 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. unit matrix;
  2. {
  3. $Id$
  4. This file is part of the Free Pascal run time library.
  5. Copyright (c) 2004 by Daniel Mantione
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {*****************************************************************************}
  13. interface
  14. {*****************************************************************************}
  15. {$MACRO on}
  16. type Tvector2_single_data=array[0..1] of single;
  17. Tvector2_double_data=array[0..1] of double;
  18. Tvector2_extended_data=array[0..1] of extended;
  19. Tvector3_single_data=array[0..2] of single;
  20. Tvector3_double_data=array[0..2] of double;
  21. Tvector3_extended_data=array[0..2] of extended;
  22. Tvector4_single_data=array[0..3] of single;
  23. Tvector4_double_data=array[0..3] of double;
  24. Tvector4_extended_data=array[0..3] of extended;
  25. Tmatrix2_single_data=array[0..1,0..1] of single;
  26. Tmatrix2_double_data=array[0..1,0..1] of double;
  27. Tmatrix2_extended_data=array[0..1,0..1] of extended;
  28. Tmatrix3_single_data=array[0..2,0..2] of single;
  29. Tmatrix3_double_data=array[0..2,0..2] of double;
  30. Tmatrix3_extended_data=array[0..2,0..2] of extended;
  31. Tmatrix4_single_data=array[0..3,0..3] of single;
  32. Tmatrix4_double_data=array[0..3,0..3] of double;
  33. Tmatrix4_extended_data=array[0..3,0..3] of extended;
  34. Tvector2_single=object
  35. data:Tvector2_single_data;
  36. constructor init_zero;
  37. constructor init_one;
  38. constructor init(a,b:single);
  39. function length:single;
  40. function squared_length:single;
  41. end;
  42. Tvector2_double=object
  43. data:Tvector2_double_data;
  44. constructor init_zero;
  45. constructor init_one;
  46. constructor init(a,b:double);
  47. function length:double;
  48. function squared_length:double;
  49. end;
  50. Tvector2_extended=object
  51. data:Tvector2_extended_data;
  52. constructor init_zero;
  53. constructor init_one;
  54. constructor init(a,b:extended);
  55. function length:extended;
  56. function squared_length:extended;
  57. end;
  58. Tvector3_single=object
  59. data:Tvector3_single_data;
  60. constructor init_zero;
  61. constructor init_one;
  62. constructor init(a,b,c:single);
  63. function length:single;
  64. function squared_length:single;
  65. end;
  66. Tvector3_double=object
  67. data:Tvector3_double_data;
  68. constructor init_zero;
  69. constructor init_one;
  70. constructor init(a,b,c:double);
  71. function length:double;
  72. function squared_length:double;
  73. end;
  74. Tvector3_extended=object
  75. data:Tvector3_extended_data;
  76. constructor init_zero;
  77. constructor init_one;
  78. constructor init(a,b,c:extended);
  79. function length:extended;
  80. function squared_length:extended;
  81. end;
  82. Tvector4_single=object
  83. data:Tvector4_single_data;
  84. constructor init_zero;
  85. constructor init_one;
  86. constructor init(a,b,c,d:single);
  87. function length:single;
  88. function squared_length:single;
  89. end;
  90. Tvector4_double=object
  91. data:Tvector4_double_data;
  92. constructor init_zero;
  93. constructor init_one;
  94. constructor init(a,b,c,d:double);
  95. function length:double;
  96. function squared_length:double;
  97. end;
  98. Tvector4_extended=object
  99. data:Tvector4_extended_data;
  100. constructor init_zero;
  101. constructor init_one;
  102. constructor init(a,b,c,d:extended);
  103. function length:extended;
  104. function squared_length:extended;
  105. end;
  106. Tmatrix2_single=object
  107. data:Tmatrix2_single_data;
  108. constructor init_zero;
  109. constructor init_identity;
  110. constructor init(aa,ab,ba,bb:single);
  111. function get_column(c:byte):Tvector2_single;
  112. function get_row(r:byte):Tvector2_single;
  113. procedure set_column(c:byte;const v:Tvector2_single);
  114. procedure set_row(r:byte;const v:Tvector2_single);
  115. function determinant:single;
  116. function inverse(Adeterminant:single):Tmatrix2_single;
  117. function transpose:Tmatrix2_single;
  118. end;
  119. Tmatrix2_double=object
  120. data:Tmatrix2_double_data;
  121. constructor init_zero;
  122. constructor init_identity;
  123. constructor init(aa,ab,ba,bb:double);
  124. function get_column(c:byte):Tvector2_double;
  125. function get_row(r:byte):Tvector2_double;
  126. procedure set_column(c:byte;const v:Tvector2_double);
  127. procedure set_row(r:byte;const v:Tvector2_double);
  128. function determinant:double;
  129. function inverse(Adeterminant:double):Tmatrix2_double;
  130. function transpose:Tmatrix2_double;
  131. end;
  132. Tmatrix2_extended=object
  133. data:Tmatrix2_extended_data;
  134. constructor init_zero;
  135. constructor init_identity;
  136. constructor init(aa,ab,ba,bb:extended);
  137. function get_column(c:byte):Tvector2_extended;
  138. function get_row(r:byte):Tvector2_extended;
  139. procedure set_column(c:byte;const v:Tvector2_extended);
  140. procedure set_row(r:byte;const v:Tvector2_extended);
  141. function determinant:extended;
  142. function inverse(Adeterminant:extended):Tmatrix2_extended;
  143. function transpose:Tmatrix2_extended;
  144. end;
  145. Tmatrix3_single=object
  146. data:Tmatrix3_single_data;
  147. constructor init_zero;
  148. constructor init_identity;
  149. constructor init(aa,ab,ac,ba,bb,bc,ca,cb,cc:single);
  150. function get_column(c:byte):Tvector3_single;
  151. function get_row(r:byte):Tvector3_single;
  152. procedure set_column(c:byte;const v:Tvector3_single);
  153. procedure set_row(r:byte;const v:Tvector3_single);
  154. function determinant:single;
  155. function inverse(Adeterminant:single):Tmatrix3_single;
  156. function transpose:Tmatrix3_single;
  157. end;
  158. Tmatrix3_double=object
  159. data:Tmatrix3_double_data;
  160. constructor init_zero;
  161. constructor init_identity;
  162. constructor init(aa,ab,ac,ba,bb,bc,ca,cb,cc:double);
  163. function get_column(c:byte):Tvector3_double;
  164. function get_row(r:byte):Tvector3_double;
  165. procedure set_column(c:byte;const v:Tvector3_double);
  166. procedure set_row(r:byte;const v:Tvector3_double);
  167. function determinant:double;
  168. function inverse(Adeterminant:double):Tmatrix3_double;
  169. function transpose:Tmatrix3_double;
  170. end;
  171. Tmatrix3_extended=object
  172. data:Tmatrix3_extended_data;
  173. constructor init_zero;
  174. constructor init_identity;
  175. constructor init(aa,ab,ac,ba,bb,bc,ca,cb,cc:extended);
  176. function get_column(c:byte):Tvector3_extended;
  177. function get_row(r:byte):Tvector3_extended;
  178. procedure set_column(c:byte;const v:Tvector3_extended);
  179. procedure set_row(r:byte;const v:Tvector3_extended);
  180. function determinant:extended;
  181. function inverse(Adeterminant:extended):Tmatrix3_extended;
  182. function transpose:Tmatrix3_extended;
  183. end;
  184. Tmatrix4_single=object
  185. data:Tmatrix4_single_data;
  186. constructor init_zero;
  187. constructor init_identity;
  188. constructor init(aa,ab,ac,ad,ba,bb,bc,bd,ca,cb,cc,cd,da,db,dc,dd:single);
  189. function get_column(c:byte):Tvector4_single;
  190. function get_row(r:byte):Tvector4_single;
  191. procedure set_column(c:byte;const v:Tvector4_single);
  192. procedure set_row(r:byte;const v:Tvector4_single);
  193. function determinant:single;
  194. function inverse(Adeterminant:single):Tmatrix4_single;
  195. function transpose:Tmatrix4_single;
  196. end;
  197. Tmatrix4_double=object
  198. data:Tmatrix4_double_data;
  199. constructor init_zero;
  200. constructor init_identity;
  201. constructor init(aa,ab,ac,ad,ba,bb,bc,bd,ca,cb,cc,cd,da,db,dc,dd:double);
  202. function get_column(c:byte):Tvector4_double;
  203. function get_row(r:byte):Tvector4_double;
  204. procedure set_column(c:byte;const v:Tvector4_double);
  205. procedure set_row(r:byte;const v:Tvector4_double);
  206. function determinant:double;
  207. function inverse(Adeterminant:double):Tmatrix4_double;
  208. function transpose:Tmatrix4_double;
  209. end;
  210. Tmatrix4_extended=object
  211. data:Tmatrix4_extended_data;
  212. constructor init_zero;
  213. constructor init_identity;
  214. constructor init(aa,ab,ac,ad,ba,bb,bc,bd,ca,cb,cc,cd,da,db,dc,dd:extended);
  215. function get_column(c:byte):Tvector4_extended;
  216. function get_row(r:byte):Tvector4_extended;
  217. procedure set_column(c:byte;const v:Tvector4_extended);
  218. procedure set_row(r:byte;const v:Tvector4_extended);
  219. function determinant:extended;
  220. function inverse(Adeterminant:extended):Tmatrix4_extended;
  221. function transpose:Tmatrix4_extended;
  222. end;
  223. {Operators to make different vectors assignable to each other}
  224. operator := (const v:Tvector2_single) result:Tvector2_double;
  225. operator := (const v:Tvector2_single) result:Tvector2_extended;
  226. operator := (const v:Tvector2_double) result:Tvector2_single;
  227. operator := (const v:Tvector2_double) result:Tvector2_extended;
  228. operator := (const v:Tvector2_extended) result:Tvector2_single;
  229. operator := (const v:Tvector2_extended) result:Tvector2_double;
  230. operator := (const v:Tvector2_single) result:Tvector3_single;
  231. operator := (const v:Tvector2_single) result:Tvector3_double;
  232. operator := (const v:Tvector2_single) result:Tvector3_extended;
  233. operator := (const v:Tvector2_double) result:Tvector3_single;
  234. operator := (const v:Tvector2_double) result:Tvector3_double;
  235. operator := (const v:Tvector2_double) result:Tvector3_extended;
  236. operator := (const v:Tvector2_extended) result:Tvector3_single;
  237. operator := (const v:Tvector2_extended) result:Tvector3_double;
  238. operator := (const v:Tvector2_extended) result:Tvector3_extended;
  239. operator := (const v:Tvector2_single) result:Tvector4_single;
  240. operator := (const v:Tvector2_single) result:Tvector4_double;
  241. operator := (const v:Tvector2_single) result:Tvector4_extended;
  242. operator := (const v:Tvector2_double) result:Tvector4_single;
  243. operator := (const v:Tvector2_double) result:Tvector4_double;
  244. operator := (const v:Tvector2_double) result:Tvector4_extended;
  245. operator := (const v:Tvector2_extended) result:Tvector4_single;
  246. operator := (const v:Tvector2_extended) result:Tvector4_double;
  247. operator := (const v:Tvector2_extended) result:Tvector4_extended;
  248. operator := (const v:Tvector3_single) result:Tvector2_single;
  249. operator := (const v:Tvector3_single) result:Tvector2_double;
  250. operator := (const v:Tvector3_single) result:Tvector2_extended;
  251. operator := (const v:Tvector3_double) result:Tvector2_single;
  252. operator := (const v:Tvector3_double) result:Tvector2_double;
  253. operator := (const v:Tvector3_double) result:Tvector2_extended;
  254. operator := (const v:Tvector3_extended) result:Tvector2_single;
  255. operator := (const v:Tvector3_extended) result:Tvector2_double;
  256. operator := (const v:Tvector3_extended) result:Tvector2_extended;
  257. operator := (const v:Tvector3_single) result:Tvector3_double;
  258. operator := (const v:Tvector3_single) result:Tvector3_extended;
  259. operator := (const v:Tvector3_double) result:Tvector3_single;
  260. operator := (const v:Tvector3_double) result:Tvector3_extended;
  261. operator := (const v:Tvector3_extended) result:Tvector3_single;
  262. operator := (const v:Tvector3_extended) result:Tvector3_double;
  263. operator := (const v:Tvector3_single) result:Tvector4_single;
  264. operator := (const v:Tvector3_single) result:Tvector4_double;
  265. operator := (const v:Tvector3_single) result:Tvector4_extended;
  266. operator := (const v:Tvector3_double) result:Tvector4_single;
  267. operator := (const v:Tvector3_double) result:Tvector4_double;
  268. operator := (const v:Tvector3_double) result:Tvector4_extended;
  269. operator := (const v:Tvector3_extended) result:Tvector4_single;
  270. operator := (const v:Tvector3_extended) result:Tvector4_double;
  271. operator := (const v:Tvector3_extended) result:Tvector4_extended;
  272. operator := (const v:Tvector4_single) result:Tvector2_single;
  273. operator := (const v:Tvector4_single) result:Tvector2_double;
  274. operator := (const v:Tvector4_single) result:Tvector2_extended;
  275. operator := (const v:Tvector4_double) result:Tvector2_single;
  276. operator := (const v:Tvector4_double) result:Tvector2_double;
  277. operator := (const v:Tvector4_double) result:Tvector2_extended;
  278. operator := (const v:Tvector4_extended) result:Tvector2_single;
  279. operator := (const v:Tvector4_extended) result:Tvector2_double;
  280. operator := (const v:Tvector4_extended) result:Tvector2_extended;
  281. operator := (const v:Tvector4_single) result:Tvector3_single;
  282. operator := (const v:Tvector4_single) result:Tvector3_double;
  283. operator := (const v:Tvector4_single) result:Tvector3_extended;
  284. operator := (const v:Tvector4_double) result:Tvector3_single;
  285. operator := (const v:Tvector4_double) result:Tvector3_double;
  286. operator := (const v:Tvector4_double) result:Tvector3_extended;
  287. operator := (const v:Tvector4_extended) result:Tvector3_single;
  288. operator := (const v:Tvector4_extended) result:Tvector3_double;
  289. operator := (const v:Tvector4_extended) result:Tvector3_extended;
  290. operator := (const v:Tvector4_single) result:Tvector4_double;
  291. operator := (const v:Tvector4_single) result:Tvector4_extended;
  292. operator := (const v:Tvector4_double) result:Tvector4_single;
  293. operator := (const v:Tvector4_double) result:Tvector4_extended;
  294. operator := (const v:Tvector4_extended) result:Tvector4_single;
  295. operator := (const v:Tvector4_extended) result:Tvector4_double;
  296. {Vector to vector operations.}
  297. operator + (const x,y:Tvector2_single) result:Tvector2_single;
  298. operator + (const x,y:Tvector2_double) result:Tvector2_double;
  299. operator + (const x,y:Tvector2_extended) result:Tvector2_extended;
  300. operator + (const x,y:Tvector3_single) result:Tvector3_single;
  301. operator + (const x,y:Tvector3_double) result:Tvector3_double;
  302. operator + (const x,y:Tvector3_extended) result:Tvector3_extended;
  303. operator + (const x,y:Tvector4_single) result:Tvector4_single;
  304. operator + (const x,y:Tvector4_double) result:Tvector4_double;
  305. operator + (const x,y:Tvector4_extended) result:Tvector4_extended;
  306. operator - (const x,y:Tvector2_single) result:Tvector2_single;
  307. operator - (const x,y:Tvector2_double) result:Tvector2_double;
  308. operator - (const x,y:Tvector2_extended) result:Tvector2_extended;
  309. operator - (const x,y:Tvector3_single) result:Tvector3_single;
  310. operator - (const x,y:Tvector3_double) result:Tvector3_double;
  311. operator - (const x,y:Tvector3_extended) result:Tvector3_extended;
  312. operator - (const x,y:Tvector4_single) result:Tvector4_single;
  313. operator - (const x,y:Tvector4_double) result:Tvector4_double;
  314. operator - (const x,y:Tvector4_extended) result:Tvector4_extended;
  315. operator - (const x:Tvector2_single) result:Tvector2_single;
  316. operator - (const x:Tvector2_double) result:Tvector2_double;
  317. operator - (const x:Tvector2_extended) result:Tvector2_extended;
  318. operator - (const x:Tvector3_single) result:Tvector3_single;
  319. operator - (const x:Tvector3_double) result:Tvector3_double;
  320. operator - (const x:Tvector3_extended) result:Tvector3_extended;
  321. operator - (const x:Tvector4_single) result:Tvector4_single;
  322. operator - (const x:Tvector4_double) result:Tvector4_double;
  323. operator - (const x:Tvector4_extended) result:Tvector4_extended;
  324. operator * (const x,y:Tvector2_single) result:Tvector2_single;
  325. operator * (const x,y:Tvector2_double) result:Tvector2_double;
  326. operator * (const x,y:Tvector2_extended) result:Tvector2_extended;
  327. operator * (const x,y:Tvector3_single) result:Tvector3_single;
  328. operator * (const x,y:Tvector3_double) result:Tvector3_double;
  329. operator * (const x,y:Tvector3_extended) result:Tvector3_extended;
  330. operator * (const x,y:Tvector4_single) result:Tvector4_single;
  331. operator * (const x,y:Tvector4_double) result:Tvector4_double;
  332. operator * (const x,y:Tvector4_extended) result:Tvector4_extended;
  333. operator ** (const x,y:Tvector2_single) result:single;
  334. operator ** (const x,y:Tvector2_double) result:double;
  335. operator ** (const x,y:Tvector2_extended) result:extended;
  336. operator ** (const x,y:Tvector3_single) result:single;
  337. operator ** (const x,y:Tvector3_double) result:double;
  338. operator ** (const x,y:Tvector3_extended) result:extended;
  339. operator ** (const x,y:Tvector4_single) result:single;
  340. operator ** (const x,y:Tvector4_double) result:double;
  341. operator ** (const x,y:Tvector4_extended) result:extended;
  342. operator >< (const x,y:Tvector3_single) result:Tvector3_single;
  343. operator >< (const x,y:Tvector3_double) result:Tvector3_double;
  344. operator >< (const x,y:Tvector3_extended) result:Tvector3_extended;
  345. {Vector/scalar operations.}
  346. operator + (const x:Tvector2_single;y:single) result:Tvector2_single;
  347. operator + (const x:Tvector2_double;y:double) result:Tvector2_double;
  348. operator + (const x:Tvector2_extended;y:extended) result:Tvector2_extended;
  349. operator + (const x:Tvector3_single;y:single) result:Tvector3_single;
  350. operator + (const x:Tvector3_double;y:double) result:Tvector3_double;
  351. operator + (const x:Tvector3_extended;y:extended) result:Tvector3_extended;
  352. operator + (const x:Tvector4_single;y:single) result:Tvector4_single;
  353. operator + (const x:Tvector4_double;y:double) result:Tvector4_double;
  354. operator + (const x:Tvector4_extended;y:extended) result:Tvector4_extended;
  355. operator - (const x:Tvector2_single;y:single) result:Tvector2_single;
  356. operator - (const x:Tvector2_double;y:double) result:Tvector2_double;
  357. operator - (const x:Tvector2_extended;y:extended) result:Tvector2_extended;
  358. operator - (const x:Tvector3_single;y:single) result:Tvector3_single;
  359. operator - (const x:Tvector3_double;y:double) result:Tvector3_double;
  360. operator - (const x:Tvector3_extended;y:extended) result:Tvector3_extended;
  361. operator - (const x:Tvector4_single;y:single) result:Tvector4_single;
  362. operator - (const x:Tvector4_double;y:double) result:Tvector4_double;
  363. operator - (const x:Tvector4_extended;y:extended) result:Tvector4_extended;
  364. operator * (const x:Tvector2_single;y:single) result:Tvector2_single;
  365. operator * (const x:Tvector2_double;y:double) result:Tvector2_double;
  366. operator * (const x:Tvector2_extended;y:extended) result:Tvector2_extended;
  367. operator * (const x:Tvector3_single;y:single) result:Tvector3_single;
  368. operator * (const x:Tvector3_double;y:double) result:Tvector3_double;
  369. operator * (const x:Tvector3_extended;y:extended) result:Tvector3_extended;
  370. operator * (const x:Tvector4_single;y:single) result:Tvector4_single;
  371. operator * (const x:Tvector4_double;y:double) result:Tvector4_double;
  372. operator * (const x:Tvector4_extended;y:extended) result:Tvector4_extended;
  373. operator / (const x:Tvector2_single;y:single) result:Tvector2_single;
  374. operator / (const x:Tvector2_double;y:double) result:Tvector2_double;
  375. operator / (const x:Tvector2_extended;y:extended) result:Tvector2_extended;
  376. operator / (const x:Tvector3_single;y:single) result:Tvector3_single;
  377. operator / (const x:Tvector3_double;y:double) result:Tvector3_double;
  378. operator / (const x:Tvector3_extended;y:extended) result:Tvector3_extended;
  379. operator / (const x:Tvector4_single;y:single) result:Tvector4_single;
  380. operator / (const x:Tvector4_double;y:double) result:Tvector4_double;
  381. operator / (const x:Tvector4_extended;y:extended) result:Tvector4_extended;
  382. {Operators to make different matrixes assignable to each other}
  383. operator := (const v:Tmatrix2_single) result:Tmatrix2_double;
  384. operator := (const v:Tmatrix2_single) result:Tmatrix2_extended;
  385. operator := (const v:Tmatrix2_double) result:Tmatrix2_single;
  386. operator := (const v:Tmatrix2_double) result:Tmatrix2_extended;
  387. operator := (const v:Tmatrix2_extended) result:Tmatrix2_single;
  388. operator := (const v:Tmatrix2_extended) result:Tmatrix2_double;
  389. operator := (const v:Tmatrix2_single) result:Tmatrix3_single;
  390. operator := (const v:Tmatrix2_single) result:Tmatrix3_double;
  391. operator := (const v:Tmatrix2_single) result:Tmatrix3_extended;
  392. operator := (const v:Tmatrix2_double) result:Tmatrix3_single;
  393. operator := (const v:Tmatrix2_double) result:Tmatrix3_double;
  394. operator := (const v:Tmatrix2_double) result:Tmatrix3_extended;
  395. operator := (const v:Tmatrix2_extended) result:Tmatrix3_single;
  396. operator := (const v:Tmatrix2_extended) result:Tmatrix3_double;
  397. operator := (const v:Tmatrix2_extended) result:Tmatrix3_extended;
  398. operator := (const v:Tmatrix2_single) result:Tmatrix4_single;
  399. operator := (const v:Tmatrix2_single) result:Tmatrix4_double;
  400. operator := (const v:Tmatrix2_single) result:Tmatrix4_extended;
  401. operator := (const v:Tmatrix2_double) result:Tmatrix4_single;
  402. operator := (const v:Tmatrix2_double) result:Tmatrix4_double;
  403. operator := (const v:Tmatrix2_double) result:Tmatrix4_extended;
  404. operator := (const v:Tmatrix2_extended) result:Tmatrix4_single;
  405. operator := (const v:Tmatrix2_extended) result:Tmatrix4_double;
  406. operator := (const v:Tmatrix2_extended) result:Tmatrix4_extended;
  407. operator := (const v:Tmatrix3_single) result:Tmatrix2_single;
  408. operator := (const v:Tmatrix3_single) result:Tmatrix2_double;
  409. operator := (const v:Tmatrix3_single) result:Tmatrix2_extended;
  410. operator := (const v:Tmatrix3_double) result:Tmatrix2_single;
  411. operator := (const v:Tmatrix3_double) result:Tmatrix2_double;
  412. operator := (const v:Tmatrix3_double) result:Tmatrix2_extended;
  413. operator := (const v:Tmatrix3_extended) result:Tmatrix2_single;
  414. operator := (const v:Tmatrix3_extended) result:Tmatrix2_double;
  415. operator := (const v:Tmatrix3_extended) result:Tmatrix2_extended;
  416. operator := (const v:Tmatrix3_single) result:Tmatrix3_double;
  417. operator := (const v:Tmatrix3_single) result:Tmatrix3_extended;
  418. operator := (const v:Tmatrix3_double) result:Tmatrix3_single;
  419. operator := (const v:Tmatrix3_double) result:Tmatrix3_extended;
  420. operator := (const v:Tmatrix3_extended) result:Tmatrix3_single;
  421. operator := (const v:Tmatrix3_extended) result:Tmatrix3_double;
  422. operator := (const v:Tmatrix3_single) result:Tmatrix4_single;
  423. operator := (const v:Tmatrix3_single) result:Tmatrix4_double;
  424. operator := (const v:Tmatrix3_single) result:Tmatrix4_extended;
  425. operator := (const v:Tmatrix3_double) result:Tmatrix4_single;
  426. operator := (const v:Tmatrix3_double) result:Tmatrix4_double;
  427. operator := (const v:Tmatrix3_double) result:Tmatrix4_extended;
  428. operator := (const v:Tmatrix3_extended) result:Tmatrix4_single;
  429. operator := (const v:Tmatrix3_extended) result:Tmatrix4_double;
  430. operator := (const v:Tmatrix3_extended) result:Tmatrix4_extended;
  431. operator := (const v:Tmatrix4_single) result:Tmatrix2_single;
  432. operator := (const v:Tmatrix4_single) result:Tmatrix2_double;
  433. operator := (const v:Tmatrix4_single) result:Tmatrix2_extended;
  434. operator := (const v:Tmatrix4_double) result:Tmatrix2_single;
  435. operator := (const v:Tmatrix4_double) result:Tmatrix2_double;
  436. operator := (const v:Tmatrix4_double) result:Tmatrix2_extended;
  437. operator := (const v:Tmatrix4_extended) result:Tmatrix2_single;
  438. operator := (const v:Tmatrix4_extended) result:Tmatrix2_double;
  439. operator := (const v:Tmatrix4_extended) result:Tmatrix2_extended;
  440. operator := (const v:Tmatrix4_single) result:Tmatrix3_single;
  441. operator := (const v:Tmatrix4_single) result:Tmatrix3_double;
  442. operator := (const v:Tmatrix4_single) result:Tmatrix3_extended;
  443. operator := (const v:Tmatrix4_double) result:Tmatrix3_single;
  444. operator := (const v:Tmatrix4_double) result:Tmatrix3_double;
  445. operator := (const v:Tmatrix4_double) result:Tmatrix3_extended;
  446. operator := (const v:Tmatrix4_extended) result:Tmatrix3_single;
  447. operator := (const v:Tmatrix4_extended) result:Tmatrix3_double;
  448. operator := (const v:Tmatrix4_extended) result:Tmatrix3_extended;
  449. operator := (const v:Tmatrix4_single) result:Tmatrix4_double;
  450. operator := (const v:Tmatrix4_single) result:Tmatrix4_extended;
  451. operator := (const v:Tmatrix4_double) result:Tmatrix4_single;
  452. operator := (const v:Tmatrix4_double) result:Tmatrix4_extended;
  453. operator := (const v:Tmatrix4_extended) result:Tmatrix4_single;
  454. operator := (const v:Tmatrix4_extended) result:Tmatrix4_double;
  455. {Matrix to matrix operatons.}
  456. operator + (const m1,m2:Tmatrix2_single) result:Tmatrix2_single;
  457. operator + (const m1,m2:Tmatrix2_double) result:Tmatrix2_double;
  458. operator + (const m1,m2:Tmatrix2_extended) result:Tmatrix2_extended;
  459. operator + (const m1,m2:Tmatrix3_single) result:Tmatrix3_single;
  460. operator + (const m1,m2:Tmatrix3_double) result:Tmatrix3_double;
  461. operator + (const m1,m2:Tmatrix3_extended) result:Tmatrix3_extended;
  462. operator + (const m1,m2:Tmatrix4_single) result:Tmatrix4_single;
  463. operator + (const m1,m2:Tmatrix4_double) result:Tmatrix4_double;
  464. operator + (const m1,m2:Tmatrix4_extended) result:Tmatrix4_extended;
  465. operator - (const m1,m2:Tmatrix2_single) result:Tmatrix2_single;
  466. operator - (const m1,m2:Tmatrix2_double) result:Tmatrix2_double;
  467. operator - (const m1,m2:Tmatrix2_extended) result:Tmatrix2_extended;
  468. operator - (const m1,m2:Tmatrix3_single) result:Tmatrix3_single;
  469. operator - (const m1,m2:Tmatrix3_double) result:Tmatrix3_double;
  470. operator - (const m1,m2:Tmatrix3_extended) result:Tmatrix3_extended;
  471. operator - (const m1,m2:Tmatrix4_single) result:Tmatrix4_single;
  472. operator - (const m1,m2:Tmatrix4_double) result:Tmatrix4_double;
  473. operator - (const m1,m2:Tmatrix4_extended) result:Tmatrix4_extended;
  474. operator - (const m1:Tmatrix2_single) result:Tmatrix2_single;
  475. operator - (const m1:Tmatrix2_double) result:Tmatrix2_double;
  476. operator - (const m1:Tmatrix2_extended) result:Tmatrix2_extended;
  477. operator - (const m1:Tmatrix3_single) result:Tmatrix3_single;
  478. operator - (const m1:Tmatrix3_double) result:Tmatrix3_double;
  479. operator - (const m1:Tmatrix3_extended) result:Tmatrix3_extended;
  480. operator - (const m1:Tmatrix4_single) result:Tmatrix4_single;
  481. operator - (const m1:Tmatrix4_double) result:Tmatrix4_double;
  482. operator - (const m1:Tmatrix4_extended) result:Tmatrix4_extended;
  483. operator * (const m1,m2:Tmatrix2_single) result:Tmatrix2_single;
  484. operator * (const m1,m2:Tmatrix2_double) result:Tmatrix2_double;
  485. operator * (const m1,m2:Tmatrix2_extended) result:Tmatrix2_extended;
  486. operator * (const m1,m2:Tmatrix3_single) result:Tmatrix3_single;
  487. operator * (const m1,m2:Tmatrix3_double) result:Tmatrix3_double;
  488. operator * (const m1,m2:Tmatrix3_extended) result:Tmatrix3_extended;
  489. operator * (const m1,m2:Tmatrix4_single) result:Tmatrix4_single;
  490. operator * (const m1,m2:Tmatrix4_double) result:Tmatrix4_double;
  491. operator * (const m1,m2:Tmatrix4_extended) result:Tmatrix4_extended;
  492. {Matrix/vector operations}
  493. operator * (const m:Tmatrix2_single;const v:Tvector2_single) result:Tvector2_single;
  494. operator * (const m:Tmatrix2_double;const v:Tvector2_double) result:Tvector2_double;
  495. operator * (const m:Tmatrix2_extended;const v:Tvector2_extended) result:Tvector2_extended;
  496. operator * (const m:Tmatrix3_single;const v:Tvector3_single) result:Tvector3_single;
  497. operator * (const m:Tmatrix3_double;const v:Tvector3_double) result:Tvector3_double;
  498. operator * (const m:Tmatrix3_extended;const v:Tvector3_extended) result:Tvector3_extended;
  499. operator * (const m:Tmatrix4_single;const v:Tvector4_single) result:Tvector4_single;
  500. operator * (const m:Tmatrix4_double;const v:Tvector4_double) result:Tvector4_double;
  501. operator * (const m:Tmatrix4_extended;const v:Tvector4_extended) result:Tvector4_extended;
  502. {Matrix/scalar operations}
  503. operator + (const m:Tmatrix2_single;const x:single) result:Tmatrix2_single;
  504. operator + (const m:Tmatrix2_double;const x:double) result:Tmatrix2_double;
  505. operator + (const m:Tmatrix2_extended;const x:extended) result:Tmatrix2_extended;
  506. operator + (const m:Tmatrix3_single;const x:single) result:Tmatrix3_single;
  507. operator + (const m:Tmatrix3_double;const x:double) result:Tmatrix3_double;
  508. operator + (const m:Tmatrix3_extended;const x:extended) result:Tmatrix3_extended;
  509. operator + (const m:Tmatrix4_single;const x:single) result:Tmatrix4_single;
  510. operator + (const m:Tmatrix4_double;const x:double) result:Tmatrix4_double;
  511. operator + (const m:Tmatrix4_extended;const x:extended) result:Tmatrix4_extended;
  512. operator - (const m:Tmatrix2_single;const x:single) result:Tmatrix2_single;
  513. operator - (const m:Tmatrix2_double;const x:double) result:Tmatrix2_double;
  514. operator - (const m:Tmatrix2_extended;const x:extended) result:Tmatrix2_extended;
  515. operator - (const m:Tmatrix3_single;const x:single) result:Tmatrix3_single;
  516. operator - (const m:Tmatrix3_double;const x:double) result:Tmatrix3_double;
  517. operator - (const m:Tmatrix3_extended;const x:extended) result:Tmatrix3_extended;
  518. operator - (const m:Tmatrix4_single;const x:single) result:Tmatrix4_single;
  519. operator - (const m:Tmatrix4_double;const x:double) result:Tmatrix4_double;
  520. operator - (const m:Tmatrix4_extended;const x:extended) result:Tmatrix4_extended;
  521. operator * (const m:Tmatrix2_single;const x:single) result:Tmatrix2_single;
  522. operator * (const m:Tmatrix2_double;const x:double) result:Tmatrix2_double;
  523. operator * (const m:Tmatrix2_extended;const x:extended) result:Tmatrix2_extended;
  524. operator * (const m:Tmatrix3_single;const x:single) result:Tmatrix3_single;
  525. operator * (const m:Tmatrix3_double;const x:double) result:Tmatrix3_double;
  526. operator * (const m:Tmatrix3_extended;const x:extended) result:Tmatrix3_extended;
  527. operator * (const m:Tmatrix4_single;const x:single) result:Tmatrix4_single;
  528. operator * (const m:Tmatrix4_double;const x:double) result:Tmatrix4_double;
  529. operator * (const m:Tmatrix4_extended;const x:extended) result:Tmatrix4_extended;
  530. operator / (const m:Tmatrix2_single;const x:single) result:Tmatrix2_single;
  531. operator / (const m:Tmatrix2_double;const x:double) result:Tmatrix2_double;
  532. operator / (const m:Tmatrix2_extended;const x:extended) result:Tmatrix2_extended;
  533. operator / (const m:Tmatrix3_single;const x:single) result:Tmatrix3_single;
  534. operator / (const m:Tmatrix3_double;const x:double) result:Tmatrix3_double;
  535. operator / (const m:Tmatrix3_extended;const x:extended) result:Tmatrix3_extended;
  536. operator / (const m:Tmatrix4_single;const x:single) result:Tmatrix4_single;
  537. operator / (const m:Tmatrix4_double;const x:double) result:Tmatrix4_double;
  538. operator / (const m:Tmatrix4_extended;const x:extended) result:Tmatrix4_extended;
  539. {*****************************************************************************}
  540. implementation
  541. {*****************************************************************************}
  542. {******************************************************************************
  543. Tvector2_single
  544. ******************************************************************************}
  545. {Need to use capitals due to bug in FPC. Bug was fixed in FPC 1.9.3 on
  546. 10 Feb. 2004}
  547. {$DEFINE datatype:=SINGLE}
  548. {$DEFINE objectname:=Tvector2_single}
  549. {$DEFINE vecsize:=2}
  550. {$INFO Compile mvecimp.inc for Tvector2_single}
  551. {$i mvecimp.inc}
  552. {******************************************************************************
  553. Tvector2_double
  554. ******************************************************************************}
  555. {$DEFINE datatype:=DOUBLE}
  556. {$DEFINE objectname:=Tvector2_double}
  557. {$DEFINE vecsize:=2}
  558. {$INFO Compile mvecimp.inc for Tvector2_double}
  559. {$i mvecimp.inc}
  560. {******************************************************************************
  561. Tvector2_extended
  562. ******************************************************************************}
  563. {$DEFINE datatype:=EXTENDED}
  564. {$DEFINE objectname:=Tvector2_extended}
  565. {$DEFINE vecsize:=2}
  566. {$INFO Compile mvecimp.inc for Tvector2_extended}
  567. {$i mvecimp.inc}
  568. {******************************************************************************
  569. Tvector3_single
  570. ******************************************************************************}
  571. {Need to use capitals due to bug in FPC. Bug was fixed in FPC 1.9.3 on
  572. 10 Feb. 2004}
  573. {$DEFINE datatype:=SINGLE}
  574. {$DEFINE objectname:=Tvector3_single}
  575. {$DEFINE vecsize:=3}
  576. {$INFO Compile mvecimp.inc for Tvector3_single}
  577. {$i mvecimp.inc}
  578. {******************************************************************************
  579. Tvector3_double
  580. ******************************************************************************}
  581. {$DEFINE datatype:=DOUBLE}
  582. {$DEFINE objectname:=Tvector3_double}
  583. {$DEFINE vecsize:=3}
  584. {$INFO Compile mvecimp.inc for Tvector3_double}
  585. {$i mvecimp.inc}
  586. {******************************************************************************
  587. Tvector3_extended
  588. ******************************************************************************}
  589. {$DEFINE datatype:=EXTENDED}
  590. {$DEFINE objectname:=Tvector3_extended}
  591. {$DEFINE vecsize:=3}
  592. {$INFO Compile mvecimp.inc for Tvector3_extended}
  593. {$i mvecimp.inc}
  594. {******************************************************************************
  595. Tvector4_single
  596. ******************************************************************************}
  597. {Need to use capitals due to bug in FPC. Bug was fixed in FPC 1.9.3 on
  598. 10 Feb. 2004}
  599. {$DEFINE datatype:=SINGLE}
  600. {$DEFINE objectname:=Tvector4_single}
  601. {$DEFINE vecsize:=4}
  602. {$INFO Compile mvecimp.inc for Tvector4_single}
  603. {$i mvecimp.inc}
  604. {******************************************************************************
  605. Tvector4_double
  606. ******************************************************************************}
  607. {$DEFINE datatype:=DOUBLE}
  608. {$DEFINE objectname:=Tvector4_double}
  609. {$DEFINE vecsize:=4}
  610. {$INFO Compile mvecimp.inc for Tvector4_double}
  611. {$i mvecimp.inc}
  612. {******************************************************************************
  613. Tvector4_extended
  614. ******************************************************************************}
  615. {$DEFINE datatype:=EXTENDED}
  616. {$DEFINE objectname:=Tvector4_extended}
  617. {$DEFINE vecsize:=4}
  618. {$INFO Compile mvecimp.inc for Tvector4_extended}
  619. {$i mvecimp.inc}
  620. {******************************************************************************
  621. Tmatrix2_single
  622. ******************************************************************************}
  623. {$DEFINE datatype:=SINGLE}
  624. {$DEFINE objectname:=Tmatrix2_single}
  625. {$DEFINE vectorcompanion:=Tvector2_single}
  626. {$DEFINE matsize:=2}
  627. {$INFO Compile mmatimp.inc for Tmatrix2_single}
  628. {$i mmatimp.inc}
  629. {******************************************************************************
  630. Tmatrix2_double
  631. ******************************************************************************}
  632. {$DEFINE datatype:=DOUBLE}
  633. {$DEFINE objectname:=Tmatrix2_double}
  634. {$DEFINE vectorcompanion:=Tvector2_double}
  635. {$DEFINE matsize:=2}
  636. {$INFO Compile mmatimp.inc for Tmatrix2_double}
  637. {$i mmatimp.inc}
  638. {******************************************************************************
  639. Tmatrix2_extended
  640. ******************************************************************************}
  641. {$DEFINE datatype:=EXTENDED}
  642. {$DEFINE objectname:=Tmatrix2_extended}
  643. {$DEFINE vectorcompanion:=Tvector2_extended}
  644. {$DEFINE matsize:=2}
  645. {$INFO Compile mmatimp.inc for Tmatrix2_extended}
  646. {$i mmatimp.inc}
  647. {******************************************************************************
  648. Tmatrix3_single
  649. ******************************************************************************}
  650. {$DEFINE datatype:=SINGLE}
  651. {$DEFINE objectname:=Tmatrix3_single}
  652. {$DEFINE vectorcompanion:=Tvector3_single}
  653. {$DEFINE matsize:=3}
  654. {$INFO Compile mmatimp.inc for Tmatrix3_single}
  655. {$i mmatimp.inc}
  656. {******************************************************************************
  657. Tmatrix3_double
  658. ******************************************************************************}
  659. {$DEFINE datatype:=DOUBLE}
  660. {$DEFINE objectname:=Tmatrix3_double}
  661. {$DEFINE vectorcompanion:=Tvector3_double}
  662. {$DEFINE matsize:=3}
  663. {$INFO Compile mmatimp.inc for Tmatrix3_double}
  664. {$i mmatimp.inc}
  665. {******************************************************************************
  666. Tmatrix3_extended
  667. ******************************************************************************}
  668. {$DEFINE datatype:=EXTENDED}
  669. {$DEFINE objectname:=Tmatrix3_extended}
  670. {$DEFINE vectorcompanion:=Tvector3_extended}
  671. {$DEFINE matsize:=3}
  672. {$INFO Compile mmatimp.inc for Tmatrix3_extended}
  673. {$i mmatimp.inc}
  674. {******************************************************************************
  675. Tmatrix4_single
  676. ******************************************************************************}
  677. {$DEFINE datatype:=SINGLE}
  678. {$DEFINE objectname:=Tmatrix4_single}
  679. {$DEFINE vectorcompanion:=Tvector4_single}
  680. {$DEFINE matsize:=4}
  681. {$INFO Compile mmatimp.inc for Tmatrix4_single}
  682. {$i mmatimp.inc}
  683. {******************************************************************************
  684. Tmatrix4_double
  685. ******************************************************************************}
  686. {$DEFINE datatype:=DOUBLE}
  687. {$DEFINE objectname:=Tmatrix4_double}
  688. {$DEFINE vectorcompanion:=Tvector4_double}
  689. {$DEFINE matsize:=4}
  690. {$INFO Compile mmatimp.inc for Tmatrix4_double}
  691. {$i mmatimp.inc}
  692. {******************************************************************************
  693. Tmatrix4_extended
  694. ******************************************************************************}
  695. {$DEFINE datatype:=EXTENDED}
  696. {$DEFINE objectname:=Tmatrix4_extended}
  697. {$DEFINE vectorcompanion:=Tvector4_extended}
  698. {$DEFINE matsize:=4}
  699. {$INFO Compile mmatimp.inc for Tmatrix4_extended}
  700. {$i mmatimp.inc}
  701. end.