我有以下代码:
Object.defineProperty(LineSegment.prototype,'hasPoint',{ value:
function (point) {
if (typeof point != 'object' || !(point instanceof Point)) {
throw new TypeError('LineSegment.prototype.hasPoint requires a point value.'); }
var m = (this.y1 - this.y2) / (this.x1 - this.x2);
return (this.y1 - point.y) / (this.x1 - point.x) == m; }
});
它适用于线条,但不适用于线段。我如何检查点是否超出范围,并将其应用于JavaScript?
答案 0 :(得分:1)
最简单,最快速的答案只能在x1< X2。在这种情况下,返回以下语句:
return (this.y1 - point.y) / (this.x1 - point.x) == m && point.x >= this.x1 && point.x <= this.x2;
第一部分检查点是否在线上,下面两个条件检查x坐标是否在x1和x2之间(包括)。
注意:如果x2&lt; x1,你可以简单地在构造函数中添加一个条件来交换这两个点。您还可以更改p + q * v形式的点(其中p是线的第一个点,q是第二个点,v是标量值,只有当点在线上时才可以)。如果v介于0和1(含)之间,则该点位于线段上。
编辑:只是一个警告,你的方法不会非常可靠,因为计算机处理双打的方式。有关示例,请参阅维基百科页面:http://en.wikipedia.org/wiki/Double_precision