szybkie mapowanie punktów w przestrzeni 3d/pomocy 16933 31

O temacie

Autor

Zaczęty 22.07.2012 roku

Wyświetleń 16933

Odpowiedzi 31

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Powinno się raczej utworzyć klasę Star, w której są parametry. Później możesz utworzyć listę gwiazd. Nie potrzebujesz żadnych dwuwymiarowych tablic i tablicy atrybutów.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie mogę jej utworzyć, bo nie znam z góry liczby parametrów jakie są podane w bazie danych. Aplikacja zakłada możliwość załadowania dowolnej bazy danych (wystarczy zachować formatowanie), a także wielu jednocześnie. Dlatego zamiast z klasy, korzystam tutaj z tablicy.
Pośrednim rozwiązaniem było stworzenie klasy Star, która zamiast pól posiadała tylko jedną tablicę jednowymiarową w której były zapisywane parametry, zaś w klasie Database była tablica z nazwami tych parametrów. Praktyka pokazała jednak że zastosowanie tablicy dwuwymiarowej pozwala w większym stopniu utrzymać porządek w kodzie. Dlaczego trzymanie wszystkiego w klasie miałoby mieć jakieś zalety w porównaniu do korzystania z tablic?

Oczywiście, stworzenie klasy z określonymi polami w runtime jest możliwe, ale musiałbym korzystać albo z evala, albo z System.Reflection.Emit (i tam klepać OpCode'ami albo korzystać z System.Reflection.Emit.TypeBuilder). Jednak eval jest po prostu zakazany do rozwiązań które mają być używane w końcowej wersji oprogramowania (a na iOSie w ogóle nie działa), a drugie rozwiązanie wymagałoby nakładu pracy zdecydowanie przekraczającego ten włożony w resztę aplikacji.
//edit: przyjrzałem się System.Reflection.Emit.TypeBuilder i nie widzę sposobu na dodanie pól do utworzonej klasy. Czyli pozostałby tylko eval, którego znowu użyć nie mogę.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

szybkie mapowanie punktów w przestrzeni 3d/pomocy
#22 2012-08-06, 16:13(Ostatnia zmiana: 2012-08-06, 16:15)
Lepsza obiektowość ;p

Czyli twój program ma działać dla różnych struktur? Czyli np. dla takich parametrów
StarID,HIP,HD,HR,Gliese,BayerFlamsteed,ProperName,RA,Dec,Distance,PMRA,PMDec,RV,Mag,AbsMag,Spectrum,ColorIndex,X,Y,Z,VX,VY,VZoraz dla
A,B,C,Gliese,BayerFlamsteed,ProperName,RA,Dec,StarID,HIP,HD,HR
Pytam się o to, bo:
Cytuj
Nie mogę jej utworzyć, bo nie znam z góry liczby parametrów jakie są podane w bazie danych.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Dokładnie o to cały czas chodzi.
Przykład który podałem
name,x,y,z
ola,3,4,5
aga,4,4,4
kamila,1,1,0
kasia,2,0,5
Również jest poprawnie ładowany. Po prostu baz danych gwiazd jest wiele, a o ile wiem nie ma żadnego ich standardu, poza tym chcę wykorzystywać tą klasę później w innych moich projektach. Dlatego zdecydowałem się na rozwiązanie uniwersalne.

Zresztą, tak jak pisałem, zanim napiszesz że jest w czymkolwiek gorsze, napisz dlaczego ;p

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Nie wiem, czy ta uniwersalność jest zaletą. Skoro ładujesz cały plik z parametrami, to powinieneś w jakiś sposób wykorzystać te parametry w programie. Przykładowo np. obliczasz odległość między gwiazdami, to potrzebujesz jakiś współrzędnych, promienia gwiazdy itd. Niestety okazuje się, że nie ma jakiegoś parametru potrzebnego do obliczeń, wykonania jakiejś operacji, bo twój program jest uniwersalny. Co wtedy? Program ma się zawiesić, obliczyć zły wynik?

Z drugiej strony jeśli nie wykorzystujesz wszystkich parametrów, to pytanie brzmi, czy musisz je wszystkie ładować do pamięci, skoro praktycznie te dane nie są potrzebne?

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Klasa, która umieszcza gwiazdy w przestrzeni, po otrzymaniu bazy danych sprawdza czy zawiera ona niezbędne pola (są to jedynie współrzędne). W razie ich braku, nic nie robi. Jeśli są, szuka innych które potrafi wizualnie odwzorować (po nazwach, obecnie są to Mag i Spectrum). Jeśli nie występują lub nie potrafi ich odczytać, to po prostu dany wizualny aspekt nie zostaje odwzorowany (przykładowo jeśli nie było w bazie danych kolumny Spectrum lub jest ono zapisane w formacie którego funkcja nie potrafi odczytać [ale to jest akurat raczej niemożliwe, istnieje bardzo ścisły i prosty standard zapisu tego parametru], to gwiazda pozostanie biała [tzn bez odcienia i nasycenia]).

Muszę ładować do pamięci wszystkie parametry, ponieważ program ma służyć do ich wyświetlania i edycji (w formie tekstowej). Pierwszą wersję takiego edytora pokazałem w pierwszym poście: http://ifotos.pl/zobacz/Beztytuuj_raqrswr.jpg/. Początkowo planowałem też dodanie możliwości wizualnego określania części parametrów, jednak Kazzmir napisał że potrzebna jest precyzja jaką może zapewnić tylko ręczne wpisywanie.

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
U mnie taka gweiazda to mogłby być po prostu słownik (Lista w której do każdego pola można się odwołać po jego nazwie. Z poziomu struktury w zasadzie wygląda jak lista tablic dwuelementowych, tyle że ma pewne dodatkowe metody do ich łatwej obsługi.


A nie moment... wy tu używacie js zamiast C#? omg... w topicu było napisane, że ma być szybko i wydajnie a tu ktoś wpadł na pomysł pisania w java scripcie?
 
Popisuje się ciągle menda jedna...

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To nie JavaScript, tylko JScript.NET (a właściwie oparty na nim, UnityScript, są tylko bardzo nieznaczne różnice w wewnętrznych mechanizmach - jak dotąd jedyna jaką zauważyłem, to jak kompilator traktuje funkcje jako obiekty).
Cytuj
Unity compiles all scripts to .NET dll files. The .dll files will be jit compiled at runtime.

This allows incredibly fast script execution. It is around 20 times faster than traditional javascript and around 50% slower than native C++ code.
Zauważ, że tutaj porównano go z C++, nie z C#. Pomiędzy tymi dwoma, w ogóle nie powinno być różnic w wydajności (oczywiście przy odpowiednim wykorzystaniu, wszędzie korzystam z pragma strict i statycznego typowania). Zarówno JScript.NET jak i C# są kompilowane do kodu zarządzanego .NET.
Ponadto i tak wszelkie "ciężkie" operacje (w praktyce: dodawanie GameObjectów) są wykonywane po stronie silnika, nie skryptów, więc wykorzystywany język nie ma tutaj znaczenia.

Określenie "szybkie mapowanie" w tytule odnosiło się raczej do możliwości wygodnej edycji i rozszerzania bazy danych. Właściwie nic w nim nie było o importowaniu gotowej, to już doszło w trakcie tworzenia.

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
a to nawet nie wiedziałem :) . Tak czy siak użyłbym już istniejących struktur danych a nie wysilał się w tworzenie własnych. No o ile JScript ma zaimplementowane mapy lub słowniki.
 
Popisuje się ciągle menda jedna...

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
O mapach nie słyszałem. Słowniki i podobne cuda to element .NET Frameworka (MDSN), pomiędzy językami może różnić się co najwyżej składnia. Pamiętam że raz próbowałem z nich skorzystać, ale zdecydowałem się na rozwiązanie które już znałem (z tego co pamiętam - tablicę).

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
Mapa to chyba C+'sowy odpowiednik słownika z C#
 
Popisuje się ciągle menda jedna...

Kazzmir
  • Gość
ponawiam rekrutację. szukam solidnego programisty który ogarnie napisanie loadera baz danych, pomoże przy pierdołach związanych z shaderami, jakieś tam takie podobne. piszcie do mnie na gg.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry