2016-11-24 3 views
0

내 문제는 다음과 같습니다 : 3 점으로 삼각형을 정의했습니다.삼각형에있는 점의 위치를 ​​얻으십시오

좌표계는 다음과 같이 정의된다 : 위쪽

  • Z 축 헤드 내 화면에서 오른쪽
  • Y 축 헤드에

    • X 축 헤드

    이것은 OpenGL에서 사용되는 가장 일반적인 좌표계입니다 (저는 생각합니다). 이제 삼각형이 생겼습니다. 모든 점의 X와 Z 값이 다릅니다. X와 Z 좌표를 부여하여 삼각형의 Y 좌표를 찾아야합니다. 누군가가이 방법을 쓰고 불렀다 그것을 barryCentric (점 A, 점 B, 점 C, 포인트 POS) (나는 그가 "무게 중심"을 의미 확신하지만, 잘.

    public static float barryCentric(Vector3f p1, Vector3f p2, Vector3f p3, Vector3f pos) { 
         float det = (p2.z - p3.z) * (p1.x - p3.x) + (p3.x - p2.x) * (p1.z - p3.z); 
         float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.y - p3.z))/det; 
         float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.y - p3.z))/det; 
         float l3 = 1.0f - l1 - l2; 
         return l1 * p1.y + l2 * p2.y + l3 * p3.y; 
        } 
    

    나는 그 방법은 경우에 확실하지 않다 어떤 의미가 있습니다. 나는이 내가 원하는 것이 아니다 생각 때문에 그는 또한 pos.y 값을 사용합니다. 사람이하는 알고리즘을 알고 있나요 내 문제를 도와 줄 수?

    인사말, 핀

  • 답변

    1

    를이 방법은 의미가 있습니다 , barycentric interpolation의 구현입니다 - 절차는 삼각형에있는 (x, z) 점의 중심 좌표를 찾습니다 - 여기에서 l1, l2, l3, u, w, v 링크 된 페이지에서.

    그러나 구현에는 오류가 포함되어 있습니다. 사용자는 알 수없는 pos.y를 사용해서는 안됩니다. 게다가 그것은 y에서 넌센스 - 빼기 z입니다. 따라서 pos.y를 pos.z로 변경하십시오.

    float l1 = ((p2.z - p3.z) * (pos.x - p3.x) + (p3.x - p2.x) * (pos.z - p3.z))/det; 
        float l2 = ((p3.z - p1.z) * (pos.x - p3.x) + (p1.x - p3.x) * (pos.z - p3.z))/det; 
    
    +0

    ty great :) 저에게 많은 도움이됩니다! –

    관련 문제