Kezdőlap › Fórumok › Programozás › XLib programozas -transparent pixmap
- This topic has 22 hozzászólás, 4 résztvevő, and was last updated 21 years, 9 months telt el by
admin.
-
SzerzőBejegyzés
-
2003-08-25-12:25 #1911507
Hali Gabaman!
Kiprobaltam az interpolaciokat.Most lehet hogy hulyeseg amit mondok, de szerintem ezek
ebben az esetben nemigen hasznalhatoak, vagy egyszeruen nem jottem ra.
A helyzet az hogy ezek az interpolacios eljarasok az f(x)=y oszefuggesen alapulnak,magyaran fuggvenyek.
De itt a turistavonalak rajzolasanal ez nem alkalmazhato!Hiszen egy x ertekhez akar tobb y is tartozhat(maguk a pontok ugye,milyen gorbe lesz mondjuk ha x tengely a vizszintes,a (0,0) (1,1) meg a (0,2) pontokbol?)
Paraszti nyelven megfogalmazva , ha a turistaut „visszafordul” , akkor a gorbe szepen torni fog
hiszen az eljaras adott y2 y3 gorbeszakasz kiszamitasa eseten nem veszi figyelembe semelyik x koordinatat semelyik yhoz.2003-08-25-15:47 #1911508Hello!
Kiprobaltam az interpolaciokat.Most lehet hogy hulyeseg amit mondok, de szerintem ezek ebben az esetben nemigen hasznalhatoak, vagy egyszeruen nem jottem ra.
Nem hülyeség, csak ha nem látod át, akkor nem nagyon tudsz mit kezdeni vele. Ne add fel, már nagyon közel vagy a megoldáshoz. Szándékosan ajánlottam a koszinusz-interpolációt, mert a pontosabb Coons-Hermite interpolációhoz sokkal komolyabb matematikai (fõleg analízis) ismeret szükséges.
A helyzet az hogy ezek az interpolacios eljarasok az f(x)=y oszefuggesen alapulnak,magyaran fuggvenyek.
Valóban az f(x)=y összefüggésen alapulnak, de nem a „hagyományos” értelemben vett függvények. Az interpolálás mindíg szakaszokat jelent, és nem folytonos (végtelen) vonalat. Az interpoláló függvénynek van egy f(x)=y alakú bázisfüggvénye, mely általában csak 0 és 1 között kerül kiértékelésre.
Hiszen egy x ertekhez akar tobb y is tartozhat(maguk a pontok ugye,milyen gorbe lesz mondjuk ha x tengely a vizszintes,a (0,0) (1,1) meg a (0,2) pontokbol?)
Igen, pontosan ezért kerül szakaszonként kiértékelésre. Elsõ szakasz: (0,0) és (1,1), második: (1,1) és (0,2). Függvényekkel ez nem megvalósítható, mert ott az x_(n) < x_(n+1) feltételnek mindíg teljesülnie kell. Tehát a koszinusz interpoláció
bázisfüggvénye: f(x) = (1 – cos(mu*PI)) / 2
interpoláló függvénye: f(y1, y2, dx) = y1*(1-((1-cos(dx*PI))/2)) + y2*((1-cos(dx*PI))/2), ahol y1 és y2 a P(n) és P(n+1) pontok y értékei, és dx az szakaszolási együttható (hogy hányadik x részt számítjuk ki)
interpoláló algoritmusa (egységnyi mintevételezés esetén, x_(n+1)-x_(n) = 1):Code:struct Koord {float x;
float y;
};
float bazis (float x)
{
return (1.0-cos(x*PI)) / 2.0;
}
float interpolcio (float y1, float y2, float dx)
{
return y1 * (1.0-bazis(dx)) + y2 * bazis(dx);
}
void interpolalo_algoritmus ()
{
float y_interp;
Koord pontok[MAX_PONTOK];
(…)
for (int i=0;i
Természetesen lehet változó x_(n+1)-x_(n) értékû, vagy egyenlõ ívhosszas algoritmust is használni. A fenti a legegyszerûbb, hogy jobban meg lehessen érteni.
Részletesebb infó (bár 3D-s):
http://www.prog.hu/article.php?title=3D%20grafika2003-08-25-18:51 #1911509Egyébiránt pont azt az embert találtad meg szabola, aki segíteni tud neked… Gabaman, hogy halad a 3D tervezõprogramod? Screenshot-okat láttam…
2003-08-25-20:11 #1911510Hát, az eredményességét többféleképpen lehet értelmezni. Részemrõl siker, mert a szerkezetét tekintve a Blendernél messze fejlettebb, és a kitûzött céljaim többségét elértem, ráadásul nagyon sokat tanultam a programozás során, így mindenképpen megérte elkezdenem. A másik oldalról kudarc, mert az érdeklõdés a nullát közelíti, senki sem akar fejlesztõként csatlakozni, és teljesen használhatatlan. Ez utóbbi az elõbbiek következménye, ha ilyen alacsony az érdeklõdés, akkor nem fogom használható tartalommal feltölteni. Ráadásul pár biztató szó kivételével általában negatív, helyenként gúnyos megnyilvánulásokat kaptam cserébe, amiktõl elment a kedvem a további publikus fejlesztéstõl. Ahhoz meg egyedül rettentõen kevés vagyok, hogy egy valahogyan megálló kereskedelmi terméket hozzak ki belõle. Eredetileg a 3D grafika iránti érdeklõdés és a programozási kedv indított el, és végigkísérte az egész projectet. A jövõt illetõen folytatódni fog a fejlesztés, csak nem a korábbi utat fogom követni, és más programozási nyelvre fogok áttérni.
2003-08-26-03:43 #1911511… épp eszembe jutott Orwell 1984-e, igaz pont más témával kapcsolatban. Kis összefüggés, ami arra késztet hogy leírjam ezt a pár szót talán annyi, hogy a lelkét gyötrik ki a fõszereplõnek, hogy ismét munkába állhasson.
Egyébiránt Rebol az új programnyelv?
2003-08-26-07:46 #1911512Hello Gabaman!
Szoval te ilyen nagy guru vagy ebben a temaban, akkor csak kozos nevezore fogunk jutni.. 😀
Eloszor en is a cosinusot probaltam, mert az tenyleg csak ket ponttol fugg.
Tudom hogy szakaszokat kell venni az interpolacioban,mindent ugy csinaltam ahogy leirtal, csak maskent kodoltam a dolgot.Ezen a kis abran lathato:
A(x1,y1) B(x2,y2) C(x3,y3) C1(x4,y4)
megcsinaljuk a gorbeket az AB es AC szakaszokon, semmi gond, nagyon szepen mukodik a dolog, de en a B pontbol a C1-be akarok menni, es nem a g1 gorben hanem a g2-n,hiszen
ha a g1-n megyek olyan csucs lesz benne mint a Himalaja.Es mivel a cosinusos interpolacionak, ahogy neztem,az actx koordintajara (marmint a kis szakaszoke) ervenyes a kov osszefugges (ha mondjuk BC1 szakaszt nezzuk): x4<=actx<=x2
Az viszont egyertelmuen latszik a g2 gorbebol hogy g2 pontjainak x koordinataira ez a feltetel nem fog teljesulni.Ezert probaltam atmenni a negyzetes interpolaciora ahol ugye nemcsak B es C1 pontokat kell figyelembe vennunk, hanem a szamitasba be kell vonnunk a B elotti azaz A pontot illetve a C1 utani pontot mely most nincs abrazolva.De a negyzetes interpolacios eljarasnal sem fog mukodni ez a dolog a „visszahajlas” miatt, hiszen az interpolacios algoriitmus nem veszi
figyelembe sem az A sem a C1 utani pont x koordinatajat.
Tehat azt hiszem most mar teljesen vilagos a dolog, hogy mi is a gondom….2003-08-26-08:23 #1911513Bocs a kepert! Ugy nezem nem mindig jelenik meg
ugyhogy itt a cime
http://www.angeltowns.com/members/szabola/cospol1.jpg 👿2003-08-26-10:58 #1911514De a negyzetes interpolacios eljarasnal sem fog mukodni ez a dolog a „visszahajlas” miatt, hiszen az interpolacios algoriitmus nem veszi
figyelembe sem az A sem a C1 utani pont x koordinatajat.
Tehat azt hiszem most mar teljesen vilagos a dolog, hogy mi is a gondom….Most lehet butaságot fogok kérdezni, de olyant nem lehet, hogy több részre osztod a kirajzolást?
2003-08-26-12:46 #1911515Ezen a kis abran lathato:
A(x1,y1) B(x2,y2) C(x3,y3) C1(x4,y4)
megcsinaljuk a gorbeket az AB es AC szakaszokon, semmi gond, nagyon szepen mukodik a dolog, de en a B pontbol a C1-be akarok menni, es nem a g1 gorben hanem a g2-n,hiszen
ha a g1-n megyek olyan csucs lesz benne mint a Himalaja.Es mivel a cosinusos interpolacionak, ahogy neztem,az actx koordintajara (marmint a kis szakaszoke) ervenyes a kov osszefugges (ha mondjuk BC1 szakaszt nezzuk): x4<=actx<=x2
Az viszont egyertelmuen latszik a g2 gorbebol hogy g2 pontjainak x koordinataira ez a feltetel nem fog teljesulni.így igaz, viszont ha ezt ilyen jól megfogalmaztad, akkor nem tejlesen értem miért nem egyértelmû, hogy az interpolált szakasz is rendelkezik a bázisfüggvény minden pozitív és minden negatív tulajdonságával, nevezetesen:
– mindíg van pontosan egy inflexiós pontja két vezérlõpont között (kivéve ha x_n = x_(n+1) vagy y_n = y_(n+1), mert akkor a görbe egyenes)
– az interpolált görbe nem nyúlik túl a vezérlõpontok által leírt téglalapon
– mindegyik vezérlõpontra igaz, hogy az interpolált körbe érintõje (1, 0) vagy (-1, 0) vektor, ami az x tengellyel 0 vagy 180 fokot zár be
Itt fõleg az utolsó kettõvel van gond, mert a g1 görbe benne van a B és C1 által leírt téglalapban, míg a g2 nincs, és esély sincs az utolsó pont miatt bármilyen korrekcióra. Ezt az árat kell fizetni az egyszerûségért. Ha túl drága, akkor emelni kell a tétet.Ezert probaltam atmenni a negyzetes interpolaciora ahol ugye nemcsak B es C1 pontokat kell figyelembe vennunk, hanem a szamitasba be kell vonnunk a B elotti azaz A pontot illetve a C1 utani pontot mely most nincs abrazolva.De a negyzetes interpolacios eljarasnal sem fog mukodni ez a dolog a „visszahajlas” miatt, hiszen az interpolacios algoriitmus nem veszi figyelembe sem az A sem a C1 utani pont x koordinatajat.
Hát, nem is lehet úgy láncot alkotni, hogy mindenki csak a mögötte levõ kezét fogja. Ezért kell másodfokú helyett harmadfokú polinomot alkalmazni. De ennek meg „túl nagy a hullámossága”, mert a bázisfüggvény kezdõ és végpontban vett érintõje nem lesz nagyobb +-90 foknál. Ezzel már nem törik meg a görbe, de még mindíg nem közel ideáis megoldás. Arra ott van a már említett Coons-Hermite interpoláció, ahol tetszõleges érintõk (0-360 fok) által meghatározott görbéket lehet leírni. Sohasem törik meg, és nagyon jól követi a pontok vonalvezetését.
2003-08-26-12:55 #1911516De a negyzetes interpolacios eljarasnal sem fog mukodni ez a dolog a „visszahajlas” miatt, hiszen az interpolacios algoriitmus nem veszi
figyelembe sem az A sem a C1 utani pont x koordinatajat.
Tehat azt hiszem most mar teljesen vilagos a dolog, hogy mi is a gondom….Most lehet butaságot fogok kérdezni, de olyant nem lehet, hogy több részre osztod a kirajzolást?
Itt a gond az, hogy az AB(C1) esetén a B pontban a görbe érintõje (deriváltja) nem létezik, mert az AB szakasz felõl 0 fok, míg az B(C1) felõl 180 fok. Akkor nem törik meg a görbe, ha mind a két oldalról azonosak. Ez elméleti „hiba”, nem megvalósítási.
SzerzőBejegyzés- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz