|
2D-программирование Вопросы, касающиеся двумерного программирования |
13.12.2009, 19:40
|
#1
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Массивы в типе
Мне надо написать например вот так:
Type Player
Field Name$[2]
Field Units[6,4,2]
End Type
Но насколько я понял многомерные массивы в типах не поддерживаются, как обойти или чем заменить эту проблемку?
|
(Offline)
|
|
13.12.2009, 19:53
|
#2
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Массивы в типе
Для трехмерного массива индекс можно вычислить так
code:
y * ширина * глубина + x * глубина + z
где массив обьявлен так
code:
массив[ширина * высота * глубина]
а x, y, z соответственно индексы трехмерного массива
PS
"ширина * глубина" можно вычислить заранее, дабы ускорить вычисление
двумерный массив 5*5
обьявить одномерный масив размером x_max*y_max
и получать доступ по формуле id = x+y*x_max
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо H@NON за это полезное сообщение:
|
|
13.12.2009, 19:57
|
#3
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Массивы в типе
имхо это изврат))) но все равно спасибо, так и сделаю)
|
(Offline)
|
|
13.12.2009, 20:00
|
#4
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Массивы в типе
А иначе ты и не сделаешь)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.12.2009, 21:45
|
#5
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Массивы в типе
И еще вопросик:
Имеется начальная точка (0,0) и пункт назначения; имеются препятствия (красным цветом), они в массиве карта[maxX,maxY].
Вопрос: как вычислить клетки по которым пойдет объект до столкновения с препятствием? Чего-то я думал, думал - каша какая-то выходит. Помогите пожалуйста)))
P.S. даже проще, если без препятствий - как вычислить по каким клеткам он пройдет? Кстати движения наискосок допускаются...
|
(Offline)
|
|
13.12.2009, 23:20
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Массивы в типе
ищи путенах (алгоритмы путенахождения)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
13.12.2009, 23:26
|
#7
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Массивы в типе
Да, искал, нашел, но это не совсем то - мне не надо найти путь обхода преград, а просто линию разбить на точки (грубо говоря)...
|
(Offline)
|
|
14.12.2009, 02:04
|
#8
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Массивы в типе
если так, то тебе нужно находить пересечение прямоугольника(клетки) с линией. Алгоритмы реализации наверняка гуляют в сети, отловить не сложно.
|
(Offline)
|
|
14.12.2009, 03:10
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Массивы в типе
Более универсально, и в некоем роде проще - это пересечение линий с линиями, и их обход. Не ограничен формами, да и по мне так, проще линии обходить, чем прямоугольники. 4 линии - вот тебе и прямоугольник
ЗЫ, старое:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
|
|
(Offline)
|
|
Эти 6 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
14.12.2009, 13:57
|
#10
|
Разработчик
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений (для 1,072 пользователей)
|
Ответ: Массивы в типе
Я так подумал для прямоугольника хватит и двух его диагоналей
А если на поле 100+ препятствий, то получается все их придется проверять на пересечение? Это не сильно скажется на производительности?
|
(Offline)
|
|
14.12.2009, 14:38
|
#11
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Массивы в типе
А иначе ты и не сделаешь)
|
ну...
Type UnitsArray
Field x[6]
Field y[4]
Field z[2]
End Type
Type Player
Field Name$[2]
Field Units.UnitsArray
End Type
|
(Offline)
|
|
14.12.2009, 20:30
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Массивы в типе
Сообщение от Dstalk
Я так подумал для прямоугольника хватит и двух его диагоналей
А если на поле 100+ препятствий, то получается все их придется проверять на пересечение? Это не сильно скажется на производительности?
|
Сектора, и проверка на боунти бокс - и нет разницы, как много линий.
|
(Offline)
|
|
14.12.2009, 20:47
|
#13
|
Оператор ЭВМ
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений (для 24 пользователей)
|
Ответ: Массивы в типе
>>проверка на боунти бокс
"баунти" это такой шоколадный батончик с кокосовой начинкой, а ему надо баундин бокс ))
|
(Offline)
|
|
14.12.2009, 21:06
|
#14
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Массивы в типе
BoundBox !!
|
(Offline)
|
|
03.01.2010, 22:33
|
#15
|
AnyKey`щик
Регистрация: 15.05.2009
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Массивы в типе
Сообщение от Dstalk
И еще вопросик:
Имеется начальная точка (0,0) и пункт назначения; имеются препятствия (красным цветом), они в массиве карта[maxX,maxY].
Вопрос: как вычислить клетки по которым пойдет объект до столкновения с препятствием? Чего-то я думал, думал - каша какая-то выходит. Помогите пожалуйста)))
P.S. даже проще, если без препятствий - как вычислить по каким клеткам он пройдет? Кстати движения наискосок допускаются...
|
Клетки по которым пойдет объект из точки (startx;starty) в точку (finishx;finishy) можно посчитать так:
dx = finishx-startx
dy = finishy-starty
Angle# = atan(dx,dy) ;угол от начальной точки до конечной
Lenght# = sqrt(dx^2+dy^2) ;длина проверяемого отрезка
maxsteps = 10 ;количество шагов проверки чем больше - тем точнее проверка. Ставь его равным Abs(Lenght#) для средней точности
steplenght# = lenght/steps ; размер одного шага.
currx# = startx
curry# = starty
for currstep = 0 to maxsteps
currX# = currx# + steplenght#*sin (angle#) ; это координаты клетки через которую пройдет объект на этом шаге
currY# = currx# + steplenght#*cos(angle#) ; округли их до минимального целого.
next
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:20.
|