Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

Проблема с кривыми...   Найти похожие ветки 

 
Evgenius ©   (2004-10-10 19:32) [0]

Привет мастерам. Помгите сообразить насчет создания "тропинки".
Требуется нарисовать две не пересекающиеся кривые с заданной шириной+небольшой рандом. Эта "лента" должна походить на лесную тропинку, т.е. непересекаться и не наезжать сама на себя и в то же время должна значительно "вилять". Вопрос составил плохо, признаю, поэтому уточняйте... Заранее спасибо, за любую помощь, алгоритм, идею!!!


 
Evgenius ©   (2004-10-12 14:17) [1]

Удалено модератором


 
_iceman_ ©   (2004-10-12 15:00) [2]

А как ты собираешься рисовать одну кривую? Какими средствами? Какой набор исходных данных? В общем, уточни вопрос.


 
Jeer ©   (2004-10-12 17:34) [3]

Каждая линия "тропинки описывается в виде
y1 = a*x + b*sin(c*x)
y1 = y0 + a*x + b*sin(c*x)

введи в коэф-ты b,c случайный сигнал от Random пропущенный через фильтр нижних частот. Постоянную времени подбирать по приятности извилин тропинки


 
Evgenius ©   (2004-10-12 19:42) [4]

Для _iceman_: примерная ширина/высота "карты" - 400/400
Любой handle или DelphiX
Меня чисто математика интересует, остальное не принципиально.
Спасибо Jeer...
Если можно опишите ФНЧ подробнее, пожалуйста...


 
Evgenius ©   (2004-10-13 11:32) [5]

Jeer, пожалуйста опиши подробнее ФНЧ и как его реализовать...
Если честно, то меня не совсем устраивает "тропинка"-функция, т.к. требуется, что бы она и в обратном направлении могла поворачивать, а никакая такая функция не может принимать два значения для одного параметра. Можно ли как-то через массивы или каким-нибудь други макаром реализовать эту самую "тропинку"???


 
wal ©   (2004-10-13 14:16) [6]

Посмотри - вдруг поможет.

uses
 math;

procedure TForm1.Button1Click(Sender: TObject);
var
 x, y, xold, yold, xend, yend : integer;
 angle: extended;
 i : Integer;
begin
Randomize;
// Начальные координаты
xold := 0;
yold := Height div 2;
// Конечные координаты
xend := Width;
yend := yold;

Canvas.FillRect(ClientRect);
Canvas.MoveTo(xold, yold);
repeat
// Направление на финиш
  if xold=xend
            then angle := Sign(yold-yend)*pi/2
            else angle := arctan((yend-yold)/(xend-xold));
// +- 45
  angle := angle + (random*pi/2 - pi/4);
  x := Trunc(10*cos(angle));
  y := Trunc(10*sin(angle));
  xold := xold + x;
  yold := yold + y;
  Canvas.LineTo(xold, yold);
// подошли близко к финишу
until (abs(xold-xend)<20)and(abs(yold-yend)<20);
// догоняем до финиша
Canvas.LineTo(xend, yend);
end;


С уважением.


 
wicked ©   (2004-10-13 14:16) [7]

можно через фракталы....
общий принцип такой - берется прямая линия, соединяющая "начало" и "конец" пути... делится на две части (не обязательно равные), точка разделения смещается на некоторое расстояние (достаточно большое)... получаем две прямые, над каждой из которых производим те же самые действия, только величина этих самых смещений должна быть меньше... и т.д...
как вариант, если тропинка "рисуется" на некоей местности (с холмами и долинами), то неплохо было бы учесть также наклон тропинки - он должен быть минимальным.... вычислить просто - скалярное произведение вектора "вверх" тропинки на вектор нормали поверхности в данной точке...


 
П7   (2004-10-13 15:40) [8]

На сайте MirGame[s] (адрес ищите через рамблер - не помню) есть статья по "созданию" молний. Там по сути описана ваша проблема и методы её решения.
Удачи.


 
AlexKocharin ©   (2004-10-15 09:05) [9]

Вопрос составил плохо, признаю, поэтому уточняйте...

... и заголовок темы - тоже.
Можно подумать, что "Проблема с кривыми руками".



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
14-1105101564
Kerk
2005-01-07 15:39
2005.01.23
Полифонические мидяшки


1-1105005494
Progh
2005-01-06 12:58
2005.01.23
Работа с TListView


14-1105103932
Kerk
2005-01-07 16:18
2005.01.23
Почему модераторы...


14-1105004976
syte_ser78
2005-01-06 12:49
2005.01.23
try except


1-1104860295
olookin
2005-01-04 20:38
2005.01.23
Double vs Extended





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский