Je travaille sur un projet qui prend des données à partir d'un capteur en mouvement. nous avons converti les données du capteur en coordonnées 3D. l'un des capteurs est planté à portée de main de l'objet. PROBLÈME: Lorsque l'objet déplace sa main vers l'arrière, puis joue dans la direction avant. Donc, je cherche le numéro de l'image à laquelle la main de l'objet se termine en arrière.Comment trouver un changement de direction dans un espace 3D
Juste pour résoudre le problème, ce genre de points peut venir en 3D Voici un exemple de données d'image:
initialement i mis en œuvre ce, en utilisant un changement dans l'axe y. Avec une valeur seuil, le résultat est bon. Mais seulement lorsque la main de l'objet recule et avance avec la valeur décroissante de l'axe y. Mais dans le cas idéal (l'image), la main peut se manifester de n'importe quelle façon, c'est-à-dire avec une valeur croissante de y ou une valeur décroissante de y. Mais je suis sûr que tout en se déplaçant dans la direction du dos, il y aura toujours des augmentations (à l'exception d'une trame de bruit ou d'une valeur aberrante). en utilisant cela, j'ai mis cela en œuvre. `
std::pair<std::pair<int, int>, bool> calculateBacklift(std::vector<glm::vec3> points)
{
std::pair<std::pair<int, int>, bool> backlift;
backlift.second = false;
std::vector<glm::vec3> distanceVec;
for (int i = 0; i < points.size() - 1; ++i)
{
// vector
glm::vec3 distance;
distance.x = points[i + 1].x - points[i].x;
distance.y = points[i + 1].y - points[i].y;
distance.z = points[i + 1].z - points[i].z;
distanceVec.push_back(distance);
}
writeTodisk("distanceVector.csv", distanceVec);
for (int i = 0; i < distanceVec.size(); ++i)
{
// y is major axis and if any of x or z hand changed then i am assuming there can be direction change. this comes from experiment.
if (distanceVec[i].y <= -0.09 && (distanceVec[i].x <= -0.1 || distanceVec[i].z >= 0.9))
{
backlift.first = std::make_pair(1, i + 1);
backlift.second = true;
break;
}
}
return backlift;
}`
Mais cela ne fonctionne pas lorsque la main se lève vers le haut. parce que le changement de l'axe y est positif. Puis je pense à trouver un changement de direction en utilisant le produit scalaire. Et la valeur cos. Mais il détecte également le changement de direction sur l'axe (X, Z). Ou de façon simple, je peux dire que je veux trouver le point de coin dans le déplacement des données du capteur dans la direction de l'axe y (majeur). Quelqu'un peut-il m'aider à résoudre ce problème.
Merci.
Votre question est inintelligible. Vous dites que * back * est + Y, et * forward * peut aussi être + Y, et vous voulez détecter quand on change à l'autre. – Beta
Vous avez besoin d'une heuristique pour déterminer quand le changement de direction (ou de courbure) est significatif. RANSAC est un exemple d'un tel algorithme - il calcule l'ajustement de ligne (presque) optimal pour un ensemble de points de données. – meowgoesthedog
Voulez-vous trouver le "point d'angle" dès qu'il se produit, ou avez-vous toujours le point entier ensemble? – chtz