2010-10-11 4 views
2

пока я работаю над проектом, который требует симуляции движения рыбы, Я положил рыбу в трехмерную среду, и я бы хотел, чтобы она могла плавать по пути, похоже, настоящая рыба будет делать. Мне интересно, есть ли какой-нибудь алгоритм, который может генерировать квази-случайный, подобный рыбе путь?генерировать случайный путь в 3-х измерениях

наилучшие пожелания, каждый.

+6

Несомненно, вы можете создать случайный путь, но он не будет выглядеть вообще как рыба. Вероятно, вам следует изучить, как рыба плавает и формулирует эмпирический алгоритм. – JoshD

+3

@JoshD Если рыба пьяна, есть много литературы .... –

+1

Эмуляция того, как рыба «думает» - это способ сделать ее действительно правдой, хуже того, вы даже не можете начать с грубой эвристики, пока не узнаете какой «рыбный плавательный путь» * выглядит * как. У вас даже есть способ судить, как вы поживаете? – dmckee

ответ

0

Попробуйте Google «алгоритм флокирования». Биооиды также есть что посмотреть.

+2

flocking algs обычно ссылаются на моделирование поведения набора с #> 1 –

+0

Правда, но, возможно, читав об этих темах, он может придумать некоторые идеи, которые можно попробовать, применимые к его конкретному случаю. –

+0

Errrrrr, я работаю над проектом только с одной рыбой, спасибо вам все равно – suige

2

Этот fish simulation в Javascript (исходный код) имитирует движение рыбы в двух измерениях; однако его легко изменить до трех измерений. Вы должны позволить системе эволюционировать мозг нейронной сети рыбы, чтобы увидеть полный эффект или посмотреть видео, размещенное на странице.

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

+0

Да, я никогда не рассматривал рыбу как танк, но вы приносите мне хороший аспект для рассмотрения. – suige

2

Однажды я написал программу для развлечения, где я сгенерировал черви, которые перемещались случайным образом. Довольно уверен, что вы можете использовать тот же подход в своем случае, если не ищете слишком сложного. Моя попытка была довольно простой эвристикой. Решение было для 2D, но вы можете легко расширить его до 3D.

Я создал матрицу вероятности, указывающую вероятность того, что рыба [n] будет двигаться в каждом направлении на итерации i + 1, например: 90% для перемещения в одном направлении, 2% для поворота на 45 градусов влево, 2% для поворота на 45 градусов вправо, 1% для поворота на 90 градусов влево или вправо и т. д. Кроме того, вам нужно будет указать, в каком направлении движется ваша рыба. Проценты были в основном решены путем проб и ошибок, но это тривиально.

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

+0

симпатичный подробно, thx! – suige

Смежные вопросы