2013-07-17 13 views
5

Jestem zainteresowany znalezieniem algorytmu antialiasing, który może być użyty na linii o dowolnym kształcie (nie tylko linii prostych).Algorytm antyaliasingu Mathematica

Zauważam, że Mathematica wydaje się mieć bardzo dobry algorytm i może rysować cienkie linie o szerokości 1 lub 2 pikseli. Mój obecny algorytm najlepszego wysiłku zazwyczaj wymaga więcej niż 3 pikseli, więc moje linie są nieco grubsze niż w Mathematica.

Czy ktoś wie, jakiego algorytmu używa Mathematica do wygładzania krawędzi, czy może polecić wysokiej jakości algorytm, który może być używany do generowania linii i krzywych o wartości mniejszej niż 2 piksele?

+0

Nie możesz narysować 3 oddzielnych linii trzy razy? – ElKamina

+0

Najczystsza i najprostsza, ale nieco powolna metoda antyaliasingu to po prostu nadpróbkowanie. Oznacza to, że narysuj linię w wyższej rozdzielczości niż rzeczywisty wyświetlacz i zmniejsz ją. –

+0

Jestem zaznajomiony z tą metodą i możliwe, że Mathematica ją wykorzystuje, jednak przykłady, które widziałem, nie wydają się mieć bardzo dobrej jakości przez cały czas w porównaniu do Mathematica. Może po prostu widzę rzeczy, ale podejrzewam, że używają bardziej wyrafinowanego podejścia. –

Odpowiedz

3

Jednym z najczęściej używanych algorytmów do rysowania niezłożonych linii jest Wu's line algorithm.

Na tej podstawie można łatwo rysować wielokąty; ten site wyjaśnia, jak wyprowadzić ten algorytm, aby narysować elipsy.

+0

Chcę móc rysować dowolne kształty, w tym na przykład sin i cos (funkcje trygonometryczne), a także wielomiany wyższego rzędu. Algorytm Wu jest głównie dla linii prostych. –

+0

Myślę, że to samo podejście można zastosować do wszystkiego. Zobacz ten post, który wspomina, jak narysować skrócone znaki przeciwstawne: http://stackoverflow.com/questions/4541442/drawing-aliased-pixel-perfect-1px-splines-catmull-rom-specifically. Możesz użyć tej samej sztuczki, aby narysować wszystko inne; innym sposobem jest przybliżenie krzywej z precyzją sub-pikselową za pomocą splajnów i narysowanie splajnu. – Bentoy13