Java 获取三角形中任意点的位置

Java 获取三角形中任意点的位置,java,opengl,geometry,Java,Opengl,Geometry,我定义了一个有3个点的三角形 坐标系的定义如下: X轴头向右 Y轴朝上 Z轴从我的屏幕上消失 这是OpenGL中最常用的坐标系(我想)。 现在我得到了我的三角形。每个点的X和Z值都不同。 我需要通过给出X和Z坐标来找到三角形上的Y坐标。 有人写了这个方法,并称之为巴里斯中心(点a,点b,点c,点pos)(我很确定他的意思是“重心”,但很好) public static float barryCentric(Vector3f p1, Vector3f p2, Vector3f p3, Vec

我定义了一个有3个点的三角形

坐标系的定义如下:

  • X轴头向右
  • Y轴朝上
  • Z轴从我的屏幕上消失
这是OpenGL中最常用的坐标系(我想)。 现在我得到了我的三角形。每个点的X和Z值都不同。 我需要通过给出X和Z坐标来找到三角形上的Y坐标。 有人写了这个方法,并称之为巴里斯中心(点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
值,所以我想这不是我想要的。

这个方法有意义,它是一个实现-过程找到三角形中(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;
太好了:)这对我帮助很大!