Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.220.223] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
А если вместо x и y взять конкретное значение?
Вот я взял и ничего не ваышло x1 := 5; y1 := 25; x2 := round(6.25); y2 := round(39.0625); x3 := round(7.5); y3 := round(56.25); И для моей программы ведь надо брать процедуру BSpline или Catmull_Rom_Spline? (и чем они отличаются). Вот именно для той процедуры , которая мне нужна, приведи пожалуйста пример. |
Сообщ.
#17
,
|
|
|
Xn,Yn - то координаты на экране, то есть пиксели (целые числа)!
Добавлено Цитата Eugie Способов интерполяции много, наиболее практичный - с помощью сплайнов. Cплайн - это интерполирующая кривая с заданной степенью гладкости, проходящая через набор точек (узлов). Реализуют сплайны с помощью многочленов, т.е. участки кривой между соседними узлами представляют собой многочлены; при этом их коэффициенты определяются из условия равенства значений соседних многочленов и их производных (порядка до нужной степени гладкости) в узлах плюс несколько доп.условий на производные в крайних точках. Например, для кубических сплайнов имеем: пусть (x[1],y[1]),...,(x[N],y[N]) - набор узлов; F[n](x):=a[n]*x^3+b[n]*x^2+c[n]*x+d[n], n:=1,...,N-1 - набор кубических многочленов. Тогда система уравнений F [n](x[k]) := y[k], n:=(1..N-1), k:=(n,n+1), F' [n](x[n+1]) := F' [n+1](x[n+1]), n:=(1..N-2), F''[n](x[n+1]) := F''[n+1](x[n+1]), n:=(1..N-2), F''[1](x[1]) := 0, F''[N](x[N]) := 0 (эти два условия произвольные) однозначно определяет коэффициенты многочленов для построения кубического сплайна. Действительно, имеем 4(N-1) переменных a[n],b[n],c[n],d[n] для n := (1..N-1) и столько же уравнений. Описанная схема не самая эффективная, в литературе можно найти алгоритмы построения сплайнов, требующие решения всего N+1 линейных ур-й, причем прогонкой. Рекомендую помотреть, например, справочник по математике Бронштейна и Семендяева. В Дельфи для построения используются методы PolyBezier и PolyBezierTo класса Canvas. Цитата Строит кривую Безье (кубический сплайн), используя массив координат точек Points Добавлено Почитай также и это: Линии Безье Использование кривых Безье |
Сообщ.
#18
,
|
|
|
Цитата Xn,Yn - то координаты на экране, то есть пиксели (целые числа) Значит кокретные числе нельзя брать?(и какие например можно?) Для моей программы надо брать процедуру BSpline или Catmull_Rom_Spline? |
Сообщ.
#19
,
|
|
|
Цитата Falex @ Значит кокретные числе нельзя брать?(и какие например можно?) целые числа - это ординарные типы Byte,Word,Integer,Longint. Что будешь вставлять вместо параметров в функцию: константы, переменные или результаты функций - компилятору до лампочки. Я ясно выражаюсь? Цитата Falex @ Для моей программы надо брать процедуру BSpline или Catmull_Rom_Spline? По-моему, всё-таки процедура CubicBezierCurve. Тебе ведь нужен кубический сплайн. Falex, ты читал то, что я тебе давал? Если проблема именно в отображении сплайна, то тебе надо задавать масштаб увеличения Scale вещественного типа: X1 := Random (Scale * 7.5); Scale должна быть не менее 10.0, но и не слишком большая, иначе кривая выйдет за пределы экрана. |
Сообщ.
#20
,
|
|
|
Попробовал вот так, но почему-то pascal из малоэкранного режима при компиляции переходит в полноэкранный,где ни
одна клавиша не работает, кроме Windows. Scale:=75; InitGraph (gd, gm, 'c:\pascal'); ClearDevice; x1 := random (8*Scale); y1 := random (10*Scale); x2 := random (10*Scale); y2 := random (12*Scale); x3 := random (12*Scale); y3 := random (14*Scale);; Curve (x1, y1, x2, y2, x3, y3, segments); CloseGraph; end. И какой всё таки пример для моей функции (P.S>исходники на Delphi смотрел,но это же не pascal - и сама задача стоит по иному) |
Сообщ.
#21
,
|
|
|
Цитата Falex @ Scale:=75; InitGraph (gd, gm, 'c:\pascal'); ClearDevice; {зачем это здесь нужно???} x1 := random (8*Scale); y1 := random (10*Scale); x2 := random (10*Scale); y2 := random (12*Scale); x3 := random (12*Scale); y3 := random (14*Scale);; Curve (x1, y1, x2, y2, x3, y3, segments); {А где задержка перед выходом из программы???} CloseGraph; end. Перед CloseGraph обязательно должна быть какая-то задержка, чтобы пользователь смог что-то увидеть перед закрытием программы. Вставь Readln; У тебя при запуске программы графический режим устанавливается, потом сразу же и закрывается. Вижу, что с Паскалем у тебя туго. |
Сообщ.
#22
,
|
|
|
И какой всё таки пример для моей функции!
|
Сообщ.
#23
,
|
|
|
Ну сам, в конце концов, можешь подумать? Почитать где-то. Или за тебя все должны искать и предлагать готовые решения?
|