Я установил класс сетки, который содержит теоретические ячейки.
У меня есть метод collectCells()
, который принимает в качестве аргументов начальную точку, радианы и расстояние.Я хочу, чтобы этот метод возвращал массив, содержащий все ячейки, расположенные вдоль заданного угла и находящиеся в пределах указанного расстояния от начальной точки, например
Самый простой способ дляМне нужно сделать это, просто перебрав все пиксели в указанном направлении, и по ходу забрать ячейки, что-то вроде:
for(var i:int = 0; i<distance; i++)
{
startPoint.x += Math.cos(radians);
startPoint.y += Math.sin(radians);
if( start point falls within uncollected cell) collect cell;
}
Это явно очень плохо, так как цикл будет продолжаться до тех пор, покаУказанное расстояние - очень медленное.
Я пробовал что-то другое, создавая метод nextCell()
, который принимает последнюю собранную ячейку и радианы.Метод отбрасывал точку 25 пикселей в направлении, указанном радианами, собирал результирующую ячейку и затем начинал заново с этой ячейки для заданного количества ячеек.
Я не очень ясно думал об этом подходе,и как только я понял, у меня возникла проблема: фактический путь, который я проверяю, прерывается при каждом поиске следующей ячейки, например
Где зеленая пунктирная линияявляется желаемым путем, а синие линии - это пути, которые составляют каждый nextCell()
вызов, потому что проверка выполняется из центра каждой ячейки.
Как правильно собрать ячейки взаданное направление на указанном расстоянии (в пикселях)?