Kemito Posted October 23, 2013 Report Share Posted October 23, 2013 Labdien. Esmu nonācis mazliet strupceļā ar matemātiku, jā biju skolā slinks utt. bet ne par to stāsts. Ir bildes gabala nogriešana ( crop ) ar bildes pagriešanu ( rotation ) lieta sekojoša. Pie bildes pagriešanas mainās, x1 un y1 nulles punkti, līdz ar to, pie 45 grādu bildes pagriešanas, izīmējot kādu punktu, tas nogriešas nepareizi. Tad nu esmu nonācis līdz pašu punktu kordināšu pārēķināšanai. Esmu noteicis pagrieztās bildes jaunos izmērus. Ir pieejami iepriekšējie x1, x2, y1, y2 punkti. Bildes orģinālizmērs, blokā ietilpstošais bildes izmērs, iezīmētā punkta izmērs ( platums, garums ) Jautājums - Kā es varētu pārrēķināt servera pusē šo punktu kordinātes. Kaut kas tāds - http://www.mathwarehouse.com/transformations/rotations-in-math.php Ja nepieciešama papildus informāciju - jautāt. Gaidīšu kādu pavedienu :) Quote Link to comment Share on other sites More sharing options...
Sasa Posted October 23, 2013 Report Share Posted October 23, 2013 jaunā x' koordināte pēc rotēšanas jaunā y' koordināte pēc rotēšanas, kur ro grādi par cik vēlies sarotēt. Ja kļūdos labojiet. Quote Link to comment Share on other sites More sharing options...
codez Posted October 23, 2013 Report Share Posted October 23, 2013 (edited) Te viss ir: http://en.wikipedia.org/wiki/Rotation_(mathematics) Kā jau Sasa minēja, izmanto doto formulu. Ja gadījumā vajag rotēt ap citu punktu, nobīdi to uz 0,0 koordināti. P.S.: Tas ir, ja tev piemēram ir bilde (100,100) - (200,200) taisnstūrī un tu gribi to rotēt ap centru, tad tev jānobīda centrs (150,150) uz nulli, attiecīgi taisnstūra punkti pārvērtīsies (-50,-50) - (50,50) Tad izpildi attiecīgo rotāciju un atbīdi atpakaļ. P.P.S.: mazs demo: http://jsfiddle.net/ayREv/1/ Edited October 23, 2013 by codez Quote Link to comment Share on other sites More sharing options...
Kemito Posted October 23, 2013 Author Report Share Posted October 23, 2013 (edited) Formula JS pusē ------------------------------------------------- Bet nu rezultātā pēc šāda http://i.imgur.com/guvU5nw.png Iznākums ir šāds. http://i.imgur.com/Jjwjx3c.png Kādi pavedieni, idejas? Ja tikai pagriežu bildi, strādā korekti, tā pat arī ja tikai nogriežu. Kā ar grādiem? Vai šāds variants strādās pie -180 => 180 jeb nepieciešams 0 => 360 grādu veidā? ---------------------------------------------------- Līki pirksti bonusā pagaidām ir, pamēģināšu vēl pāris variantos, un debbugošu kārtīgāk, tad ja nesanāks, griezīšos šajā topikā. Edited October 23, 2013 by Kemito Quote Link to comment Share on other sites More sharing options...
Kemito Posted October 23, 2013 Author Report Share Posted October 23, 2013 Joprojām nekā, biju mazliet sajaucies visā, bet arī tiešām 10 x pārliecinoties vai pareizi esmu salicis visu, pareizās vietās - nekādu rezultātu. Tākā man ir attiecības rēķināšana vēl, vai tas kādā veidā ietekmē šo visu? Respektīvi man ir bildes oriģināls, saspiestā bilde boksī, ietvars, un ietvars satur bildi. Uz ietvara ir šīs bildes iezīmēšana. Pēc nogriešanas, vēl servera pusē aprēķinu attiecību un attiecīgi nogriežu bildi. Jautājums būtu, kā tas ietekmē griešanu pie rotācijas posma. Vai man šī attiecība ir jārēķina no jaunajiem izmēriem ( sākumā pagriežu, tad nogriežu ), respektīvi, ka orģinālais izmērs pārtop par to, kāds ir, kad bildi pagriež? Quote Link to comment Share on other sites More sharing options...
Kemito Posted October 23, 2013 Author Report Share Posted October 23, 2013 Kaut kā dīvaini - 5 grādu pagriešana var x = 54; var y = 1; var ro = 5; // Grādi var x1 = x * Math.cos(ro) - y * Math.sin(ro); // return 16.27 Tad ja pagriežu bildi par pieciem grādiem X no 54 aiziet uz 16? Neizskatās pareizi. Quote Link to comment Share on other sites More sharing options...
codez Posted October 23, 2013 Report Share Posted October 23, 2013 sīnusu un cosīnusu rēķina radiānos. 180 grādi ir PI radiāni. Lai pagrieztu par 5 gradiem ro=5*Math.PI/180; Quote Link to comment Share on other sites More sharing options...
Kemito Posted October 23, 2013 Author Report Share Posted October 23, 2013 (edited) codez, paldies par iniciatīvu palīdzēt. Šķiet vienkāršāk man būs pārfrāzēt sacīto, lai varētu iegūt tuvākus pavedienus, izskaidrošu padziļināti. http://www.bildites.lv/images/z6ist0w21gsdoas8rhk.png Pirmais kvadrāts ir kā workspace (Ielādētās bildes izmērā). Zaļais punkts ir 0,0 (x,y). Uz leju/pa labi vērtības palielinās. Bilde tiek rotēta, un tās kopējais izmērs mainās - sarkanais kvadrāts ir jaunais izmērs. Zaļais punkts otram kvadrātam ir jaunais 0,0. Melnais kvadrāts ir bilde. Zilais kvadrāts ir workspace. Oranžais punkts ir workspace 0,0 punkts. Sarkanais punkts ir punkts, ap ko tiek rotēts. Zaļais kvadrāts tiks izcropots, ir zināmas zaļā kvadrāta width/height un kreisais augšējais stūris attiecībā pret workspace. Nepieciešams iegūt zaļā kvadrāta kreiso augšējo stūri attiecībā pret jauno bildes izmēru, lai backendā varētu norotēt un izcropot vajadzīgo daļu. Edited October 23, 2013 by Kemito Quote Link to comment Share on other sites More sharing options...
codez Posted October 23, 2013 Report Share Posted October 23, 2013 Tev vajag aprēķināt sarkanā taisnstūra koordinātes. Par pamatu ņemot zilo, aprēķini melnā taisnstūra visu stūru jaunās koordinātes, izmantojot rotācijas formulu. Ja gribi universālu algoritmu, kurš nav atkarīgs no pagrieziena lenķa, tad no visiem četriem x-iem, mazākais būs sarkanā taisnstūra kreisās malas x, lielākais labās malas x. Līdzīgi arī y. Ņemot kreisā augšējā stūra koordinātes sarkanajam un zilajam taisnstūrim, vari izrēķināt starpību, par kādu jāpārbīda izgriežamais taisnstūris. Quote Link to comment Share on other sites More sharing options...
Kemito Posted October 23, 2013 Author Report Share Posted October 23, 2013 Liels Tev codez paldies. Manā gadījumā es atbildi atradu aprēķinā, ka pie attiecības aprēķina pozīcijai X pieskaitu starpību no pagrieztās bildes platuma un orģinālās bildes platuma dalīts ar 2, un tā pat Y vērtībai ieskaitu klāt starpību no pagrieztās bildes augstuma un orģinālās bildes augstuma dalīts ar 2. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 23, 2013 Report Share Posted October 23, 2013 Nezinu, vai man liekas nepareizi, bet man liekas, ka vajadzētu būt nevis augstumu/platumu starpība dalīts ar 2, bet augstumu/platumu starpība dalīts ar (jaunais (sarkanā kvadrāta) izmērs / oriģinālais (zilā kvadrāta) izmērs). Pilnībā var būt, ka liekas nepareizi, jo esmu pamatīgi noguris. Quote Link to comment Share on other sites More sharing options...
codez Posted October 23, 2013 Report Share Posted October 23, 2013 ideja principā pareiza, no jaunā kvadrāta platuma, atņemam vecā kvadrāta platumu, izdalām ar 2 un tik ir jāpieskaita izgrieztajam kvadrātam, lai tā pozīciju no vecā kvadrāta, pārrēķinātu jaunajam. Quote Link to comment Share on other sites More sharing options...
Sasa Posted October 23, 2013 Report Share Posted October 23, 2013 sīnusu un cosīnusu rēķina radiānos. 180 grādi ir PI radiāni. Lai pagrieztu par 5 gradiem ro=5*Math.PI/180; par šo biju piemirsis, bet arī tajā wikipēdijas rakstā varēja viņi par šo lietu atgādināt, ka radiāni un grādi nav gluži viens un tas pats. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 24, 2013 Report Share Posted October 24, 2013 Ar svaigu galvu izlasīju sevis rakstīto, sapratu, ka nav tas. Tagad domāju, ka to var aprēķināt šādi: targetX = zaļā kvadrāta sākuma X offset reizināts ar (jaunais (sarkanā kvadrāta) izmērs / oriģinālais (zilā kvadrāta) izmērs) un, protams, noapaļots. Tad vēl varētu piemest finalX = Math.max(0, targetX), lai nesanāk tā, ka resaizojot uz mazāku izmēru, zaļais rāmis aizbrauc ārpus robežām. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.