2012-06-29 10 views
6

Mam następującą funkcję do zamiany punktu na tej samej płaszczyźnie, co trójkąt w punkt barycentryczny.Od barycentrycznego do kartezjańskiego

// 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); 
} 

Jak mogę zapisać odwrotność tej operacji? Chciałbym napisać funkcję, która przyjmuje koordynator barycentryczny i zwraca punkt kartezjański.

Odpowiedz

8

kartezjańskich współrzędnych punktu może być obliczona jako liniowa kombinacja z barycentryczną współrzędnych jako współczynniki:

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