Spatial
Le module Spatial fait partie du cadre d'application Accelerate et a pour objectif principal la création, la manipulation et le calcul
de primitives mathématiques tridimensionnelles. Il met à disposition des structures et des fonctions permettant de représenter et de transformer des objets 3D tels que des
points, des vecteurs, des matrices et des volumes, tout en conservant une API volontairement simple et cohérente. Ce module est conçu pour être léger, rapide à intégrer et
facile à utiliser dans des applications nécessitant des calculs géométriques en trois dimensions.
Disponible sur un large éventail de plateformes Apple - iOS, iPadOS, macOS, Mac Catalyst, tvOS, visionOS et watchOS - le module Spatial garantit
une compatibilité étendue et une cohérence de comportement entre les différents environnements. Cette large prise en charge permet aux développeurs de réutiliser les mêmes concepts
mathématiques et le même code, que ce soit pour des applications mobiles, de bureau, embarquées ou orientées réalité augmentée et réalité mixte.
Aperçu
Le module Spatial est une bibliothèque mathématique 3D légère fournissant une API claire et expressive pour travailler avec des primitives
tridimensionnelles. Il facilite la manipulation des transformations spatiales, comme les translations, rotations et mises à l'échelle, tout en offrant des abstractions adaptées
aux calculs géométriques complexes. Son design met l'accent sur la lisibilité du code et sur la réduction de la complexité, ce qui le rend accessible même pour des développeurs
n'étant pas spécialisés en mathématiques avancées.
Une grande partie de ses fonctionnalités s'inspire directement du support de la géométrie 2D proposé par Core Graphics, mais en étendant ces
concepts à l'espace tridimensionnel. Là où Core Graphics permet de manipuler des formes, des transformations et des coordonnées en deux dimensions, Spatial transpose ces mêmes
principes en 3D, offrant ainsi une continuité conceptuelle naturelle pour les développeurs déjà familiers avec les API graphiques d'Apple.
Grâce à cette approche, le module Spatial constitue une base solide pour des domaines tels que la visualisation scientifique, la simulation
physique, la 3D interactive, la réalité augmentée ou encore le traitement spatial dans les applications multimédias. En combinant simplicité, performance et intégration native
avec le reste du cadre d'application Accelerate, Spatial permet de réaliser des calculs mathématiques tridimensionnels fiables et efficaces, tout en s'adaptant aux contraintes
matérielles et énergétiques des plateformes Apple modernes.
Structures de données
| Swift |
Description |
| struct Vector3D |
Un vecteur à trois éléments. |
| struct Vector3DFloat |
Une structure à simple précision qui définit un vecteur à trois éléments. |
| struct Axis3D |
Constantes décrivant un axe. |
Primitives 2D
| Swift |
Description |
| struct Angle2D |
Un angle géométrique dont la valeur est accessible en radians ou en degrés. |
| struct Angle2DFloat |
Un angle géométrique simple précision dont la valeur est accessible en radians ou en degrés. |
Primitives 3D
| Swift |
Description |
| struct Point3D |
Un point dans un système de coordonnées 3D. |
| struct Point3DFloat |
Une structure à simple précision contenant un point dans un système de coordonnées tridimensionnel. |
| struct Size3D |
Une dimension qui décrit la largeur, la hauteur et la profondeur dans un système de coordonnées 3D. |
| struct Size3DFloat |
Une structure à simple précision contenant les valeurs de largeur, de hauteur et de profondeur. |
| struct Rect3D |
Un rectangle dans un système de coordonnées 3D. |
| struct Rect3DFloat |
Une structure à simple précision contenant l'emplacement et les dimensions d'un rectangle 3D. |
| struct Rotation3D |
Une rotation en trois dimensions. |
| struct Rotation3DFloat |
Une structure à simple précision qui représente une rotation en trois dimensions. |
| struct RotationAxis3D |
Un axe de rotation 3D. |
| struct RotationAxis3DFloat |
Un axe 3D. |
| struct Pose3D |
Une structure contenant une position 3D et une rotation 3D. |
| struct Pose3DFloat |
Une structure à simple précision contenant une position et une rotation. |
| struct ScaledPose3D |
Une structure contenant une position, une rotation et une échelle. |
| struct ScaledPose3DFloat |
Une structure qui contient une position, une rotation et une échelle. |
| struct SphericalCoordinates3D |
Une structure qui définit les coordonnées sphériques dans l'ordre radial, d'inclinaison et azimutal. |
| struct SphericalCoordinates3DFloat |
Une structure à simple précision définissant les coordonnées sphériques dans l'ordre radial, d'inclinaison et azimutal. |
| struct Ray3D |
Un rayon dans un système de coordonnées 3D. |
| struct Ray3DFloat |
Une structure à simple précision contenant l'origine et la direction d'un rayon 3D. |
Transformations affines et projectives
| Swift |
Description |
| struct AffineTransform3D |
Cette structure représente une matrice de transformation affine en trois dimensions, permettant d'effectuer des opérations telles que la translation, la rotation, la mise à l'échelle et le cisaillement sur des objets ou des coordonnées 3D. |
| struct AffineTransform3DFloat |
Cette structure définit une transformation affine 3D équivalente à AffineTransform3D, mais utilisant une représentation en simple précision (Float) afin de réduire l'empreinte mémoire et d'améliorer les performances de calcul. |
| struct ProjectiveTransform3D |
Cette structure décrit une matrice de transformation projective en trois dimensions, utilisée pour représenter des transformations plus générales, incluant la perspective et les projections complexes dans l'espace 3D. |
| struct ProjectiveTransform3DFloat |
Cette structure correspond à une matrice de transformation projective 3D en simple précision, optimisée pour les calculs rapides tout en prenant en charge les effets de projection et de perspective. |
Conversion entre espaces de coordonnées
| Swift |
Description |
| protocol CoordinateSpace3D |
Ce protocole définit un type représentant un espace de coordonnées tridimensionnel, pouvant être utilisé pour convertir des valeurs vers et depuis d'autres espaces de coordonnées 3D. |
| protocol CoordinateSpace3DFloat |
Ce protocole représente une variante en simple précision de CoordinateSpace3D, optimisée pour les calculs utilisant des valeurs de type Float et offrant de meilleures performances. |
| protocol CoordinateSpaceValue3D |
Ce protocole décrit une valeur opaque en trois dimensions, qui peut être résolue en une valeur concrète au sein d'un espace de coordonnées conforme à CoordinateSpace3D. |
| protocol ProjectiveTransformable3D |
Ce protocole définit les capacités nécessaires à un type pour appliquer et supporter des transformations projectives en trois dimensions, incluant les effets de projection et de perspective. |
| protocol ProjectiveTransformable3DFloat |
Ce protocole correspond à la version en simple précision de ProjectiveTransformable3D, destinée aux opérations projectives 3D optimisées pour la performance. |
| struct WorldReferenceCoordinateSpace |
Cette structure représente un espace de coordonnées de référence mondial, servant de point d'ancrage absolu pour positionner et comparer des objets dans un environnement 3D commun. |
Application des fonctions trigonométriques
| Swift |
Description |
| func cos(Angle2D) -> Double |
Cette fonction calcule le cosinus d'un angle bidimensionnel exprimé par un type Angle2D, et retourne le résultat en double précision (Double). |
| func cos(Angle2DFloat) -> Float |
Cette fonction calcule le cosinus d'un angle 2D en simple précision, représenté par Angle2DFloat, et renvoie un résultat de type Float. |
| func cosh(Angle2D) -> Double |
Cette fonction calcule le cosinus hyperbolique d'un angle bidimensionnel de type Angle2D, avec un résultat en double précision. |
| func cosh(Angle2DFloat) -> Float |
Cette fonction calcule le cosinus hyperbolique d'un angle 2D en simple précision (Angle2DFloat) et retourne une valeur Float. |
| func sin(Angle2DFloat) -> Float |
Cette fonction calcule le sinus d'un angle bidimensionnel en simple précision, représenté par Angle2DFloat, et renvoie un résultat Float. |
| func sin(Angle2D) -> Double |
Cette fonction calcule le sinus d'un angle 2D de type Angle2D et fournit le résultat en double précision (Double). |
| func sinh(Angle2D) -> Double |
Cette fonction calcule le sinus hyperbolique d'un angle bidimensionnel en double précision, à partir d'un Angle2D. |
| func sinh(Angle2DFloat) -> Float |
Cette fonction calcule le sinus hyperbolique d'un angle 2D en simple précision (Angle2DFloat) et retourne une valeur de type Float. |
| func tan(Angle2D) -> Double |
Cette fonction calcule la tangente d'un angle bidimensionnel de type Angle2D, avec un résultat en double précision. |
| func tan(Angle2DFloat) -> Float |
Cette fonction calcule la tangente d'un angle 2D en simple précision (Angle2DFloat) et renvoie un résultat de type Float. |
| func tanh(Angle2D) -> Double |
Cette fonction calcule la tangente hyperbolique d'un angle bidimensionnel en double précision, à partir d'un Angle2D. |
| func tanh(Angle2DFloat) -> Float |
Cette fonction calcule la tangente hyperbolique d'un angle 2D en simple précision (Angle2DFloat) et retourne une valeur Float. |
Protocoles
| Swift |
Description |
| protocol Primitive3D |
Un ensemble de méthodes communes aux primitives spatiales. |
| protocol Rotatable3D |
Un ensemble de méthodes définissant l'interface de rotation des entités spatiales. |
| protocol Scalable3D |
Un ensemble de méthodes définissant l'interface de mise à l'échelle des entités spatiales. |
| protocol Shearable3D |
Un ensemble de méthodes définissant l'interface de cisaillement des entités spatiales. |
| protocol Translatable3D |
Un ensemble de méthodes définissant l'interface de traduction des entités spatiales. |
| protocol Volumetric |
Un ensemble de méthodes pour travailler avec des primitives spatiales volumétriques. |
| protocol ClampableWithinRectProtocol |
Un ensemble de méthodes définissant l'interface des entités spatiales pouvant être limitées à un volume. |
| protocol Primitive3DProtocol |
Un ensemble de méthodes communes aux primitives spatiales. |
| protocol Rotatable3DProtocol |
Un ensemble de méthodes définissant l'interface des entités spatiales pouvant pivoter. |
| protocol Scalable3DProtocol |
Un ensemble de méthodes définissant l'interface des entités spatiales pouvant évoluer. |
| protocol Shearable3DProtocol |
Un ensemble de méthodes définissant l'interface des entités spatiales capables de cisaillement. |
| protocol SpatialTypeProtocol |
Ce protocole définit les exigences générales pour tout type spatial dans le module Spatial, servant de base commune pour les entités 3D et garantissant la compatibilité avec les opérations géométriques standard. |
| protocol Transform3DProtocol |
Ce protocole regroupe un ensemble de méthodes communes aux transformations 3D, incluant les opérations comme la rotation, la mise à l'échelle et la composition de transformations sur des objets tridimensionnels. |
| protocol Translatable3DProtocol |
Ce protocole définit l'interface pour les entités spatiales qui peuvent être traduites dans l'espace 3D, c'est-à-dire déplacées selon un vecteur ou une direction spécifique, tout en conservant leurs propriétés géométriques. |
| protocol VolumetricProtocol |
Ce protocole fournit un ensemble de méthodes pour travailler avec des primitives spatiales possédant un volume, telles que des cubes, des sphères ou des cylindres, incluant le calcul de volume, la détection de collision et d'autres propriétés volumétriques. |
Structures
| Swift |
Description |
| struct EulerAnglesFloat |
Cette structure représente les angles d'Euler en simple précision (Float), utilisés pour décrire l'orientation d'un objet dans l'espace tridimensionnel via des rotations successives autour des axes X, Y et Z. |
Énumérations
| Swift |
Description |
| enum AxisWithFactorsFloat |
Cette énumération définit les axes utilisés dans une transformation de cisaillement (shear transform) en simple précision, permettant de spécifier l'axe principal et les facteurs associés pour modifier la forme des primitives 3D. |
Dernière mise à jour : Mercredi, le 18 février 2026