Java 计算向量在其他两个向量之间的位置
我认为我目前的问题与每个人在学校学到的截距定理有关,但那是很久以前的事了,我有点半途而废 我的问题是: 在二维空间中有两个向量,分别是Java 计算向量在其他两个向量之间的位置,java,math,libgdx,Java,Math,Libgdx,我认为我目前的问题与每个人在学校学到的截距定理有关,但那是很久以前的事了,我有点半途而废 我的问题是: 在二维空间中有两个向量,分别是v1和v2 我想知道的是向量v3的坐标,它位于v1和v2之间的线段上 关于v3,我知道的是v1和v3和v2和v3之间的行段长度。 我的思想总是围绕着这个方向旋转,使用v1和v2之间的斜率来确定v3的坐标,但在这一点上我陷入了困境 这是我用于此问题的实际代码: private Vector2 getPointOnLine(Vector2 v1, Vector2 v2
v1
和v2
我想知道的是向量
v3
的坐标,它位于v1
和v2
之间的线段上关于v3,我知道的是
v1
和v3
和v2
和v3
之间的行段长度。
我的思想总是围绕着这个方向旋转,使用v1
和v2
之间的斜率来确定v3
的坐标,但在这一点上我陷入了困境
这是我用于此问题的实际代码:
private Vector2 getPointOnLine(Vector2 v1, Vector2 v2, float distance) throws Exception
{
double lengthOfSegment=Math.floor(Math.pow(v2.x - v1.x, 2)+Math.pow(v2.y-v1.y,2));
Vector2 slopeXY=v2.sub(v1);
float slope=1/slopeXY.x;
slopeXY.x=slopeXY.x*slope;
slopeXY.y=slopeXY.y*slope;
}
actuell问题与游戏有关,我想让盟军单位(v2)跟随玩家(v1),但始终保持特定的距离(距离)
我正在使用LibGDX,是否有任何库函数可以为我完成这项工作?我认为您正在尝试插值并获得一个向量,它是v1和v2的“混合”。这将是他们之间的界线。(假设v1和v2被视为位置向量) 可以通过对向量进行加权平均来实现这一点,但如果距离是以绝对值而不是相对值给出的,则需要转换: 事实上,事实证明libGDX向量可以为您做到这一点
private Vector2 getPointOnLine(Vector2 v1, Vector2 v2, float distance)
{
double length = Math.hypot(v1.x - v2.x, v1.y - v2.y);
distance /= length;
return v1.cpy().lerp(v2, distance);
}
Vector2.lerp是libGDX提供的一种线性插值方法,您只需要距离
d(v1,v3)
和d(v1,v2)=d(v1,v3)+d(v3,v2)
的比值。让
r = d(v1,v3)/(d(v1,v3) + d(v3,v2))
然后
这就是你问题的答案
证明:如果
d(v1,v3)=0
,r=0
和v3=v1
。如果d(v3,v2)=0
,则r=1
和v3=v1+v2-v1=v2
。v3
的公式是线性的,它同时通过v1
和v2
,因此v3
始终在这些向量之间的直线上。最后,norm(v3-v1)=r*norm(v2-v1)=d(v1,v3)
和对norm(v2-v3)
的类似计算谢谢,我想我需要用它终止一点,因为每次返回的向量都与v1相同。@Aeglasin我想这是因为libGDX向量是可变的,这意味着这段代码实际上会将v1更改为结果!我会将其更改为执行复制,以避免这种情况。如果您确实希望将对象的一个位置设置为新的插值位置,则可以删除副本,并从要更改的向量中使用lerp()方法。
v3 = v1 + r(v2-v1)