检查坐标存在于直线的两个点之间
check coordinate exists between two points of line
我有两个点,比方说x1,y1和x2,y2。并且我还有一个点x3,问题是,我需要检查x3,y3坐标是否出现在x1,y1和x2之间的行中,y2是否出现在javascript中。
提前谢谢。
试试这个:
var point_a = [0, 0];
var point_b = [100, 200];
var coord = [50, 100];
function checkCoordinate(coord) {
var slope = (point_b[1] - point_a[1]) / (point_b[0] - point_a[0]);
var newSlope = (point_b[1] - coord[1]) / (point_b[0] - coord[0]);
if (coord[0] > point_a[0] && coord[0] < point_b[0] && coord[1] > point_a[1] && coord[1] < point_b[1] && slope == newSlope) {
alert('Yes! they are in the same line.');
} else {
alert('No :/');
}
}
checkCoordinate(coord);
Fiddle
首先,验证x2、y2(数字)不等于任一终点:
您可以创建函数来检查这一点,如(伪代码):
IsNearZero(value)
if(abs(value) < tolerance) return true
return false
因此://假设返回错误意味着(x2,y2)不在它们之间。
if((IsNearZero(x2-x1) && IsNearZero(y2-y1))
return false
if(IsNearZero(x2-x3) and IsNearZero(y2-y3))
return false
现在检查(x2,y2)是否在点之间:
// Left Edge
if((x1 < x3) && (x2 < x1))
return false
if((x3 < x1) && (x2 < x3))
return false
// Bottom Edge
if((y1 < y3) && (y2 < y1))
return false
if((y3 < y1) && (y2 < y3))
return false
对右边缘和下边缘进行类似的测试。。。
最后,取两条线的叉积:
第一段:(x1,y1,0)->(x2,y2,0)-->(x2-x1,y2-y1,0
第二段:(x1,y1,0)->(x3,y3,0)-->(x3-x1,y3-y1,0)
if(不是IsNearZero((x2-x1)(y3-y1)-(y2-y1)(x3-x1))返回错误
现在,返回true。。。
相关文章:
- 如何在javascript中获取两个日期之间的周六和周日的日期
- 在Google Analytics中跟踪用户,但只能在两个操作之间跟踪
- 如何在两个不同的iframe HTML之间进行通信
- 有效地获取两个区间之间的随机整数
- 如何用moment.js列出两个日期之间的所有月份
- jQuery在两个字符串标识符之间选择HTML
- JavaScript中的RegEx:两个标签之间的内容
- moment.js在两个时区格式的日期之间存在差异
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 计算HTML表TD中两个数字之间的百分比
- 用时间戳获取两个不同日期之间的时间差
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 如何在jQuery中获取两个事件之间的时间差
- 通过node.js和socket.io在两个用户之间发送消息
- JavaScript函数,用于计算两个日期之间的年、月和天数
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- 如何在两个
之间共享数据?使用AngularJS和温泉UI - 用于删除两个“”之间的字符的正则表达式是什么/"在javascript中
- 如何在两个"h "之间选择元素除了一个元素使用jquery
- 在JavaScript中从字符串中获取两个'/'之间的文本