Bezdepbonusu7Программирование: статьи и ответы

Вопрос

От барицентрического к декартовому

Автор вопроса: CommunityОтветов: 1

У меня есть следующая функция для преобразования точки на той же плоскости, что и треугольник, в барицентрическую точку.

// p0, p1 and p2  and the points that make up this triangle
Vector3d Tri::barycentric(Vector3d p) {
    double triArea = (p1 - p0).cross(p2 - p0).norm() * 0.5;
    double u = ((p1 - p).cross(p2 - p).norm() * 0.5) / triArea;
    double v = ((p0 - p).cross(p2 - p).norm() * 0.5) / triArea;
    double w = ((p0 - p).cross(p1 - p).norm() * 0.5) / triArea;
    return Vector3d(u,v,w);
}

Как я могу написать обратную эту операцию? Я хотел бы написать функцию, которая принимает барицентрическую координату и возвращает декартову точку.

c++3dmathcoordinate-systems

Ответы

Ответ 1 · рейтинг 15 · Viktor Latypov

Декартовы координаты точки можно рассчитать как линейную комбинацию с барицентрическими координатами в качестве коэффициентов:

Vector3d Tri::cartesian(const Vector3d& barycentric) const
{
      return barycentric.x * p0 + barycentric.y * p1 + barycentric.z * p2;
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы