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

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

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

實現(xiàn)原理

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

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

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

JavaScript實現(xiàn)步驟

計算連線的中點坐標(biāo)

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

計算連線的長度

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

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

計算需要旋轉(zhuǎn)的角度

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

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

這個樣子:

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

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

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

完整的JavaScript實現(xiàn)

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

    // 終點坐標(biāo)
    const endY = endObj.y;
    const endX = endObj.x;

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

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

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

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

相關(guān)文章

  • JavaScript展開運(yùn)算符用法及實際應(yīng)用詳解

    JavaScript展開運(yùn)算符用法及實際應(yīng)用詳解

    展開運(yùn)算符是JavaScript中的語法糖,用三個點(...)表示,廣泛應(yīng)用于數(shù)組和對象的操作,本文介紹了其基本用法,如在數(shù)組和對象中的應(yīng)用,合并數(shù)組或?qū)ο?更新對象屬性等,還探討了展開運(yùn)算符的高級應(yīng)用,需要的朋友可以參考下
    2024-09-09
  • js實現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法

    js實現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法

    這篇文章主要介紹了js實現(xiàn)使用鼠標(biāo)拖拽切換圖片的方法,涉及javascript操作圖片實現(xiàn)輪播效果的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • JS實現(xiàn)三個層重疊點擊互相切換的方法

    JS實現(xiàn)三個層重疊點擊互相切換的方法

    這篇文章主要介紹了JS實現(xiàn)三個層重疊點擊互相切換的方法,涉及JavaScript動態(tài)操作頁面定位屬性的相關(guān)技巧,需要的朋友可以參考下
    2015-10-10
  • 基于JS實現(xiàn)動態(tài)跟隨特效的示例代碼

    基于JS實現(xiàn)動態(tài)跟隨特效的示例代碼

    這篇文章主要介紹了如何利用JavaScript實現(xiàn)動態(tài)跟隨特效,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)JS有一定的幫助,感興趣的小伙伴可以了解一下
    2022-06-06
  • js 與 php 通過json數(shù)據(jù)進(jìn)行通訊示例

    js 與 php 通過json數(shù)據(jù)進(jìn)行通訊示例

    這篇文章主要介紹了js與php通過json數(shù)據(jù)進(jìn)行通訊的具體實現(xiàn),需要的朋友可以參考下
    2014-03-03
  • js實現(xiàn)購物車加減以及價格計算功能

    js實現(xiàn)購物車加減以及價格計算功能

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)購物車加減以及價格計算功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 如何封裝一個可用js直接調(diào)用的彈窗組件

    如何封裝一個可用js直接調(diào)用的彈窗組件

    這篇文章主要介紹了如何封裝一個可用js直接調(diào)用的彈窗組件的相關(guān)資料,通過Vue.extend動態(tài)創(chuàng)建實例,支持Promise異步關(guān)閉,提升復(fù)用性與開發(fā)效率,實現(xiàn)類似原生alert的調(diào)用方式,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-05-05
  • javascript實現(xiàn)前端成語點擊驗證

    javascript實現(xiàn)前端成語點擊驗證

    這篇文章主要介紹了javascript實現(xiàn)前端成語點擊驗證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 微信小程序跨頁面數(shù)據(jù)傳遞事件響應(yīng)實現(xiàn)過程解析

    微信小程序跨頁面數(shù)據(jù)傳遞事件響應(yīng)實現(xiàn)過程解析

    這篇文章主要介紹了微信小程序跨頁面數(shù)據(jù)傳遞事件響應(yīng)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • JS實現(xiàn)星星海特效

    JS實現(xiàn)星星海特效

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)星星海特效特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論

梧州市| 城市| 石林| 同江市| 盐池县| 肃宁县| 马鞍山市| 南开区| 家居| 子长县| 祥云县| 洛阳市| 博湖县| 巴东县| 深泽县| 饶阳县| 洛隆县| 华池县| 东宁县| 讷河市| 曲阜市| 新密市| 阿克陶县| 罗山县| 定兴县| 岑溪市| 商南县| 东至县| 土默特右旗| 周口市| 诸暨市| 瑞金市| 昌江| 龙海市| 安塞县| 金湖县| 靖西县| 扶沟县| 调兵山市| 太和县| 翁源县|