Számítógépes grafika és képfeldolgozás ZH - 2007. 10. 29., első turnus, A csoport
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
1. feladat (7 pont)
Írjon egy C++ függvényt, ami
- két különböző, projektív síkbeli egyenes paramétereit várja
- kiszámolja az egyenesek metszéspontját
- vetíti az origo középpontú, egységsugarú körre
- végül visszaadja vetített pont Descartes-koordinátáit
Megoldás: Egyenes egyenlete a homogén síkon:
struct HomPoint { double Xh,Yh,h; }; struct DescPoint { double x,y; }; struct Line { double a,b,c; }; // a*Xh + b*Yh + c*h = 0; DescPoint solution(Line e1, Line e2) { HomPoint hom; if(e1.a == e2.a && e1.b == e2.b) { // a két egyenes párhuzamos, hom.Xh = e1.a; hom.Yh = e1.b; hom.h = 0; // az egyenes(ek) ideális pontja lesz a megoldás } else { // ha nem párhuzamos, akkor az euklideszi síkon van megoldás if(e1.a == e2.a) { hom.Yh = -(e1.c-e2.c)/(e1.b-e2.b)*1; // Yh-ra kifejezve, h-t 1-nek választva hom.Xh = (e1.c-e2.c)/(e1.a*(e1.b-e2.b))-e1.c/e1.a; // az első egyenletbe beírva Yh-t hom.h = 1; } else if(e1.b == e2.b) { hom.Xh = -(e1.c-e2.c)/(e1.a-e2.a)*1; // Xh-ra kifejezve, h-t 1-nek választva hom.Yh = (e1.c-e2.c)/(e1.b*(e1.a-e2.a))-e1.c/e1.b; // az első egyenletbe beírva Xh-t hom.h = 1; } else { hom.Xh = -(e1.b-e2.b)/(e1.a-e2.a)-(e1.c-e2.c)/(e1.a-e2.a)*1; // Xh-ra kifejezve, h-t 1-nek választva hom.Yh = -e1.c*1/((-e1.a*(e1.b-e2.b)+e1.b(e1.a-e2.a))/(e1.a-e2.a) - e1.a*(e1.c-e2.c)/(e1.a-e2.a)*1); // az első egyenletbe beírva Xh-t hom.h = 1; } } DescPoint point; // Az egységsugarú, origó középpontú körre való vetítést úgy tekinthetjük // mint a metszéspont helyvektorának egységvektorát. // Tehát nincs más dolgunk, csak normalizálni a helyvektort. // Itt nem foglalkozunk azzal, hogy ideális-e a pont, hisz // a pont iránya az origóhoz képest ugyanaz, mint a körre // vetített pont iránya az origóhoz képest. double distance = sqrt(hom.Xh*hom.Xh + hom.Yh*hom.Yh); if(distance == 0) { // nem lehet vetíteti point.x = point.y = 0; } else { point.x = hom.Xh/distance; point.y = hom.Yh/distance; } return point; }
-- Fodor Bálint - 2007.12.04.
2. feladat (3 pont)
Adja meg a másodfokú, egyenletes B-spline bázisfüggvényeit a t=0.5 paraméterértékre. (Harmadfokú B-spline bázisfüggvények képletére -1 pont jár.) -- blaq - 2007.11.01.
B2,2(t) = 1 - t
B3,2(t) = t
A többi 0.
-> B2,2 = 0,5 B3,2 = 0,5
-- UzsokiMate - 2007.12.04.
Nem kevés ez? Íme a második fok: (ld még tk.65)
B1,3(t)=
B2,3(t)=
B3,3(t)=
-> B1,3 = 0.125
B2,3 = 0.75
B3,3 = 0.125
-- PetroDanielAttila - 2007.12.05.