Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

в игре жизнь стандартом идет квадратная решетка, как мне сделать эту же игру но в треугольной решетке? я новичек.. уже все что знал перепробовал, искал в инете ничего...

88K
06 июня 2014 года
amazzing
3 / / 06.06.2014
я новичек.. уже все что знал перепробовал, искал в инете ничего...
326
06 июня 2014 года
sadovoya
757 / / 19.11.2005
Цитата:
искал в инете ничего...


Ну, что искал, то и нашел :)

446
06 июня 2014 года
Meander
487 / / 04.09.2011
В этой игре состояние ячейки на следующем шаге зависит от состояния соседних ячеек на текущем шаге. Определись какие ячейки считать соседними. Затем определи:
1) Конфигурацию (число) соседних клеток обеспечивающую перенаселенность (гибель центральной клетки);
2) Конфигурацию (число) соседних клеток обеспечивающую рождение центральной клетки;
3) Конфигурацию (число) соседних клеток обеспечивающую одиночество (гибель центральной клетки);
В общем случае эти правила произвольны и задаются аксиоматически.
Надо определить, какие из желтых, зеленых и синих клеток считать соседними.
88K
07 июня 2014 года
amazzing
3 / / 06.06.2014
Есть еще проблема с формулой по которой задается расположение решетки. Т. Е. Треугольники должны переворачиваться
446
07 июня 2014 года
Meander
487 / / 04.09.2011
Очевидно, что достаточно только сдвигов и отражений.
Выделим один (базовый) треугольник в центре экрана для определенности.

Код:
//Зададим координаты вершины базового треугольника в экранных координатах
double x0 = 200.0, y0 = 200.0;//pixels
//Зададим длину ребра базового тр-ка
double l = 4.0;//pixels
//Вычислим высоту базового тр-ка
double h = 2.0*1.732050807568880*l/3.0;//Длинное число это корень квадратный из трех
//Пусть координаты вершин тр-ков хранятся в структурах
struct Triangle {
  double x1, y1,
         x2, y2,
         x3, y3;
};
//Создадим базовый тр-к
Triangle *base = new Triangle();
base->x1 = x0;         base->y1 = y0;
base->x2 = x0 - 0.5*l; base->y2 = y0 + h;
base->x3 = x0 + 0.5*l; base->y3 = y0 + h;
//Остальные треугольники задаются через уже известные координаты
//Тр-к справа от базового
Triangle *tr = new Triangle();
tr->x1 = base->x1;     tr->y1 = base->y1;
tr->x2 = base->x1 + l; tr->y2 = base->y1;
tr->x3 = base->x3;     tr->y3 = base->y3;
В общем, все сводится к сдвигам координат на величину длины ребра по оси X и сдвигам на величину высоты треугольника по оси Y.
Заполнять плоскость можно построчно или кольцами вокруг базового тр-ка.
Если заполнять кольцами, то общее число тр-ков вычисляется по формуле:
 
Код:
N = 12 * n + 1;
где n - число слоев вокруг базового тр-ка
446
08 июня 2014 года
Meander
487 / / 04.09.2011
У меня так получилось:
Прикрепленные файлы:
475 Кб
Загрузок: 993
446
08 июня 2014 года
Meander
487 / / 04.09.2011
Исходники программы для клеточного автомата на трехмерной решетке я выложил. Если интересно, посмотри мои исходники.
88K
09 июня 2014 года
amazzing
3 / / 06.06.2014
Спасибо
446
09 июня 2014 года
Meander
487 / / 04.09.2011
Имей ввиду, в структуре программы есть ошибка. Самая большая функция, которая формирует указатели на соседние ячейки, выполняется в предположении, что вся область пространства укладывается в ромб. Визуализация осуществлена в виде укладки в прямоугольник. Поэтому следует, либо переписать функцию инициализирующую координаты вершин треугольников (так, чтобы пространство выглядело как ромб), либо переписать функцию инициализации указателей на соседей. Ясно, что прямоугольная структура на много круче ромбовидной, но там несколько больше случаев расположения групп соседних ячеек.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог