Delphi 6 - 360° pohyb objektu na TCanvas

Programovacie jazyky, rady, poradňa...
AdamPerinay
Novice
Novice
Príspevky: 1
Registrovaný: 09 máj 2015, 19:51
Kontaktovať používateľa:

Delphi 6 - 360° pohyb objektu na TCanvas

Príspevok od používateľa AdamPerinay »

Dobrý večer, mám malý problém. Na ploche, image + canvas, mám polygon ktorý chcem aby sa pri stlačení šípok do strán točil, to už mám ale aby sa pri stlačení šípky UP pohyboval dopredu, ale nie hore ale dopredu z uhla polygonu teda napr. smerom na 5. hodinu. Tento problém som vyriešil ale hýbe sa iba do ôsmych strán čo je dosť zlé a preto sa pýtam ako urobiť pravidelný (t.j. bez sekania) pohyb aj inak ako po ôsmych smeroch - teda inak ako pričítať a odčítať pixely a kombinovať to. mám tam premennú uhol:integer; torá vlastne určuje ako je ten polygon otočený teda viem vy-case-vať 8 smerov. Rozmýšľal som, že by som ten uhol delil alebo násobil len to by hodilo 0.xxx čo sa mi nepodarí posunúť (pozícia je iba v celých číslalch). Nepotrebujem kód stačí iba zrozumiteľné logické vysvetlenie ako to urobiť (inými slovami iba logiku toho kódu). Ďakujem ... Keby dačo chýbalo dopíšem
Redpoint1
Light Expert
Light Expert
Príspevky: 66
Registrovaný: 25 sep 2006, 23:24
Kontaktovať používateľa:

Re: Delphi 6 - 360° pohyb objektu na TCanvas

Príspevok od používateľa Redpoint1 »

Ja by som to riesil tak, ze by som najprv hodil body daneho polygonu ako maticu [x, y, 1]. Potom tieto matice by som vynasobil maticou posunu [[1,0,0],[0,1,0],[posun_x, posun_y,1]] a nasledne tieto posunute body by som este zrotoval o dany uhol vynasobenim maticou rotacie [[cos(uhol_na_rad), -sin(uhol_na_rad), 0],[sin(uhol_na_rad), cos(uhol_na_rad), 0],[0,0,1]]. A vysledne matice by mali byt v tvare [nove_x,nove_y,1] a tieto hodnoty pouzijes ako body do polygonu.

Ak chces, aj nadalej posuvat, tak toto nasobenie budes musiet vykonavat stale bod*posunutie*rotacia. Takze musis zachovat body v originalnej forme a nesnaz sa ich prepisat. V podstate co to zrobi, tak dany body polygonu zrotuje globalne, ale posunie lokalne.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Delphi 6 - 360° pohyb objektu na TCanvas

Príspevok od používateľa audiotrack »

bavíme sa o canvase, takže tretia súradnica je tam zbytočné mrhanie pamäťou. A neviem či to tými maticami zbytočne nekomplikuješ, keď výslednú súradnicu vie priamo vypočítať ako

Kód: Vybrať všetko

 x += step * cos(alpha);
y += step * sin(alpha);
Napísať odpoveď