Étape 5: 2e programme de traitement
N’oubliez pas de maths de vecteur 3D tout ce qui de l’école, vous pensiez que vous n’utiliseriez jamais ? Nous allons vous n’avez pas encore utiliser car je l’ai fait pour vous.
Dans cette dernière partie, nous allons écrire une autre esquisse de traitement qui prend ces coordonnées en pixels blancs et projets sur le plan créés par le laser linéaire. Chaque pixel blanc devient une ligne imaginaire qui sortent de la caméra dans l’espace 3D. Où chaque ligne croise le plan laser imaginaire, un point de données est tracé. Cela est répété pour chaque pixel blanc dans chaque image de la webcam, finit par constituer un nuage de points 3D. Il suffit de regarder la vidéo...
La seule partie de l’installation que je mentionnerai ici est le paramètre « rotcam ». C’est où vous devez insérer l’angle de la webcam, où 0deg est face vers l’avant, et 90deg est à la recherche sur le laser. Il devrait s’asseoir entre 10 et 40 degrés selon ce que vous numérisez. Petits angles pour loin des objets et des angles plus grands pour les proches.
D’abord dans la boucle de dessin, que nous avons besoin d’élargir les plans de délimitation à l’aide de « perspectives » c’est arrêt de loin et choses de très près de disparaître. Nous devons créer 3 lignes pour représenter les X, Y et z et les rendre rouge, vert et bleu.
Ensuite nous pouvons mettre en place notre caméra qui nous permet de regarder autour de l’espace 3D. Nous pouvons utiliser sin et cos ainsi que de la position X de la souris sur l’écran pour créer un effet de plateau tournant pour afficher l’objet plus facilement. Jouer avec cela en conséquence pour obtenir quelque chose de confortable à utiliser.
Alors maintenant, nous allons sauter dans la boucle qui fait tous les maths. Cependant nous voulons uniquement s’exécuter si une touche est enfoncée. Autrement dit, qu'il n’a qu’à faire les calculs une fois au lieu de répéter encore et encore.
Ici, nous avons besoin de charger le fichier de texte avec les coordonnées du pixel blanc et enregistrez-le à un vecteur de string « maChaîne ». Honnêtement, je ne sais pas pourquoi il doit être un vecteur, il prend seulement le premier élément, mais il refuse de travailler si c’est seulement une chaîne. BON, nous devons ensuite faire des vecteurs massifs flotteur vide pour X, Y et Z coordonnées où chacun sera remplie avec le composant correspondant de XYZ de chaque point de données unique dans le nuage de points.
« myString « doit réparti à chaque image de la webcam en utilisant splitTokens pour »; ». Il a ré-écrit « myString » comme un vecteur avec les coordonnées d’une image de la caméra dans chaque élément.
Nous pouvons maintenant sauter dans une boucle qui se répète une fois pour chaque image de la caméra enregistré dans myString.
Ensuite, nous devons faire un autre vecteur de chaîne appelé « stringPart », qui se scinde « myString » encore plus loin. Elle elle divise en particulier X et Y blanc coordonnées en pixels maintenant contenues dans chaque élément. C’est seulement enregistre une image à la fois.
Angle actuel du moteur est enregistré dans « rotmot » et vient du premier élément de la « stringPart », vecteur converti en float.
Pour ce prochain bit, notre espace 3D point (0,0,0) de départ est le centre de l’arbre du moteur sur la surface du bras.
Ici, nous utilisons une fonction appelée pushMatrix. Cela sert à modifier notre position local dans l’espace 3D, il change fondamentalement où est le centre de notre univers 3D. Nous pouvons ensuite utiliser fonctions modelX, Y, Z pour trouver le vrai coordonnées globales d’un point après pushMatrix translations et rotations. Trucs très utiles ! Donc dans ce premier pushMatrix, nous faites tourner en Y de l’angle actuel de moteurs.
Ensuite aller dans un autre pushMatrix (l’un dans l’autre) et du centre de l’arbre du moteur le long du bras se traduisent par le laser. Ici, nous pouvons créer l’équation dans le plan linéaire lasers. Quand je dis plan laser, je veux parler un plan où le laser peut briller sur un point quelconque le long du plan. Alors le plan passe par le laser et par le biais de n’importe quoi, il brille sur.
Pour rendre l’équation de l’avion, nous avons besoin des deux points qui font une ligne perpendiculaire au plan du laser. Il s’agit de vecteur NORMAL de l’avion. L’équation est dérivée de ceci et un moment donné dans l’avion.
Nous utilisons ensuite popMatrix à défaire ce qu’a fait le pushMatrix. Nous avons seulement utiliser une fois donc nous revenons vers le centre de moteurs mais toujours avec sa transformation de rotation.
Dans cette prochaine partie, nous travaillons dans une autre boucle que s’exécute une fois pour chaque pixel blanc, donc rend la longueur du stringPart mais incrémente dans deux. C’est parce que nous voulons utiliser les coordonnées X et Y dans cette boucle en même temps.
Alors maintenant, nous travaillons avec un seul pixel blanc qui deviendra un point de données unique. Dans cette boucle, nous devons tout d’abord de transformer les coordonnées XY de pixel blanc dans les angles qui agissent comme le XY angles pour la ligne de projection imaginaire vue de centre de la caméra... vérifier les images pour voir de quoi je parle.
Maintenant nous avons besoin d’utiliser pushMatrix à nouveau et de passer d’arbre du moteur le long du bras jusqu’au centre de caméras. Puis nous faire tourner en Y de l’angle de la caméra et enfin nous faire tourner en X et Y à nouveau en utilisant les angles, j’ai décrit dans le dernier paragraphe. Alors maintenant nos coordonnées locales sont dans la caméra, visant directement le long de la ligne de projection d’un pixel blanc.
Maintenant, nous faisons de la ligne de projection de la même manière, nous avons fait le vecteur normal à l’avion. Faire un point au centre de l’appareil photo et un autre point à quelque distance le long de la ligne de projection. De là, nous faisons l’équation de la ligne.
Ici nous pop la matrice pour retourner à l’arbre du moteur avec la rotation du moteur.
Maintenant, nous utilisons une version réarrangée de l’équation de plan avec l’équation de la ligne insérée dedans et résoudre pour ' t '. Voir l’équation réorganisée dans les images. Farcir ensuite le résultat pour ' t ' dans les équations de la ligne pour XY et Z. Alors maintenant, nous avons nos coordonnées XYZ pour un point de données unique ! Le pousser dans les « pointe à tracer » des vecteurs qui détiennent tous les points.
Utilisez popMatrix à nouveau pour renvoyer vers le début du système de coordonnées mondial sans traductions ou des transformations de rotation.
Alors maintenant, nous avons 3 vecteurs énormes pour XY et Z éléments de chaque donnée point mais n’ont pas en fait tiré aucun point pour le nuage de points. Si nous pouvons le faire maintenant. Utilisez une boucle for pour passer par chaque point de données rend en tant que « drawpointX » et dans la boucle, utilisez ' point(drawpointX[i],drawpointY[i],drawpointZ[i]). Il trace un point à chaque intersection entre la ligne de projection d’un pixel blanc et le plan laser.
C’est ça, Bravo ! Hit juste executer et appuyez sur une touche quelconque pour restituer la scène. Assurez-vous que le fichier que vous essayez de lire à partir est enregistré dans le dossier de cette esquisse.