Sutikku Opublikowano 5 Listopada 2017 Opublikowano 5 Listopada 2017 Nie wiem jak się za to ugryźć. Mam grid mapę 255x255 i dajmy, że w środku niej jest kółko. I chciałbym przenieść to kółko z środka do rogu 0x0 i znaleźć drugi róg tego kółka np 128x122. Mam nadzieję, że chociaż napisane ułomnie to zrozumiale.
Threef Opublikowano 5 Listopada 2017 Opublikowano 5 Listopada 2017 Z jakiegoś powodu wydaje mi się że szukasz zwyczajnego: x = sin(i)*r y = -cos(i)*r
Administratorzy gnysek Opublikowano 6 Listopada 2017 Administratorzy Opublikowano 6 Listopada 2017 18 godzin temu, Uzjel napisał: Róg kółka? chciałby przenieść cały kwadrat w którym jest koło, wiec zakładam, że to róg kwadratu
PsichiX Opublikowano 6 Listopada 2017 Opublikowano 6 Listopada 2017 ja bym jednak poprosil o narysowanie tego, bo totalnie nie wiem o co chodzi : D
Sutikku Opublikowano 6 Listopada 2017 Autor Opublikowano 6 Listopada 2017 Tak, chodzi o róg kwadratu opisanego na kole, mój błąd.
Threef Opublikowano 6 Listopada 2017 Opublikowano 6 Listopada 2017 OK no to pozycją jaką szukasz jest średnica koła
Sutikku Opublikowano 6 Listopada 2017 Autor Opublikowano 6 Listopada 2017 Użyłem złego przykładu, to wcale nie jest koło, tylko tak dla zobrazowania użyłem, równie dobrze to może być np literka A. I szerokość nie jest równa wysokości.
Threef Opublikowano 6 Listopada 2017 Opublikowano 6 Listopada 2017 OK. No to dość proste. Czym są u ciebie puste dane? Możemy znać że to "0"? W takim razie pozycję x znajdujesz poprzez: _x=ds_grid_width(index); for(_x=ds_grid_width(index); _x>0; _x--) { if(ds_grid_get_min(index, _x, 0, _x, ds_grid_height(index))>0) { exit } } Y podobnie. Jeżeli operujesz na stringach to musisz zamiast ds_grid_get_min() zrobić znów for i przelecieć przez wszystko w y gnysek 1
Administratorzy gnysek Opublikowano 6 Listopada 2017 Administratorzy Opublikowano 6 Listopada 2017 No ale jak znasz wysokość i szerokość, to nadal jak wyżej. A jak nie znasz, to ciężka sprawa... chyba, ze to jedyny kształt w tym gridzie ? Wtedy będzie tak: var _w = ds_grid_width(index); var _h = ds_grid_height(index); var xstart = _w, xend = 0, ystart = _h, yend = 0; for(var i = 0; i < _w; i++) { for(var j = 0; j < _h; j++) { if index[# i, j] == 1 { xstart = min(xstart, i); xend = max(xend, i); ystart = min(ystart, j); yend = max(yend, j); } } } // ok, mamy juz prostokat w ktorym jest figura, teraz przesuwamy var offsetx = -1, offsety = -20; for(var i = xstart; i < xend; i++;) { for(var j = ystart; j < _yend; j++) { if index[# i, j] == 1 { index[# ((i + _w + xoffset) % _w), ((j + _h + yoffset) % _h)] = 1; index[# i, j] = 0; /* robimy operację modulo, żeby przenosiło na drugi koniec grida w przypadku, gdy np. litera zaczyna się na osi X w pozycji 2, a ustawisz offset na -5. ponieważ jednak modulo z liczb ujemnych nie jest tylko dopisaniem znaku - przed wartością, dodajemy pełną wysokość np. 3 % 10 = 3, ale -3 % 10 = 7, wystarczy jednak dodawać zawsze 10 do liczby i po sprawie (-3 + 10) % 10 = 3. */ } } } tu jest jeszcze taki jeden problem, że jak szerokość litery jest taka, ze po odjęciu offsetu nachodzi na siebie z drugiej strony, no to skasuje się część litery niestety - trzeba by wtedy do nowego grida po prostu przenosić i stary kasować.
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się