All Blog Entries

All blog entries, ordered from most recent. Entry count: 1198.

Uwaga! Informacje na tej stronie mają ponad 6 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Pages: > 1 ... 69 70 71 72 73 ... 150 >

# Sortowanie naturalne

Thu
12
Feb 2009

Ciekawym algorytmem jest sortowanie łańcuchów w porządku naturalnym. Chodzi o to, żeby liczby traktowane były jako liczby i sortowały się według wartości. Na przykład nazwy plików posortowane normalnie alfabetycznie (leksykonograficznie) będą w takiej kolejności:

Plik.txt
Plik1.txt
Plik10.txt
Plik2.txt
Plik24.txt
Plik3.txt

Natomiast posortowane w porządku naturalnym będą w kolejności bardziej przez użytkownika pożądanej:

Plik.txt
Plik1.txt
Plik2.txt
Plik3.txt
Plik10.txt
Plik24.txt

Oczywiście każdy informatyk wie, że należałoby raczej po prostu dopełniać te liczby zerami (np. Plik01.txt), ale mimo wszystko ten algorytm jest dobry do sortowania nazw plików, serwerów itp.

Jak to działa? Całkiem prosto. Mówiąc ogólnie, trzeba porównywać kolejne znaki dwóch łańcuchów, ale kiedy napotka się cyfry, wtedy trzeba rozpatrzyć je jako całe liczby i porównać ich wartości. Implementację w C++ można znaleźć w mojej bibliotece CommonLib (zobacz pliki Base.hpp i Base.cpp, klasa StringNaturalCompare). W PHP jest standardowo taka funkcja - nazwa się strnatcmp. Opis algorytmu w Internecie można znaleźć m.in. tu: Natural Order String Comparison.

Comments | #algorithms Share

# O wyższości wyszukiwania nad wybieraniem

Tue
10
Feb 2009

Mam wrażenie, że w rozwoju interfejsów użytkownika za szczyt wygody dawniej uważane było pokazanie listy jakiś elementów do wybrania przez kliknięcie myszką. Natomiast teraz jasne staje się, że lepiej pozwolić użytkownikowi zacząć wpisywać jakiś wyraz do wyszukania i od razu pokazywać listę pasujących wyników. Taką możliwość mamy np. w:

Comments | #philosophy #gui Share

# Dobry zakup: Pendrive Kingston DataTraveler 150

Thu
05
Feb 2009

Podobno wielkim wyróżnieniem dla firmy jest, kiedy jej marka staje się nieoficjalną nazwą wszystkich podobnych produktów. Tak było z określeniem "walkman" na przenośny magnetofon czy "adidasy" na wszystkie buty sportowe, tak jest też z określeniem "pendrive" na przenośne pamięci flash.

Taki właśnie pendrive kupiłem sobie ostatnio i gorąco polecam. To Kingston DataTraveler 150. Dałem za niego na Allegro ok. 180 zł. Jego pojemność to 32 GB. Ponadto jest bardzo szybki - jego prędkość to (samodzielnie zmierzona, a nie deklarowana): odczyt 30 MB/s, zapis 15 MB/s. Dla porównania, mój poprzedni Kingston 2 GB miał odczyt 10 MB/s. Poza tym bardzo dobrym rozwiązaniem jest, że na czas podłączenia USB skuwkę można zatknąć od drugiej strony zamiast kłaść ją gdzieś na biurku, gdzie łatwo może się zgubić.

Pendrive Kingston DataTraveler 150

Comments | #hardware #shopping Share

# Pliki INI w WinAPI

Tue
03
Feb 2009

Stare dobre pliki INI to format tekstowy do przechowywania konfiguracji. Na przykład:

[Display]
Width=1280
Height=800
FullScreen=true

Czasami ten format może się przydać, a chociaż nie jest skomplikowany, to nie każdy ma ochotę pisać do niego własny parser. Dlatego warto wiedzieć, że WinAPI zawiera proste i wygodne funkcje do obsługi plików INI. Znajdują się na dole listy Registry Functions. Można się domyślać, że z każdym wywołaniem plik jest od nowa otwierany i wczytywany, więc te funkcje nie grzeszą szybkością, ale do prostych zastosowań będą OK. Na przykład wczytanie wartości:

char Buf[256];
GetPrivateProfileString(
  "Display", // Nazwa sekcji
  "FullScreen", // Nazwa klucza
  "false", // Wartość domyślna
  Buf, _countof(Buf), // Bufor wyjściowy
  FileName); // Nazwa pliku INI ze ścieżką

Comments | #winapi Share

# Skąd brać ikonki?

Fri
30
Jan 2009

MarekM25 poruszył ostatnio na naszym forum ciekawy temat: Skąd brać ikonki na przyciski do swoich programów?. Pośród odpowiedzi znalazły się darmowe galerie ładnych ikon: Silk Icons, Tango Icon Gallery, a także nie lada niespodzianka - paczka ikon dołączana do Visual Studio (niestety nie w wersji Express), schowana głęboko i spakowana w pliku VS2008ImageLibrary.zip.

VS2008ImageLibrary.zip

Przy okazji warto wspomnieć o stronie Ajaxload, na której można sobie wygenerować i ściągnąć animowane, obracające się kółeczko popularne ostatnio do oznaczania ładowania czegoś w tle. Znacie jeszcze inne tego typu zasoby?

Ajaxload

Comments | #web #gui #graphics Share

# Pasek przełączania stron w PHP

Wed
21
Jan 2009

Tym razem, nietypowo, napiszę o programowaniu stron WWW w PHP, a konkretnie o kwestii przełączania między stronami. Jeśli lista zarejestrowanych użytkowników, dodanych projektów, newsów czy czegokolwiek jest długa, istnieją różne rozwiązania na jej pokazywanie. Pierwsza to pokazać wszytkie (jak lista Parties na pouet.net). Druga to pokazać wszystkie na wybraną literę (jak lista Groups na pouet.net). Ta najczęściej stosowana to grupować obiekty po kilka na stronie i dać możliwość przełączania się między numerami stron.

Z kolei wybór strony też można pokazywać na różne sposoby. Można wstawić formularz z kontrolką <select>, czyli ComboBox. Można pokazać listę numerów stron. Jeśli jednak sama ta lista jest długa, warto ją skrócić. Tu właśnie, kończąc ten wstęp, chciałbym zaprezentować kawałek kodu PHP, który ostatnio napisałem. Wprowadziłem go do swojej strony domowej oraz na www.gamedev.pl. Wzorem SMF (używanego na naszym forum.gamedev.pl) pokazuje tylko numer strony bieżącej, pierwszej, ostatniej, dwóch poprzednich, dwóch następnych oraz dodatkowe strzałeczki do następnej i poprzedniej. Oto kod: Pasek_stron_PHP.txt. Tak to wygląda:

Pasek przełączania stron w PHP

Comments | #php #webdev #web #gui Share

# Funkcja liniowa i kwadratowa

Wed
14
Jan 2009

W programowaniu bardzo często stosuje się funkcję liniową lub kwadratową. Przykładowo, jeśli mgła ma się zaczynać w głębokości Min i kończyć w głębokości Max, to jej intensywość od głębokości można wyrazić prostym wzorem:

FogIntensity = saturate(Depth * FogScale + FogBias);

Problem w tym, żeby znaleźć współczynniki tej funkcji. Do tego przydają się wzory, które wyliczają współczynniki dla funkcji przechodzącej przez dane punkty. Potrafi to robić mój GameDev Calc, ale żeby policzyć je w swoim programie albo na kartce, warto mieć pod ręką te wzory.

Funkcja liniowa Funkcja liniowa przechodząca przez dwa punkty (x1, y1), (x2, y2) ma wzór:

Funkcja liniowa - współczynniki

Co w przełożeniu na kod daje:

float W = p2.x - p1.x;
if (W == 0.f) Error();
float a = (p2.y - p1.y) / W;
float b = (p2.x * p1.y - p2.y * p1.x) / W;

Z kolei funkcja kwadratowa Funkcja kwadratora przechodząca przez trzy punkty (x1, y1), (x2, y2), (x3, y3) ma wzór:

Funkcja kwadratowa - współczynniki

Co daje trochę dłuższy kod:

float x1 = p1.x, x2 = p2.x, x3 = p3.x;
float y1 = p1.y, y2 = p2.y, y3 = p3.y;
float W =
  x1 * x1 * x2 + x3 * x3 * x1 +
  x2 * x2 * x3 - x1 * x1 * x3 -
  x2 * x2 * x1 - x3 * x3 * x2;
if (W == 0.f) Error();
float a =
  y1 * x2 + y3 * x1 + y2 * x3 -
  y1 * x3 - y2 * x1 - y3 * x2;
float b =
  x1 * x1 * y2 + x3 * x3 * y1 +
  x2 * x2 * y3 - x1 * x1 * y3 -
  x2 * x2 * y1 - x3 * x3 * y2;
float c =
  x1 * x1 * x2 * y3 + x3 * x3 * x1 * y2 +
  x2 * x2 * x3 * y1 - x1 * x1 * x3 * y2 -
  x2 * x2 * x1 * y3 - x3 * x3 * x2 * y1;
a /= W;
b /= W;
c /= W;

Comments | #math Share

# Co wynalazł Hilbert i Morton

Mon
12
Jan 2009

Tablicę jednowymiarową można posortować, żeby przyspieszyć jej przeszukiwanie. W programowaniu gier, do przestrzeni 2D i 3D używamy technik podziału przestrzeni (jak BSP, Octree, k-d tree), bo nie sposób uporządkować punktów czy obiektów w kolejności. Jednak czy napewno?

Otóż wynaleziono funkcje, które przeliczają pozycję punktu w przestrzeni (podzielonej wprawdzie na dyskretną siatkę) na pojedynczą liczbę taką, że dwa punkty leżące blisko siebie dostają często zbliżoną wartość. Te funkcje to numer komórki wzdłuż pewnej krzywej (Space-filling curve).

Przykładem może być Morton value:

Morton value
Źródło: Wikipedia

lub lepsza, ale bardziej kosztowna obliczeniowo Hilbert value:

Hilbert value
Źródło: Wikipedia

Comments | #math #algorithms #rendering Share

Pages: > 1 ... 69 70 71 72 73 ... 150 >

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2026