Java 检查点是否位于两点之间
我刚认识到我的数学有点生疏。。我想检查点C是否在点A和点B之间。C可以在A和B的线段上,也可以不在。可能有三种情况,我必须确定所有这些情况:Java 检查点是否位于两点之间,java,math,point,dot-product,Java,Math,Point,Dot Product,我刚认识到我的数学有点生疏。。我想检查点C是否在点A和点B之间。C可以在A和B的线段上,也可以不在。可能有三种情况,我必须确定所有这些情况: C在A和B之间 C / \ A---B C在A和B的前面 C \ \ A--B C / / A--B C在A和B的后面 C \ \ A--B C / / A--B 最后两点中的“草图”应为三角形 我使用dotproduct检查C是
- C在A和B之间
C / \ A---B
- C在A和B的前面
C \ \ A--B
C / / A--B
- C在A和B的后面
C \ \ A--B
C / / A--B
if (VectorOf(AB) * VectorOf(BC)) >= 0)
要检查C是否在A和B的后面,我使用以下方法:
if (VectorOf(AB) * VectorOf(BC)) < 0)
if(向量(AB)*向量(BC))<0)
但是如何识别C是否在A和B前面?使用坐标如何:
Between: a.x > c.x > b.x || a.x < c.x < b.x
Front: c.x < a.x && b.x
Back: c.x > b.x && a.x
介于:a.x>c.x>b.x | | a.xb.x&&a.x
只需从B点开始使用点积即可
if (VectorOf(AC) * VectorOf(AB) < 0) {
// C is on the left of A
}
else {
if (VectorOf(BC) * VectorOf(BA) < 0) {
// C is on the right of B
}
else {
// C is between A and B
}
}
在三种情况下,结果将是<0,介于0和1之间,或>1,如下所示:
C
/│
/ │
/ │
──A── H ─────B─────
点积的定义是
AC·AB=AC×AB×cos(有符号:如果C位于A的左侧,则为负;如果C位于A的右侧,则为正)
AB·AB=AB²(正)
除法的结果是符号比率AH/AB:
- 0 1 >1
────A── H ─────B─────
我假设A,B不一定有相同的Y坐标,即使这是图表所建议的。你会想用 设
b=b-A
,c=c-A
,则投影为:u=dot(b,c)/| b
正面:
u<0
;介于:0根据您的定义,如果角CAB和ABC都是锐角,则点C在A和B之间;如果角ABC是钝角,则点A-B的前面是角CAB,后面是角ABC
您可以使用点积来确定角度是锐角还是钝角:如果XYZ是锐角,则XY·YZ的doc积为负值,如果是钝角,则点积为正值