Ce que je suis en train de faire:mise à l'échelle uniforme sur la matrice de points autour du point C++ moyenne
1. échelle uniformément un tableau de points autour d'un point. 2. Un point doit être un point moyen de tableau de points.
Le code ci-dessous, semble fonctionner, mais je ne sais pas si c'est la bonne façon de le faire.
Je sais que la mise à l'échelle uniforme consiste simplement à multiplier les points par une certaine valeur, mais c'est une mise à l'échelle sur un point 0,0,0, comment le faire autour du point moyen?
Le code peut être subdivisé par étapes suivantes:
- Obtenez le point moyen du tableau de points, en additionnant toutes les positions et en divisant par un certain nombre de points.
- Le ratio est la valeur d'échelle
- Ensuite, je soustractive le vecteur pour obtenir un vecteur pointant du point au point moyen.
- Je normalise que le vecteur (je reçois vecteur unité)
- Puis-je ajouter que vecteur normalisé au point courant multiplié par (1 - rapport) * 0,5
Ce dernier bit 5ème point a été totalement de la vérification totale longueur de la valeur. Tous les exemples que j'ai donnés auparavant utilisaient des matrices en mathématiques, et je ne pouvais vraiment pas lire les opérations matricielles.
Est-ce la méthode d'échelle uniforme correcte, si ce n'est pas vous pourriez signaler ce que je fais mal?
//Get center of a curve
//That is average of all points
MatMxN curveCenter = MatMxN::Zero(2, 1); //This is just 1 vector/point with x and y coordinates
for (int i = 0; i < n; i++)
curveCenter += points.col(i);
curveCenter /= n;
//Scaling value
float ratio = 1.3;
//Get vector pointing to center and move by ratio
for (int i = 0; i < n; i++) {
MatMxN vector = curveCenter - points.col(i);
MatMxN unit = vector.normalized();
points.col(i) += unit*(1 - ratio)*0.5; //points.col(i) this is point in array
}
La mise à l'échelle uniforme d'un point dans l'espace est une transformation semi-linéaire. Il suffit de multiplier tout le composant du point dans l'espace pour le même facteur d'échelle. Si vous voulez aussi centrer l'origine du cadre de référence au centre de masse du nuage de points, vous calculez la moyenne le long des coordonnées. Il est semi-linéaire car après avoir mis à l'échelle la métrique (module par exemple) sur le vecteur est modifiée (par le facteur d'échelle): 'points.col (i) * = ratio' est tout ce dont vous avez besoin. –
Je pense que vous devez définir quel point sera le centre de la mise à l'échelle. Centre de la boîte englobante? Le centre de masse? En bas à gauche du cadre de délimitation? Un des points? – Galik
Votre description n'est pas claire, donc personne n'a d'aide pour travailler si votre approche atteint. Point 2: quel ratio? Qu'avez-vous l'intention de mettre à l'échelle? Point 3: quels vecteurs soustrayez-vous? Que voulez-vous dire par "longueur totale de la valeur"? D'une manière générale, une mise à l'échelle uniforme nécessite de sélectionner un centre quelconque et d'ajuster d'autres points par rapport à celui-ci. Votre description ne transmet rien de pareil pour moi. – Peter