2016-05-14 1 views
0

Je semble avoir un problème avec un problème stupide comme le stockage de la valeur absolue de Eigen vector3d.Stocker la valeur absolue d'un vecteur propre dans la variable

Je veux calculer le pow(p.cwiseAbs(),2) mais puisque p.cwiseAbs() n'est pas un double, l'appel de fonction ne fonctionne pas. J'ai alors essayé de le stocker dans une variable .. mais de toute façon il ne semble pas possible ..

ex.

double p_abs = p.cwiseAbs(); 

Message d'erreur:

error: cannot convert ‘const Eigen::CwiseUnaryOp<Eigen::internal::scalar_abs_op<double>, const Eigen::Matrix<double, 3, 1> >’ to ‘double’ in initialization 
    double p_abs = p.cwiseAbs(); 

Comment calculer la pow(..,2) de la valeur absolue du vecteur ?.

L'expression que je suis en train d'écrire en code est:

L'expression que je suis en train de coder est celui expliqué par la première réponse à ce poste.

https://math.stackexchange.com/questions/1784106/how-do-i-compute-the-closest-points-on-a-sphere-given-a-point-outside-the-sphere/1784159#1784159

+0

Que voulez-vous dire par "ne fonctionne pas"? Erreur de compilateur? Valeur incorrecte dans la variable? Ou quoi? –

+0

A en juger par la documentation, il peut s'agir d'une incompatibilité de type. Êtes-vous sûr que la valeur de retour de 'cwiseAbs' peut être convertie en' double'? Est-ce que 'auto p_abs = p.cwiseAbs();' fonctionne? –

+0

Pas jusqu'à ce que vous nous disiez ce que "ne fonctionne pas" signifie. –

Répondre

0

Pour répondre à la question initiale "how-do-i-compute-les-plus proches points-on-a-sphère donnée-un-point-hors-la-sphère" à l'aide Eigen:

Vector3d center, P, Q; 
double radius; 
Q = center + radius * (P-center).normalized() 
1

Comment calculer le pow (.., 2) de la valeur absolue du vecteur?

Vous êtes probablement à la recherche de la norme au carré. C'est tout simplement:

p.squaredNorm(); 
+0

Plutôt la racine carrée de la norme au carré. –