Számítógépes grafika és képfeldolgozás ZH - 2007. 10. 29., első turnus, A csoport

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:18-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafZH20071029A1}} ==1. feladat (7 pont)== Írjon egy C++ függvényt, ami * két különböző, projektív síkbeli egyenes paramétere…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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: [math]a*Xh+b*Yh+c*h=0[/math] [math]Xh=\frac{-b}{a}*Yh-\frac{c}{a}*h[/math]

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)= [math]\frac{(1-t)^{2}}{2} [/math]

B2,3(t)= [math]\frac{(1-t)(1+t)+t(2-t)}{2} = \frac{1+2t(1-t)}{2}[/math]

B3,3(t)= [math]\frac{t^{2}}{2} [/math]

-> B1,3 = 0.125

B2,3 = 0.75

B3,3 = 0.125

-- PetroDanielAttila - 2007.12.05.