亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript實現(xiàn)繪制兩個坐標之間的連線

 更新時間:2023年11月07日 12:01:41   作者:我人很好  
本文主要介紹了JavaScript實現(xiàn)繪制兩個坐標之間的連線功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

實現(xiàn)原理

先概括一下大概的實現(xiàn)原理,分為兩步:

第一步:我們需要在兩個坐標連線的中點上創(chuàng)建一條長度和連線長度相等的直線,這條線的中點也在兩個坐標連線的中點上。此時效果大概是這樣子:

第二步:在第一步的基礎上,我們再將這條直線順時針旋轉圖上紅色虛線標出的角度,它就成為了兩個坐標之間的連線。

JavaScript實現(xiàn)步驟

計算連線的中點坐標

const midX = (x1 + x2) / 2;
const midY = (y1 + y2) / 2;

計算連線的長度

下圖中的虛線和兩個坐標間的連線正好組成一個三角形,由勾股定理可以計算出連線的長度:

  const a = x2 -x1;
  const b = y2 - y1;
  const length = Math.sqrt(a * a + b * b);

計算需要旋轉的角度

由下圖我們可以看出,這條水平的直線需要旋轉的角度實際上就是三角形左側夾角的角度。

為了方便求這個夾角的角度,我們假設可以把這個三角形平移到原點,變成

這個樣子:

之后,我們就可以利用Math.atan2(y, x)求得這個夾角的角度。這個方法會返回某個坐標到原點的連線與x軸正方向之間的弧度。需要注意的是:該方法返回的是弧度, 角度 = (弧度 * 180) / Math.PI。

  const a = x2 -x1;
  const b = y2 - y1;
  const c = (180 * Math.atan2(b, a)) / Math.PI;

至此我們得到了連線的中點坐標、連線的長度、連線旋轉的角度。我們通過固定定位 + top/left實現(xiàn)連線的定位、transform: rotate()實現(xiàn)連線的旋轉。

完整的JavaScript實現(xiàn)

export const drawLine = (startObj, endObj) => {
    // 起點坐標
    const startY = startObj.y;
    const startX = startObj.x;

    // 終點坐標
    const endY = endObj.y;
    const endX = endObj.x;

    // 用勾股定律計算出斜邊長度及其夾角(即連線的旋轉角度)
    const a = endX - startX;
    const b = endY - startY;
    // 計算連線長度
    const length = Math.sqrt(a * a + b * b);
    // 弧度值轉換為角度值
    const c = (180 * Math.atan2(b, a)) / Math.PI;

    // 連線中心坐標
    const midX = (endX + startX) / 2;
    const midY = (endY + startY) / 2;
    const deg = c <= -90 ? 360 + c : c; // 負角轉換為正角

    return {
        position: 'fixed',
        top: `${midY}px`,
        left: `${midX - length / 2}px`,
        width: `${length}px`,
        transform: `rotate(${deg}deg)`,
    };
};

以上就是JavaScript實現(xiàn)繪制兩個坐標之間的連線的詳細內容,更多關于JavaScript坐標連線的資料請關注腳本之家其它相關文章!

相關文章

  • 關于Javascript 對象(object)的prototype

    關于Javascript 對象(object)的prototype

    Javascript中的每個對象(object)都會有 prototype,下面為大家介紹下其具體的應用
    2014-05-05
  • 如何解決前端筆記本屏幕顯示縮放比例125%,150%對頁面布局的影響

    如何解決前端筆記本屏幕顯示縮放比例125%,150%對頁面布局的影響

    如果要完整解決該縮放和布局問題,仍需適配,下面這篇文章主要給大家介紹了關于如何解決前端筆記本屏幕顯示縮放比例125%,150%對頁面布局的影響,需要的朋友可以參考下
    2022-11-11
  • webpack進階——緩存與獨立打包的用法

    webpack進階——緩存與獨立打包的用法

    本篇文章主要介紹了webpack進階——緩存與獨立打包的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • js實現(xiàn)一個簡易計算器

    js實現(xiàn)一個簡易計算器

    這篇文章主要為大家詳細介紹了JS實現(xiàn)一個簡易計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 微信小程序實現(xiàn)翻牌抽獎動畫

    微信小程序實現(xiàn)翻牌抽獎動畫

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)翻牌抽獎動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JSON 的正確用法探討:Pyhong、MongoDB、JavaScript與Ajax

    JSON 的正確用法探討:Pyhong、MongoDB、JavaScript與Ajax

    這篇文章主要介紹了JSON 的正確用法探討:Pyhong、MongoDB、JavaScript與Ajax的相關資料,具有參考借鑒價值,需要的朋友一起學習吧
    2016-05-05
  • JavaScript Array實例方法flat的實現(xiàn)

    JavaScript Array實例方法flat的實現(xiàn)

    flat() 方法用于將一個嵌套多層的數(shù)組進行扁平,返回新數(shù)組,它不會改變原始數(shù)組, flat 方法在處理多維數(shù)組時非常有用,它可以讓數(shù)組操作變得更加靈活和簡潔,本文給大家介紹了JavaScript Array實例方法flat的實現(xiàn),需要的朋友可以參考下
    2024-03-03
  • JavaScript實現(xiàn)復制內容到粘貼板代碼

    JavaScript實現(xiàn)復制內容到粘貼板代碼

    最近做了一個前端項目,其中有需求:通過button直接把input或者textarea里的值復制到粘貼板里。下面小編給大家分享JavaScript實現(xiàn)復制內容到粘貼板代碼,需要的朋友參考下
    2016-03-03
  • JavaScript表單驗證實例之驗證表單項是否為空

    JavaScript表單驗證實例之驗證表單項是否為空

    表單驗證幾乎在每個需要注冊或者是登錄的網(wǎng)站都是必不可少,下面通過本篇文章給大家介紹JavaScript表單驗證實例之驗證表單項是否為空,涉及到js表單驗證實例相關知識,對js表單驗證實例代碼需要的朋友一起學習吧
    2016-01-01
  • JavaScript實現(xiàn)鼠標拖拽調整div大小

    JavaScript實現(xiàn)鼠標拖拽調整div大小

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)鼠標拖拽調整div大小,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評論