Sortowanie mapy współrzędnych

0

program generuje 3 liczby losowe i umieszcza je w pliku.

Dim FREFIL As Integer
Dim rndx As Long
Dim rndy As Long
Dim rndz As Long
Dim loopvar As Long




Private Sub Command1_Click()




FREFIL = FreeFile
Open "Starfield.map" For Random As FREFIL
'put


For loopvar = 1 To 144000
rndx = -144000 + Rnd * 288000
rndy = -144000 + Rnd * 288000
rndz = -144000 + Rnd * 288000

Put FREFIL, loopvar, rndx
Put FREFIL, loopvar, rndy
Put FREFIL, loopvar, rndz



Next loopvar

Close FREFIL





End Sub

chodzi o to aby wspołrzędne obok były obok w pliku lub tablicy ex. starfield(x,y,z)

0

Możesz mi wytłumaczyć jak wyglądają posortowane współrzędne znajdujące się na powierzchnie sferycznej?

0

? nie piszę o powierzchni sferycznej lecz tablicy trójwymiarowej, funkcji trójargumentowej.na powierzchni sferycznej czyli powierzchni kuli natomiast tak jak i w innych przypadkach - równoleżnikami i południkami, to i tak łatwiejsze niż przy trzech wymiarach...

tutaj wygląda to tak:
generator współrzędnych jest w pętli,
pierwszy wynik to np 10, 5, 72 (x,y,z)
drugi 5, 71, 12
a trzeci 4, 1, 90

kiedy odczytuję tablicę po x'ach otrzymuję: wynik na początku, wynik na końcu a przy trzecim odczycie wynik pośrodku tablicy co w rezultacie całość programu spowalnia, zwłaszcza jeśli chcę odczytać tylko zakres [(5-10),(7-12),(70-75)].

0

Radzę dokładnie pisać o co ci chodzi, bo po ostatniej twoje odpowiedzi, wiemy już tylko jedno: nam się wydawało, że wiemy na czym polega twój problem.

0

sortowanie - to powszechna nazwa tematu jaki się wałkuje na informatyce:\

1

@nathannixon my doskonale wiemy co to sortowanie. Ale ty jak widać spałeś na algebrze i nie wiesz ze istnieje nieskończenie wiele potencjalnych porządków w danym zbiorze. W twoim przypadku masz zbiór trójek (x,y,z). Nasze pytanie brzmi: jak definiujesz porządek w tym zbiorze. Co jest większe: (1,0,0) czy (0,1,0) a może (0,0,1) i dlaczego? Albo (1,1,0) i (2,0,0)? Jaka jest między nimi relacja?

1
epiktet napisał(a):

kiedy odczytuję tablicę po x'ach otrzymuję: wynik na początku, wynik na końcu a przy trzecim odczycie wynik pośrodku tablicy co w rezultacie całość programu spowalnia, zwłaszcza jeśli chcę odczytać tylko zakres [(5-10),(7-12),(70-75)].

Jeśli dobrze rozumiem, to sugeruje, że ty nie potrzebujesz sortowania, ale podzielić zbiór punktów na kubełki zawierające określone fragmenty przestrzeni trójwymiarowej.
Radzę napisz dokładnie jakie jest twoje zadanie, a nie jak naprawić twój sposób realizacji tego problemu.

0

(: czyli... współrzędne jak widać mam losowe - jest to tablica 144000*3, przy czym zarówno na jednym z wierzchołków (1,1,1) jak i dowonym innym np (144000,144000,1) mogą znajdować się współrzędne ze środka mapy (92000,92000,92000) i np (92000,92000, 92001). teraz chodzi o to że jeśli chcemy patrzeć co znajduje się w środku mapy aby w tablicy, nazwałbym ją 'przystającą' do mapy mieć bliskie współrzędne czyli w obszarze tablicy x(90000-95000),y(90000-95000),z(90000-95000) znajdowały się dane obiektów o podobnych współrzędnych na mapie, aby rzucając całość pobranych danych na ekran nie zajmować się współrzędnymi spoza zakresu, dopiero kiedy widok mapy przemieszcza się odczytać kolejny argument tablicy, lub x, luby, lub z w zależności czy przemieszczam się poziomo, pionowo czy w głąb. ?
teraz mogłoby to wyglądać tak:
1,5,7,10,43,[2,65,12,90,]34,22,9 po przemieszczeniu mam: 1,5,7,10,43,2,[65,12,90,34],22,9
powinno to wyglądać natomiast tak:
1,2,5,7,[9,10,12,22],34,43,90 a po przemieszczeniu tak: 1,2,5,7,9,[10,12,22,34],43,90
dzięki temu nie muszę przeszukiwać całej tablicy aby dowiedzieć się co powinno pojawić się na ekranie

MarekR22 napisał(a):

napisz dokładnie jakie jest twoje zadanie

do zadania tu:softwareconstructor.webs.com

0

Algorytm jest następujący:

  1. Czytasz post od @Shalom, o ten: http://4programmers.net/Forum/Algorytmy/228945-czy_ktos_moglby_pomoc_przesortowac_mape_wspolrzednych?p=1009323#id1009323
  2. Jeżeli rozumiesz że to o co pytasz nie da się rozwiązać to koniec algorytmu.
  3. Przejdź do punktu 1 algorytmu.
0

<Co jest większe: (1,0,0) czy (0,1,0) a może (0,0,1) i dlaczego? Albo (1,1,0) i (2,0,0)? Jaka jest między nimi relacja? > po zastanowieniu to nawet tablica 4wymiarowa współrzędne obiektu O(q,x,y,z) gdzie q jest nr obiektu...
q=od 1 do 144000, x,y,z mają wartości od -144000 do 288000

dziękuję za poświęcenie czasu
jakoś przetworzę te tablice:\

1

Ok teraz rozumiem o co ci chodzi. I nie ma to raczej nic wspólnego z sortowaniem czegokolwiek ;] Czemu współrzędne z tablicy nie odpowiadają współrzędnym w tej twojej tablicy?

1

Zupełnie brak ci umiejętności zrozumiałego opisu problemu. Wyciskamy z ciebie na siłę jakieś informację, ale idzie to strasznie opornie.
Proste rady, które pomogą na przyszłość: nie pisz zdań wielokrotnie złożonych. Dziel wszystko na logiczne akapity. Stosuj interpunkcję: przecinki i kropki!

Z tego co się domyślam to: robisz gierkę 3d komiczną (lub próbujesz coś przy niej pogrzebać), tak wynika przynajmniej z tego pseudo linku: http://softwareconstructor.webs.com/
Teraz najprawdopodobniej masz problem z optymalizacją wykrywania kolizji i tego co ma być rysowane.
Robisz to dokładnie jak napisałem wcześniej:

  1. dzielisz przestrzeń na komórki (kubełki). Możesz zrobić by komórki równo dzieliły przestrzeń (łatwiejsze w implementacji), albo były małe tam gdzie jest dużo obiektów i duże tam gdzie ich jest mało.
  2. Przemieszczając obiekt pilnujesz by był we właściwej komórce (tylko w jednej)
  3. Sprawdzając kolizję sprawdzasz jedynie obiekty z danej komórki, a jeśli badany obiekt jest przy granicy komórki to sprawdzasz również obiekty z komórki sąsiedniej.

Jeśli nie to chodzi, to nie widzę szansy by ci pomóc dopóki się nie przyłożysz do czytelnego opisu problemu.

0

bo tablica jest jednowymiarowa:\ chyba to jest ta kwestia czemu to jakoś mi nie pasowało Obj(q), tutaj q=loopvar, następnie mam losowe współrzędne dla x,y,z ze zbioru <-144000,288000>. jeśli dajmy na to utworzę tablicę T(100,100,100) z której pobieram dane na ekran do przestrzeni 3d, muszę, przemieszczając ją np w poziomie zmienic x, w tablicy T będzie to T(x,100,100), w taki sposób;P aby nowy obiekt był przy krawędzi tablicy\przestrzeni. to zagmatwane.

mam tak:
tablica 1-cała przestrzeń 3d(-144000\288000,-144000\288000,-144000\288000,)
tablica 2-wycinek przestrzeni\to co mam na ekranie, np aktualnie środek sceny to współrzędne (2000,5000,10000), więc biorę zakres np -700 do 700 w trzech kierunkach

i teraz tablica 2 przemieszcza się wewnątrz pierwszej;\

kwestia kolizji wydaje mi się zamknięta zderzam się z satelitą, a zdarzenia występują tu w okolicy centrum przestrzeni (wycinka), ale tak chodzi o optymalizację tego co ma być rysowane na krańcach wycinka kiedy pojazd przemieszcza się

...i sprostowując piszę ją nie szperam w niej

0

No dobra, ale właściwie po co ci jest ta dodatkowa tablica która wszystko komplikuje? Czemu nie poruszasz się tylko po tej głównej tablicy? Liczysz na to, że mała tablica wskoczy do cache?
Może zamiast tablicy użyjesz jakiejś hashmapy/treemapy gdzie kluczem będzie krotka ze współrzędnymi? W przypadku hashmapy średni czas dostępu do elementu będzie O(1), asymptotycznie tak samo jak do tablicy, a nie musisz się martwić ułożeniem elementów.

0

myślałem, że mógłbym dużej całkowicie pozbyć się wrzucając ją do pliku a dane do małej pobierać z pliku

1

Może nieco pomóc trzy osobne sortowania, wg:

  • X,Y,Z
  • Y,Z,X
  • Z,X,Y

Czyli po przesunięciu o jakiś wektor wystarczy przeszukać trzy ... "grube płaszczyzny" (nie wiem jak to nazwać).

1 użytkowników online, w tym zalogowanych: 0, gości: 1