Java 我想是想在重心位置上找个位置?

Java 我想是想在重心位置上找个位置?,java,math,trigonometry,Java,Math,Trigonometry,好吧,我想在这幅图中实现: 我相信这是一个重心坐标系,但X总是等于1?基本上,当我移向/离开三角形中的最高点时,我只需要增加/减少它。这是迄今为止我得到的代码(注意,我使用的是java中的LWJGL库) 公共浮点getDist(vector3fp、vector3fa、vector3fb、vector3fc) { 向量3f v0=新向量3f(0,0,0); 向量3f.sub(c,a,v0); 向量3f v1=新向量3f(0,0,0); 向量3f.sub(b,a,v1); 向量3f v2=新向量3

好吧,我想在这幅图中实现:

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

公共浮点getDist(vector3fp、vector3fa、vector3fb、vector3fc)
{
向量3f v0=新向量3f(0,0,0);
向量3f.sub(c,a,v0);
向量3f v1=新向量3f(0,0,0);
向量3f.sub(b,a,v1);
向量3f v2=新向量3f(0,0,0);
向量3f.sub(p,a,v2);
浮点数00=矢量3f.点(v0,v0);
浮点数01=矢量3f.点(v0,v1);
浮点数02=矢量3f.点(v0,v2);
浮点点11=向量3f.点(v1,v1);
浮点数12=向量3f.点(v1,v2);
浮点逆=1.0f/(dot00*dot11-dot01*dot01);
浮点u=(dot11*dot02-dot01*dot12)*逆;
浮点v=(dot00*dot12-dot01*dot02)*逆;

如果((u>=0)和(&(v>=0)和(&+v如果我理解你的意思:你在三维坐标中有一个三角形(
abc
),你想计算一条边上方第四个点(
p
)的高程,与它的相对点成比例:

b  --------------- 1.0
|\
| \
| p\ ------------- (result)
|   \
a----c  ---------- 0.0
你是正确的,这个结果是三角形上一个点的三个重心坐标之一

我建议如下:

  • 求三角形平面的法线:
    vABC=cross(c-a,b-a)
  • 找到垂直于
    vABC
    ac
    的法线:
    vPerpAC=cross(c-a,vABC)
  • 对向量进行评估:
    sAB=dot(vPerpAC,b-a)
  • 评估你的目标点:
    sAP=dot(vPerpAC,p-a)
  • 最终结果是最后两次评估的比率:
    return sAP/sAB
这对于实际不在三角形上的点来说应该是可靠的:它们有效地垂直投影到
abc
平面上


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

  • 标度法线:
    vScaled=vPerpAC/sAB
  • 缩放偏移量:
    sScaled=dot(vScaled,a)
并更有效地计算一系列点的结果
p

  • 返回点(vScaled,p)-sScaled

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

对不起,您能详细说明一下您的问题吗?我不理解要求,您是想检测点是位于三角形的边缘还是内部?请澄清您的问题。不清楚您不想要什么或者你遇到了什么问题,或者你真正的问题是什么。嗯,为什么两个红点应该有相同的坐标?你说的“偏离向量”是什么意思?你最初的问题是“我正在尝试实现这张图片中的内容”,但您的图像并非一目了然。除非您提供一些上下文,否则将很难帮助您。假设两个红点具有相同的坐标,因为这正是我需要它们的原因。“偏差”表示新图像中的蓝色点,即在直线上(向量从上到下没有X值变化的三角形)三角形它应该是X轴,但这个轴将随着三角形旋转,基本上是与三角形方向轴成+/-90度角的轴。是的,我添加了一个新的图像,应该会有帮助。回答很好,向上投票,但它不起作用。我认为它实际上必须是二维的,所以距离公式不考虑Y差nce.知道一种将这个答案转换为2d的简单方法吗?如果你想简单地去掉Y坐标:代替双叉积,计算垂直2d向量
vPerpAC=(c.z-a.z,a.x-c.x)
。将它与2d
dot()
2d向量上的乘积
(b-a)=(b.x-a.x,b.z-a.z)
(p-a)=(p.x-a.x,p.z-a.z)一起使用
b  --------------- 1.0
|\
| \
| p\ ------------- (result)
|   \
a----c  ---------- 0.0