我想,试图获得重心位置?

时间:2012-06-22 18:25:49

标签: java math trigonometry

好吧,所以我试图在这张图片中找到什么: https://dl.dropbox.com/u/28109593/dotsexample.png

我相信这将是一个重心坐标系统,但是X总是等于1?基本上我需要它只在我向/远离我三角形的最高点时增加/减少。这是我到目前为止获得的代码(注意我在java中使用LWJGL库)。

public float getDist( Vector3f p, Vector3f a, Vector3f b, Vector3f c )
   {
       Vector3f v0 = new Vector3f(0,0,0);
       Vector3f.sub( c, a, v0 );
       Vector3f v1 = new Vector3f(0,0,0);
       Vector3f.sub( b, a, v1);
       Vector3f v2 = new Vector3f(0,0,0);
       Vector3f.sub( p, a, v2 );

       float dot00 = Vector3f.dot(v0, v0);
       float dot01 = Vector3f.dot(v0, v1);
       float dot02 = Vector3f.dot(v0, v2);
       float dot11 = Vector3f.dot(v1, v1);
       float dot12 = Vector3f.dot(v1, v2);

       float inverse = 1.0f / (dot00 * dot11 - dot01 * dot01);
       float u = (dot11 * dot02 - dot01 * dot12) * inverse;
       float v = (dot00 * dot12 - dot01 * dot02) * inverse;

       if((u >= 0) && (v >= 0) && (u + v <= 1)) return (float) (Math.sin(u) * Math.cos(v));
       else return 0;
   }

编辑:我想我要问的是:有没有办法确定三角形内部的一个点从三角形在空间中的最低点开始的距离,其中1将是三角形的最高点(没有把它的偏差矢量考虑在内,那么它是否远离低调? I.E.请注意图像上的两个红点具有相同的坐标,即使它们与顶部的x具有不同的阴影?

Edit2:https://dl.dropbox.com/u/28109593/axisexample.png

1 个答案:

答案 0 :(得分:2)

如果我理解你在说什么:3D坐标中有一个三角形(abc),你想要评估一条边上方的第四个点(p)的高程,相称到了相反的地步:

b  --------------- 1.0
|\
| \
| p\ ------------- (result)
|   \
a----c  ---------- 0.0

你的结果是正确的,因为这个结果是三角形上一个点的三个重心坐标之一。

我推荐如下内容:

  • 找到三角形平面的法线:vABC = cross(c-a, b-a)
  • 找到垂直于vABCac的正常垂直:vPerpAC = cross(c-a, vABC)
  • 评估关于它的向量absAB = dot(vPerpAC, b-a)
  • 评估您的目标点:sAP = dot(vPerpAC, p-a)
  • 您的最终结果是最后两次评估的比率:return sAP / sAB

这对于实际上不在三角形上的点应该是稳健的:它们被有效地垂直投影到abc平面上。


请注意,如果您事先知道abc,则可以预先计算以下值:

  • 缩放法线:vScaled = vPerpAC / sAB
  • 缩放偏移量:sScaled = dot(vScaled, a)

并更有效地计算一系列点p的结果:

  • return dot(vScaled, p) - sScaled

这有效地预先计算了一个定向平面,预先缩放以直接提供所需的结果。