Тригонометрическое садоводство

Эта статья не об реально существующей игре, а о математике и генетике, которые — возможно — смогли бы стать игрой.

В чём суть

Наверняка вы слыхали о таких кривых как родении, розовидные кривые, розы Гранди, полярные розы. Ибо у них весьма интересные графики, а задаются в полярных координатах они элементарно.

Роза-5, или ρ(φ) = 0.2 + 0.5 ∙ sin(5φ) Г. Гранди
Роза-5, или ρ(φ) = 0.2 + 0.5 ∙ sin(5φ) Г. Гранди

Гвидо Гранди вывел целый цветник. А почему бы и игроку не повторить его подвиг? Правда, используя современные технологии.

Секрет роз прост: у функции ρ(φ)= sin(a∙φ/b) надо всего лишь варьировать a и b.

Роза-7/3, или ρ(φ) = 0.6 + 0.5 ∙ sin(7φ/3) Г. Гранди
Роза-7/3, или ρ(φ) = 0.6 + 0.5 ∙ sin(7φ/3) Г. Гранди

Если мы говорим о садоводстве, то на ум приходит скрещивание растений, значит на помощь должна прийти генетика. Но как её прицепить? Не можем же мы сказать, что если у одного цветка было три лепестка, а у другого — пять, то получится цветок с четырьмя лепестками. Такие представления давно устарели, да и не хочется обманывать игрока псевдонаукой.

Пора пораскинуть мозгами. Числитель и знаменатель у нас изменяются в каких-то пределах. Раз у нас есть несколько значений признака, то можно взять полимерию. Условно, геном aaaaaa будет определять единицу, AAAAAA — семёрку, aAaaaA — тройку.

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

Спасёт нас следующее наблюдение: нам важно лишь конечное значение дроби a/b в sin(a∙φ/b). А значит, 2a/2b и 3a/3b будут выглядеть абсолютно так же, но позволят играть с генами.

А теперь пора спуститься с небес фантазий на землю реальности. А теперь пора спуститься с небес фантазий на землю реальности. Шесть аллелей — это три соматических пары с тремя состояниями, то бишь 27 вариантов. А у нас это используется и для числителя, и для знаменателя. 729 уникальных комбинаций явно многовато. Уже вижу, как игрок путается в этих сотнях комбинаций. Если где-то возможно упростить без вреда, надо упрощать.

Роза-3 или <b><i>трифолий</i></b>. По дроби либо 3/1, либо 6/2. По итоговым соглашениям будет один из геномов: 0B/00, A0/00, BA/0A.
Роза-3 или трифолий. По дроби либо 3/1, либо 6/2. По итоговым соглашениям будет один из геномов: 0B/00, A0/00, BA/0A.

Мы считаем, что все аллели равноценны, но в реальности это не так. Почему бы одной из пар аллелей не удваивать эффект гена? Тогда с той же задачей справятся всего две пары аллели и количество комбинаций сократится до смешного количества — 81 штуки.

Окраска

В реальной жизни окраска зависит от способности цветков накапливать определённые вещества, которые и красят цветок. Хотя есть куча публикаций исследований на эту тему, стоят статьи для чтения по 30 ойро, да и требуют супер-глубокого уровня владения биохимией.

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

Моим источником вдохновения послужила палитра из Ворда.

Знакомая многим палитра. На рисунке изначальный концепт генетики цветов.
Знакомая многим палитра. На рисунке изначальный концепт генетики цветов.

У нас есть три цветовых компоненты — R, G, B — так почему не принять их за своеобразные координаты?

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

Осталось придумать генетическую систему. Тут напрашивается кодоминирование: например, сочетание зелёных и красных генов даст новый признак — жёлтый цвет.

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

Условимся, что R — ген красноты, G — зелени, B — синевы, а w — белизны. Тогда имея одну аллель, мы можем получить четыре цвета. Маловато. Вторая аллель позволит нам сделать ещё один шаг и получить ещё шесть цветов. Итого 10. Достаточно?

Попробуем добавить ещё одну. Количество цветов увеличится до 19. Уже перебор. Даже если отсечь чистые цвета, останется 16. Люди вообще столько различают?

Красная стрелка — один кодоминирующий ген, голубая — два, — фиолетовая — три.
Красная стрелка — один кодоминирующий ген, голубая — два, — фиолетовая — три.

Впрочем, можно пойти на компромисс: сначала познакомить игрока с четырьмя цветами, в мидгейме увеличить число до 10, в эндгейме — до 16, добавив цветы с третьей аллелью.

Мутации

В детстве у меня была энциклопедия математики, и там наряду с Гранди упоминался некто Б. Хабенихт. Он продолжил труды по «выведению» цветов и сделал вывод, что тригонометрические функции в степени также дают интересные графики.

Я пытался найти хоть какую-то информацию об этом математике и его трудах, но всё ограничивается лишь той врезкой из энциклопедии. Как будто и не было человека! :O

Мы же с современной техникой можем повторить утерянные изыскания за несколько минут.

Цветок куб-7: ρ(φ) = 0.5 + 0.4 ∙ sin³(7φ) Б. Хабенихт
Цветок куб-7: ρ(φ) = 0.5 + 0.4 ∙ sin³(7φ) Б. Хабенихт

Главный вопрос: а как проапгрейдить цветы?

Ответ зависит от того, нужно ли сохранять младшие степени или нет.

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

Цветок куб-7/2: ρ(φ) = 0.3 + 0.2 ∙ sin³(7φ/2) Б. Хабенихт
Цветок куб-7/2: ρ(φ) = 0.3 + 0.2 ∙ sin³(7φ/2) Б. Хабенихт

Если мы хотим дать возможность комбинирования разных степеней, то нужно продублировать область генов. Тут на помощь может прийти такая мутация как транслокация: из-за неправильного чтения цепочка генов удлиняется за счёт лишних генов.

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

Экземпляр 3’-квадро-6’-куб-3/2-пента-3’: ρ(φ) = 0.4 – 0.1 ∙ sin(3φ) – 0.1 ∙ sin²(6φ) + 0.2 ∙ sin³(3φ/2) – 0.2 ∙ sin⁵(3φ) Igorious
Экземпляр 3’-квадро-6’-куб-3/2-пента-3’: ρ(φ) = 0.4 – 0.1 ∙ sin(3φ) – 0.1 ∙ sin²(6φ) + 0.2 ∙ sin³(3φ/2) – 0.2 ∙ sin⁵(3φ) Igorious

Фенотип

Как вы могли заметить, в формулах встречаются не только дроби и степени, но ещё и множители перед синусами.

Экземпляр –убейте–меня– 3-квадро-6’-куб-3/2-пента-3’: ρ(φ) = 0.4 + 0.1 ∙ sin(3φ) – 0.1 ∙ sin²(6φ) + 0.2 ∙ sin³(3φ/2) – 0.2 ∙ sin⁵(3φ). А ещё придётся поработать над названиями :-) Igorious
Экземпляр –убейте–меня– 3-квадро-6’-куб-3/2-пента-3’: ρ(φ) = 0.4 + 0.1 ∙ sin(3φ) – 0.1 ∙ sin²(6φ) + 0.2 ∙ sin³(3φ/2) – 0.2 ∙ sin⁵(3φ). А ещё придётся поработать над названиями :-) Igorious

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

Почему бы и нам не ввести фенотипные изменения? Подкормил цветок — и коэффициенты изменились.

У меня даже есть несколько «удобрений» на примете: сульфид кобальта и нитрид кремния ;) Но тогда в начале обязательно показать дисклеймер, что к реальным цветам эти вещества не имеют никакого отношения.

Многоцветочная обработка

Если покрутить синусы так и эдак и добавить их к декартовым координатам, то можно получить ещё несколько интересных фигур, называемых циклоидами.

«Пушистик» aka эпициклоида-6
«Пушистик» aka эпициклоида-6
«Шипастик» aka гипоциклоида-5
«Шипастик» aka гипоциклоида-5
«Бутончик» aka эпитрохоида-3
«Бутончик» aka эпитрохоида-3

Несмотря на различный вид, это всё один «класс» растений. Полагаю, мы можем дать игроку пушистиков и шипастиков, чтобы изменять количество вершин. Если игрок сообразит скрестить их, то получит бутончик. Если нет, то всегда можно намекнуть, например, через бюро заказов.

Главный цикл

Имея концепт, можно попробовать накрутить на него историю и игровые механики.

Мы — садовод-математик, который живёт в своём домике с цветочным садом. Однажды мы встречаем в журнале интересную заметку: открыт новый сорт цветов.

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

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

В качестве идеи: <i>прививание </i>цветов для получения <b><i>гибридов</i></b>.
В качестве идеи: прививание цветов для получения гибридов.

Мы принимаем заказы, поливаем, удобряем, опыляем и собираем семена. Из семян получаются новые — возможно изменённые цветы. Продаём, получаем деньги на улучшения.

Вскоре с вами связываются любители из других городов. Они присылают свои экземпляры семян — продвинутые — ну а вы обязуетесь послать в ответ результат.

Иногда всплывают редкие заказы от коллекционеров — им нужны строго определённые цветы. Придётся помучаться, но за такие заказы надо выдавать интересные, но не блокирующие награды.

Например, мы можем получить приборы для взятия проб генома цвета и лепестков, измеритель коэффициентов синусов и свободного коэффициента. Токсичные жидкости, чтобы мутировать определённые гены. Открыть родословную цветов, чтобы выискивать редкие гены и дешифровщик критических случаев.

Сюда же можно запихнуть и опции декоративной кастомизации.

Мне очень понравилась идея из Koi Farm о том, что можно делиться своими творениями с другими игроками. Учитывая, что у нас будет строгий генетический код, проблем при сохранении красивого цветочка быть не должно.

Скрещивание

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

Жертвы эксперимента: красная роза-3/2 и зелёная роза-1
Жертвы эксперимента: красная роза-3/2 и зелёная роза-1

Первая роза даст красную гамету R, вторая — зелёную гамету G. RG — это у нас жёлтый цвет.

С дробью всё немного сложнее.

Числитель. Первая соматическая пара: от красной розы получаем A или a, от зелёной, только a — итого Aa или aa. Вторая пара: от красной получаем a, от зелёной — A или a, итого Aa или aa.

Знаменатель. Первая пара только aa, а вот вторая примет все три возможных значения: AA, Aa или aa.

Итого формула: [RG](Aa | aa)(Aa | aa)/aa(AA|Aa|aa).

Все возможные дети.
Все возможные дети.

Вот такая выдуманная генетико-математическая познавательная игра. Что думаете? :)

Я лично думаю, что в неё сыграло бы ноль человек — уж очень специфичная область. Но помечтать не вредно.

3838
12 комментариев

репостнул типа я умный ряльно а не гуманитарий

14

Спасяб )
Можешь как минимум посмотреть картинки :)

8

Вы порадовали Менделя!!
Ассоциация генетиков давать вам 1 цветок-жена

10

Комментарий недоступен

1

Ты мне напомнил про одну из любимых книг школьного периода - "Математический цветник" Дэвида Кланера, там много таких идей было и интересных задачек, которые в наши дни отлично могли бы быть адаптированы в формате видеоигры. Спасибо за текст, с удовольствием прочёл 

6

Попробовал прочитать начало, в конце просто пролистал вниз много буков и влепил апвоут.
.
.
.
Что?

3

Что-то непонятно? :(

2