应用数学计算锯齿状等距正方形的面积
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用数学计算锯齿状等距正方形的面积相关的知识,希望对你有一定的参考价值。
我正在做一个等距游戏,我希望能够通过鼠标位置确定所选的图块。
我已经在使用常规磁贴之前完成了此操作,但是等轴测更加复杂。尽管我的代码看起来并不愉快,但我之前对此进行了许多尝试,并且取得了一定程度的成功。而且我想,任何看到该代码的人都会以为自己只是在“挥舞它”或“强行施加它”。
我以前的尝试看起来像这样。
public static Vector2 ToIsometric( int x , int y )
{
float selectedTileX = ( y * 32.0f ) + ( x * 16.0f );
float selectedTileY = ( y * 16.0f / 2 ) - ( x * 16.0f / 2 );
return new Vector2 ( selectedTileX , selectedTileY );
}
其中X和Y表示鼠标在屏幕上的位置。 16.0f表示每个图块的高度,32.0f表示每个图块的宽度。下图不使用这些值,但希望能帮助解释我确定鼠标悬停的锯齿状等距图块的索引的目标。
答案
自问这个问题以来很长时间了,但是没有得到答复,所以我将尝试提出解决方案。
[我知道您没有使用
javascript
,但是在这种情况下,您的问题与进行该计算所需的数学有关,并且由于SO提供了良好的JavaScript
摘录,因此该语言非常适合查看计算结果结果。
检查此代码段,它是一个基本的图块网格,并且根据鼠标坐标选择了图块(我将使用此代码段作为基础来向您展示最终的计算):
const tileSize = 40;
const divs = document.querySelectorAll('.container div');
const tiles = Array.prototype.reduce.call(divs, (a, t) => {
a[t.dataset.row] = a[t.dataset.row] || [];
a[t.dataset.row][t.dataset.col] = t;
return a;
}, []);
const unselect = () => divs.forEach(d => d.style.background = '');
const select = (row, col) => tiles[row] && tiles[row][col] && (tiles[row][col].style.background = 'red');
document.addEventListener('mousemove', (e) => {
const row = Math.floor(e.pageY / tileSize);
const col = Math.floor(e.pageX / tileSize);
unselect();
select(row, col);
});
body {
margin: 0;
padding: 0;
}
.container {
border: 1px solid black;
display: flex;
flex-wrap: wrap;
height: 120px;
width: 120px;
}
.container * {
background: white;
border: 1px solid black;
box-sizing: border-box;
height: 40px;
width: 40px;
}
<div class="container">
<div data-row="0" data-col="0"></div>
<div data-row="0" data-col="1"></div>
<div data-row="0" data-col="2"></div>
<div data-row="1" data-col="0"></div>
<div data-row="1" data-col="1"></div>
<div data-row="1" data-col="2"></div>
<div data-row="2" data-col="0"></div>
<div data-row="2" data-col="1"></div>
<div data-row="2" data-col="2"></div>
</div>
以上是关于应用数学计算锯齿状等距正方形的面积的主要内容,如果未能解决你的问题,请参考以下文章
C++编程练习:抽象类——编写一个程序,计算三角形正方形的面积,抽象出一个基类base。