|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
06.09.2005, 21:36
|
#1
|
|
Возможно ли написать универсальный алгоритм поворота для фигуры, состоящей из квадратных блоков?
Например, фигура из тетриса. Имеет примерно такой вид:
Каждый квадрат (блок) - отдельная картинка. Фигура поворачивается на угол 90 градусов по часовой стрелке, т.е. всего есть 4 этапа поворота:
Сейчас я просто задаю координаты каждого блока для каждого этапа поворота. Это не универсально, долго и неразумно. Есть какой-нибудь более рациональный путь для решения данной проблемы?
|
|
|
06.09.2005, 22:43
|
#2
|
ПроЭктировщик
Регистрация: 04.09.2005
Сообщений: 139
Написано одно полезное сообщение
|
возьмем к примеру матрицу 3х3 и поместим в неё заданную фигуру.
затем в каждом блоке напиши его координаты (центральную клетку возьми за 0).
возьми другой листок, поверни фигуру на 90 градусов, опять напиши координаты. и еще два раза.
когда получишь четыре картинки, легко можно вывести зависимость.
это называется методом индукции - т.е. формула выводится без доказательств. работает - и ладно. данный метод сильно экономит нервы и время
о результатах сообщи плиз
|
(Offline)
|
|
06.09.2005, 22:55
|
#3
|
|
Я так и делал, но у меня не получалось вывести зависимость даже для одного блока. Если, например, есть цикл, в котором перебираются все блоки нарисованной выше фигуры, то он выглядит примерно так:
For i=0 to 3
If i<1
...;тут я записываю в переменные координаты для данного блока
ElseIf i<3
...;то же самое для двух следующих блоков
Else
...;для последнего блока
End if
Next
Это выглядит некрасиво и нерационально. И при этом в каждом из условий могут быть еще условия, в которых проверяются координаты рассматриваемого блока.
В общем, бред сивой кобылы у меня пока получается.
|
|
|
06.09.2005, 23:33
|
#4
|
ПроЭктировщик
Регистрация: 04.09.2005
Сообщений: 139
Написано одно полезное сообщение
|
задело меня за живое наверное, потому что в примерах к Turbo Pascal'ю сделали при помощи заранее заданных матриц
итак, табличка:
|---|
|-1-|
|234|
- вот она, матрица фигуры в начальном положении.
далее идут координаты точек, с шагом поворота в 90 градусов.
X1; Y1| X2; Y2| X3; Y3| X4; Y4|
1: 0; 0| 0; 0| 0; 0| 0; 0|
2: -1; -1| +1; -1| +1; +1| -1; +1|
3: 0; -1| +1; 0| 0; +1| -1; 0|
4: +1; -1| +1; +1| -1; +1| -1; -1|
наблюдается очень интересная картина...
Xi+1=Yi; Yi+1=(-1)*Xi
вот тебе и вся зависимость. пробегаешь в цикле массив, задающий фигуру. если в клетке есть блок, значит его надо убрать из этой клетки и поместить в клетку с новыми координатами (через дополнительный массив). для простого тетриса слишком наворочено, но зато - универсально, красиво. классная задачка
|
(Offline)
|
|
07.09.2005, 01:03
|
#5
|
|
Спасибо.
Рад, что понравилась задачка
Ну и как всегда я был ленив и невнимателен
|
|
|
08.09.2005, 19:56
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Во! Это вроде как линейный оператор, действующий на множестве квадратных матриц 3*3
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.09.2005, 21:01
|
#7
|
|
мне impersonalis пытался навязать матрицу шмитда :o
так вот - простой разворот матрици 3*3 с центром 2*2
центр менять нельзя
поворачивать можно только на -90 и на 90 градусов
матрицу представил в виде масима потомучто с типами возится в западло было
я гений минимализма )
|
|
|
08.09.2005, 21:03
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Причём здесь Шмидт?! Я тебе перечислил некоторые операции, производимые с матрицами. Касаемо юзания данной матрицы для поворта фигуры - сказано не было!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.09.2005, 21:05
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Аттач посмотрел. Вариант решения.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:12.
|