Šta je novo?

VB6: Rotacija oblika

morfnaom

Čuven
Učlanjen(a)
19.03.2002
Poruke
99
Poena
609
Potrebno mi je da nacrtnau elipsu (pomocu koda: circle ()(),n...), odnosno njenu polovinu rotiram za odredjeni ugao (u radijanima ili u stepenima, svejedno).
kao sto se iz mog pitanjam moze naslutiti, pocetnik sam u ovome. Trazio sam po MSDNu, ali nisam uspeo da nadjem odgovor.

Pozdrav!
 
pa ajde ljudi, nije valjda da niko nema resenje tog problema. Znaci, samo rotacija jednog oblika. Nije moguce da to ne moze da se zavrsi u V. Basicu.
Ako ne moze da se rotira oblik (shape-linija, elipsa...), da li mozda moze picture box, dugme, forma, bilo sta, pa cu nekako vec iskombinovati da zarotiram tu glupu elipsu.

Pozdrav!
 
Nisam neki expert za VB da ti saspem sada kod, ali da ti dam makar hint: nemoj da koristis circle, nego isrtavanja sa tackama. Znaci, transformises jednacinu u parametarski oblik, tacnije trigonometrijsku formu.

Evo na primer - ovu jednacinu za krug Y2 = X2 - R2 (ovo su kvadrati, tj. Y na kvadrat je X na kvadrat minus ...) pretvoris u parametarski i dobijes:

X = R * cos(t) i
Y = R * sin(t)

Svaka tacka na krugu mora da zadovolji ove (X,Y) koordinate. Da bi dobio pun krug, stavis iscrtavanje tacke u petlju 0..360 stepeni. Naravno, ako ne uzimas pun krug (0..360), mozes da dobijes isecak kruga. Sta je sa elipsom ovde ? Pa probaj da stavis za X i Y razlicite vrednosti R1 i R2, pa ce ti se kas'ti samo.

Kako sad da uradis rotaciju svega toga ? Uz sledecu formulu:

Xr = Xn * cos(fi) + Yn * sin(fi)
Yr = Yn * cos(fi) + Xn * sin(fi)

gde su:

Xn, Yn - "normalne" koordinate izracunate po onim prvim parametarskim jednacinama
Xr, Yr - nove, "rotirane" koordinate
fi - ugao za koji rotiras

Ukoliko radis i translaciju, moras da dodas jos i ceo broj na kraju za oba parametra. Ovo u slucaju da hoces da ti pocetak koordinatnog sistema ne bude u cosku, nego negde na sredini forme.
Dakle, ukoliko ne koristis neku napredniju biblioteku za crtanje grafike, za ovakve stvari po canvasu treba i malo matematike.

E sad, iscrtavanja zarotiranih dugmeta, listboxova i ostalo pod nekim uglom - e to je vec izazov i bas me zanima da li bi neko ovde znao :D
 
Ajde, posto mi je bilo dosadno, evo ti attachment da vidis kako sam to mislio (VB6 projekat).

P.S.
Isti fazon vazi kada crtas neke nepravilne oblike, sa line, recimo. Tada samo osnovne tacke drzis u nizu i preracunavas ih za rotaciju. Tacnije, drzis tacke u matrici (i niz ili vektor je matrica sa samo jednim redom, enivej), sto olaksava isti takav koncept ako ces da dodajes perspektivu, tj. "3D", jer koncept i algoritam sa matricom ostaje isti.
 
svaka cast!
Odmah bih zeleo da ti puno zahvalim na konkretnom odgovoru.
Ovo sa tackama je odlicna ideja. Nisam jos stigao da proverim u praksi, kao ni da pogedam tvoj primer u VB projectu. Samo sam procitao ovo sto si napisao i jasno mi je. Matematika 1, u sustini. samo se treba toga setiti, lako je sada klimati glavom.

:) Inace, kazes da nisi neki expert za VB?! :) Pa, ko je onda?! Ovakva IDEJA (bar po mom misljenju) znaci vise od nekog "koda na brzinu".
 
Radi se o algoritmu - kada znas kako da resis problem, sasvim je svejedno u kom jeziku ces ga napisati - na to sam mislio kada sam pomenuo direktno kodiranje u VB-u.

Inace, ovo je ideja, ali ima mesta za poboljsanje - kada uzmes recimo nesrazmerne radijuse za x i y koordinatu (recimo, jedno je 8000, a drugo je 500), elipsa nece biti puna linija, nego isprekidana - to je zato sto se petlja vrsi 0..360 za svaki ceo ugao, dakle, step je 1. To mozes da resis tako sto ces praviti step manji od 1 ili na neki drugi matematicki nacin - zafrkanciju ostavljam tebi :)

P.S.
Funkcija circle i koristi slican algoritam za iscrtavanje - ucili su i oni matu :D
 
Ovaj primer je vise vezan za popunjavanje generisanih nepravilnih povrsina, ali ce ti nesto mozda biti od pomoci:
 
Vrh Dno