Entries for tag "math", ordered from most recent. Entry count: 63.
# Szum perlina
Sat
28
Jul 2007
Fajnie mieć pod ręką proste funkcje takie jak:
float PerlinNoise3(float x, float y, float z);
generujące szum wynaleziony przez Kena Perlina. Wygląda na to, że tak naprawdę formalnie szum perlina to ciągła funkcja pseudolosowa jednej lub wielu zmiennych o "częstotliwości" równej np. 1, a to co nazywamy zazwyczaj szumem perlina - ta funkcja używana m.in. do generowania chmur albo mapy wysokości terenu, posiadająca oktawy - nazywa się Fractional Brownian Motion. Mniejsza o nazwy - ja od dzisiaj w swojej bibliotece mam obie :) Mowa oczywiście o bibliotece CommonLib.
Comments | #rendering #math Share
# Kalkulator programisty gier
Mon
16
Jul 2007
Wpadłem też dzisiaj na pomysł na pożyteczny program. Nie od dziś dręczy mnie z resztą od czasu do czasu potrzeba szybkiego policzenia znormalizowanego wektora czy przyciemnionego koloru. Ten pomysł to Kalkulator programisty gier, który pozwalałby na obliczenia na wektorach, macierzach czy kolorach. Co o tym sądzicie? Może kiedyś taki napiszę...
Ogólnie wszystkim którzy narzekają na wakacyjną nudę polecam na mojej stronie dział Download. Czasami wrzucam tam różne dziwne rzeczy, o których nawet nie piszę tutaj na blogu.
# INF-y i NAN-y
Sun
13
May 2007
Liczby zmiennoprzecinkowe typu float czy double mogą przyjmować pewne
specjalne wartości, m.in. oznaczające nieskończoność, nazywane -INF i
+INF, a osiągalne w C++ za pomocą nagłówka <limits>
i wywołania
std::numeric_limits<float>::infinity()
.
Ciekawe jest, że w przeciwieństwie do liczb całkowitych dzielenie zmiennoprzecinkowe przez
zero nie powoduje "wywalenia" programu, ale daje w wyniku takie właśnie
nieskończoności.
Z mojego doświadczenia wynika, że zachowują się one absolutnie sensownie. -(+INF) daje -INF, -INF jest mniejsze od każdej liczby a +INF jest większe, -INF jest mniejsze od +INF, +INF - 2.f daje +INF, -INF * -2.f daje +INF itd. Zastanawia mnie więc, dlaczego wszyscy tych specjalnych wartości tak się boją, a nikt ich nie stosuje w swoim kodzie? Ostatnio znalazłem na to kolejny przykład - programiści nVidia w swoich przykładowych kodach używają liczby 1e32f jako wartości specjalnej.
# Poisson Disc Generator
Mon
23
Apr 2007
Poisson Disc is one of the best methods for determining places from which to sample some data, next to Grid, Random or Jittered methods. It prevents aliasing thanks to random distribution while preserving minimum distance between sample positions not to focus too many samples in a particular region. Unfortunately, an algorithm for generating such samples is slow and we don't know how many points we will manage to generate with specified minimum distance.
That's why I thought it would be useful to have an array of many numbers, each defining new Poisson Disc sample in the way that the more first samples you take, you still have a correct Poisson Disc samples but with more points and smaller minimum distance. I've coded a small console application for generating such arrays of 1D, 2D or 3D points in 0..1 range. I've also generated ready 1000-element arrays. Here you can find the details: PoissonDiscGenerator.
I've called it "Progressive Poisson Disc", described it in my master thesis [PDF, pl], used in my The Final Quest engine [pl] and also integrated into Math module of my CommonLib library.
Update 2023-11: As my colleague pointed out, taking only a small number of first samples (e.g. 16) from the array I generated doesn't make a good uniform distribution across the surface, so for that, I recommend to use some other method (e.g. samples from a grid + random jitter) or make your own implementation of this idea of "progressive Poisson Disc".
Comments | #productions #math #algorithms Share
# Najpiękniejszy wzór
Wed
11
Apr 2007
Jaki jest najpiękniejszy wzór w matematyce? Mówi się, że ten który wiąże ze sobą najważniejsze stałe, w tym jednostkę urojoną:
Moim zdaniem jednak najważniejszy wzór to ten na iloczyn skalarny:
Gdyby nie związek liczącego się niezwykle szybko iloczynu skalarnego dwóch wektorow z cosinusem kąta między nimi, trzeba byłoby liczyć go dużo wolniejszymi metodami. Tymczasem bardzo często potrzebny jest właśnie cosinus (częściej nawet niż sam kąt) i mówi on dużo o wzajemnym zwrocie tych wektorów.
Comments | #math #philosophy #humor Share
# Enkapsulacja
Sat
24
Feb 2007
Enkapsulacja - piękna idea... Używamy klasy poprzez jej interfejs nie myśląc o tym, jak wygląda jej wewnętrzna implementacja. Ale to nie tylko jedno z założeń programowania obiektowego, to także naczelna zasada całego programowania (zawsze piszemy kolejne warstwy kodu korzystając z warstw niższych, z jakiś bibliotek czy funkcji systemowych). Zastosowanie ma nawet w życiu codziennym - sterujemy radiem za pomocą przycisków nie wiedząc nawet, jak to radio jest zbudowane ani jak działa.
Niestety nie wszędzie enkapsulacja ma zastosowanie. Nie sposób używać jej w matematyce. Wyprowadzenia czy dowody można pomijać, ale nie sposób zastosować wzoru bez zrozumienia co on reprezentuje, jak jest zbudowany, jak działa ani skąd się wziął. Czemu równanie matematyczne nie może być niczym biblioteka C++ - funkcją, której podajemy dane na wejście i otrzymujemy dane na wyjściu? Dlaczego skopiowany skąś wzór czy algorytm, choć poprawny, nigdy nie zadziała dopóki go w pełni nie zrozumiemy i nie poprawimy w nim jakiegoś drobiazgu? Czy życie programisty nie byłoby wtedy prostsze? :)
Comments | #philosophy #software engineering #math Share
# LINE2D
Sun
18
Feb 2007
Walki z cieniami ciąg dalszy. Na razie przegrywam. Tymczasem, kierowany nagłą potrzebą, napisałem strukturę LINE2D
reprezentującą prostą na płaszczyźnie wg równania: Ax + By + C = 0
. Napisałem ją porządnie, żeby dołączyć do mojego modułu matematycznego - odrobina geomtrii 2D nie zaszkodzi, a może jeszcze kiedyś się przyda. Tym samym nagłówek tego modułu liczy teraz 2711 linii i zawiera takie struktury:
POINT
VEC2
VEC3
VEC4
RECTI
RECTF
BOX
COLOR
COLORF
PLANE
LINE2D
MATRIX
QUATERNION
FURSTUM_PLANES
FRUSTUM_POINTS
Bibliotekę opublikuję jako nową wersję CommonLib jeszcze przed wakacjami.