需要检查点 X 是否与 2 点之间的线有任何距离
Need to check if point X is in any distance from a line made between 2 dots
我用的是Sourcepawn,也能看懂java,但我只需要一个小窍门,想法可以继续
- 2 个红点是光束的终点。光束可以是任何角度 (X,Y)。我需要关注绿点,检查橙色线(我没有更多点,只有 2 端)和绿点之间的最近距离。
感谢任何提示,谢谢!
鉴于您想知道具有定义点 p1
、p2
和 p3
的向量 d
,您可以执行以下操作(向量变量带有下划线):



或者,在代码更友好的表示法中(我在这里使用 JavaScript),我们将向量表示为带有 x- 和 y-values:
的数组
const fromP1=(p,i)=>p-p1[i], // subtract vector p1 from current vector
dot=(a,b)=>a.reduce((v,p,i)=>v+p*b[i],0); // scalar product
// these are just arbitrary sample point values:
const p1=[1,5,0], p2=[6,2.5,0], p3=[2,2,0];
const a=p2.map(fromP1), // vector from P1 to P2
b=p3.map(fromP1), // vector from P1 to P3
fa=dot(a,b)/dot(a,a), // scalar factor for vector a
c=a.map(p=>p*fa), // scale vector a by fa
d=b.map((p,i)=>p-c[i]); // vector d = vector b - vector c
console.log("vector c:",c);
console.log("vector d:",d)
作为一点旁注:此方法同样适用于 3 个(或更多!)维度。只需将更多组件(=坐标值)添加到(全部)向量数组。矢量函数将自动处理所有定义的维度。
如果您只想知道最小距离的标量值,那么事情会变得简单一些:
const fromP1=(p,i)=>p-p1[i], // subtract vector p1 from current vector
dot=(a,b)=>a.reduce((v,p,i)=>v+p*b[i],0); // scalar product
// sample point values (3D):
const p1=[1,5,0], p2=[6,2.5,0], p3=[2,2,0];
const a=p2.map(fromP1), // vector from P1 to P2
b=p3.map(fromP1); // vector from P1 to P3
const ab=dot(a,b);
console.log("distance:",Math.sqrt(dot(b,b) - ab*ab/dot(a,a)) );
我用的是Sourcepawn,也能看懂java,但我只需要一个小窍门,想法可以继续
感谢任何提示,谢谢!
p1
、p2
和 p3
的向量 d
,您可以执行以下操作(向量变量带有下划线):
或者,在代码更友好的表示法中(我在这里使用 JavaScript),我们将向量表示为带有 x- 和 y-values:
的数组const fromP1=(p,i)=>p-p1[i], // subtract vector p1 from current vector
dot=(a,b)=>a.reduce((v,p,i)=>v+p*b[i],0); // scalar product
// these are just arbitrary sample point values:
const p1=[1,5,0], p2=[6,2.5,0], p3=[2,2,0];
const a=p2.map(fromP1), // vector from P1 to P2
b=p3.map(fromP1), // vector from P1 to P3
fa=dot(a,b)/dot(a,a), // scalar factor for vector a
c=a.map(p=>p*fa), // scale vector a by fa
d=b.map((p,i)=>p-c[i]); // vector d = vector b - vector c
console.log("vector c:",c);
console.log("vector d:",d)
作为一点旁注:此方法同样适用于 3 个(或更多!)维度。只需将更多组件(=坐标值)添加到(全部)向量数组。矢量函数将自动处理所有定义的维度。
如果您只想知道最小距离的标量值,那么事情会变得简单一些:
const fromP1=(p,i)=>p-p1[i], // subtract vector p1 from current vector
dot=(a,b)=>a.reduce((v,p,i)=>v+p*b[i],0); // scalar product
// sample point values (3D):
const p1=[1,5,0], p2=[6,2.5,0], p3=[2,2,0];
const a=p2.map(fromP1), // vector from P1 to P2
b=p3.map(fromP1); // vector from P1 to P3
const ab=dot(a,b);
console.log("distance:",Math.sqrt(dot(b,b) - ab*ab/dot(a,a)) );