国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JavaScript&&Threejs】判斷路徑在二維平面上投影的方向順逆時(shí)針

這篇具有很好參考價(jià)值的文章主要介紹了【JavaScript&&Threejs】判斷路徑在二維平面上投影的方向順逆時(shí)針。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

原理分析

可以將路徑每個(gè)連續(xù)的兩點(diǎn)向量叉乘相加,根據(jù)正負(fù)性判斷路徑順逆時(shí)針性
當(dāng)我們計(jì)算兩個(gè)向量的叉積時(shí),結(jié)果是一個(gè)新的向量,其方向垂直于這兩個(gè)向量所在的平面,并且其大小與這兩個(gè)向量構(gòu)成的平行四邊形的面積成正比。這個(gè)新向量的方向由右手定則確定:如果你將右手的四指放在兩個(gè)向量的方向上,讓拇指指向叉積的方向,那么你的手指彎曲的方向就是兩個(gè)向量的順時(shí)針旋轉(zhuǎn)方向。

當(dāng)我們應(yīng)用這個(gè)概念到路徑的情況時(shí),我們可以將相鄰的路徑點(diǎn)表示為向量,然后計(jì)算它們之間的叉積。這個(gè)叉積的 z 分量(如果我們將路徑投影到 xy 平面上)可以告訴我們這兩個(gè)向量之間的順時(shí)針或逆時(shí)針關(guān)系。
【JavaScript&&Threejs】判斷路徑在二維平面上投影的方向順逆時(shí)針,theejs實(shí)戰(zhàn),Javascript,javascript,平面,開發(fā)語言
由于threejs很多地方對(duì)凹凸多邊形沒有限制,可以在輸入端限制凹三角或在計(jì)算中舍棄凹點(diǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-858733.html

代碼

import { Vector3 } from "three";

/**
 * 判斷向量是否為順時(shí)針  返回值true逆時(shí)針  false 順時(shí)針
 * @param {[Vector3]} path //vec3路徑
 * @param {'x'|'y'|'z'} forword //基準(zhǔn)
 * @returns 
 */
export default function isClockwise(path, forword = 'z') {
    let sum = 0;
    const n = path.length;

    for (let i = 0; i < n; i++) {
        const current = path[i];
        const next = path[(i + 1) % n]; // 取下一個(gè)點(diǎn),循環(huán)到第一個(gè)點(diǎn)

        // 計(jì)算當(dāng)前點(diǎn)到下一個(gè)點(diǎn)的向量
        const vector = next.clone().sub(current);

        // 只考慮 xy 平面上的向量,忽略 z 分量
        vector.z = 0;

        // 叉積的 z 分量可以判斷順時(shí)針還是逆時(shí)針
        if (forword == 'z')
            sum += (current.x * next.y - next.x * current.y);
        else if (forword == 'x')
            sum += (current.z * next.y - next.z * current.y);
        else if (forword == 'y')
            sum += (current.x * next.z - next.x * current.z);
	
		/**
		*如果業(yè)務(wù)需要 可以在這里判斷sum大小變化確定 如果增或者減反向 則可判斷這里出現(xiàn)凹點(diǎn)
		*/
    }

    // 如果 sum 大于 0,則路徑是逆時(shí)針的;如果 sum 小于 0,則路徑是順時(shí)針的
    return sum > 0;
}

使用

使用isClick判斷路徑方向性,并轉(zhuǎn)為順時(shí)針
   let reverse = isClockwise(vertices)
    if (reverse) vertices.reverse()

到了這里,關(guān)于【JavaScript&&Threejs】判斷路徑在二維平面上投影的方向順逆時(shí)針的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 利用python計(jì)算兩個(gè)平面相交直線的方向向量

    利用python計(jì)算兩個(gè)平面相交直線的方向向量

    利用兩平面的法向量做”叉乘“運(yùn)算獲得兩平面交線的方向向量。 如圖所示,兩平面相交關(guān)系為: 圖中 n 1 ? vec{n_1} n 1 ? ? 為平面1的法向量, n 2 ? vec{n_2} n 2 ? ? 為平面2的法向量, l ? vec{l} l 為兩平面交線的方向向量。根據(jù)丘維聲所著《解析幾何(第三版)》第3

    2024年02月05日
    瀏覽(21)
  • 3d世界坐標(biāo)轉(zhuǎn)換到某個(gè)二維平面。

    有個(gè)功能需要截取某個(gè)平面的點(diǎn)云數(shù)據(jù),然后計(jì)算寬高。需要將3d點(diǎn)投影到二維平面上。

    2024年04月26日
    瀏覽(16)
  • 2d平面unity,鼠標(biāo)點(diǎn)擊某個(gè)位置,人物角色朝這個(gè)方向移動(dòng)

    2d平面unity,鼠標(biāo)點(diǎn)擊某個(gè)位置,人物角色朝這個(gè)方向移動(dòng) 如果我們沒有將鼠標(biāo)點(diǎn)擊位置轉(zhuǎn)換為世界坐標(biāo)系中的位置,而是直接將屏幕坐標(biāo)系中的位置作為角色移動(dòng)的目標(biāo)位置,那么可能會(huì)發(fā)生以下兩種情況: 角色會(huì)偏離目標(biāo)位置 由于屏幕坐標(biāo)系中的位置和世界坐標(biāo)系中的位

    2024年02月06日
    瀏覽(39)
  • Unity二維平面上物體的移動(dòng)(三)

    Unity二維平面上物體的移動(dòng)(三)

    在上一篇中使物體來回移動(dòng)的函數(shù)主要是獲取鍵盤操作輸入的情況Input.GetKey(),然后物體朝著某一個(gè)方向移動(dòng)gameObject.transform.Translate(Vector3.up*Time.deltaTime); 除了這個(gè)函數(shù),可以用開發(fā)環(huán)境自帶設(shè)置,Input.GetAxis(),然后使物體移動(dòng); 新建一個(gè)文件,命名為MovementOther.cs using Sys

    2024年02月08日
    瀏覽(20)
  • 重積分 | 第二類曲面積分投影法正負(fù)判斷

    重積分 | 第二類曲面積分投影法正負(fù)判斷

    1,如果題目中要求的是外側(cè)或者內(nèi)側(cè) 曲面是一張紙,假設(shè)外側(cè)為白色,內(nèi)側(cè)為黑色 當(dāng)選擇外側(cè)(白色)時(shí),法向量與z正向?yàn)殇J角 內(nèi)側(cè)(黑色)時(shí),法向量與z正向?yàn)殁g角 現(xiàn)假設(shè)曲面在桌子上方(z>0) 投影就是把紙平鋪在桌子上 可以發(fā)現(xiàn),不管你在曲面的時(shí)候選擇內(nèi)側(cè)還

    2024年02月04日
    瀏覽(19)
  • 二維體光子晶體的平面波展開法代碼

    二維體光子晶體的平面波展開法代碼

    藍(lán)色小圓是FEM繪制的能帶。我原先按照自己的理解改動(dòng)了下上面的代碼,但是和FEM的結(jié)果符合得沒上面的代碼好。 抄的書上的代碼: Photonic Crystals Physics and Practical Modeling (Igor A. Sukhoivanov, Igor V. Guryev (auth.)) 下面是相同參數(shù),但按照我自己的理解改了一點(diǎn)點(diǎn)的代碼,結(jié)果和FEM的

    2024年02月10日
    瀏覽(13)
  • 判斷平面中兩射線是否相交的高效方法

    最近在工作中遇到判斷平面內(nèi)兩射線是否相交的問題。 對(duì)于這個(gè)問題的解決,常規(guī)的方法是將兩條射線拓展為直線,計(jì)算直線的交點(diǎn),而后判斷交點(diǎn)是否在射線上。 這種方法,在思路上較為直觀,也易于理解。然后,該方法在計(jì)算量上相對(duì)較大。對(duì)于少量射線間的交點(diǎn)計(jì)算

    2024年02月12日
    瀏覽(26)
  • 【Lidar】基于Python的三維點(diǎn)云數(shù)據(jù)轉(zhuǎn)二維平面+散點(diǎn)圖繪制

    【Lidar】基于Python的三維點(diǎn)云數(shù)據(jù)轉(zhuǎn)二維平面+散點(diǎn)圖繪制

    ? ? ? ? 最近一直在搞點(diǎn)云相關(guān)的操作,有時(shí)候在處理點(diǎn)云數(shù)據(jù)時(shí)需要查看處理后的數(shù)據(jù)是否滿足需求,所以就想著寫一套展示點(diǎn)云的代碼。之前已經(jīng)分享過如何可視化點(diǎn)云了,感興趣的可以自己去看下:【Lidar】基于Python的Open3D庫可視化點(diǎn)云數(shù)據(jù)。但是這個(gè)是3維展示,不滿

    2024年02月21日
    瀏覽(44)
  • Android 獲取屏幕方向,根據(jù)屏幕旋轉(zhuǎn)角度判斷屏幕實(shí)際方向

    在使用 getResources().getConfiguration().orientation 獲取屏幕方向時(shí),可能會(huì)遇到不準(zhǔn)確的問題。 這是因?yàn)樵摲椒ǚ祷氐氖窃O(shè)備的自然方向,而不是屏幕的實(shí)際方向。 在某些情況下,設(shè)備的自然方向可能與屏幕的實(shí)際方向不同。例如,如果設(shè)備是橫向放置的,但屏幕是縱向顯示的,那

    2024年02月03日
    瀏覽(36)
  • python 如何判斷點(diǎn)是否在多邊形(三角形)內(nèi),或求點(diǎn)在3D面上的投影?

    python 如何判斷點(diǎn)是否在多邊形(三角形)內(nèi),或求點(diǎn)在3D面上的投影?

    方法1: 用shapely中的geometry包 1)polygon.covers(point) 如果point在多邊形polygon上(包括邊),返回True,否則False。 2)polygon.contains(point) 如果point在多邊形polygon上(不包括邊),返回True,否則False。 方法2: 用blender的內(nèi)置python api。 將點(diǎn)投影到三角形平面上,并檢查其是否在三角形

    2023年04月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包