Jump to content
php.lv forumi

Kordinātu pārrēķināšana


Kemito

Recommended Posts

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 :)

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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 by Kemito
Link to comment
Share on other sites

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ž?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by Kemito
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...