Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

[Atmega8][Bascom] obrót trójkąta o dowolny kąt

smichaelxx
-
-
Posty: 1
Rejestracja: 9 lut 2010, o 09:28
Lokalizacja: Polska

[Atmega8][Bascom] obrót trójkąta o dowolny kąt

Postautor: smichaelxx » 10 lut 2010, o 21:03

Witam
Chciałem napisać program który obraca np. trójkąt o dowolny wprowadzony kąt, znam troszkę Bascoma, ale nie aż tak dobrze. Do narysowania trójkąta użyłem polecenia LINE

Kod: Zaznacz cały

Line(50 , 50)–(25 , 100) , &B00000000 Line(50 , 50)–(75 , 100) , &B00000000 Line(25 , 100)–(75 , 100) , &B00000000
Czy Ktoś mógłby mi pomóc?
Dzięki z góry

tg3a
-
-
Posty: 243
Rejestracja: 26 maja 2008, o 19:46
Lokalizacja: Warszawa

Postautor: tg3a » 11 lut 2010, o 15:58

Witam.
Nie znam Bascoma, ale w każdym języku zasada jest taka sama.
Po pierwsze, przy obrocie o dowolny kąt musimy skądś określić wartość sinusa i kosinusa tego kąta. Jeśli te funkcje nie są wbudowane w język (jak to miały interpretery Basic'a na komputerkach w rodzaju Spectrum), to trzeba zapewne jakoś dołączyć bibliotekę matematyczną, która te funkcje zawiera, lub może poinformować kompilator, że takie funkcje będą używane (w języku C pisze się dyrektywę #include<math.h>, ale jak się to robi, i czy w ogóle trzeba, w Bascom'ie - nie wiem).
Po drugie, obliczenia będą wykonywane jako zmiennoprzecinkowe, i w miarę potrzeby trzeba tak zadeklarować odpowiednie zmienne pomocnicze. Ale współrzędne na ekranie są typu całkowitego, więc ostateczne wyniki obliczeń trzeba przekształcić do tego typu (w niektórych językach, np. C, taka konwersja jest dokonywana automatycznie). Trzeba tylko ewentualnie dodać do zamienianej zmiennej wartość 0.5, aby zmniejszyć błąd zaokrąglenia (tzn. aby np. 3.25 było zaokrąglane do 3, a 3.6 do 4, a nie w obu tych wypadkach do 3).
A jeśli chodzi o same obliczenia, to już chyba rzeczywiście w każdym języku jednakowo: trzeba współrzędne (x,y) wszystkich punktów (w przypadku trójkąta trzech) przekształcić przez obrót względem wybranego punktu (x0,y0):
x'=x0+(x-x0)*cos(fi)-(y-y0)*sin(fi)
y'=y0+(x-x0)*sin(fi)+(y-y0)*cos(fi)
dodając ewentualnie średnik na końcu linii (jak to jest konieczne przykładowo w C, ale w Basic'u nie, i wobec tego zapewne w Bascom'ie również nie).
Wydaje się, że w każdym standardzie obsługi wyświetlacza graficznego współrzędna x rośnie w prawo ekranu, ale co do y, to są różne szkoły, więc: jeśli 0 jest na dole, i y rośnie w górę ekranu, to dodatni kąt fi oznacza obrót przeciwny do wskazówek zegara, a jeśli 0 jest na górze, i y rośnie w dół ekranu, to odwrotnie (czyli dodatni kąt fi to obrót zgodny ze wskazówkami zegara).
Obliczone współrzędne punktów można już używać do rysowania linii i ew. innych obiektów podstawowych. Czyli w przypadku trójkąta byłoby to, wzorując się na Twoim przykładzie, coś w rodzaju:

Kod: Zaznacz cały

Line(x1prim , y1prim)–(x2prim , y2prim) , &B00000000 Line(x1prim , y1prim)–(x3prim , y3prim) , &B00000000 Line(x2prim , y2prim)–(x3prim , y3prim) , &B00000000
Pozdrawiam, i życzę powodzenia.

Awatar użytkownika
j_bravo
-
-
Posty: 189
Rejestracja: 14 wrz 2005, o 16:30
Lokalizacja: Lublin
Kontaktowanie:

Postautor: j_bravo » 16 lut 2010, o 14:37

A matematykę to mieliśmy w szkole ?? toż to zwykłe poruszanie się 3 punktów po okręgu.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 21 gości