第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

組段不重疊并保持良好順序

組段不重疊并保持良好順序

暮色呼如 2022-09-02 17:01:24
我試圖解決一個有趣的問題(我將用JavaScript編寫代碼,但并不重要):假設(shè)有多個視頻在不同的 y 圖層上以幾秒鐘的片段形式出現(xiàn)。如果視頻在時間上重疊,那么在同時播放所有視頻時,頂層的視頻將可見?,F(xiàn)在,我有很多這樣的圖層(這就是問題所在),我想在可能的情況下合并一些圖層,所以最后我將以相同的方式直觀地顯示相同數(shù)量的視頻,但圖層更少。我將向您展示一個圖像,該圖像將提供更好的理解在這張照片中,我以11個視頻為例,在11個初始層上。例如,我們可以看到2和1可以放在同一層上,因為它們不重疊,并且在視覺上視頻將顯示相同,但是例如1和9不能放在第9層和第1層,因為7過度,并且會丟失顯示順序(z-index)如果我想在代碼中表示這一點:const orderedSegments = [  [15, 18],     // 1  [0.3, 9],     // 2  [4, 13],      // 3  [8, 14],      // 4  [1, 3],       // 5  [16, 19.5],   // 6  [4.1, 17.5],  // 7  [0, 2.9],     // 8  [2.9, 11],    // 9  [12.5, 19.4], // 10  [11.3, 12]    // 11]以下是如何看起來只有5層但具有相同顯示的可能結(jié)果之一: const expectedLayers = [      [[0.3, 9], [15, 18]],                  // 2, 1      [[1, 3], [4, 13]],                     // 5, 3      [[8, 14], [16, 19.5]],                 // 4, 6      [[0, 2.9], [4.1, 17.5]],               // 8, 7      [[2.9, 11], [11.3, 12], [12.5, 19.4]]  // 9, 11, 10 ]我想過按開始持續(xù)時間對段進行排序,然后創(chuàng)建1層并嘗試盡可能多地插入其中,當(dāng)不可能時再創(chuàng)建新層...但我不知道如何正確保存順序。這就是為什么我要求看看是否有一些已知的算法可以做這樣的事情,比如在保持順序的同時合并段。感謝您的想法。
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻1809條經(jīng)驗 獲得超8個贊

我注意到你打電話給你的區(qū)段,而實際上,它們不是。因此,為了消除任何混淆,我決定將它們重命名為,然后創(chuàng)建一個單獨的數(shù)組,該數(shù)組具有一些關(guān)于哪些段應(yīng)該首先出現(xiàn)的邏輯。orderedSegmentsunOrderedSegmentsorderedSegments


然后,我編寫了一個小的輔助函數(shù),該函數(shù)查看兩個段并決定它們是否相交/重疊。isOverlapping(a, b)


然后,我創(chuàng)建了一個數(shù)組,它將每個層作為單獨的元素(段數(shù)組)保存。layers


邏輯很簡單,如偽代碼中所述:


loop through each `segment` in `orderedSegments`:

    loop through each `layer` in `layers`:

        check if the `segment` is overlaping any of the segments in the current `layer'

        if not then insert the `segment` to the current `layer`

        if yes, then check with the other layers

        if we reach the end of layers but could not insert it in any,

           then add the segment to its own new layer

const unOrderedSegments = [

  [15, 18], // 1

  [0.3, 9], // 2

  [4, 13], // 3

  [8, 14], // 4

  [1, 3], // 5

  [16, 19.5], // 6

  [4.1, 17.5], // 7

  [0, 2.9], // 8

  [2.9, 11], // 9

  [12.5, 19.4], // 10

  [11.3, 12], // 11

];


const orderedSegments = unOrderedSegments.sort((a, b) => a[0] - b[0]);


const isOverlapping = (a, b) => {

  const check1 = a[0] > b[0] && a[0] < b[1];

  const check2 = b[0] > a[0] && b[0] < a[1];


  return check1 || check2;

};


const layers = [];


for (let i = 0; i < orderedSegments.length; i++) {

  const currentSegment = orderedSegments[i];


  let inserted = false;


  for (let j = 0; j < layers.length; j++) {

    const currentLayer = layers[j];

    let canBeInserted = true;

    for (let k = 0; k < currentLayer.length; k++) {

      const segment = currentLayer[k];


      if (isOverlapping(segment, currentSegment)) {

        canBeInserted = false;

        break;

      }

    }

    if (canBeInserted) {

      currentLayer.push(currentSegment);

      inserted = true;

      break;

    }

  }

  if (!inserted) {

    layers.push([currentSegment]);

  }

}


// print each layer on a spearate line 

// ( convert array to string )

layers.forEach((layer) => {

  let layerString = "";

  layer.forEach((segment) => {

    layerString += `[${segment[0]}-${segment[1]}]`;

  });

  console.log(layerString);

});


查看完整回答
反對 回復(fù) 2022-09-02
?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

const orderedSegments = [

  [15, 18],     // 1

  [0.3, 9],     // 2

  [4, 13],      // 3

  [8, 14],      // 4

  [1, 3],       // 5

  [16, 19.5],   // 6

  [4.1, 17.5],  // 7

  [0, 2.9],     // 8

  [2.9, 11],    // 9

  [12.5, 19.4], // 10

  [11.3, 12]    // 11

]


// sort array by starting time (orderedSegments[i][0])

orderedSegments.sort((a, b) => {

  if(a[0] < b[0]) return -1;

  if(a[0] > b[0]) return 1;

  return 0;

});


const newSegments = [];

while(orderedSegments.length > 0) {

  // get first element of array

  let element = orderedSegments[0];

  // all "used" items will be removed. used items are marked with -1

  if(element[0] == -1) {

    orderedSegments.shift();

    break;

  }

  // newElementGroup represents a new layer

  let newElementGroup = [];

  newElementGroup.push(element);

  for(let i = 0; i < orderedSegments.length; i++) {

    if(orderedSegments[i][0] > element[1]) {

      element = orderedSegments[i].slice();

      newElementGroup.push(element);

      // mark element as "used"

      orderedSegments[i][0] = -1;

    }

  }

  newSegments.push(newElementGroup);

  // remove first element after creating a new layer until orderedSegments is empty

  orderedSegments.shift();

}


newSegments.forEach(element => console.info(element))

我想這應(yīng)該可以解決問題


查看完整回答
反對 回復(fù) 2022-09-02
  • 2 回答
  • 0 關(guān)注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號