NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
parinho
Člen
Avatar
parinho:21.4.2015 16:17

Vedel by mi niekto poradiť. Mojou úlohou je v programe c#, naprogramovať win aplikáciu ktorá má pomocou transformačnej matice otočiť pravouhlý štvoruholník okolo zadaného vrcholu.
Ďakujem.

Editováno 21.4.2015 16:19
 
Odpovědět
21.4.2015 16:17
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na parinho
David Hartinger:21.4.2015 16:28

Program v C# je poměrně nic neříkající název vlákna, který budou někteří i ignorovat. Na fóru je zvykem pokládat otázka. Jaká je tvá otázka, co konkrétně ti nejde? Jinak pravoúhlý čtyřúhelník je IMHO obdélník :D

Nahoru Odpovědět
21.4.2015 16:28
New kid back on the block with a R.I.P
Avatar
parinho
Člen
Avatar
parinho:21.4.2015 16:34

Viem že je to obdlžnik, respektíve štvorec. Program samotný ide, otáčanie okolo vrcholu som vyriešil takto :

Rectangle rectangle = new Rectangle(xmin, ymin, xmax - xmin, ymax - ymin);
g.DrawRectangle(pen, rectangle);

Region myRegion = new Region(rectangle);

Matrix transformMatrix = new Matrix();

if (radioButton1­.Checked)
{
transformMatrix­.RotateAt(alfa, new Point(xmin,ymin));

}
else
if (radioButton2­.Checked)
{
transformMatrix­.RotateAt(alfa, new Point(xmax, ymax));

}
else
if (radioButton3­.Checked)
{
transformMatrix­.RotateAt(alfa, new Point(xmin, ymax));
}
else
if (radioButton4­.Checked)
{
transformMatrix­.RotateAt(alfa, new Point(xmax, ymin));
}

myRegion.Tran­sform(transfor­mMatrix);

g.FillRegion(Brushes­.Blue, myRegion);

Čo ale nemá nič spoločne s transformačnou maticou.
Matice sú dané vzorcom.
Matrix otocenie = new Matrix(cos,sin,-sin,cos,0,0);
Matrix posunutia = new Matrix(1, 0, 0, 1, sx, sy);
Matrix posunutiaINV = new Matrix(1,0,0,1,-sx,-sy);
Majú sa vynásobiť, kde vznikne celková matica a potom tú násobiť z danými vrcholmi, no v tomto prípade si neviem rady.

 
Nahoru Odpovědět
21.4.2015 16:34
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na parinho
David Hartinger:21.4.2015 16:48

A ta třída Matrix je tvoje nebo používáš tu z .NET? Ta má na sobě nějaké rotate...

Nahoru Odpovědět
21.4.2015 16:48
New kid back on the block with a R.I.P
Avatar
parinho
Člen
Avatar
parinho:21.4.2015 16:51

Používam tú z .NET . My to ale máme ale urobiť bez nich, cez vlastné riešienie. A neviem si stým rady, preto som to sem dal, či náhodou niekto nemá vyriešený tento problém, keďže 2D grafika je celkom rozšírená problematika.

 
Nahoru Odpovědět
21.4.2015 16:51
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na parinho
David Hartinger:21.4.2015 17:06

Na matiku jsme nikdy extra nebyl, ale začal bych tím, že si vytvořím ty matice. To cos v matici má být Math.Cos(uhel), kde uhel je o kolik radiánů otáčíš a tak dále i pro ostatní hodnoty. K násobení má Matrix metodu Multiply(). To sx a sy je předpokládám posunutí kvůli středu rotace. Třeba mě tu někdo ještě doplní.

Nahoru Odpovědět
21.4.2015 17:06
New kid back on the block with a R.I.P
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.