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

A VIK Wikiből
(SzgGrafZH20071029A1 szócikkből átirányítva)

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.