![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Наркоман самоучка
Форумчанин
Регистрация: 22.07.2007
Сообщений: 276
|
![]()
Имеется карта, состоящая из тайлов размером 32x32. Имеются две точки. Мне нужно пройтись по тайлам между этими двумя точками. Пример:
![]() Мой вариант: постепенно идти от одной точки к другой, передвигаясь по 1 единице и при каждом передвижение обращаться к тайлу по получившимся координатам, и делать проверку. Но этот вариант накладный, так как будет частое обращение к массиву, причём к одним и тем же ячейкам. Мне нужно делать это быстро. Может есть какой-то другой вариант?
#include <мозг.h>
Последний раз редактировалось Руслантус; 11.07.2012 в 07:54. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Можно проверять пересечение с сеткой и если пересекаются 2 стороны одной ячейки, то ту ячейку и нужно брать. И отдельно обыграть ситуацию 3
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,378
|
![]()
Я вот о чем подумал.
Зная координаты двух точек, можно вычислять координаты центров тайлов. Номер тайла по Х или по У может быть вычислен из координат точек целочисленным делением. Определяем расстояние от центра тайла до прямой и таким образом определяем принадлежат ли точки прямой тайлу. Затем можно определить выше или ниже центра тайла проходит прямая и следующую точку для тестирования брать в центре соответствующего тайла со сдвигом вниз -> вправо или ... Задача некоторым образом смахивает на алгоритм Брезенхема для прямой - координаты (номера) тайлов - точки такой прямой, но тут ещё надо покумекать ... ![]() Как-то так ...
Как-то так, ...
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]()
ViktorR, как считаю данный метод не сработает по одной простой причине - возьмем две точки, одну бесконечно близко к середине одной из сторон тайла, одну - бесконечно близко к углу, естественно расстояние до второй будет больше, но точка так же будет принадлежать тайлу. Если за порог брать именно это расстояние - часть точек соседних тайлов так же попадет под условие
Поправьте, если я ошибаюсь
благодарность - сюда (не забываем писать от кого)
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,378
|
![]()
Согласен. Ведь если прямая проходит близко к вертикали, то может быть так, что проекция центра тайла на прямую будет уже принадлежать соседнему тайлу, но прямая прошла и по проверяемому тайлу.
Не до конца осмыслил свое предложение ... ![]()
Как-то так, ...
|
![]() |
![]() |
![]() |
#6 |
Наркоман самоучка
Форумчанин
Регистрация: 22.07.2007
Сообщений: 276
|
![]()
Я сделал так, как написал в 1 посте. Ещё добавил сохранение прошлой позиции тайла, дабы не обращаться к одному и тому же тайлу несколько раз. Мне эта реализация вполне подошла.
![]()
#include <мозг.h>
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 1 пиксель. | ImmortalAlexSan | Общие вопросы Delphi | 12 | 25.10.2012 19:05 |
Проверка состояния массива неблокирующих сокетов | Puhovoi | Работа с сетью в Delphi | 1 | 03.07.2012 11:05 |
Проверка ячейки на то содержит ли она значение из массива | Maryver | Microsoft Office Excel | 5 | 14.04.2011 14:40 |
проверка массива | sergio11 | Общие вопросы .NET | 0 | 30.01.2011 10:52 |
Проверка массива | Wander | Microsoft Office Excel | 7 | 04.06.2010 10:20 |