gpt4 book ai didi

algorithm - 如何检查一个点是否位于另外两个点之间的一条线上

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:17 25 4
gpt4 key购买 nike

我该如何编写这个函数?任何例子表示赞赏

function isPointBetweenPoints(currPoint, point1, point2):Boolean {

var currX = currPoint.x;
var currY = currPoint.y;

var p1X = point1.x;
var p1y = point1.y;

var p2X = point2.x;
var p2y = point2.y;

//here I'm stuck
}

最佳答案

假设 point1point2 不同,首先检查点是否在直线上。为此,您只需要向量 point1 -> currPointpoint1 -> point2 的“叉积”。

dxc = currPoint.x - point1.x;
dyc = currPoint.y - point1.y;

dxl = point2.x - point1.x;
dyl = point2.y - point1.y;

cross = dxc * dyl - dyc * dxl;

当且仅当 cross 等于零时,你的点才在线上。

if (cross != 0)
return false;

现在,您知道该点确实位于直线上,现在是检查它是否位于原始点之间的时候了。这可以通过比较 x 坐标轻松完成,如果线“比垂直更水平”,否则比较 y 坐标

if (abs(dxl) >= abs(dyl))
return dxl > 0 ?
point1.x <= currPoint.x && currPoint.x <= point2.x :
point2.x <= currPoint.x && currPoint.x <= point1.x;
else
return dyl > 0 ?
point1.y <= currPoint.y && currPoint.y <= point2.y :
point2.y <= currPoint.y && currPoint.y <= point1.y;

请注意,如果输入数据是整数,则上述算法是完全整数的,即它不需要对整数输入进行浮点计算。不过,在计算 cross 时要小心潜在的溢出。

附言该算法绝对精确,这意味着它会拒绝非常靠近直线但不在直线上的点。有时这不是所需要的。但那是另外一回事了。

关于algorithm - 如何检查一个点是否位于另外两个点之间的一条线上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907947/

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