gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:45:07 26 4
gpt4 key购买 nike

好吧,所以我正在尝试实现此图像中的内容: 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 是三角形上的最高点(大多数远离最低点)而不考虑它的偏离 vector ? IE。注意到图像上的两个红点具有相同的坐标,尽管它们与顶部的 x 的距离不同?

编辑2:https://dl.dropbox.com/u/28109593/axisexample.png

最佳答案

如果我理解你的意思:你在 3D 坐标中有一个三角形 (abc),并且你想计算第四个点 (p) 的高程)在一条边之上,与其相对点成比例:

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

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

我推荐如下内容:

  • 求三角形平面的法线:vABC = cross(c-a, b-a)
  • 找到垂直于 vABCac 的法线:vPerpAC = cross(c-a, vABC)
  • 根据 vector ab求值:sAB = dot(vPerpAC, b-a)
  • 评估您的目标点:sAP = dot(vPerpAC, p-a)
  • 您的最终结果是最后两次评估的比率:返回 sAP/sAB

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

<小时/>

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

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

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

  • 返回点(vScaled, p) - sScaled

这可以有效地预先计算定向平面,并进行预先缩放以直接提供所需的结果。

关于java - 我想,试图获得重心位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com