Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2012, 07:51   #1
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
Смущение Проверка соприкосновений линии с ячейками массива

Имеется карта, состоящая из тайлов размером 32x32. Имеются две точки. Мне нужно пройтись по тайлам между этими двумя точками. Пример:


Мой вариант: постепенно идти от одной точки к другой, передвигаясь по 1 единице и при каждом передвижение обращаться к тайлу по получившимся координатам, и делать проверку. Но этот вариант накладный, так как будет частое обращение к массиву, причём к одним и тем же ячейкам. Мне нужно делать это быстро.

Может есть какой-то другой вариант?
#include <мозг.h>

Последний раз редактировалось Руслантус; 11.07.2012 в 07:54.
Руслантус вне форума Ответить с цитированием
Старый 11.07.2012, 08:17   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Можно проверять пересечение с сеткой и если пересекаются 2 стороны одной ячейки, то ту ячейку и нужно брать. И отдельно обыграть ситуацию 3
Kostia вне форума Ответить с цитированием
Старый 11.07.2012, 20:12   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Я вот о чем подумал.
Зная координаты двух точек, можно вычислять координаты центров тайлов.
Номер тайла по Х или по У может быть вычислен из координат точек целочисленным делением. Определяем расстояние от центра тайла до прямой и таким образом определяем принадлежат ли точки прямой тайлу. Затем можно определить выше или ниже центра тайла проходит прямая и следующую точку для тестирования брать в центре соответствующего тайла со сдвигом вниз -> вправо или ...
Задача некоторым образом смахивает на алгоритм Брезенхема для прямой - координаты (номера) тайлов - точки такой прямой, но тут ещё надо покумекать ...

Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 11.07.2012, 20:30   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

ViktorR, как считаю данный метод не сработает по одной простой причине - возьмем две точки, одну бесконечно близко к середине одной из сторон тайла, одну - бесконечно близко к углу, естественно расстояние до второй будет больше, но точка так же будет принадлежать тайлу. Если за порог брать именно это расстояние - часть точек соседних тайлов так же попадет под условие
Поправьте, если я ошибаюсь
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 11.07.2012, 23:12   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Согласен. Ведь если прямая проходит близко к вертикали, то может быть так, что проекция центра тайла на прямую будет уже принадлежать соседнему тайлу, но прямая прошла и по проверяемому тайлу.


Не до конца осмыслил свое предложение ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 12.07.2012, 08:31   #6
Руслантус
Наркоман самоучка
Форумчанин
 
Аватар для Руслантус
 
Регистрация: 22.07.2007
Сообщений: 276
По умолчанию

Я сделал так, как написал в 1 посте. Ещё добавил сохранение прошлой позиции тайла, дабы не обращаться к одному и тому же тайлу несколько раз. Мне эта реализация вполне подошла.
#include <мозг.h>
Руслантус вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 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