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

Вниз

Вопрос по кривым Безье   Найти похожие ветки 

 
3DMax   (2007-09-20 02:41) [0]

Здравствуйте! Растояние между точками на кривой Безье при одном и том же шаге t может значительно отличаться.

function BezierCurve(A, B, C: TFPoint; t: Single): TFPoint;
begin
if t < 0 then t := 0;
if t > 1 then t := 1;
Result.x := sqr(1-t)*A.x + 2*t*(1-t)*B.x + sqr(t)*C.x;
Result.y := sqr(1-t)*A.y + 2*t*(1-t)*B.y + sqr(t)*C.y;
end;

Подскажите, как сделать чтобы растояние между точками было всегда одинаковым (при одинаковом шаге t), независимо от формы кривой. Я так понимаю нужно вносить какую-то поправку в значение t, но как ее вычислить?


 
MBo ©   (2007-09-20 06:37) [1]

Приведенная функция вычисляет координаты точки на кривой второго порядка при параметре t.
Причем тут какое-то расстояние - я не понял...


 
Jeer ©   (2007-09-20 12:48) [2]


> 3DMax   (20.09.07 02:41)


Сделай h := A.x - B.x == B.x - C.x и вычисляй


 
3DMax   (2007-09-21 00:25) [3]


> Причем тут какое-то расстояние - я не понял...

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

А функцию я показал, что бы не возникало вопросов типа "как ты это делал?"


> Сделай h := A.x - B.x == B.x - C.x и вычисляй

В том то и вся соль, что A.x - B.x и B.x - C.x могут значительно отличаться


 
MBo ©   (2007-09-21 05:29) [4]

>Мне собственно нужно что-бы независимо от формы кривой растояние между точками было одинаковым.

Цель-то какая?


 
Думкин ©   (2007-09-21 06:57) [5]

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


 
3DMax   (2007-09-22 00:39) [6]


> Цель-то какая?

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

> Тебе нужно параметризацию, что ли задать такую, чтобы для
> любой точки расстояние до любой другой на кривой была линейной
> функцией этого параметра?
> Доказать пока не берусь, но мне кажется, что это будет выполнимо
> только для прямой.

Да. Собственно нужно определить зависимость растояния между точками от формы участка кривой.


 
Jeer ©   (2007-10-02 10:20) [7]


> 3DMax   (22.09.07 00:39) [6]


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


 
Думкин ©   (2007-10-03 07:20) [8]

> Jeer ©   (02.10.07 10:20) [7]

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



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

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

Наверх




Память: 0.46 MB
Время: 0.004 c
15-1316790219
Rouse_
2011-09-23 19:03
2012.02.19
Выбираем очередных претендентов на знак "Мастер Дельфи"


3-1272022775
Kobylyansky
2010-04-23 15:39
2012.02.19
Firebird+тип сервера


11-1241546268
Sem
2009-05-05 21:57
2012.02.19
Временные библиотеки


15-1319920202
Юрий
2011-10-30 00:30
2012.02.19
С днем рождения ! 30 октября 2011 воскресенье


2-1320826326
I_D
2011-11-09 12:12
2012.02.19
Перевод проекта с Delphi 7 в Delphi XE. Проблема с ShortString





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский