Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2243 lines
53 KiB

  1. /*
  2. File: QD3DMath.h
  3. Contains: Math & matrix routines and definitions.
  4. Version: Technology: Quickdraw 3D 1.6
  5. Release: QuickTime 7.3
  6. Copyright: (c) 2007 (c) 1995-1998 by Apple Computer, Inc., all rights reserved.
  7. Bugs?: For bug reports, consult the following page on
  8. the World Wide Web:
  9. http://developer.apple.com/bugreporter/
  10. */
  11. #ifndef __QD3DMATH__
  12. #define __QD3DMATH__
  13. #ifndef __QD3D__
  14. #include <QD3D.h>
  15. #endif
  16. #include <float.h>
  17. #if PRAGMA_ONCE
  18. #pragma once
  19. #endif
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #if PRAGMA_IMPORT
  24. #pragma import on
  25. #endif
  26. #if PRAGMA_STRUCT_ALIGN
  27. #pragma options align=power
  28. #elif PRAGMA_STRUCT_PACKPUSH
  29. #pragma pack(push, 2)
  30. #elif PRAGMA_STRUCT_PACK
  31. #pragma pack(2)
  32. #endif
  33. #if PRAGMA_ENUM_ALWAYSINT
  34. #if defined(__fourbyteints__) && !__fourbyteints__
  35. #define __QD3DMATH__RESTORE_TWOBYTEINTS
  36. #pragma fourbyteints on
  37. #endif
  38. #pragma enumsalwaysint on
  39. #elif PRAGMA_ENUM_OPTIONS
  40. #pragma option enum=int
  41. #elif PRAGMA_ENUM_PACK
  42. #if __option(pack_enums)
  43. #define __QD3DMATH__RESTORE_PACKED_ENUMS
  44. #pragma options(!pack_enums)
  45. #endif
  46. #endif
  47. /******************************************************************************
  48. ** **
  49. ** Constant Definitions **
  50. ** **
  51. *****************************************************************************/
  52. /*
  53. * Real zero definition
  54. */
  55. #ifdef FLT_EPSILON
  56. #define kQ3RealZero (FLT_EPSILON)
  57. #else
  58. #define kQ3RealZero ((float)1.19209290e-07)
  59. #endif
  60. #ifdef FLT_MAX
  61. #define kQ3MaxFloat (FLT_MAX)
  62. #else
  63. #define kQ3MaxFloat ((float)3.40282347e+38)
  64. #endif
  65. /*
  66. * Values of PI
  67. */
  68. #define kQ3Pi ((float)3.1415926535898)
  69. #define kQ32Pi ((float)(2.0 * 3.1415926535898))
  70. #define kQ3PiOver2 ((float)(3.1415926535898 / 2.0))
  71. #define kQ33PiOver2 ((float)(3.0 * 3.1415926535898 / 2.0))
  72. /******************************************************************************
  73. ** **
  74. ** Miscellaneous Functions **
  75. ** **
  76. *****************************************************************************/
  77. #define Q3Math_DegreesToRadians(x) ((float)((x) * kQ3Pi / 180.0f))
  78. #define Q3Math_RadiansToDegrees(x) ((float)((x) * 180.0f / kQ3Pi))
  79. #define Q3Math_Min(x,y) ((x) <= (y) ? (x) : (y))
  80. #define Q3Math_Max(x,y) ((x) >= (y) ? (x) : (y))
  81. /******************************************************************************
  82. ** **
  83. ** Point and Vector Creation **
  84. ** **
  85. *****************************************************************************/
  86. #if CALL_NOT_IN_CARBON
  87. /*
  88. * Q3Point2D_Set()
  89. *
  90. * Availability:
  91. * Non-Carbon CFM: not available
  92. * CarbonLib: not available
  93. * Mac OS X: not available
  94. */
  95. EXTERN_API_C( TQ3Point2D * )
  96. Q3Point2D_Set(
  97. TQ3Point2D * point2D,
  98. float x,
  99. float y);
  100. /*
  101. * Q3Param2D_Set()
  102. *
  103. * Availability:
  104. * Non-Carbon CFM: not available
  105. * CarbonLib: not available
  106. * Mac OS X: not available
  107. */
  108. EXTERN_API_C( TQ3Param2D * )
  109. Q3Param2D_Set(
  110. TQ3Param2D * param2D,
  111. float u,
  112. float v);
  113. /*
  114. * Q3Point3D_Set()
  115. *
  116. * Availability:
  117. * Non-Carbon CFM: not available
  118. * CarbonLib: not available
  119. * Mac OS X: not available
  120. */
  121. EXTERN_API_C( TQ3Point3D * )
  122. Q3Point3D_Set(
  123. TQ3Point3D * point3D,
  124. float x,
  125. float y,
  126. float z);
  127. /*
  128. * Q3RationalPoint3D_Set()
  129. *
  130. * Availability:
  131. * Non-Carbon CFM: not available
  132. * CarbonLib: not available
  133. * Mac OS X: not available
  134. */
  135. EXTERN_API_C( TQ3RationalPoint3D * )
  136. Q3RationalPoint3D_Set(
  137. TQ3RationalPoint3D * point3D,
  138. float x,
  139. float y,
  140. float w);
  141. /*
  142. * Q3RationalPoint4D_Set()
  143. *
  144. * Availability:
  145. * Non-Carbon CFM: not available
  146. * CarbonLib: not available
  147. * Mac OS X: not available
  148. */
  149. EXTERN_API_C( TQ3RationalPoint4D * )
  150. Q3RationalPoint4D_Set(
  151. TQ3RationalPoint4D * point4D,
  152. float x,
  153. float y,
  154. float z,
  155. float w);
  156. /*
  157. * Q3Vector2D_Set()
  158. *
  159. * Availability:
  160. * Non-Carbon CFM: not available
  161. * CarbonLib: not available
  162. * Mac OS X: not available
  163. */
  164. EXTERN_API_C( TQ3Vector2D * )
  165. Q3Vector2D_Set(
  166. TQ3Vector2D * vector2D,
  167. float x,
  168. float y);
  169. /*
  170. * Q3Vector3D_Set()
  171. *
  172. * Availability:
  173. * Non-Carbon CFM: not available
  174. * CarbonLib: not available
  175. * Mac OS X: not available
  176. */
  177. EXTERN_API_C( TQ3Vector3D * )
  178. Q3Vector3D_Set(
  179. TQ3Vector3D * vector3D,
  180. float x,
  181. float y,
  182. float z);
  183. /*
  184. * Q3PolarPoint_Set()
  185. *
  186. * Availability:
  187. * Non-Carbon CFM: not available
  188. * CarbonLib: not available
  189. * Mac OS X: not available
  190. */
  191. EXTERN_API_C( TQ3PolarPoint * )
  192. Q3PolarPoint_Set(
  193. TQ3PolarPoint * polarPoint,
  194. float r,
  195. float theta);
  196. /*
  197. * Q3SphericalPoint_Set()
  198. *
  199. * Availability:
  200. * Non-Carbon CFM: not available
  201. * CarbonLib: not available
  202. * Mac OS X: not available
  203. */
  204. EXTERN_API_C( TQ3SphericalPoint * )
  205. Q3SphericalPoint_Set(
  206. TQ3SphericalPoint * sphericalPoint,
  207. float rho,
  208. float theta,
  209. float phi);
  210. /******************************************************************************
  211. ** **
  212. ** Point and Vector Dimension Conversion **
  213. ** **
  214. *****************************************************************************/
  215. /*
  216. * Q3Point2D_To3D()
  217. *
  218. * Availability:
  219. * Non-Carbon CFM: not available
  220. * CarbonLib: not available
  221. * Mac OS X: not available
  222. */
  223. EXTERN_API_C( TQ3Point3D * )
  224. Q3Point2D_To3D(
  225. const TQ3Point2D * point2D,
  226. TQ3Point3D * result);
  227. /*
  228. * Q3RationalPoint3D_To2D()
  229. *
  230. * Availability:
  231. * Non-Carbon CFM: not available
  232. * CarbonLib: not available
  233. * Mac OS X: not available
  234. */
  235. EXTERN_API_C( TQ3Point2D * )
  236. Q3RationalPoint3D_To2D(
  237. const TQ3RationalPoint3D * point3D,
  238. TQ3Point2D * result);
  239. /*
  240. * Q3Point3D_To4D()
  241. *
  242. * Availability:
  243. * Non-Carbon CFM: not available
  244. * CarbonLib: not available
  245. * Mac OS X: not available
  246. */
  247. EXTERN_API_C( TQ3RationalPoint4D * )
  248. Q3Point3D_To4D(
  249. const TQ3Point3D * point3D,
  250. TQ3RationalPoint4D * result);
  251. /*
  252. * Q3RationalPoint4D_To3D()
  253. *
  254. * Availability:
  255. * Non-Carbon CFM: not available
  256. * CarbonLib: not available
  257. * Mac OS X: not available
  258. */
  259. EXTERN_API_C( TQ3Point3D * )
  260. Q3RationalPoint4D_To3D(
  261. const TQ3RationalPoint4D * point4D,
  262. TQ3Point3D * result);
  263. /*
  264. * Q3Vector2D_To3D()
  265. *
  266. * Availability:
  267. * Non-Carbon CFM: not available
  268. * CarbonLib: not available
  269. * Mac OS X: not available
  270. */
  271. EXTERN_API_C( TQ3Vector3D * )
  272. Q3Vector2D_To3D(
  273. const TQ3Vector2D * vector2D,
  274. TQ3Vector3D * result);
  275. /*
  276. * Q3Vector3D_To2D()
  277. *
  278. * Availability:
  279. * Non-Carbon CFM: not available
  280. * CarbonLib: not available
  281. * Mac OS X: not available
  282. */
  283. EXTERN_API_C( TQ3Vector2D * )
  284. Q3Vector3D_To2D(
  285. const TQ3Vector3D * vector3D,
  286. TQ3Vector2D * result);
  287. /******************************************************************************
  288. ** **
  289. ** Point Subtraction **
  290. ** **
  291. *****************************************************************************/
  292. /*
  293. * Q3Point2D_Subtract()
  294. *
  295. * Availability:
  296. * Non-Carbon CFM: not available
  297. * CarbonLib: not available
  298. * Mac OS X: not available
  299. */
  300. EXTERN_API_C( TQ3Vector2D * )
  301. Q3Point2D_Subtract(
  302. const TQ3Point2D * p1,
  303. const TQ3Point2D * p2,
  304. TQ3Vector2D * result);
  305. /*
  306. * Q3Param2D_Subtract()
  307. *
  308. * Availability:
  309. * Non-Carbon CFM: not available
  310. * CarbonLib: not available
  311. * Mac OS X: not available
  312. */
  313. EXTERN_API_C( TQ3Vector2D * )
  314. Q3Param2D_Subtract(
  315. const TQ3Param2D * p1,
  316. const TQ3Param2D * p2,
  317. TQ3Vector2D * result);
  318. /*
  319. * Q3Point3D_Subtract()
  320. *
  321. * Availability:
  322. * Non-Carbon CFM: not available
  323. * CarbonLib: not available
  324. * Mac OS X: not available
  325. */
  326. EXTERN_API_C( TQ3Vector3D * )
  327. Q3Point3D_Subtract(
  328. const TQ3Point3D * p1,
  329. const TQ3Point3D * p2,
  330. TQ3Vector3D * result);
  331. /******************************************************************************
  332. ** **
  333. ** Point Distance **
  334. ** **
  335. *****************************************************************************/
  336. /*
  337. * Q3Point2D_Distance()
  338. *
  339. * Availability:
  340. * Non-Carbon CFM: not available
  341. * CarbonLib: not available
  342. * Mac OS X: not available
  343. */
  344. EXTERN_API_C( float )
  345. Q3Point2D_Distance(
  346. const TQ3Point2D * p1,
  347. const TQ3Point2D * p2);
  348. /*
  349. * Q3Point2D_DistanceSquared()
  350. *
  351. * Availability:
  352. * Non-Carbon CFM: not available
  353. * CarbonLib: not available
  354. * Mac OS X: not available
  355. */
  356. EXTERN_API_C( float )
  357. Q3Point2D_DistanceSquared(
  358. const TQ3Point2D * p1,
  359. const TQ3Point2D * p2);
  360. /*
  361. * Q3Param2D_Distance()
  362. *
  363. * Availability:
  364. * Non-Carbon CFM: not available
  365. * CarbonLib: not available
  366. * Mac OS X: not available
  367. */
  368. EXTERN_API_C( float )
  369. Q3Param2D_Distance(
  370. const TQ3Param2D * p1,
  371. const TQ3Param2D * p2);
  372. /*
  373. * Q3Param2D_DistanceSquared()
  374. *
  375. * Availability:
  376. * Non-Carbon CFM: not available
  377. * CarbonLib: not available
  378. * Mac OS X: not available
  379. */
  380. EXTERN_API_C( float )
  381. Q3Param2D_DistanceSquared(
  382. const TQ3Param2D * p1,
  383. const TQ3Param2D * p2);
  384. /*
  385. * Q3RationalPoint3D_Distance()
  386. *
  387. * Availability:
  388. * Non-Carbon CFM: not available
  389. * CarbonLib: not available
  390. * Mac OS X: not available
  391. */
  392. EXTERN_API_C( float )
  393. Q3RationalPoint3D_Distance(
  394. const TQ3RationalPoint3D * p1,
  395. const TQ3RationalPoint3D * p2);
  396. /*
  397. * Q3RationalPoint3D_DistanceSquared()
  398. *
  399. * Availability:
  400. * Non-Carbon CFM: not available
  401. * CarbonLib: not available
  402. * Mac OS X: not available
  403. */
  404. EXTERN_API_C( float )
  405. Q3RationalPoint3D_DistanceSquared(
  406. const TQ3RationalPoint3D * p1,
  407. const TQ3RationalPoint3D * p2);
  408. /*
  409. * Q3Point3D_Distance()
  410. *
  411. * Availability:
  412. * Non-Carbon CFM: not available
  413. * CarbonLib: not available
  414. * Mac OS X: not available
  415. */
  416. EXTERN_API_C( float )
  417. Q3Point3D_Distance(
  418. const TQ3Point3D * p1,
  419. const TQ3Point3D * p2);
  420. /*
  421. * Q3Point3D_DistanceSquared()
  422. *
  423. * Availability:
  424. * Non-Carbon CFM: not available
  425. * CarbonLib: not available
  426. * Mac OS X: not available
  427. */
  428. EXTERN_API_C( float )
  429. Q3Point3D_DistanceSquared(
  430. const TQ3Point3D * p1,
  431. const TQ3Point3D * p2);
  432. /*
  433. * Q3RationalPoint4D_Distance()
  434. *
  435. * Availability:
  436. * Non-Carbon CFM: not available
  437. * CarbonLib: not available
  438. * Mac OS X: not available
  439. */
  440. EXTERN_API_C( float )
  441. Q3RationalPoint4D_Distance(
  442. const TQ3RationalPoint4D * p1,
  443. const TQ3RationalPoint4D * p2);
  444. /*
  445. * Q3RationalPoint4D_DistanceSquared()
  446. *
  447. * Availability:
  448. * Non-Carbon CFM: not available
  449. * CarbonLib: not available
  450. * Mac OS X: not available
  451. */
  452. EXTERN_API_C( float )
  453. Q3RationalPoint4D_DistanceSquared(
  454. const TQ3RationalPoint4D * p1,
  455. const TQ3RationalPoint4D * p2);
  456. /******************************************************************************
  457. ** **
  458. ** Point Relative Ratio **
  459. ** **
  460. *****************************************************************************/
  461. /*
  462. * Q3Point2D_RRatio()
  463. *
  464. * Availability:
  465. * Non-Carbon CFM: not available
  466. * CarbonLib: not available
  467. * Mac OS X: not available
  468. */
  469. EXTERN_API_C( TQ3Point2D * )
  470. Q3Point2D_RRatio(
  471. const TQ3Point2D * p1,
  472. const TQ3Point2D * p2,
  473. float r1,
  474. float r2,
  475. TQ3Point2D * result);
  476. /*
  477. * Q3Param2D_RRatio()
  478. *
  479. * Availability:
  480. * Non-Carbon CFM: not available
  481. * CarbonLib: not available
  482. * Mac OS X: not available
  483. */
  484. EXTERN_API_C( TQ3Param2D * )
  485. Q3Param2D_RRatio(
  486. const TQ3Param2D * p1,
  487. const TQ3Param2D * p2,
  488. float r1,
  489. float r2,
  490. TQ3Param2D * result);
  491. /*
  492. * Q3Point3D_RRatio()
  493. *
  494. * Availability:
  495. * Non-Carbon CFM: not available
  496. * CarbonLib: not available
  497. * Mac OS X: not available
  498. */
  499. EXTERN_API_C( TQ3Point3D * )
  500. Q3Point3D_RRatio(
  501. const TQ3Point3D * p1,
  502. const TQ3Point3D * p2,
  503. float r1,
  504. float r2,
  505. TQ3Point3D * result);
  506. /*
  507. * Q3RationalPoint4D_RRatio()
  508. *
  509. * Availability:
  510. * Non-Carbon CFM: not available
  511. * CarbonLib: not available
  512. * Mac OS X: not available
  513. */
  514. EXTERN_API_C( TQ3RationalPoint4D * )
  515. Q3RationalPoint4D_RRatio(
  516. const TQ3RationalPoint4D * p1,
  517. const TQ3RationalPoint4D * p2,
  518. float r1,
  519. float r2,
  520. TQ3RationalPoint4D * result);
  521. /******************************************************************************
  522. ** **
  523. ** Point / Vector Addition & Subtraction **
  524. ** **
  525. *****************************************************************************/
  526. /*
  527. * Q3Point2D_Vector2D_Add()
  528. *
  529. * Availability:
  530. * Non-Carbon CFM: not available
  531. * CarbonLib: not available
  532. * Mac OS X: not available
  533. */
  534. EXTERN_API_C( TQ3Point2D * )
  535. Q3Point2D_Vector2D_Add(
  536. const TQ3Point2D * point2D,
  537. const TQ3Vector2D * vector2D,
  538. TQ3Point2D * result);
  539. /*
  540. * Q3Param2D_Vector2D_Add()
  541. *
  542. * Availability:
  543. * Non-Carbon CFM: not available
  544. * CarbonLib: not available
  545. * Mac OS X: not available
  546. */
  547. EXTERN_API_C( TQ3Param2D * )
  548. Q3Param2D_Vector2D_Add(
  549. const TQ3Param2D * param2D,
  550. const TQ3Vector2D * vector2D,
  551. TQ3Param2D * result);
  552. /*
  553. * Q3Point3D_Vector3D_Add()
  554. *
  555. * Availability:
  556. * Non-Carbon CFM: not available
  557. * CarbonLib: not available
  558. * Mac OS X: not available
  559. */
  560. EXTERN_API_C( TQ3Point3D * )
  561. Q3Point3D_Vector3D_Add(
  562. const TQ3Point3D * point3D,
  563. const TQ3Vector3D * vector3D,
  564. TQ3Point3D * result);
  565. /*
  566. * Q3Point2D_Vector2D_Subtract()
  567. *
  568. * Availability:
  569. * Non-Carbon CFM: not available
  570. * CarbonLib: not available
  571. * Mac OS X: not available
  572. */
  573. EXTERN_API_C( TQ3Point2D * )
  574. Q3Point2D_Vector2D_Subtract(
  575. const TQ3Point2D * point2D,
  576. const TQ3Vector2D * vector2D,
  577. TQ3Point2D * result);
  578. /*
  579. * Q3Param2D_Vector2D_Subtract()
  580. *
  581. * Availability:
  582. * Non-Carbon CFM: not available
  583. * CarbonLib: not available
  584. * Mac OS X: not available
  585. */
  586. EXTERN_API_C( TQ3Param2D * )
  587. Q3Param2D_Vector2D_Subtract(
  588. const TQ3Param2D * param2D,
  589. const TQ3Vector2D * vector2D,
  590. TQ3Param2D * result);
  591. /*
  592. * Q3Point3D_Vector3D_Subtract()
  593. *
  594. * Availability:
  595. * Non-Carbon CFM: not available
  596. * CarbonLib: not available
  597. * Mac OS X: not available
  598. */
  599. EXTERN_API_C( TQ3Point3D * )
  600. Q3Point3D_Vector3D_Subtract(
  601. const TQ3Point3D * point3D,
  602. const TQ3Vector3D * vector3D,
  603. TQ3Point3D * result);
  604. /******************************************************************************
  605. ** **
  606. ** Vector Scale **
  607. ** **
  608. *****************************************************************************/
  609. /*
  610. * Q3Vector2D_Scale()
  611. *
  612. * Availability:
  613. * Non-Carbon CFM: not available
  614. * CarbonLib: not available
  615. * Mac OS X: not available
  616. */
  617. EXTERN_API_C( TQ3Vector2D * )
  618. Q3Vector2D_Scale(
  619. const TQ3Vector2D * vector2D,
  620. float scalar,
  621. TQ3Vector2D * result);
  622. /*
  623. * Q3Vector3D_Scale()
  624. *
  625. * Availability:
  626. * Non-Carbon CFM: not available
  627. * CarbonLib: not available
  628. * Mac OS X: not available
  629. */
  630. EXTERN_API_C( TQ3Vector3D * )
  631. Q3Vector3D_Scale(
  632. const TQ3Vector3D * vector3D,
  633. float scalar,
  634. TQ3Vector3D * result);
  635. /******************************************************************************
  636. ** **
  637. ** Vector Length **
  638. ** **
  639. *****************************************************************************/
  640. /*
  641. * Q3Vector2D_Length()
  642. *
  643. * Availability:
  644. * Non-Carbon CFM: not available
  645. * CarbonLib: not available
  646. * Mac OS X: not available
  647. */
  648. EXTERN_API_C( float )
  649. Q3Vector2D_Length(const TQ3Vector2D * vector2D);
  650. /*
  651. * Q3Vector3D_Length()
  652. *
  653. * Availability:
  654. * Non-Carbon CFM: not available
  655. * CarbonLib: not available
  656. * Mac OS X: not available
  657. */
  658. EXTERN_API_C( float )
  659. Q3Vector3D_Length(const TQ3Vector3D * vector3D);
  660. /******************************************************************************
  661. ** **
  662. ** Vector Normalize **
  663. ** **
  664. *****************************************************************************/
  665. /*
  666. * Q3Vector2D_Normalize()
  667. *
  668. * Availability:
  669. * Non-Carbon CFM: not available
  670. * CarbonLib: not available
  671. * Mac OS X: not available
  672. */
  673. EXTERN_API_C( TQ3Vector2D * )
  674. Q3Vector2D_Normalize(
  675. const TQ3Vector2D * vector2D,
  676. TQ3Vector2D * result);
  677. /*
  678. * Q3Vector3D_Normalize()
  679. *
  680. * Availability:
  681. * Non-Carbon CFM: not available
  682. * CarbonLib: not available
  683. * Mac OS X: not available
  684. */
  685. EXTERN_API_C( TQ3Vector3D * )
  686. Q3Vector3D_Normalize(
  687. const TQ3Vector3D * vector3D,
  688. TQ3Vector3D * result);
  689. /******************************************************************************
  690. ** **
  691. ** Vector/Vector Addition and Subtraction **
  692. ** **
  693. *****************************************************************************/
  694. /*
  695. * Q3Vector2D_Add()
  696. *
  697. * Availability:
  698. * Non-Carbon CFM: not available
  699. * CarbonLib: not available
  700. * Mac OS X: not available
  701. */
  702. EXTERN_API_C( TQ3Vector2D * )
  703. Q3Vector2D_Add(
  704. const TQ3Vector2D * v1,
  705. const TQ3Vector2D * v2,
  706. TQ3Vector2D * result);
  707. /*
  708. * Q3Vector3D_Add()
  709. *
  710. * Availability:
  711. * Non-Carbon CFM: not available
  712. * CarbonLib: not available
  713. * Mac OS X: not available
  714. */
  715. EXTERN_API_C( TQ3Vector3D * )
  716. Q3Vector3D_Add(
  717. const TQ3Vector3D * v1,
  718. const TQ3Vector3D * v2,
  719. TQ3Vector3D * result);
  720. /*
  721. * Q3Vector2D_Subtract()
  722. *
  723. * Availability:
  724. * Non-Carbon CFM: not available
  725. * CarbonLib: not available
  726. * Mac OS X: not available
  727. */
  728. EXTERN_API_C( TQ3Vector2D * )
  729. Q3Vector2D_Subtract(
  730. const TQ3Vector2D * v1,
  731. const TQ3Vector2D * v2,
  732. TQ3Vector2D * result);
  733. /*
  734. * Q3Vector3D_Subtract()
  735. *
  736. * Availability:
  737. * Non-Carbon CFM: not available
  738. * CarbonLib: not available
  739. * Mac OS X: not available
  740. */
  741. EXTERN_API_C( TQ3Vector3D * )
  742. Q3Vector3D_Subtract(
  743. const TQ3Vector3D * v1,
  744. const TQ3Vector3D * v2,
  745. TQ3Vector3D * result);
  746. /******************************************************************************
  747. ** **
  748. ** Cross Product **
  749. ** **
  750. *****************************************************************************/
  751. /*
  752. * Q3Vector2D_Cross()
  753. *
  754. * Availability:
  755. * Non-Carbon CFM: not available
  756. * CarbonLib: not available
  757. * Mac OS X: not available
  758. */
  759. EXTERN_API_C( float )
  760. Q3Vector2D_Cross(
  761. const TQ3Vector2D * v1,
  762. const TQ3Vector2D * v2);
  763. /*
  764. * Q3Vector3D_Cross()
  765. *
  766. * Availability:
  767. * Non-Carbon CFM: not available
  768. * CarbonLib: not available
  769. * Mac OS X: not available
  770. */
  771. EXTERN_API_C( TQ3Vector3D * )
  772. Q3Vector3D_Cross(
  773. const TQ3Vector3D * v1,
  774. const TQ3Vector3D * v2,
  775. TQ3Vector3D * result);
  776. /*
  777. * Q3Point3D_CrossProductTri()
  778. *
  779. * Availability:
  780. * Non-Carbon CFM: not available
  781. * CarbonLib: not available
  782. * Mac OS X: not available
  783. */
  784. EXTERN_API_C( TQ3Vector3D * )
  785. Q3Point3D_CrossProductTri(
  786. const TQ3Point3D * point1,
  787. const TQ3Point3D * point2,
  788. const TQ3Point3D * point3,
  789. TQ3Vector3D * crossVector);
  790. /******************************************************************************
  791. ** **
  792. ** Dot Product **
  793. ** **
  794. *****************************************************************************/
  795. /*
  796. * Q3Vector2D_Dot()
  797. *
  798. * Availability:
  799. * Non-Carbon CFM: not available
  800. * CarbonLib: not available
  801. * Mac OS X: not available
  802. */
  803. EXTERN_API_C( float )
  804. Q3Vector2D_Dot(
  805. const TQ3Vector2D * v1,
  806. const TQ3Vector2D * v2);
  807. /*
  808. * Q3Vector3D_Dot()
  809. *
  810. * Availability:
  811. * Non-Carbon CFM: not available
  812. * CarbonLib: not available
  813. * Mac OS X: not available
  814. */
  815. EXTERN_API_C( float )
  816. Q3Vector3D_Dot(
  817. const TQ3Vector3D * v1,
  818. const TQ3Vector3D * v2);
  819. /******************************************************************************
  820. ** **
  821. ** Point and Vector Transformation **
  822. ** **
  823. *****************************************************************************/
  824. /*
  825. * Q3Vector2D_Transform()
  826. *
  827. * Availability:
  828. * Non-Carbon CFM: not available
  829. * CarbonLib: not available
  830. * Mac OS X: not available
  831. */
  832. EXTERN_API_C( TQ3Vector2D * )
  833. Q3Vector2D_Transform(
  834. const TQ3Vector2D * vector2D,
  835. const TQ3Matrix3x3 * matrix3x3,
  836. TQ3Vector2D * result);
  837. /*
  838. * Q3Vector3D_Transform()
  839. *
  840. * Availability:
  841. * Non-Carbon CFM: not available
  842. * CarbonLib: not available
  843. * Mac OS X: not available
  844. */
  845. EXTERN_API_C( TQ3Vector3D * )
  846. Q3Vector3D_Transform(
  847. const TQ3Vector3D * vector3D,
  848. const TQ3Matrix4x4 * matrix4x4,
  849. TQ3Vector3D * result);
  850. /*
  851. * Q3Point2D_Transform()
  852. *
  853. * Availability:
  854. * Non-Carbon CFM: not available
  855. * CarbonLib: not available
  856. * Mac OS X: not available
  857. */
  858. EXTERN_API_C( TQ3Point2D * )
  859. Q3Point2D_Transform(
  860. const TQ3Point2D * point2D,
  861. const TQ3Matrix3x3 * matrix3x3,
  862. TQ3Point2D * result);
  863. /*
  864. * Q3Param2D_Transform()
  865. *
  866. * Availability:
  867. * Non-Carbon CFM: not available
  868. * CarbonLib: not available
  869. * Mac OS X: not available
  870. */
  871. EXTERN_API_C( TQ3Param2D * )
  872. Q3Param2D_Transform(
  873. const TQ3Param2D * param2D,
  874. const TQ3Matrix3x3 * matrix3x3,
  875. TQ3Param2D * result);
  876. /*
  877. * Q3Point3D_Transform()
  878. *
  879. * Availability:
  880. * Non-Carbon CFM: not available
  881. * CarbonLib: not available
  882. * Mac OS X: not available
  883. */
  884. EXTERN_API_C( TQ3Point3D * )
  885. Q3Point3D_Transform(
  886. const TQ3Point3D * point3D,
  887. const TQ3Matrix4x4 * matrix4x4,
  888. TQ3Point3D * result);
  889. /*
  890. * Q3RationalPoint4D_Transform()
  891. *
  892. * Availability:
  893. * Non-Carbon CFM: not available
  894. * CarbonLib: not available
  895. * Mac OS X: not available
  896. */
  897. EXTERN_API_C( TQ3RationalPoint4D * )
  898. Q3RationalPoint4D_Transform(
  899. const TQ3RationalPoint4D * point4D,
  900. const TQ3Matrix4x4 * matrix4x4,
  901. TQ3RationalPoint4D * result);
  902. /*
  903. * Q3Point3D_To3DTransformArray()
  904. *
  905. * Availability:
  906. * Non-Carbon CFM: not available
  907. * CarbonLib: not available
  908. * Mac OS X: not available
  909. */
  910. EXTERN_API_C( TQ3Status )
  911. Q3Point3D_To3DTransformArray(
  912. const TQ3Point3D * inPoint3D,
  913. const TQ3Matrix4x4 * matrix,
  914. TQ3Point3D * outPoint3D,
  915. long numPoints,
  916. unsigned long inStructSize,
  917. unsigned long outStructSize);
  918. /*
  919. * Q3Point3D_To4DTransformArray()
  920. *
  921. * Availability:
  922. * Non-Carbon CFM: not available
  923. * CarbonLib: not available
  924. * Mac OS X: not available
  925. */
  926. EXTERN_API_C( TQ3Status )
  927. Q3Point3D_To4DTransformArray(
  928. const TQ3Point3D * inPoint3D,
  929. const TQ3Matrix4x4 * matrix,
  930. TQ3RationalPoint4D * outPoint4D,
  931. long numPoints,
  932. unsigned long inStructSize,
  933. unsigned long outStructSize);
  934. /*
  935. * Q3RationalPoint4D_To4DTransformArray()
  936. *
  937. * Availability:
  938. * Non-Carbon CFM: not available
  939. * CarbonLib: not available
  940. * Mac OS X: not available
  941. */
  942. EXTERN_API_C( TQ3Status )
  943. Q3RationalPoint4D_To4DTransformArray(
  944. const TQ3RationalPoint4D * inPoint4D,
  945. const TQ3Matrix4x4 * matrix,
  946. TQ3RationalPoint4D * outPoint4D,
  947. long numPoints,
  948. unsigned long inStructSize,
  949. unsigned long outStructSize);
  950. /******************************************************************************
  951. ** **
  952. ** Vector Negation **
  953. ** **
  954. *****************************************************************************/
  955. /*
  956. * Q3Vector2D_Negate()
  957. *
  958. * Availability:
  959. * Non-Carbon CFM: not available
  960. * CarbonLib: not available
  961. * Mac OS X: not available
  962. */
  963. EXTERN_API_C( TQ3Vector2D * )
  964. Q3Vector2D_Negate(
  965. const TQ3Vector2D * vector2D,
  966. TQ3Vector2D * result);
  967. /*
  968. * Q3Vector3D_Negate()
  969. *
  970. * Availability:
  971. * Non-Carbon CFM: not available
  972. * CarbonLib: not available
  973. * Mac OS X: not available
  974. */
  975. EXTERN_API_C( TQ3Vector3D * )
  976. Q3Vector3D_Negate(
  977. const TQ3Vector3D * vector3D,
  978. TQ3Vector3D * result);
  979. /******************************************************************************
  980. ** **
  981. ** Point conversion from cartesian to polar **
  982. ** **
  983. *****************************************************************************/
  984. /*
  985. * Q3Point2D_ToPolar()
  986. *
  987. * Availability:
  988. * Non-Carbon CFM: not available
  989. * CarbonLib: not available
  990. * Mac OS X: not available
  991. */
  992. EXTERN_API_C( TQ3PolarPoint * )
  993. Q3Point2D_ToPolar(
  994. const TQ3Point2D * point2D,
  995. TQ3PolarPoint * result);
  996. /*
  997. * Q3PolarPoint_ToPoint2D()
  998. *
  999. * Availability:
  1000. * Non-Carbon CFM: not available
  1001. * CarbonLib: not available
  1002. * Mac OS X: not available
  1003. */
  1004. EXTERN_API_C( TQ3Point2D * )
  1005. Q3PolarPoint_ToPoint2D(
  1006. const TQ3PolarPoint * polarPoint,
  1007. TQ3Point2D * result);
  1008. /*
  1009. * Q3Point3D_ToSpherical()
  1010. *
  1011. * Availability:
  1012. * Non-Carbon CFM: not available
  1013. * CarbonLib: not available
  1014. * Mac OS X: not available
  1015. */
  1016. EXTERN_API_C( TQ3SphericalPoint * )
  1017. Q3Point3D_ToSpherical(
  1018. const TQ3Point3D * point3D,
  1019. TQ3SphericalPoint * result);
  1020. /*
  1021. * Q3SphericalPoint_ToPoint3D()
  1022. *
  1023. * Availability:
  1024. * Non-Carbon CFM: not available
  1025. * CarbonLib: not available
  1026. * Mac OS X: not available
  1027. */
  1028. EXTERN_API_C( TQ3Point3D * )
  1029. Q3SphericalPoint_ToPoint3D(
  1030. const TQ3SphericalPoint * sphericalPoint,
  1031. TQ3Point3D * result);
  1032. /******************************************************************************
  1033. ** **
  1034. ** Point Affine Combinations **
  1035. ** **
  1036. *****************************************************************************/
  1037. /*
  1038. * Q3Point2D_AffineComb()
  1039. *
  1040. * Availability:
  1041. * Non-Carbon CFM: not available
  1042. * CarbonLib: not available
  1043. * Mac OS X: not available
  1044. */
  1045. EXTERN_API_C( TQ3Point2D * )
  1046. Q3Point2D_AffineComb(
  1047. const TQ3Point2D * points2D,
  1048. const float * weights,
  1049. unsigned long nPoints,
  1050. TQ3Point2D * result);
  1051. /*
  1052. * Q3Param2D_AffineComb()
  1053. *
  1054. * Availability:
  1055. * Non-Carbon CFM: not available
  1056. * CarbonLib: not available
  1057. * Mac OS X: not available
  1058. */
  1059. EXTERN_API_C( TQ3Param2D * )
  1060. Q3Param2D_AffineComb(
  1061. const TQ3Param2D * params2D,
  1062. const float * weights,
  1063. unsigned long nPoints,
  1064. TQ3Param2D * result);
  1065. /*
  1066. * Q3RationalPoint3D_AffineComb()
  1067. *
  1068. * Availability:
  1069. * Non-Carbon CFM: not available
  1070. * CarbonLib: not available
  1071. * Mac OS X: not available
  1072. */
  1073. EXTERN_API_C( TQ3RationalPoint3D * )
  1074. Q3RationalPoint3D_AffineComb(
  1075. const TQ3RationalPoint3D * points3D,
  1076. const float * weights,
  1077. unsigned long numPoints,
  1078. TQ3RationalPoint3D * result);
  1079. /*
  1080. * Q3Point3D_AffineComb()
  1081. *
  1082. * Availability:
  1083. * Non-Carbon CFM: not available
  1084. * CarbonLib: not available
  1085. * Mac OS X: not available
  1086. */
  1087. EXTERN_API_C( TQ3Point3D * )
  1088. Q3Point3D_AffineComb(
  1089. const TQ3Point3D * points3D,
  1090. const float * weights,
  1091. unsigned long numPoints,
  1092. TQ3Point3D * result);
  1093. /*
  1094. * Q3RationalPoint4D_AffineComb()
  1095. *
  1096. * Availability:
  1097. * Non-Carbon CFM: not available
  1098. * CarbonLib: not available
  1099. * Mac OS X: not available
  1100. */
  1101. EXTERN_API_C( TQ3RationalPoint4D * )
  1102. Q3RationalPoint4D_AffineComb(
  1103. const TQ3RationalPoint4D * points4D,
  1104. const float * weights,
  1105. unsigned long numPoints,
  1106. TQ3RationalPoint4D * result);
  1107. /******************************************************************************
  1108. ** **
  1109. ** Matrix Functions **
  1110. ** **
  1111. *****************************************************************************/
  1112. /*
  1113. * Q3Matrix3x3_Copy()
  1114. *
  1115. * Availability:
  1116. * Non-Carbon CFM: not available
  1117. * CarbonLib: not available
  1118. * Mac OS X: not available
  1119. */
  1120. EXTERN_API_C( TQ3Matrix3x3 * )
  1121. Q3Matrix3x3_Copy(
  1122. const TQ3Matrix3x3 * matrix3x3,
  1123. TQ3Matrix3x3 * result);
  1124. /*
  1125. * Q3Matrix4x4_Copy()
  1126. *
  1127. * Availability:
  1128. * Non-Carbon CFM: not available
  1129. * CarbonLib: not available
  1130. * Mac OS X: not available
  1131. */
  1132. EXTERN_API_C( TQ3Matrix4x4 * )
  1133. Q3Matrix4x4_Copy(
  1134. const TQ3Matrix4x4 * matrix4x4,
  1135. TQ3Matrix4x4 * result);
  1136. /*
  1137. * Q3Matrix3x3_SetIdentity()
  1138. *
  1139. * Availability:
  1140. * Non-Carbon CFM: not available
  1141. * CarbonLib: not available
  1142. * Mac OS X: not available
  1143. */
  1144. EXTERN_API_C( TQ3Matrix3x3 * )
  1145. Q3Matrix3x3_SetIdentity(TQ3Matrix3x3 * matrix3x3);
  1146. /*
  1147. * Q3Matrix4x4_SetIdentity()
  1148. *
  1149. * Availability:
  1150. * Non-Carbon CFM: not available
  1151. * CarbonLib: not available
  1152. * Mac OS X: not available
  1153. */
  1154. EXTERN_API_C( TQ3Matrix4x4 * )
  1155. Q3Matrix4x4_SetIdentity(TQ3Matrix4x4 * matrix4x4);
  1156. /*
  1157. * Q3Matrix3x3_Transpose()
  1158. *
  1159. * Availability:
  1160. * Non-Carbon CFM: not available
  1161. * CarbonLib: not available
  1162. * Mac OS X: not available
  1163. */
  1164. EXTERN_API_C( TQ3Matrix3x3 * )
  1165. Q3Matrix3x3_Transpose(
  1166. const TQ3Matrix3x3 * matrix3x3,
  1167. TQ3Matrix3x3 * result);
  1168. /*
  1169. * Q3Matrix4x4_Transpose()
  1170. *
  1171. * Availability:
  1172. * Non-Carbon CFM: not available
  1173. * CarbonLib: not available
  1174. * Mac OS X: not available
  1175. */
  1176. EXTERN_API_C( TQ3Matrix4x4 * )
  1177. Q3Matrix4x4_Transpose(
  1178. const TQ3Matrix4x4 * matrix4x4,
  1179. TQ3Matrix4x4 * result);
  1180. /*
  1181. * Q3Matrix3x3_Invert()
  1182. *
  1183. * Availability:
  1184. * Non-Carbon CFM: not available
  1185. * CarbonLib: not available
  1186. * Mac OS X: not available
  1187. */
  1188. EXTERN_API_C( TQ3Matrix3x3 * )
  1189. Q3Matrix3x3_Invert(
  1190. const TQ3Matrix3x3 * matrix3x3,
  1191. TQ3Matrix3x3 * result);
  1192. /*
  1193. * Q3Matrix4x4_Invert()
  1194. *
  1195. * Availability:
  1196. * Non-Carbon CFM: not available
  1197. * CarbonLib: not available
  1198. * Mac OS X: not available
  1199. */
  1200. EXTERN_API_C( TQ3Matrix4x4 * )
  1201. Q3Matrix4x4_Invert(
  1202. const TQ3Matrix4x4 * matrix4x4,
  1203. TQ3Matrix4x4 * result);
  1204. /*
  1205. * Q3Matrix3x3_Adjoint()
  1206. *
  1207. * Availability:
  1208. * Non-Carbon CFM: not available
  1209. * CarbonLib: not available
  1210. * Mac OS X: not available
  1211. */
  1212. EXTERN_API_C( TQ3Matrix3x3 * )
  1213. Q3Matrix3x3_Adjoint(
  1214. const TQ3Matrix3x3 * matrix3x3,
  1215. TQ3Matrix3x3 * result);
  1216. /*
  1217. * Q3Matrix3x3_Multiply()
  1218. *
  1219. * Availability:
  1220. * Non-Carbon CFM: not available
  1221. * CarbonLib: not available
  1222. * Mac OS X: not available
  1223. */
  1224. EXTERN_API_C( TQ3Matrix3x3 * )
  1225. Q3Matrix3x3_Multiply(
  1226. const TQ3Matrix3x3 * matrixA,
  1227. const TQ3Matrix3x3 * matrixB,
  1228. TQ3Matrix3x3 * result);
  1229. /*
  1230. * Q3Matrix4x4_Multiply()
  1231. *
  1232. * Availability:
  1233. * Non-Carbon CFM: not available
  1234. * CarbonLib: not available
  1235. * Mac OS X: not available
  1236. */
  1237. EXTERN_API_C( TQ3Matrix4x4 * )
  1238. Q3Matrix4x4_Multiply(
  1239. const TQ3Matrix4x4 * matrixA,
  1240. const TQ3Matrix4x4 * matrixB,
  1241. TQ3Matrix4x4 * result);
  1242. /*
  1243. * Q3Matrix3x3_SetTranslate()
  1244. *
  1245. * Availability:
  1246. * Non-Carbon CFM: not available
  1247. * CarbonLib: not available
  1248. * Mac OS X: not available
  1249. */
  1250. EXTERN_API_C( TQ3Matrix3x3 * )
  1251. Q3Matrix3x3_SetTranslate(
  1252. TQ3Matrix3x3 * matrix3x3,
  1253. float xTrans,
  1254. float yTrans);
  1255. /*
  1256. * Q3Matrix3x3_SetScale()
  1257. *
  1258. * Availability:
  1259. * Non-Carbon CFM: not available
  1260. * CarbonLib: not available
  1261. * Mac OS X: not available
  1262. */
  1263. EXTERN_API_C( TQ3Matrix3x3 * )
  1264. Q3Matrix3x3_SetScale(
  1265. TQ3Matrix3x3 * matrix3x3,
  1266. float xScale,
  1267. float yScale);
  1268. /*
  1269. * Q3Matrix3x3_SetRotateAboutPoint()
  1270. *
  1271. * Availability:
  1272. * Non-Carbon CFM: not available
  1273. * CarbonLib: not available
  1274. * Mac OS X: not available
  1275. */
  1276. EXTERN_API_C( TQ3Matrix3x3 * )
  1277. Q3Matrix3x3_SetRotateAboutPoint(
  1278. TQ3Matrix3x3 * matrix3x3,
  1279. const TQ3Point2D * origin,
  1280. float angle);
  1281. /*
  1282. * Q3Matrix4x4_SetTranslate()
  1283. *
  1284. * Availability:
  1285. * Non-Carbon CFM: not available
  1286. * CarbonLib: not available
  1287. * Mac OS X: not available
  1288. */
  1289. EXTERN_API_C( TQ3Matrix4x4 * )
  1290. Q3Matrix4x4_SetTranslate(
  1291. TQ3Matrix4x4 * matrix4x4,
  1292. float xTrans,
  1293. float yTrans,
  1294. float zTrans);
  1295. /*
  1296. * Q3Matrix4x4_SetScale()
  1297. *
  1298. * Availability:
  1299. * Non-Carbon CFM: not available
  1300. * CarbonLib: not available
  1301. * Mac OS X: not available
  1302. */
  1303. EXTERN_API_C( TQ3Matrix4x4 * )
  1304. Q3Matrix4x4_SetScale(
  1305. TQ3Matrix4x4 * matrix4x4,
  1306. float xScale,
  1307. float yScale,
  1308. float zScale);
  1309. /*
  1310. * Q3Matrix4x4_SetRotateAboutPoint()
  1311. *
  1312. * Availability:
  1313. * Non-Carbon CFM: not available
  1314. * CarbonLib: not available
  1315. * Mac OS X: not available
  1316. */
  1317. EXTERN_API_C( TQ3Matrix4x4 * )
  1318. Q3Matrix4x4_SetRotateAboutPoint(
  1319. TQ3Matrix4x4 * matrix4x4,
  1320. const TQ3Point3D * origin,
  1321. float xAngle,
  1322. float yAngle,
  1323. float zAngle);
  1324. /*
  1325. * Q3Matrix4x4_SetRotateAboutAxis()
  1326. *
  1327. * Availability:
  1328. * Non-Carbon CFM: not available
  1329. * CarbonLib: not available
  1330. * Mac OS X: not available
  1331. */
  1332. EXTERN_API_C( TQ3Matrix4x4 * )
  1333. Q3Matrix4x4_SetRotateAboutAxis(
  1334. TQ3Matrix4x4 * matrix4x4,
  1335. const TQ3Point3D * origin,
  1336. const TQ3Vector3D * orientation,
  1337. float angle);
  1338. /*
  1339. * Q3Matrix4x4_SetRotate_X()
  1340. *
  1341. * Availability:
  1342. * Non-Carbon CFM: not available
  1343. * CarbonLib: not available
  1344. * Mac OS X: not available
  1345. */
  1346. EXTERN_API_C( TQ3Matrix4x4 * )
  1347. Q3Matrix4x4_SetRotate_X(
  1348. TQ3Matrix4x4 * matrix4x4,
  1349. float angle);
  1350. /*
  1351. * Q3Matrix4x4_SetRotate_Y()
  1352. *
  1353. * Availability:
  1354. * Non-Carbon CFM: not available
  1355. * CarbonLib: not available
  1356. * Mac OS X: not available
  1357. */
  1358. EXTERN_API_C( TQ3Matrix4x4 * )
  1359. Q3Matrix4x4_SetRotate_Y(
  1360. TQ3Matrix4x4 * matrix4x4,
  1361. float angle);
  1362. /*
  1363. * Q3Matrix4x4_SetRotate_Z()
  1364. *
  1365. * Availability:
  1366. * Non-Carbon CFM: not available
  1367. * CarbonLib: not available
  1368. * Mac OS X: not available
  1369. */
  1370. EXTERN_API_C( TQ3Matrix4x4 * )
  1371. Q3Matrix4x4_SetRotate_Z(
  1372. TQ3Matrix4x4 * matrix4x4,
  1373. float angle);
  1374. /*
  1375. * Q3Matrix4x4_SetRotate_XYZ()
  1376. *
  1377. * Availability:
  1378. * Non-Carbon CFM: not available
  1379. * CarbonLib: not available
  1380. * Mac OS X: not available
  1381. */
  1382. EXTERN_API_C( TQ3Matrix4x4 * )
  1383. Q3Matrix4x4_SetRotate_XYZ(
  1384. TQ3Matrix4x4 * matrix4x4,
  1385. float xAngle,
  1386. float yAngle,
  1387. float zAngle);
  1388. /*
  1389. * Q3Matrix4x4_SetRotateVectorToVector()
  1390. *
  1391. * Availability:
  1392. * Non-Carbon CFM: not available
  1393. * CarbonLib: not available
  1394. * Mac OS X: not available
  1395. */
  1396. EXTERN_API_C( TQ3Matrix4x4 * )
  1397. Q3Matrix4x4_SetRotateVectorToVector(
  1398. TQ3Matrix4x4 * matrix4x4,
  1399. const TQ3Vector3D * v1,
  1400. const TQ3Vector3D * v2);
  1401. /*
  1402. * Q3Matrix4x4_SetQuaternion()
  1403. *
  1404. * Availability:
  1405. * Non-Carbon CFM: not available
  1406. * CarbonLib: not available
  1407. * Mac OS X: not available
  1408. */
  1409. EXTERN_API_C( TQ3Matrix4x4 * )
  1410. Q3Matrix4x4_SetQuaternion(
  1411. TQ3Matrix4x4 * matrix,
  1412. const TQ3Quaternion * quaternion);
  1413. /*
  1414. * Q3Matrix3x3_Determinant()
  1415. *
  1416. * Availability:
  1417. * Non-Carbon CFM: not available
  1418. * CarbonLib: not available
  1419. * Mac OS X: not available
  1420. */
  1421. EXTERN_API_C( float )
  1422. Q3Matrix3x3_Determinant(const TQ3Matrix3x3 * matrix3x3);
  1423. /*
  1424. * Q3Matrix4x4_Determinant()
  1425. *
  1426. * Availability:
  1427. * Non-Carbon CFM: not available
  1428. * CarbonLib: not available
  1429. * Mac OS X: not available
  1430. */
  1431. EXTERN_API_C( float )
  1432. Q3Matrix4x4_Determinant(const TQ3Matrix4x4 * matrix4x4);
  1433. /******************************************************************************
  1434. ** **
  1435. ** Quaternion Routines **
  1436. ** **
  1437. *****************************************************************************/
  1438. /*
  1439. * Q3Quaternion_Set()
  1440. *
  1441. * Availability:
  1442. * Non-Carbon CFM: not available
  1443. * CarbonLib: not available
  1444. * Mac OS X: not available
  1445. */
  1446. EXTERN_API_C( TQ3Quaternion * )
  1447. Q3Quaternion_Set(
  1448. TQ3Quaternion * quaternion,
  1449. float w,
  1450. float x,
  1451. float y,
  1452. float z);
  1453. /*
  1454. * Q3Quaternion_SetIdentity()
  1455. *
  1456. * Availability:
  1457. * Non-Carbon CFM: not available
  1458. * CarbonLib: not available
  1459. * Mac OS X: not available
  1460. */
  1461. EXTERN_API_C( TQ3Quaternion * )
  1462. Q3Quaternion_SetIdentity(TQ3Quaternion * quaternion);
  1463. /*
  1464. * Q3Quaternion_Copy()
  1465. *
  1466. * Availability:
  1467. * Non-Carbon CFM: not available
  1468. * CarbonLib: not available
  1469. * Mac OS X: not available
  1470. */
  1471. EXTERN_API_C( TQ3Quaternion * )
  1472. Q3Quaternion_Copy(
  1473. const TQ3Quaternion * quaternion,
  1474. TQ3Quaternion * result);
  1475. /*
  1476. * Q3Quaternion_IsIdentity()
  1477. *
  1478. * Availability:
  1479. * Non-Carbon CFM: not available
  1480. * CarbonLib: not available
  1481. * Mac OS X: not available
  1482. */
  1483. EXTERN_API_C( TQ3Boolean )
  1484. Q3Quaternion_IsIdentity(const TQ3Quaternion * quaternion);
  1485. /*
  1486. * Q3Quaternion_Invert()
  1487. *
  1488. * Availability:
  1489. * Non-Carbon CFM: not available
  1490. * CarbonLib: not available
  1491. * Mac OS X: not available
  1492. */
  1493. EXTERN_API_C( TQ3Quaternion * )
  1494. Q3Quaternion_Invert(
  1495. const TQ3Quaternion * quaternion,
  1496. TQ3Quaternion * result);
  1497. /*
  1498. * Q3Quaternion_Normalize()
  1499. *
  1500. * Availability:
  1501. * Non-Carbon CFM: not available
  1502. * CarbonLib: not available
  1503. * Mac OS X: not available
  1504. */
  1505. EXTERN_API_C( TQ3Quaternion * )
  1506. Q3Quaternion_Normalize(
  1507. const TQ3Quaternion * quaternion,
  1508. TQ3Quaternion * result);
  1509. /*
  1510. * Q3Quaternion_Dot()
  1511. *
  1512. * Availability:
  1513. * Non-Carbon CFM: not available
  1514. * CarbonLib: not available
  1515. * Mac OS X: not available
  1516. */
  1517. EXTERN_API_C( float )
  1518. Q3Quaternion_Dot(
  1519. const TQ3Quaternion * q1,
  1520. const TQ3Quaternion * q2);
  1521. /*
  1522. * Q3Quaternion_Multiply()
  1523. *
  1524. * Availability:
  1525. * Non-Carbon CFM: not available
  1526. * CarbonLib: not available
  1527. * Mac OS X: not available
  1528. */
  1529. EXTERN_API_C( TQ3Quaternion * )
  1530. Q3Quaternion_Multiply(
  1531. const TQ3Quaternion * q1,
  1532. const TQ3Quaternion * q2,
  1533. TQ3Quaternion * result);
  1534. /*
  1535. * Q3Quaternion_SetRotateAboutAxis()
  1536. *
  1537. * Availability:
  1538. * Non-Carbon CFM: not available
  1539. * CarbonLib: not available
  1540. * Mac OS X: not available
  1541. */
  1542. EXTERN_API_C( TQ3Quaternion * )
  1543. Q3Quaternion_SetRotateAboutAxis(
  1544. TQ3Quaternion * quaternion,
  1545. const TQ3Vector3D * axis,
  1546. float angle);
  1547. /*
  1548. * Q3Quaternion_SetRotate_XYZ()
  1549. *
  1550. * Availability:
  1551. * Non-Carbon CFM: not available
  1552. * CarbonLib: not available
  1553. * Mac OS X: not available
  1554. */
  1555. EXTERN_API_C( TQ3Quaternion * )
  1556. Q3Quaternion_SetRotate_XYZ(
  1557. TQ3Quaternion * quaternion,
  1558. float xAngle,
  1559. float yAngle,
  1560. float zAngle);
  1561. /*
  1562. * Q3Quaternion_SetRotate_X()
  1563. *
  1564. * Availability:
  1565. * Non-Carbon CFM: not available
  1566. * CarbonLib: not available
  1567. * Mac OS X: not available
  1568. */
  1569. EXTERN_API_C( TQ3Quaternion * )
  1570. Q3Quaternion_SetRotate_X(
  1571. TQ3Quaternion * quaternion,
  1572. float angle);
  1573. /*
  1574. * Q3Quaternion_SetRotate_Y()
  1575. *
  1576. * Availability:
  1577. * Non-Carbon CFM: not available
  1578. * CarbonLib: not available
  1579. * Mac OS X: not available
  1580. */
  1581. EXTERN_API_C( TQ3Quaternion * )
  1582. Q3Quaternion_SetRotate_Y(
  1583. TQ3Quaternion * quaternion,
  1584. float angle);
  1585. /*
  1586. * Q3Quaternion_SetRotate_Z()
  1587. *
  1588. * Availability:
  1589. * Non-Carbon CFM: not available
  1590. * CarbonLib: not available
  1591. * Mac OS X: not available
  1592. */
  1593. EXTERN_API_C( TQ3Quaternion * )
  1594. Q3Quaternion_SetRotate_Z(
  1595. TQ3Quaternion * quaternion,
  1596. float angle);
  1597. /*
  1598. * Q3Quaternion_SetMatrix()
  1599. *
  1600. * Availability:
  1601. * Non-Carbon CFM: not available
  1602. * CarbonLib: not available
  1603. * Mac OS X: not available
  1604. */
  1605. EXTERN_API_C( TQ3Quaternion * )
  1606. Q3Quaternion_SetMatrix(
  1607. TQ3Quaternion * quaternion,
  1608. const TQ3Matrix4x4 * matrix);
  1609. /*
  1610. * Q3Quaternion_SetRotateVectorToVector()
  1611. *
  1612. * Availability:
  1613. * Non-Carbon CFM: not available
  1614. * CarbonLib: not available
  1615. * Mac OS X: not available
  1616. */
  1617. EXTERN_API_C( TQ3Quaternion * )
  1618. Q3Quaternion_SetRotateVectorToVector(
  1619. TQ3Quaternion * quaternion,
  1620. const TQ3Vector3D * v1,
  1621. const TQ3Vector3D * v2);
  1622. /*
  1623. * Q3Quaternion_MatchReflection()
  1624. *
  1625. * Availability:
  1626. * Non-Carbon CFM: not available
  1627. * CarbonLib: not available
  1628. * Mac OS X: not available
  1629. */
  1630. EXTERN_API_C( TQ3Quaternion * )
  1631. Q3Quaternion_MatchReflection(
  1632. const TQ3Quaternion * q1,
  1633. const TQ3Quaternion * q2,
  1634. TQ3Quaternion * result);
  1635. /*
  1636. * Q3Quaternion_InterpolateFast()
  1637. *
  1638. * Availability:
  1639. * Non-Carbon CFM: not available
  1640. * CarbonLib: not available
  1641. * Mac OS X: not available
  1642. */
  1643. EXTERN_API_C( TQ3Quaternion * )
  1644. Q3Quaternion_InterpolateFast(
  1645. const TQ3Quaternion * q1,
  1646. const TQ3Quaternion * q2,
  1647. float t,
  1648. TQ3Quaternion * result);
  1649. /*
  1650. * Q3Quaternion_InterpolateLinear()
  1651. *
  1652. * Availability:
  1653. * Non-Carbon CFM: not available
  1654. * CarbonLib: not available
  1655. * Mac OS X: not available
  1656. */
  1657. EXTERN_API_C( TQ3Quaternion * )
  1658. Q3Quaternion_InterpolateLinear(
  1659. const TQ3Quaternion * q1,
  1660. const TQ3Quaternion * q2,
  1661. float t,
  1662. TQ3Quaternion * result);
  1663. /*
  1664. * Q3Vector3D_TransformQuaternion()
  1665. *
  1666. * Availability:
  1667. * Non-Carbon CFM: not available
  1668. * CarbonLib: not available
  1669. * Mac OS X: not available
  1670. */
  1671. EXTERN_API_C( TQ3Vector3D * )
  1672. Q3Vector3D_TransformQuaternion(
  1673. const TQ3Vector3D * vector3D,
  1674. const TQ3Quaternion * quaternion,
  1675. TQ3Vector3D * result);
  1676. /*
  1677. * Q3Point3D_TransformQuaternion()
  1678. *
  1679. * Availability:
  1680. * Non-Carbon CFM: not available
  1681. * CarbonLib: not available
  1682. * Mac OS X: not available
  1683. */
  1684. EXTERN_API_C( TQ3Point3D * )
  1685. Q3Point3D_TransformQuaternion(
  1686. const TQ3Point3D * point3D,
  1687. const TQ3Quaternion * quaternion,
  1688. TQ3Point3D * result);
  1689. /******************************************************************************
  1690. ** **
  1691. ** Volume Routines **
  1692. ** **
  1693. *****************************************************************************/
  1694. /*
  1695. * Q3BoundingBox_Copy()
  1696. *
  1697. * Availability:
  1698. * Non-Carbon CFM: not available
  1699. * CarbonLib: not available
  1700. * Mac OS X: not available
  1701. */
  1702. EXTERN_API_C( TQ3BoundingBox * )
  1703. Q3BoundingBox_Copy(
  1704. const TQ3BoundingBox * src,
  1705. TQ3BoundingBox * dest);
  1706. /*
  1707. * Q3BoundingBox_Union()
  1708. *
  1709. * Availability:
  1710. * Non-Carbon CFM: not available
  1711. * CarbonLib: not available
  1712. * Mac OS X: not available
  1713. */
  1714. EXTERN_API_C( TQ3BoundingBox * )
  1715. Q3BoundingBox_Union(
  1716. const TQ3BoundingBox * v1,
  1717. const TQ3BoundingBox * v2,
  1718. TQ3BoundingBox * result);
  1719. /*
  1720. * Q3BoundingBox_Set()
  1721. *
  1722. * Availability:
  1723. * Non-Carbon CFM: not available
  1724. * CarbonLib: not available
  1725. * Mac OS X: not available
  1726. */
  1727. EXTERN_API_C( TQ3BoundingBox * )
  1728. Q3BoundingBox_Set(
  1729. TQ3BoundingBox * bBox,
  1730. const TQ3Point3D * min,
  1731. const TQ3Point3D * max,
  1732. TQ3Boolean isEmpty);
  1733. /*
  1734. * Q3BoundingBox_UnionPoint3D()
  1735. *
  1736. * Availability:
  1737. * Non-Carbon CFM: not available
  1738. * CarbonLib: not available
  1739. * Mac OS X: not available
  1740. */
  1741. EXTERN_API_C( TQ3BoundingBox * )
  1742. Q3BoundingBox_UnionPoint3D(
  1743. const TQ3BoundingBox * bBox,
  1744. const TQ3Point3D * point3D,
  1745. TQ3BoundingBox * result);
  1746. /*
  1747. * Q3BoundingBox_UnionRationalPoint4D()
  1748. *
  1749. * Availability:
  1750. * Non-Carbon CFM: not available
  1751. * CarbonLib: not available
  1752. * Mac OS X: not available
  1753. */
  1754. EXTERN_API_C( TQ3BoundingBox * )
  1755. Q3BoundingBox_UnionRationalPoint4D(
  1756. const TQ3BoundingBox * bBox,
  1757. const TQ3RationalPoint4D * point4D,
  1758. TQ3BoundingBox * result);
  1759. /*
  1760. * Q3BoundingBox_SetFromPoints3D()
  1761. *
  1762. * Availability:
  1763. * Non-Carbon CFM: not available
  1764. * CarbonLib: not available
  1765. * Mac OS X: not available
  1766. */
  1767. EXTERN_API_C( TQ3BoundingBox * )
  1768. Q3BoundingBox_SetFromPoints3D(
  1769. TQ3BoundingBox * bBox,
  1770. const TQ3Point3D * points3D,
  1771. unsigned long numPoints,
  1772. unsigned long structSize);
  1773. /*
  1774. * Q3BoundingBox_SetFromRationalPoints4D()
  1775. *
  1776. * Availability:
  1777. * Non-Carbon CFM: not available
  1778. * CarbonLib: not available
  1779. * Mac OS X: not available
  1780. */
  1781. EXTERN_API_C( TQ3BoundingBox * )
  1782. Q3BoundingBox_SetFromRationalPoints4D(
  1783. TQ3BoundingBox * bBox,
  1784. const TQ3RationalPoint4D * points4D,
  1785. unsigned long numPoints,
  1786. unsigned long structSize);
  1787. /******************************************************************************
  1788. ** **
  1789. ** Sphere Routines **
  1790. ** **
  1791. *****************************************************************************/
  1792. /*
  1793. * Q3BoundingSphere_Copy()
  1794. *
  1795. * Availability:
  1796. * Non-Carbon CFM: not available
  1797. * CarbonLib: not available
  1798. * Mac OS X: not available
  1799. */
  1800. EXTERN_API_C( TQ3BoundingSphere * )
  1801. Q3BoundingSphere_Copy(
  1802. const TQ3BoundingSphere * src,
  1803. TQ3BoundingSphere * dest);
  1804. /*
  1805. * Q3BoundingSphere_Union()
  1806. *
  1807. * Availability:
  1808. * Non-Carbon CFM: not available
  1809. * CarbonLib: not available
  1810. * Mac OS X: not available
  1811. */
  1812. EXTERN_API_C( TQ3BoundingSphere * )
  1813. Q3BoundingSphere_Union(
  1814. const TQ3BoundingSphere * s1,
  1815. const TQ3BoundingSphere * s2,
  1816. TQ3BoundingSphere * result);
  1817. /*
  1818. * Q3BoundingSphere_Set()
  1819. *
  1820. * Availability:
  1821. * Non-Carbon CFM: not available
  1822. * CarbonLib: not available
  1823. * Mac OS X: not available
  1824. */
  1825. EXTERN_API_C( TQ3BoundingSphere * )
  1826. Q3BoundingSphere_Set(
  1827. TQ3BoundingSphere * bSphere,
  1828. const TQ3Point3D * origin,
  1829. float radius,
  1830. TQ3Boolean isEmpty);
  1831. /*
  1832. * Q3BoundingSphere_UnionPoint3D()
  1833. *
  1834. * Availability:
  1835. * Non-Carbon CFM: not available
  1836. * CarbonLib: not available
  1837. * Mac OS X: not available
  1838. */
  1839. EXTERN_API_C( TQ3BoundingSphere * )
  1840. Q3BoundingSphere_UnionPoint3D(
  1841. const TQ3BoundingSphere * bSphere,
  1842. const TQ3Point3D * point3D,
  1843. TQ3BoundingSphere * result);
  1844. /*
  1845. * Q3BoundingSphere_UnionRationalPoint4D()
  1846. *
  1847. * Availability:
  1848. * Non-Carbon CFM: not available
  1849. * CarbonLib: not available
  1850. * Mac OS X: not available
  1851. */
  1852. EXTERN_API_C( TQ3BoundingSphere * )
  1853. Q3BoundingSphere_UnionRationalPoint4D(
  1854. const TQ3BoundingSphere * bSphere,
  1855. const TQ3RationalPoint4D * point4D,
  1856. TQ3BoundingSphere * result);
  1857. /*
  1858. * Q3BoundingSphere_SetFromPoints3D()
  1859. *
  1860. * Availability:
  1861. * Non-Carbon CFM: not available
  1862. * CarbonLib: not available
  1863. * Mac OS X: not available
  1864. */
  1865. EXTERN_API_C( TQ3BoundingSphere * )
  1866. Q3BoundingSphere_SetFromPoints3D(
  1867. TQ3BoundingSphere * bSphere,
  1868. const TQ3Point3D * points3D,
  1869. unsigned long numPoints,
  1870. unsigned long structSize);
  1871. /*
  1872. * Q3BoundingSphere_SetFromRationalPoints4D()
  1873. *
  1874. * Availability:
  1875. * Non-Carbon CFM: not available
  1876. * CarbonLib: not available
  1877. * Mac OS X: not available
  1878. */
  1879. EXTERN_API_C( TQ3BoundingSphere * )
  1880. Q3BoundingSphere_SetFromRationalPoints4D(
  1881. TQ3BoundingSphere * bSphere,
  1882. const TQ3RationalPoint4D * points4D,
  1883. unsigned long numPoints,
  1884. unsigned long structSize);
  1885. #endif /* CALL_NOT_IN_CARBON */
  1886. #if PRAGMA_ENUM_ALWAYSINT
  1887. #pragma enumsalwaysint reset
  1888. #ifdef __QD3DMATH__RESTORE_TWOBYTEINTS
  1889. #pragma fourbyteints off
  1890. #endif
  1891. #elif PRAGMA_ENUM_OPTIONS
  1892. #pragma option enum=reset
  1893. #elif defined(__QD3DMATH__RESTORE_PACKED_ENUMS)
  1894. #pragma options(pack_enums)
  1895. #endif
  1896. #if PRAGMA_STRUCT_ALIGN
  1897. #pragma options align=reset
  1898. #elif PRAGMA_STRUCT_PACKPUSH
  1899. #pragma pack(pop)
  1900. #elif PRAGMA_STRUCT_PACK
  1901. #pragma pack()
  1902. #endif
  1903. #ifdef PRAGMA_IMPORT_OFF
  1904. #pragma import off
  1905. #elif PRAGMA_IMPORT
  1906. #pragma import reset
  1907. #endif
  1908. #ifdef __cplusplus
  1909. }
  1910. #endif
  1911. #endif /* __QD3DMATH__ */