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

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

如何從轉(zhuǎn)換后的樓層地圖中正確計算坐標?

如何從轉(zhuǎn)換后的樓層地圖中正確計算坐標?

萬千封印 2022-11-27 16:13:49
我有一個上下文,我在其中繪制了幾個矩形。然后上下文應用了轉(zhuǎn)換,將其變成平面圖的 3D 幻覺。我正在嘗試創(chuàng)建一個公式來計算光標懸停在哪個坐標上,而不使用 Path2Ds。這是因為我需要能夠計算出它是什么坐標,即使沒有繪制瓷磚,而是無論如何都在網(wǎng)格上。變換矩陣有...水平的縮放1.0傾斜的0.5移動(columns * 32)(列數(shù):6)垂直的縮放0.5傾斜的-1.0移動的0借助Real mouse position in canvas的答案,我相信我走在正確的道路上,但是,當鼠標向下和向左移動時,盡管在同一列上,列也會減少。向右下行時,盡管在同一行,行也會減少。我沒有使用任何框架(但 JQuery 除外,與問題無關)。我怎樣才能計算出準確的坐標?
查看完整描述

2 回答

?
蝴蝶刀刀

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

您調(diào)用setTransform(a, b, c, d, e, f)創(chuàng)建一個 3x3仿射變換矩陣:


|  a  c  e  |

|  b  d  f  |

|  0  0  1  |

給定您當前的值 (1, 0.5, -1, 0.5, n, 0) 有一個逆矩陣:


|  0.5     1  -n/2  | 

| -0.5     1  +n/2  |

|    0     0     1  |

將該變換矩陣應用于您的鼠標坐標(需要表示為 1x3 矩陣[x, y, 1]應提供所需的網(wǎng)格坐標:


const rows = 10;

const columns = 6;


const $coordinate = $("#coordinate");


const $canvas = $("#canvas");


canvas.width = (rows * 32) + (columns * 32);

canvas.height = (rows * 16) + (columns * 16);


const context = $canvas[0].getContext("2d");


context.imageSmoothingEnabled = false;


context.save();

  

context.fillStyle = "white";


context.setTransform(1, 0.5, -1, 0.5, (columns * 32), 0);


// (a) horizontal scaling: 1

// (b) horizontal skewing: 0.5

// (c) vertical skewing: -1

// (d) vertical scaling: 0.5

// (e) horizontal moving: (columns * 32)

// (f) vertical moving: 0


for(let row = 0; row < rows; row++) {

  for(let column = 0; column < columns; column++) {

    context.rect(row * 32, column * 32, 31.5, 31.5);

  }

}


context.fill();



$canvas.mousemove(function(e) {

    const position = {

    left: e.pageX - $canvas.offset().left,

    top: e.pageY - $canvas.offset().top

  };

  

  const innerPosition = {

    left: position.left * 0.5 + position.top - (columns * 32) / 2,

    top: position.left * -0.5 + position.top + (columns * 32) / 2

  };


    const coordinate = {

    row: Math.floor(innerPosition.top / 32),

    column: Math.floor(innerPosition.left / 32)

  };

  

  $coordinate.html(coordinate.row + "x" + coordinate.column);

});

#canvas {

  background: green;

}


#coordinate {

  position: absolute;


  font-family: Arial, sans-serif;


  font-size: 16px;


  left: 12px;

  top: 12px;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<canvas id="canvas"></canvas>


<div id="coordinate">0x0</div>


查看完整回答
反對 回復 2022-11-27
?
躍然一笑

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

只是一個想法:為什么不嘗試在您的 html 中制作一個平面圖(使用 div),使用 CSS 對其進行樣式設置以匹配畫布平面圖的位置,然后將其隱藏。這樣你就可以用 jquery 檢測懸停在 div 上,并使用 div 的坐標來找出畫布上應該更改哪個矩形?我現(xiàn)在正在打電話,但 5 分鐘后我可以在 jsfiddle 上快速演示



查看完整回答
反對 回復 2022-11-27
  • 2 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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