最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS判斷點是否在線段上的代碼

 更新時間:2023年11月17日 09:38:15   作者:唯之為之  
這篇文章主要介紹了JS判斷點是否在線段上的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

說明

點積可以用來判斷兩個向量的夾角,如果這個夾角是0或者180度,說明這個點在直線上;叉積可以用來判斷一個點到一條直線的距離,如果這個距離是0,說明這個點在直線上。

假設(shè)有a、b、c三點,其中a和b是線段的兩個端點,c是要判斷的點:

  • 計算向量ab和ac的點積,記為dot。
  • 如果dot小于0,說明c在ab的垂直平分線上;
  • 如果dot等于ab的模長的平方,說明c在ab的延長線上;
  • 如果dot在0和ab的模長的平方之間,說明c在ab的方向上,可能在ab線段上;
  • 如果dot小于0或者大于ab的模長的平方,說明c不在ab的直線上,也不在ab線段上。
  • 計算向量ab和ac的叉積,記為cross。
  • 如果cross不等于0,說明c不在ab的直線上,也不在ab線段上;
  • 如果cross等于0,說明c在ab的直線上。
  • 當(dāng)判斷出c在ab的直線上時,還需要判斷c的x坐標(biāo)或者y坐標(biāo)是否在a和b的x坐標(biāo)或者y坐標(biāo)之間,才能確定c是否在ab的線段上。

綜合上面兩個條件,叉積和點積都可以用來判斷一個點是否在一條直線上,但是叉積更簡單一些,因為它需要的條件更少。

JS代碼

/**
 * 判斷點c是否在ab組成的線段上
 * @param {x,y} a 點
 * @param {x,y} b 點
 * @param {x,y} c 點
 * @returns boolean
 */
function isPointOnLineSegment(a, b, c) {
  // 計算向量ab和ac的叉積
  let crossProduct = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
  // 如果不等于0,說明不共線,直接返回false
  if (crossProduct !== 0) {
    return false;
  }
  // 否則,檢查c點是否在ab線段的范圍內(nèi)
  return (
    Math.min(a.x, b.x) <= c.x &&
    c.x <= Math.max(a.x, b.x) &&
    Math.min(a.y, b.y) <= c.y &&
    c.y <= Math.max(a.y, b.y)
  );
}

// 測試
const a = {x:0,y:0}
const b = {x:0,y:1}
const c = {x:0,y:2}
const d = {x:1,y:1}
const e = {x:1,y:2}
const f = {x:2,y:2}

console.log(isPointOnLineSegment(a, c, b)); // true
console.log(isPointOnLineSegment(a, f, d)); // true
console.log(isPointOnLineSegment(c, f, e)); // true
console.log(isPointOnLineSegment(a, b, c)); // false
console.log(isPointOnLineSegment(a, f, c)); // false
console.log(isPointOnLineSegment(a, c, f)); // false

到此這篇關(guān)于JS判斷點是否在線段上的文章就介紹到這了,更多相關(guān)JS判斷點是否在線段上內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript Prototype對象

    JavaScript Prototype對象

    從JavaScript 1.1開始,它就有了一個內(nèi)置對象叫Prototype。通過它,可以擴展JavaScript,在對象上編寫自定義的屬性和方法。
    2009-01-01
  • 使用JavaScript判斷圖片加載狀態(tài)的幾種方法

    使用JavaScript判斷圖片加載狀態(tài)的幾種方法

    在網(wǎng)頁開發(fā)中,判斷圖片是否加載完成是一個常見的需求,無論是為了預(yù)加載資源、實現(xiàn)懶加載還是進(jìn)行性能監(jiān)控,本文將詳細(xì)介紹幾種使用JavaScript判斷圖片加載狀態(tài)的方法,需要的朋友可以參考下
    2025-08-08
  • javascript中拼接HTML字符串的最快、最好的方法

    javascript中拼接HTML字符串的最快、最好的方法

    這篇文章主要介紹了javascript中拼接HTML字符串的最快、最好的方法,本文共計介紹了3種方法,并對3個各自做了瀏覽器速度測試,需要的朋友可以參考下
    2014-06-06
  • 使用js獲取地址欄中傳遞的值

    使用js獲取地址欄中傳遞的值

    本篇文章是對使用js獲取地址欄中傳遞的值實現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • next.js初始化參數(shù)設(shè)置getServerSideProps應(yīng)用學(xué)習(xí)

    next.js初始化參數(shù)設(shè)置getServerSideProps應(yīng)用學(xué)習(xí)

    這篇文章主要為大家介紹了next.js初始化參數(shù)設(shè)置getServerSideProps的應(yīng)用示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 微信小程序中做用戶登錄與登錄態(tài)維護(hù)的實現(xiàn)詳解

    微信小程序中做用戶登錄與登錄態(tài)維護(hù)的實現(xiàn)詳解

    微信小程序的運行環(huán)境不是在瀏覽器下運行的。所以不能以cookie來維護(hù)登錄態(tài)。下面這篇文章主要給大家介紹了微信小程序中如何做用戶登錄與登錄態(tài)維護(hù)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考學(xué)習(xí)。
    2017-05-05
  • layui下拉框獲取下拉值(select)的例子

    layui下拉框獲取下拉值(select)的例子

    今天小編就為大家分享一篇layui下拉框獲取下拉值(select)的例子,具有好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS設(shè)置cookie、讀取cookie

    JS設(shè)置cookie、讀取cookie

    js設(shè)置cookie有很多種方法,包括JS設(shè)置cookie、讀取cookie,工作中常會用到!下面是詳細(xì)代碼,感興趣的小伙伴們可以參考一下
    2016-02-02
  • PHP抓取HTTPS內(nèi)容和錯誤處理的方法

    PHP抓取HTTPS內(nèi)容和錯誤處理的方法

    這篇文章主要介紹了PHP抓取HTTPS內(nèi)容的實現(xiàn)方法,以及在抓取的時候遇到的一個HTTPS問題的處理辦法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • Bootstrap表格使用方法詳解

    Bootstrap表格使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Bootstrap表格使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

梧州市| 红桥区| 荣成市| 宜春市| 齐河县| 中方县| 桦甸市| 德令哈市| 潼南县| 余姚市| 德惠市| 夹江县| 怀远县| 剑河县| 沅江市| 兴国县| 大姚县| 吉首市| 新闻| 孝昌县| 沂源县| 武山县| 淳安县| 宜州市| 颍上县| 张家界市| 蚌埠市| 普宁市| 苏州市| 南召县| 万山特区| 锡林浩特市| 含山县| 凤凰县| 商城县| 子长县| 榆社县| 张家港市| 嘉善县| 金湖县| 武川县|