<šířka>x<výška> <ASCII znaky> ... <ASCII znaky> r <úhel> ... r <úhel>
Neopisujte, nápadně podobná řešení budou diskvalifikována.
[xbayer@daikatana u2]$ ./ukol2 < vez.txt Vzor: ** ** **** **** ** **** **** **** **** ****** ****** ****** ******** ******** ********** ********** ***** ***** ****** ****** **************** ******************** ******** ******** ********* ********* Rotace o 180.000000 stupnu: ********* ********* ******** ******** ******************** **************** ****** ****** ***** ***** ********** ********** ******** ******** ****** ****** ****** **** **** **** **** ** **** **** ** ** Rotace o 90.000000 stupnu: * * * ** ** *** *** **** ***** ***** ******* ******** *********** *************** ** ** **************** ** **************** *************** ** *********** ******** ******* ***** ***** **** *** *** ** ** * * * Rotace o 5.500000 stupnu: ** ** **** **** ** **** **** **** **** ****** ****** ****** ******** ******** ********** *********** ******* **** ******* ***** ***************** ******************** ********* ****** ****** ********* Rotace o 45.000000 stupnu: * **** **** ***** ****** ***** * ******* ** ********* ***** ** ********** ****************** **************** ************** ***** ***** *** **** ********* ******* ****** ***** ***** **** **** **** ** ** * * * [xbayer@daikatana u2]$
[xbayer@daikatana u2]$ ./ukol2 < cara.txt Vzor: **********--------------------********** Rotace o 10.000000 stupnu: * ***** ****-- ------ ----- ------ -***** ***** Rotace o 20.000000 stupnu: ** ** *** *** --- -- --- --- --- -- --- *** *** ** * Rotace o 30.000000 stupnu: * ** ** ** ** -- -- -- -- -- --- -- -- -- -- -* ** ** ** ** Rotace o 40.000000 stupnu: * ** * * ** ** ** - - -- -- -- - - - -- -- -- - - ** ** ** * * ** Rotace o 50.000000 stupnu: ** * * * * ** ** * - - - -- -- - - - - - -- -- - - - * ** ** * * * * * Rotace o 60.000000 stupnu: * * * * ** * * * - - - -- - - - - - - - - - - - -- - - * * * * ** * * * Rotace o 70.000000 stupnu: * * * * * * * * * * - - - - - - - - - - - - - - - - - - - * * * * * * * * * Rotace o 80.000000 stupnu: * * * * * * * * * * - - - - - - - - - - - - - - - - - - - - * * * * * * * * * * Rotace o 90.000000 stupnu: * * * * * * * * * * - - - - - - - - - - - - - - - - - - - - * * * * * * * * * * Rotace o -10.500000 stupnu: * ***** -**** ------ ----- ------ ***-- ***** ** Rotace o -20.500000 stupnu: * *** *** *** --- --- --- --- --- --- --- *** *** *** ** Rotace o -360.000000 stupnu: **********--------------------********** Rotace o 360.000000 stupnu: **********--------------------********** [xbayer@daikatana u2]$
[xbayer@daikatana u2]$ ./ukol2 < text.txt Vzor: YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSS SSS YYYYYYYY YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEE SSSSSSSS YYYYYYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSSS YYYYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSSS YYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSS YYYYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSS SSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSS Rotace o 0.000000 stupnu: YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSSSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEEEEEEE SSSSSSSS SSS YYYYYYYY YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY YYYYYYYY EEEEEEEEEEEEE SSSSSSSS YYYYYYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSSS YYYYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSSS YYYYYYYYYYYY EEEEEEEEEEEEE SSSSSSSSS YYYYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY EEEEEEEE SSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSS SSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSSSS YYYYYYYY EEEEEEEEEEEEEEEEE SSSSSSSSSSS Rotace o 45.000000 stupnu: YY YYYY YYYYYY YYYYYYY YYYYYYYY YYYYYYYY YYYYYYY YYYYYY YYYYYY YYYYY YYYYYY YYYYYY YY YYYYYY YYYY YYYYYYYYY YYYYYYY YYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYYYY YYYYYYYYYYYYYYYYYY YYYYY E YYY EEE Y EEEEE EEEEEEE EEEEEEEEE EEEEEEEEEEE EEEEEEEEEEEEE EEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEE EEEEEEEEEEE EEEEEE EEEEEEEEEEEE EEEEEE EEEEEEEEEEEEEE EEEEEE EEEEEEEEEEEEEE EEEEEE EEEEEEE EEEEEE EEEEE EEEEEE EEEEE EEE EEEEEE EEE E EEEEEE E EEEEEE S S EEEEEE SSSSSS EEEEEE SSSSSSSS EEEEEE SSSSSSSSS EEEE SSSSSSSSSS EE SSSSSSSSSSS SSSSSSSSSSSS S SSSSSSS SSSSS SSS SSSSS SSSS SS SSSS SSS SSS SSSSS SSS SSSS SSSSSS S SSSS SSSSSSS SSSSSSSSSSS SSSSSSSSSS SSSSSSSSSS SSSSSSSS SSSSSS SSSS Rotace o 90.000000 stupnu: YYYY YYYYY YYYYYY YYYYYYY YYYYYYYY YYYYYYYYY YYYYYYYYYY YYYYYYYYYYY YYYYYYYYYYYY YYYYYYYYYYY YYYYYYYYYY YYYYYYYYY YYYYYYYYY YYYYYYYYYY YYYYYYYYYYY YYYYYYYYYYYY YYYYYYYYYYY YYYYYYYYYY YYYYYYYYY YYYYYYYY YYYYYYY YYYYYY YYYYY YYYY EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE SS SSSS SSS SSSSSS SSSS SSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSSS SSSSSSSSSSSSSSSS SSSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSS SSSS SSSSSS SSS SSSSS SS Rotace o -90.000000 stupnu: SS SSSSS SSS SSSSSS SSSS SSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSSS SSSSSSSSSSSSSSSS SSSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSSS SSS SSSSSSSS SSSS SSSSSS SSS SSSS SS EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEE YYYY YYYYY YYYYYY YYYYYYY YYYYYYYY YYYYYYYYY YYYYYYYYYY YYYYYYYYYYY YYYYYYYYYYYY YYYYYYYYYYY YYYYYYYYYY YYYYYYYYY YYYYYYYYY YYYYYYYYYY YYYYYYYYYYY YYYYYYYYYYYY YYYYYYYYYYY YYYYYYYYYY YYYYYYYYY YYYYYYYY YYYYYYY YYYYYY YYYYY YYYY [xbayer@daikatana u2]$
obrázek v matici: 0|1|2|3|4|5| ------------ 0|*| | | | | | 1|*|*|*|*|*|*| 2|*| | | | | | rotace: o 45 stupňů doprava velikost vzoru: 6 x 3 velikost obrazu: ? (musíme zjistit) matice rotace: - dle výběru po/proti směru hodinových ručiček, liší se znaménky u sinus - já vybírám proti směru, protože budu otáčet zpětně obraz do vzoru, ale mělo by jít též vzít -úhel a matici pro otočení po směru [0][0] [0][1] mr = |cos 45 -sin 45| |sin 45 cos 45| [1][0] [1][1] vzhledem k math.h vhodné převést na radiány: mr[0][0] = cos(45/180.0 * PI) mr[0][1] = -sin(45/180.0 * PI) mr[1][0] = sin(45/180.0 * PI) mr[1][1] = cos(45/180.0 * PI) dle zadání je PI: #define PI 3.14159265358979323846L protilehlé vrcholy hran vzoru orotujeme a vezmeme max. vzdálenost v x-ové a y-ové souřadnici: rotace: [6, 3] * mr = [6*mr[0][0] + 3*mr[1][0], 6*mr[0][1] + 3*mr[1][1]] = [ 6.363961031, -2.121320344] [6, 0] * mr = [ 4.242640687, -4,242640687] [0, 3] * mr = [ 2.121320344, 2.121320344] [0, 0] * mr = [ 0, 0] (pozorní si jistě všimli, že jsme body orotovali vůči [0, 0] a doleva, ale pro získání rozměru je to fuk) protilehlé jsou: [0, 0] a [6, 3], [6, 0] a [0, 3] počítáme tedy: nový x-ový rozměr: max(abs(0 - 6.363961031), abs(4.242640687 - 2.121320344)) = 6.363961031 nový y-ový rozměr: max(abs(0 -(-2.121320344)), abs(-4.242640687 - 2.121320344)) = 6.363961031 Takže se nám nový obrázek vejde do čtverce, při zaokrouhlení vznikne 6, my přičteme 1 (pro jistotu), takže výsledný rozměr obrazu je: 7 x 7 velikost obrazu: 7 x 7 matice obrazu (ještě prázdná): 0|1|2|3|4|5|6| -------------- 0| | | | | | | | 1| | | | | | | | 2| | | | | | | | 3| | | | | | | | 4| | | | | | | | 5| | | | | | | | 6| | | | | | | | spočítáme středy vzoru a obrazu, protože máme rotovat vůči středu: střed obrazu je +- bod [3, 3] střed vzoru je +- bod [3, 1] (zde nutno podotknout, že výpočet středu je nepřesný (bereme prostě půlku), ale to v úkolu netřeba řešit) pro každý z 7x7 bodů obrazu spočítáme, kam se zobrazí do vzoru, pokud vůbec posuneme počátek soustavy souřadnic v obraze: [0, 0] => [0 - 3, 0 - 3] = [-3, -3] ... [6, 6] => [6 - 3, 6 - 3] = [3, 3] a posunuté body zase pronásobíme mr, zaokrouhlíme na celá čísla a posuneme ve vzoru! zpět, (tedy nepřičteme již střed obrazu, ale vzoru), např.: [0, 0] => [-3, -3]: [-3, -3] * mr = [-3 * mr[0][0] -3 *mr[1][0], -3 * mr[0][1] -3 * mr[1][1]] = [-4, 0] [-4, 0] => [-4 + 3, 0 + 1] = [-1, 1] (tedy mimo vzor) zde výpočet všech (hvězdičkou jsou označeny ty, které spadají do vzoru): [0, 0] => [-3, -3] * mr = [-4, 0] => [-1, 1] [0, 1] => [-3, -2] * mr = [-4, 1] => [-1, 2] [0, 2] => [-3, -1] * mr = [-3, 1] => [0, 2] * [0, 3] => [-3, 0] * mr = [-2, 2] => [1, 3] [0, 4] => [-3, 1] * mr = [-1, 3] => [2, 4] [0, 5] => [-3, 2] * mr = [-1, 4] => [2, 5] [0, 6] => [-3, 3] * mr = [0, 4] => [3, 5] [1, 0] => [-2, -3] * mr = [-4, -1] => [-1, 0] [1, 1] => [-2, -2] * mr = [-3, 0] => [0, 1] * [1, 2] => [-2, -1] * mr = [-2, 1] => [1, 2] * [1, 3] => [-2, 0] * mr = [-1, 1] => [2, 2] * [1, 4] => [-2, 1] * mr = [-1, 2] => [2, 3] [1, 5] => [-2, 2] * mr = [0, 3] => [3, 4] [1, 6] => [-2, 3] * mr = [1, 4] => [4, 5] [2, 0] => [-1, -3] * mr = [-3, -1] => [0, 0] * [2, 1] => [-1, -2] * mr = [-2, -1] => [1, 0] * [2, 2] => [-1, -1] * mr = [-1, 0] => [2, 1] * [2, 3] => [-1, 0] * mr = [-1, 1] => [2, 2] * [2, 4] => [-1, 1] * mr = [0, 1] => [3, 2] * [2, 5] => [-1, 2] * mr = [1, 2] => [4, 3] [2, 6] => [-1, 3] * mr = [1, 3] => [4, 4] [3, 0] => [0, -3] * mr = [-2, -2] => [1, -1] [3, 1] => [0, -2] * mr = [-1, -1] => [2, 0] * [3, 2] => [0, -1] * mr = [-1, -1] => [2, 0] * [3, 3] => [0, 0] * mr = [0, 0] => [3, 1] * [3, 4] => [0, 1] * mr = [1, 1] => [4, 2] * [3, 5] => [0, 2] * mr = [1, 1] => [4, 2] * [3, 6] => [0, 3] * mr = [2, 2] => [5, 3] [4, 0] => [1, -3] * mr = [-1, -3] => [2, -2] [4, 1] => [1, -2] * mr = [-1, -2] => [2, -1] [4, 2] => [1, -1] * mr = [0, -1] => [3, 0] * [4, 3] => [1, 0] * mr = [1, -1] => [4, 0] * [4, 4] => [1, 1] * mr = [1, 0] => [4, 1] * [4, 5] => [1, 2] * mr = [2, 1] => [5, 2] * [4, 6] => [1, 3] * mr = [3, 1] => [6, 2] [5, 0] => [2, -3] * mr = [-1, -4] => [2, -3] [5, 1] => [2, -2] * mr = [0, -3] => [3, -2] [5, 2] => [2, -1] * mr = [1, -2] => [4, -1] [5, 3] => [2, 0] * mr = [1, -1] => [4, 0] * [5, 4] => [2, 1] * mr = [2, -1] => [5, 0] * [5, 5] => [2, 2] * mr = [3, 0] => [6, 1] [5, 6] => [2, 3] * mr = [4, 1] => [7, 2] [6, 0] => [3, -3] * mr = [0, -4] => [3, -3] [6, 1] => [3, -2] * mr = [1, -4] => [4, -3] [6, 2] => [3, -1] * mr = [1, -3] => [4, -2] [6, 3] => [3, 0] * mr = [2, -2] => [5, -1] [6, 4] => [3, 1] * mr = [3, -1] => [6, 0] [6, 5] => [3, 2] * mr = [4, -1] => [7, 0] [6, 6] => [3, 3] * mr = [4, 0] => [7, 1] 0|1|2|3|4|5| ------------ 0|*| | | | | | 1|*|*|*|*|*|*| 2|*| | | | | | obraz => vzor, chybějící automaticky mezera ty s křížkem mají v obrazu hvězdičku, ostatní též mezery [0, 2] => [0, 2] * X [1, 1] => [0, 1] * X [1, 2] => [1, 2] * [1, 3] => [2, 2] * [2, 0] => [0, 0] * X [2, 1] => [1, 0] * [2, 2] => [2, 1] * X [2, 3] => [2, 2] * [2, 4] => [3, 2] * [3, 1] => [2, 0] * [3, 2] => [2, 0] * [3, 3] => [3, 1] * X [3, 4] => [4, 2] * [3, 5] => [4, 2] * [4, 2] => [3, 0] * [4, 3] => [4, 0] * [4, 4] => [4, 1] * X [4, 5] => [5, 2] * [5, 3] => [4, 0] * [5, 4] => [5, 0] * 0|1|2|3|4|5|6| -------------- 0| | |*| | | | | 1| |*| | | | | | 2|*| |*| | | | | 3| | | |*| | | | 4| | | | |*| | | 5| | | | | | | | 6| | | | | | | | Zde lze vidět i chybu, která vznikla zaokrouhlením -- očividně [5, 5] by měl obsahovat hvězdičku, ale díky zaokrouhlení jsme se dostali na bod [6, 1], který je mimo rozsah vzoru. Kdybychom zobrazovali vzor do obrazu, asi by se to nestalo, leč došlo by k jiným nepřesnostem.