Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 06.09.2005, 21:36   #1
alcosholik
 
Сообщений: n/a
Хорошо

Возможно ли написать универсальный алгоритм поворота для фигуры, состоящей из квадратных блоков?
Например, фигура из тетриса. Имеет примерно такой вид:


Каждый квадрат (блок) - отдельная картинка. Фигура поворачивается на угол 90 градусов по часовой стрелке, т.е. всего есть 4 этапа поворота:


Сейчас я просто задаю координаты каждого блока для каждого этапа поворота. Это не универсально, долго и неразумно. Есть какой-нибудь более рациональный путь для решения данной проблемы?
 
Ответить с цитированием
Старый 06.09.2005, 22:43   #2
Jet
ПроЭктировщик
 
Регистрация: 04.09.2005
Сообщений: 139
Написано одно полезное сообщение
возьмем к примеру матрицу 3х3 и поместим в неё заданную фигуру.

затем в каждом блоке напиши его координаты (центральную клетку возьми за 0).

возьми другой листок, поверни фигуру на 90 градусов, опять напиши координаты. и еще два раза.

когда получишь четыре картинки, легко можно вывести зависимость.

это называется методом индукции - т.е. формула выводится без доказательств. работает - и ладно. данный метод сильно экономит нервы и время

о результатах сообщи плиз
(Offline)
 
Ответить с цитированием
Старый 06.09.2005, 22:55   #3
alcosholik
 
Сообщений: n/a
Я так и делал, но у меня не получалось вывести зависимость даже для одного блока. Если, например, есть цикл, в котором перебираются все блоки нарисованной выше фигуры, то он выглядит примерно так:
For i=0 to 3
 If i<1
 ...;тут я записываю в переменные координаты для данного блока
 ElseIf i<3
 ...;то же самое для двух следующих блоков
 Else
 ...;для последнего блока
 End if
Next
Это выглядит некрасиво и нерационально. И при этом в каждом из условий могут быть еще условия, в которых проверяются координаты рассматриваемого блока.

В общем, бред сивой кобылы у меня пока получается.
 
Ответить с цитированием
Старый 06.09.2005, 23:33   #4
Jet
ПроЭктировщик
 
Регистрация: 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
alcosholik
 
Сообщений: n/a
Спасибо.
Рад, что понравилась задачка
Ну и как всегда я был ленив и невнимателен
 
Ответить с цитированием
Старый 08.09.2005, 19:56   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Во! Это вроде как линейный оператор, действующий на множестве квадратных матриц 3*3
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.09.2005, 21:01   #7
jimon
 
Сообщений: n/a
мне impersonalis пытался навязать матрицу шмитда :o

так вот - простой разворот матрици 3*3 с центром 2*2
центр менять нельзя
поворачивать можно только на -90 и на 90 градусов
матрицу представил в виде масима потомучто с типами возится в западло было

я гений минимализма )
 
Ответить с цитированием
Старый 08.09.2005, 21:03   #8
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Причём здесь Шмидт?! Я тебе перечислил некоторые операции, производимые с матрицами. Касаемо юзания данной матрицы для поворта фигуры - сказано не было!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.09.2005, 21:05   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Аттач посмотрел. Вариант решения.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм поиска пути ии mifos JAVA Micro Edition 10 12.07.2011 17:34
Алгоритм MD5 Dialogus Библиотеки 7 07.02.2010 15:17
Алгоритм Дейкстры Serega 3D-программирование 6 29.10.2009 20:18
Морской бой - алгоритм Matt Merkulov 2D-программирование 3 27.05.2007 00:25
Угол поворота модели(математика) <Платон> 3D-программирование 1 10.02.2006 18:55


Часовой пояс GMT +4, время: 21:21.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com