Table des matières
2. Opérations vectorielles de base
Ajout de vecteur et soustraction
Multiplication et division scalaire
3. Magnitude et normalisation
Magnitude (longueur)
Normalisation
4. Produit DOT
5. Produit croisé (3D uniquement)
6. Distance entre deux points
7. Interpolation linéaire (Lerp)
8. Cas d'utilisation pratiques en PHP
Maison développement back-end tutoriel php Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP

Jul 29, 2025 am 04:25 AM
PHP Math

Un vecteur dans les graphiques PHP représente la position, la direction ou la vitesse à l'aide d'une classe comme Vector3d avec des composants x, y, z. 2. Les opérations de base comprennent l'addition, la soustraction, la multiplication scalaire et la division pour le mouvement et la mise à l'échelle. 3. L'amplitude est calculée via le théorème de Pythagore et la normalisation convertit un vecteur en un vecteur unitaire pour une direction cohérente. 4. Le produit DOT détermine l'alignement entre les vecteurs, utile pour l'éclairage et les calculs d'angle. 5. Le produit transversal en 3D donne un vecteur perpendiculaire, essentiel aux normales et aux rotations. 6. La distance entre les points est dérivée de l'ampleur de leur différence. 7. L'interpolation linéaire (LERP) permet des transitions lisses entre les vecteurs pour les animations. 8. Les cas d'utilisation PHP pratiques incluent la simulation logique de jeu, la génération de SVG et la finition de chemin, où les mathématiques vectorielles assurent un raisonnement spatial précis malgré la nature non réel de PHP.

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP

Lorsque vous travaillez avec des graphiques 2D ou 3D dans PHP, en particulier dans des contextes tels que le développement de jeux, la manipulation d'images ou les animations procédurales, vous aurez souvent besoin de gérer les positions, les directions et les transformations. Bien que PHP ne soit pas traditionnellement utilisé pour les graphiques haute performance, la compréhension des mathématiques vectorielles est essentielle pour implémenter la logique comme le mouvement, la détection de collision ou les systèmes de caméras dans des moteurs personnalisés ou des simulations backend.

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP

Voici une ventilation pratique des principes fondamentaux des mathématiques vectorielles dont vous avez besoin, adaptée aux graphiques 2D / 3D, et comment les implémenter en PHP.


1. Qu'est-ce qu'un vecteur?

Dans la programmation graphique, un vecteur est un objet mathématique qui a à la fois une magnitude (longueur) et une direction . Il est couramment utilisé pour représenter:

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP
  • Position (par exemple, (x, y) ou (x, y, z) )
  • Vitesse (à quelle vitesse et dans quelle direction quelque chose bouge)
  • Accélération
  • Direction (par exemple, Direction lumineuse, Normales de surface)

Dans PHP, vous pouvez représenter un vecteur 2D ou 3D en utilisant une classe simple:

 classe vector3d {
    public $ x, $ y, $ z;

    fonction publique __construct ($ x = 0, $ y = 0, $ z = 0) {
        $ this-> x = $ x;
        $ this-> y = $ y;
        $ this-> z = $ z;
    }

    // pour 2d, utilisez simplement $ z = 0 et ignorez-le
}

2. Opérations vectorielles de base

Ce sont les éléments constitutifs des mathématiques vectorielles.

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP

Ajout de vecteur et soustraction

  • Ajout : Combinez deux vecteurs (par exemple, déplacer par vitesse).
  • Soustraction : obtenir la direction d'un point à un autre.
 fonction publique add (vector3d $ v): vector3d {
    Renvoie un nouveau vector3d ($ this-> x $ v-> x, $ this-> y $ v-> y, $ this-> z $ v-> z);
}

Fonction publique Soustraire (Vector3d $ v): vector3d {
    Renvoie un nouveau vector3d ($ this-> x - $ v-> x, $ this-> y - $ v-> y, $ this-> z - $ v-> z);
}

Exemple:

 $ position = new Vector3d (1, 2, 0);
$ Velocity = new Vector3d (0,5, -0,3, 0);
$ newPosition = $ position-> add ($ VELOCITY); // (1,5, 1,7, 0)

Multiplication et division scalaire

Utilisé pour mettre à l'échelle un vecteur (par exemple, ralentir le mouvement).

 Fonction publique Multiply (float $ scalar): vector3d {
    retourner new Vector3d ($ this-> x * $ scalar, $ this-> y * $ scalar, $ this-> z * $ scalar);
}

Divide de la fonction publique (float $ scalar): vector3d {
    if ($ scalar == 0) lancez un nouveau InvalidArgumentException ("ne peut pas diviser par zéro");
    Renvoie un nouveau vector3d ($ this-> x / $ scalar, $ this-> y / $ scalar, $ this-> z / $ scalar);
}

3. Magnitude et normalisation

Magnitude (longueur)

La longueur d'un vecteur est calculée à l'aide du théorème de Pythagore .

Pour 3D:

 | V | = √ (x² y² z²)
 Maîtritude de la fonction publique (): float {
    return sqrt ($ this-> x ** 2 $ this-> y ** 2 $ this-> z ** 2);
}

Normalisation

Fait qu'un vecteur ait une longueur de 1 (vecteur unitaire), utile pour les directions.

 Fonction publique Normalize (): Vector3d {
    $ mag = $ this-> magnitude ();
    if ($ mag == 0) renvoyer un nouveau vector3d (0, 0, 0);
    retourner $ this-> divide ($ mag);
}

Exemple:

 $ direction = new Vector3d (3, 4, 0);
$ unit = $ direction-> normaliser (); // (0,6, 0,8, 0) - la longueur est maintenant 1

4. Produit DOT

Le produit DOT vous indique combien deux vecteurs sont alignés. C'est une valeur scalaire.

Formule:

 a · b = ax * bx ay * par az * bz

Aussi:

 a · b = | a || b | cos (θ)

Utile pour:

  • Vérifier si deux directions sont confrontées à la même manière
  • Amélioration de la face arrière
  • Calculs d'éclairage (angle entre la lumière et la surface)
 Fonction publique Dot (vector3d $ v): float {
    retourner $ this-> x * $ v-> x $ this-> y * $ v-> y $ this-> z * $ v-> z;
}

Exemple:

 $ Forward = new Vector3d (1, 0, 0);
$ autre = nouveau Vector3d (0,7, 0,7, 0);
$ anglecos = $ Forward-> dot ($ autre); // 0,7 → environ 45 degrés

5. Produit croisé (3D uniquement)

Renvoie un vecteur perpendiculaire à deux vecteurs d'entrée. Crucial pour:

  • Trouver des normales de surface
  • Calcul des axes de couple ou de rotation

Formule (simplifiée):

 a × b = (ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx)
 Cross de fonction publique (vector3d $ v): vector3d {
    Renvoie un nouveau Vector3d (
        $ this-> y * $ v-> z - $ this-> z * $ v-> y,
        $ this-> z * $ v-> x - $ this-> x * $ v-> z,
        $ this-> x * $ v-> y - $ this-> y * $ v-> x
    ));
}

Remarque: le produit croisé est anti-commutatif : a × b = -(b × a)


6. Distance entre deux points

Traiter les positions comme des vecteurs. La distance est l'ampleur de la différence.

 Distance publique de fonction statique (vector3d $ a, vector3d $ b): float {
    retourner $ a-> soustrait ($ b) -> magnitude ();
}

7. Interpolation linéaire (Lerp)

Transition en douceur entre deux vecteurs. Utilisé dans les animations, mouvement de la caméra.

 Fonction publique Lerp (Vector3d $ cible, float $ t): vector3d {
    // $ T est entre 0 (démarrage) et 1 (fin)
    $ t = max (0, min (1, $ t));
    Renvoie un nouveau Vector3d (
        $ this-> x ($ cible-> x - $ this-> x) * $ t,
        $ this-> y ($ cible-> y - $ this-> y) * $ t,
        $ this-> z ($ cible-> z - $ this-> z) * $ t
    ));
}

8. Cas d'utilisation pratiques en PHP

Même si PHP ne rend pas les graphiques directement, vous pourriez:

  • Simuler le mouvement de l'objet sur un serveur
  • Valider la logique du jeu
  • Générer des coordonnées SVG ou Canvas
  • Des chemins de précompute ou des zones de collision

Exemple: déplacez un objet vers une cible

 $ position = new Vector3d (0, 0, 0);
$ cible = new Vector3d (10, 5, 0);
$ direction = $ cible-> soustraire ($ position) -> normaliser ();
$ Speed = 0,2;
$ position = $ position-> add ($ direction-> multiplier ($ speed));

Bonus: 2d vs 3d

  • Pour 2D , définissez simplement $z = 0 et ignorez-le.
  • Utilisez la classe Vector2D si vous souhaitez optimiser (moins d'opérations).
  • Le produit croisé n'existe pas en 2D, mais vous pouvez calculer le vecteur perpendiculaire : (-y, x) ou (y, -x) .

Notes finales

  • PHP n'est pas optimisé pour les graphiques en temps réel, mais les mathématiques vectorielles sont faciles à implémenter et utiles pour la logique backend.
  • Considérez la magnitude de la mise en cache si elle est utilisée souvent (comparaisons d'amplitude carrée éviter sqrt ).
  • Vérifiez toujours les vecteurs zéro avant de normaliser.

Fondamentalement, une fois que vous avez l'ajout de vecteur, la soustraction, le produit DOT et la normalisation, vous pouvez construire la plupart des mouvements et une logique spatiale nécessaire dans les environnements 2D / 3D, même en PHP. Il ne s'agit pas de vitesse; Il s'agit de l'exactitude et de la clarté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Gestion des calculs de crypto-monnaie: pourquoi BCMath est essentiel en PHP Gestion des calculs de crypto-monnaie: pourquoi BCMath est essentiel en PHP Aug 01, 2025 am 07:48 AM

BCMATHISESSEntialForAccurateCryptoSurrencyCalculsInphpbecausefloating-pointarithmetintroduceUnacceptyrouningerRors.1.floating-pointnumberslike0.1 0.2yieldIxpromiteReSults (par exemple.

Naviguer dans les pièges de l'inexactitude des points flottants dans PHP Naviguer dans les pièges de l'inexactitude des points flottants dans PHP Jul 29, 2025 am 05:01 AM

Les nombres de points flottants sont inexacts est un problème courant en PHP. La réponse est qu'il utilise le format à double précision IEEE754, ce qui rend les décimales décimales incapables d'être représentées avec précision; Les nombres tels que 1,0,1 ou 0,2 sont des décimales de boucle infinie en binaire, et l'ordinateur doit les tronquer pour provoquer des erreurs; 2. Lorsque vous comparez les numéros de points flottants, vous devez utiliser la tolérance au lieu de ==, comme ABS ($ a- $ b)

Les nuances de précision numérique: `rond ()`, `ceil () ', et` plancher ()' Les nuances de précision numérique: `rond ()`, `ceil () ', et` plancher ()' Jul 29, 2025 am 04:55 AM

Round () utilise "Roundhalftoeven", pas "Roundhalfup", Soround (2.5) revient2Andround (3.5) Retourds4tominimizestaticticalbias, qui s'assure unprément les éventualités.

Construire une boîte à outils d'analyse statistique: moyenne, médiane et écart type en PHP Construire une boîte à outils d'analyse statistique: moyenne, médiane et écart type en PHP Jul 30, 2025 am 05:17 AM

Calculez la moyenne: utilisez array_sum () pour diviser par le nombre d'éléments pour obtenir la moyenne; 2. Calculez la médiane: après tri, prenez la valeur intermédiaire et prenez la moyenne des deux nombres intermédiaires lorsqu'il y a même des éléments; 3. Calculez l'écart type: trouvez d'abord la moyenne, puis calculez la moyenne de la différence carrée entre chaque valeur et la moyenne (l'échantillon est n-1), et enfin prendre la racine carrée; En encapsulant ces trois fonctions, des outils statistiques de base peuvent être construits, adaptés à l'analyse des données de petites et moyennes, et faire attention au traitement des tableaux vides et des entrées non numériques, et enfin réaliser les caractéristiques statistiques de base des données sans s'appuyer sur des bibliothèques externes.

Benchmarking de performance: mathématiques natives vs BCMath vs GMP Benchmarking de performance: mathématiques natives vs BCMath vs GMP Jul 31, 2025 am 06:29 AM

Utenativemathforfast, petites opérations-numbres avec

Le rôle de l'arithmétique modulaire dans PHP pour les applications cryptographiques Le rôle de l'arithmétique modulaire dans PHP pour les applications cryptographiques Jul 30, 2025 am 12:17 AM

ModularaRestithmeticissentialInphpcryptographicAplicationsDspitePhpnotBeingAhigh-Performancelanguage; 2.itunderpinspublic-keystemslikersaanddiffie-hellmanthroughoperations suuchasmodularexponentiationAndinverses; 3.Php’snative% opératorfailswithlargeccorcecccorc

Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP Fondamentaux des mathématiques vectorielles pour les graphiques 2D / 3D en PHP Jul 29, 2025 am 04:25 AM

EvectorInphpgraphicsrepresentsPosition, direction, orvelocityusingaclasslikevector3dwithx, y, zComponents.2. basicOperations includeaddition, soustraction, scalarmultiplication, anddivisionFormovementandScaling.3.gagnitude alecledviathepylenthereherem, a a a a

Accélération de l'arithmétique de grand nombre: une plongée profonde dans l'extension GMP de PHP Accélération de l'arithmétique de grand nombre: une plongée profonde dans l'extension GMP de PHP Jul 29, 2025 am 04:53 AM

GMPISESSEntialForHandlingLargeintegersInphpbeyondnativelimits.1.GMPENABLESArbitrary-Précision IntegeraRithMeticUsingoptimizedClibrarys, Unkenative IntegerstHatoverfloworBcmathThatisslowerandString basé sur

See all articles