Собственный точечный метод: - PullRequest
       6

Собственный точечный метод:

0 голосов
/ 26 сентября 2018

Я конвертирую некоторый псевдо-код в реальный c ++.

Псевдо:

float ac_ab_0 = acos(clamp(dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));

Мой код:

Eigen::Vector3f a = Eigen::Vector3f(0, 0, 0);
Eigen::Vector3f b = Eigen::Vector3f(0, -5.579, -6.747);
Eigen::Vector3f c = Eigen::Vector3f(0, -13.637, -9.751);

Я пытаюсь:

float ac_ab_0 = acos(std::clamp(std::dot(
        normalize(c - a),
        normalize(b - a)), -1, 1));

но я застрял.Как должна выглядеть эта строка: normalize(c - a) с Eigen::Vector3f?

1 Ответ

0 голосов
/ 26 сентября 2018

Eigen::Vector3f имеет метод normalized(), который возвращает нормализованную копию вектора.

Таким образом, вы можете сделать это так:

Eigen::Vector3f c_minus_a_normalized = (c - a).normalized();
Eigen::Vector3f b_minus_a_normalized = (b - a).normalized();

float ac_ab_0 = acos(std::clamp(c_minus_a_normalized.dot(b_minus_a_normalized), -1.f, 1.f));

Вы должны проверить Eigen краткий справочник для получения дополнительной информации.

...