簡體   English   中英

如何處理JavaScript中的線段,檢查點

[英]How to deal with line segments in JavaScript, checking a point

我有以下代碼:

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?

僅當x1 <x2時才能使用最簡單,最快的答案。 在這種情況下,以下return語句:

return (this.y1 - point.y) / (this.x1 - point.x) == m && point.x >= this.x1 && point.x <= this.x2;

第一部分檢查點是否在直線上,接下來的兩個條件檢查x坐標是否在x1和x2(含)之間。

注意:如果x2 <x1,則只需在構造函數中添加一個條件即可交換兩點。 您也可以以p + q * v的形式更改該點(其中p是直線的第一個點,q是第二個和va標量值,僅當該點在直線上時才可行)。 如果v在0到1(含)之間,則該點在線段上。

編輯:只是警告,您的方法將不是很可靠,因為計算機處理加倍的方式。 有關某些示例,請參見Wikipedia頁面: http : //en.wikipedia.org/wiki/Double_precision

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM