亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

有沒有更簡單的方法來分割圖像?

有沒有更簡單的方法來分割圖像?

皈依舞 2023-05-25 17:14:37
我有一個帶有腳本的 HTML 文件,該文件給出了一個上面有扇區的地圖。和A1、B2一樣,但是有子扇區,每個扇區有1-9。例如,A1-5、B2-9 等。截至目前,我對每個子行業都有一堆 IF 語句。這是一個例子if (x > 2093-161/3 && x < 2093 && y < 1932-161*2/3 && y > 1771) {    var isnumber = "9";    }  if (x > 2093-161*2/3 && x < 2093-161/3 && y < 1932-161*2/3 && y > 1771) {    var  isnumber = "8";    }  if (x > 1932 && x < 2093-161*2/3 && y < 1932-161*2/3 && y > 1771) {    var  isnumber = "7";    }  if (x > 2093-161/3 && x < 2093 && y < 1932-161*1/3 && y > 1932-161*2/3) {    var  isnumber = "6";    }  if (x > 2093-161*2/3 && x < 2093-161/3 && y < 1932-161*1/3 && y > 1932-161*2/3) {    var  isnumber = "5";    }  if (x > 1932 && x < 2093-161*2/3 && y < 1932-161*1/3 && y > 1932-161*2/3) {    var  isnumber = "4";    }  if (x > 2093-161/3 && x < 2093 && y < 161*12 && y > 1932-161*1/3) {    var  isnumber = "3";    }  if (x > 2093-161*2/3 && x < 2093-161/3 && y < 161*12 && y > 1932-161*1/3) {    var  isnumber = "2";    }  if (x > 1932 && x < 2093-161*2/3 && y < 161*12 && y > 1932-161*1/3) {    var  isnumber = "1";    }有沒有更簡單的方法來做到這一點?
查看完整描述

2 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

首先我們需要得到相對于每個扇區的x和坐標,這意味著我們需要將坐標轉換為和之間的相對坐標。像這樣:y0161


var xRelativeToSector = x % 161;

var yRelativeToSector = y % 161;

然后我們需要將這些相對坐標轉換成列索引和行索引,我們有 3 種可能的列和 3 種可能的行,所以:


var column = Math.floor(3 * xRelativeToSector / 161);

var row = Math.floor(3 * yRelativeToSector / 161);

最后,我們使用column和row來計算使用此公式的數字row * numberOfColumns + column。請注意,我們案例中的行是從下到上排序的,因此我們使用(2 - row)代替row。我們還需要添加1到結果中,因為公式給了我們一個從 0 開始的索引,而我們想要一個從 1 開始的索引。像這樣:


var isnumber = 3 * (2 - row) + column + 1;

因此,您可以簡單地將這段代碼分組到一個函數中,并使用它來獲取子部門編號:


function getSubSectorNumber(x, y) {

    var xRelativeToSector = x % 161;

    var yRelativeToSector = y % 161;


    var column = Math.floor(3 * xRelativeToSector / 161);

    var row = Math.floor(3 * yRelativeToSector / 161);


    return 3 * (2 - row) + column + 1;

}


查看完整回答
反對 回復 2023-05-25
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

數學的基本思想是使用除法和 mod 來得到余數。


var width = 2160;

var sectorW = 161;


function getSector (x) {

   var sectorX = Math.floor(x / sectorW);

   var sub = x - (sectorW * sectorX % x);

   var subSectorX = Math.floor(sub / (sectorW / 3))

   return {

     sectorX: sectorX, 

     subSectorX: subSectorX

   }

}


console.log( 100, getSector(100))

console.log( 180, getSector(180))


擴展它。我不確定你的實數系統是什么樣的......但只是玩弄它。下面是基本思路


所以一個數字10,10像A1 a1


+-----------+-----------+-----------+

|A1         |B1         |C1         |

|  a1 b1 c1 |  a1 b1 c1 |  a1 b1 c1 |

|  a2 b2 c2 |  a2 b2 c2 |  a2 b2 c2 |

|  a3 b3 c3 |  a3 b3 c3 |  a3 b3 c3 |

+-----------+-----------+-----------+

|A2         |B2         |C2         |

|  a1 b1 c1 |  a1 b1 c1 |  a1 b1 c1 |

|  a2 b2 c2 |  a2 b2 c2 |  a2 b2 c2 |

|  a3 b3 c3 |  a3 b3 c3 |  a3 b3 c3 |

+-----------+-----------+-----------+

|A3         |B3         |C3         |

|  a1 b1 c1 |  a1 b1 c1 |  a1 b1 c1 |

|  a2 b2 c2 |  a2 b2 c2 |  a2 b2 c2 |

|  a3 b3 c3 |  a3 b3 c3 |  a3 b3 c3 |

+-----------+-----------+-----------+

var width = 2160;

var sectorW = 161;


function calcalateZone (x) {

   var sectorX = Math.floor(x / sectorW);

   var sub = x - (sectorW * sectorX % x);

   var subSectorX = Math.floor(sub / (sectorW / 3))

   return {

     sector: sectorX, 

     subSector: subSectorX

   }

}


function getLetterCode (v, upper) {

 // use base 36 to get letter code

 var letterCase = upper ? "toUpperCase" : "toLowerCase";

 return (v + 10).toString(36)[letterCase]();

}


function getSector(x, y){

  const coorX = calcalateZone(x);

  const coorY = calcalateZone(y);

  return {

    sector: getLetterCode(coorX.sector, true) + (coorY.sector+1),

    subSector: getLetterCode(coorX.subSector, false) + (coorY.subSector+1)

  }


}


console.log( 100, 100, getSector(100, 100))

console.log( 180, 100, getSector(180, 100))

console.log( 100, 180, getSector(100, 180))

console.log( 180, 180, getSector(180, 180))


查看完整回答
反對 回復 2023-05-25
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號