Как быстро выбрать набор ячеек сетки вдоль заданного угла? - PullRequest
2 голосов
/ 22 февраля 2012

Я установил класс сетки, который содержит теоретические ячейки.

У меня есть метод collectCells(), который принимает в качестве аргументов начальную точку, радианы и расстояние.Я хочу, чтобы этот метод возвращал массив, содержащий все ячейки, расположенные вдоль заданного угла и находящиеся в пределах указанного расстояния от начальной точки, например

enter image description here

Самый простой способ дляМне нужно сделать это, просто перебрав все пиксели в указанном направлении, и по ходу забрать ячейки, что-то вроде:

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 пикселей в направлении, указанном радианами, собирал результирующую ячейку и затем начинал заново с этой ячейки для заданного количества ячеек.

Я не очень ясно думал об этом подходе,и как только я понял, у меня возникла проблема: фактический путь, который я проверяю, прерывается при каждом поиске следующей ячейки, например

enter image description here

Где зеленая пунктирная линияявляется желаемым путем, а синие линии - это пути, которые составляют каждый nextCell() вызов, потому что проверка выполняется из центра каждой ячейки.

Как правильно собрать ячейки взаданное направление на указанном расстоянии (в пикселях)?

1 Ответ

2 голосов
/ 22 февраля 2012

Или вы можете использовать Алгоритм рисования линий Брезенхэма . Потому что буквально вы пытаетесь нарисовать линию шириной в пиксель, но с огромными пикселями.

...