Cubic spline function

11 отговора 362 прегледа
#1

Cubic spline function

Търся си реализирана функция, която да ми изчертае плавна крива линия между набор от точки. Стандартния PolyBezier не ме устройва, щото чертае серия криви, а не една обща крива.
Моля ако някой има нещо готово подръка, да свирне. Ще бъда много благодарен.

P.S. Алгоритми и материали не ме вълнуват, щото съм стар и мързелив да пиша такива неща.

чети и дишай по-леко
Отговор
в отговор на Pechenia #2

Re: Cubic spline function

Imam algoritmi i materiali - i ako ne bqh star, marzeliw i pretrupan s rabota shtqh da ti napisha ama weche e mnogo kasno...

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на Pechenia #3

Re: Cubic spline function

kakvo po-tochno ti trqbva ? da chertae kriva koqto se samopresicha - F(x,y) ili funkciq samo na edna promenliva - F(x)

Отговор
в отговор на Stim #4

Re: Cubic spline function

Нещо не схванах за самопресичането... Идеята е следната - имаш поредица от точки, които трябва да се свържат с плавна крива линия. Ако си чертал ръчно графики по физика например ще ти е ясно за какво става дума.
В Windows има реализирана функция - PolyBezier (array of TPoint). Проблема е, че тя не свързва плавно всички линии, а ги свързва по 4 - т.е. с една крива свързва 1,2,3,4 точка, с друга - 4,5,6, с трета - 6,7,8 и т.н. Резултата е гадно начупена линия.
За да онагледя какво искам, пусни например Word и изчертай една крива с много точки. Това го гоня аз. После пусни Paint и се опитай да направиш една крива линия от 10-на точки. Ще получиш това което прави PolyBezier.

чети и дишай по-леко
Отговор
в отговор на Pechenia #5

Виж ...

тук или по точно тук

Не знам дали ще ти свърши работа - ама поне има нещо.

---
Е т'ва е живот!

Редактирано от PhantomAS на

Отговор
в отговор на PhantomAS #6

Re: Виж ...

Това още сутринта го видях... Но се ползва пак Безие и пак с криви свързващи 4 точки... Не става...

чети и дишай по-леко
Отговор
в отговор на Pechenia #7

Re: Виж ...

function PolyBezier(DC: HDC; const Points; Count: DWORD): BOOL; stdcall;

function PolyBezierTo(DC: HDC; const Points; Count: DWORD): BOOL; stdcall;

function PolyDraw(DC: HDC; const Points, Types; cCount: Integer): BOOL; stdcall;

Не мога да разбера защо си решил, че функцията PolyBezier използва само 4 то4ки ???? Sorry, че в момента нямам време да се занимавам - но погледни примерите по внимателно - от това което виждам в Google - май не е то4но така както мислиш

---
Е т'ва е живот!
Отговор
в отговор на Pechenia #8

Re: Cubic spline function

Май несъм наясно какво искаш, ама ако е за Trend Line /като е в Excel/ - погледни това, може да ти свърши работа

--------------------------------------
Започва Път от моят праг...
Отговор
в отговор на Hateras #9

Крива на Безие и сплайнова интерполация

За построяване на крива на Безие са необходими 4 точки.Кривата започва от т.1 и е допирателна към вектора, определен от точки 1-2. Краят на кривата е в т.4, като е допирателна към вектор 4-3. Тези криви се използват в автомобилостроене. Сплайновата интерполация е идеална за целта. Имам я разработена, но сорса не ми се дава, защото ми струваше месеци работа. Посочи адрес, да ти изпратя .ЕХЕ. Може и да ти свърши работа.

Отговор
в отговор на Учeниka #10

Re: Крива на Безие и сплайнова интерполация

Zarezhi, ako edni splaini implementirash meseci... :)

Отговор
в отговор на Учeниka #11

Re: Крива на Безие и сплайнова интерполация

barem pravish li progonka? :)

Отговор
в отговор на Учeниka #12

Re: Крива на Безие и сплайнова интерполация

Радвам се, че си се занимавал толкова усърдно. За съжаление на мен ми трябва сорс, за да го вградя в моята програма. За EXE ми стига и MSWord - чертае си перфектна крива между много точки. За единична крива между 4 точки мога да ползвам и PolyBezier
Вече ми дадоха примерен сорс, и някои ценни математически примера. Остава да си седна на задника, и мисля да свърша за ден-два. Все пак хората /имам предвид математиците/ са свършили къртовската работа, остава само да се напише тяхната идея. Все пак благодаря за предложението.

чети и дишай по-леко
Отговор