Unit SpaceFillingCurves

DescriptionusesClasses, Interfaces, Objects and RecordsFunctions and ProceduresTypesConstantsVariables

Description

Generating so-called "space filling curves", i.e. curves that "walk" through all points of some defined space.

uses

Overview

Classes, Interfaces, Objects and Records

Name Description
Class TSpaceFillingCurve To jest abstrakcyjna klasa reprezentujaca interfejs obiektu ktory zwraca kolejne punkty w przestrzeni 2d (0..SizeX-1, 0..SizeY-1) w taki sposob ze w momencie gdy EndOfPixels = true to kazdy pixel z tej przestrzeni zostal zwrocony dokladnie raz przez NextPixel.
Class TPrecalcCurve To nie jest gotowa klasa, tylko przejsciowa klasa abstrakcyjna z ktorej korzystaja THilbertCurve i TPeanoCurve.
Class TSwapScanCurve Najprostszy na swiecie ciag pixeli zapelniajacych ekran.
Class THilbertCurve Wypelniaj przestrzen ciagiem Hilberta obcietym do wymiarow SizeX, SizeY
Class TPeanoCurve Wypelniaj przestrzen ciagiem Peano obcietym do wymiarow SizeX, SizeY
Class EInvalidSFCurveClassName  

Functions and Procedures

procedure PeanoCurve(InitialOrient: boolean; Angle: TSFCAngle; InitialLevel: Cardinal; Step: TSFCStepFunction; StepData: Pointer);
procedure HilbertCurve(InitialOrient: boolean; Angle: TSFCAngle; InitialLevel: Cardinal; Step: TSFCStepFunction; StepData: Pointer);
function StrToSFCurveClass(const s: string): TSpaceFillingCurveClass;
function AllSFCurveClassesNames: string;

Types

TSFCAngle = 0..3;
TSFCStepFunction = procedure (Angle: TSFCAngle; StepFuncData: Pointer);
TSpaceFillingCurveClass = class of TSpaceFillingCurve;

Constants

AvailableSFCurveClasses: array[0..2]of TSpaceFillingCurveClass= (TSwapScanCurve, THilbertCurve, TPeanoCurve);

Description

Functions and Procedures

procedure PeanoCurve(InitialOrient: boolean; Angle: TSFCAngle; InitialLevel: Cardinal; Step: TSFCStepFunction; StepData: Pointer);

PeanoCurve i HilbertCurve generuja kolejne punkty ciagu (czy tez krzywej, a moze raczej lamanej) Peano lub Hilberta, jak w "Graphic Gems II", gem I.8. Step jest funkcja ktora przechodzi na sasiedni punkt 2d w zadanym kierunku i "zaznacza go". Zakladajac ze na poczatku punkt poczatkowy jest juz "zaznaczony" lamane Peano i Hilberta daja nam pewnosc ze cala plansza 2d zostanie "zaznaczona". Dla Peano zapelniana jest plansza o wymiarach 3ˆLevel, dla Hilberta 2ˆLevel.

Orient to skrot od Orientation, Angle to jakis "poczatkowy" Angle (w cudzyslowach bo tak naprawde to zalezy od krzywej w jaki sposob te Orient i Angle zostana wykorzystane; ale na pewno zdeterminuja ona to po ktorej stronie punktu poczatkowego pojawi sie krzywa).

Przyjmujac ze katy TSFCAngle sa interpretowane jako 0 = 0 stopni = w prawo, 1 = 90 stopni = w gore, 2 = 180 stopni = w lewo i 3 = 270 stopni = w dol to musisz podac nastepujace InitialOrient i Angle aby plansza byla zapelniana na lewo i w gore od punktu poczatkowego : Peano: InitialOrient = false, Angle = 0. Hilbert: InitialOrient = true, Angle = 0.

procedure HilbertCurve(InitialOrient: boolean; Angle: TSFCAngle; InitialLevel: Cardinal; Step: TSFCStepFunction; StepData: Pointer);
 
function StrToSFCurveClass(const s: string): TSpaceFillingCurveClass;

dla nazw klas sposrod AvailableSFCurveClasses zwraca odpowiednie klasy. Nazwy klas sa przyrownywane not case-sensitive. Dla czegokolwiek innego wyjatek EInvalidSFCurveClassName.

function AllSFCurveClassesNames: string;

zwraca wszystkie SFCName dla wszystkich klas AvailableSFCurveClasses, rozdzielone przecinkami i ujete w apostrofy.

Types

TSFCAngle = 0..3;

0 = 0 stopni, 1 = 90 stopni, 2 = 180, 3 = 270 ale tak naprawde to tylko kwestia umowy, moznaby przesunac te rzeczy. Chodzi tylko o to ze to musza byc 4 kolejne katy (kolejne w sensie CW lub CCW, to bez znaczenia przeciez).

TSFCStepFunction = procedure (Angle: TSFCAngle; StepFuncData: Pointer);
 
TSpaceFillingCurveClass = class of TSpaceFillingCurve;
 

Constants

AvailableSFCurveClasses: array[0..2]of TSpaceFillingCurveClass= (TSwapScanCurve, THilbertCurve, TPeanoCurve);

wszystkie dostepne koncowe klasy wywodzace sie z TSpaceFillingCurve. Mozesz polegac na fakcie ze ta tablica zawsze bedzie indeksowana od zera. Uzywane TYLKO przez StrToSFCurveClass, AllSFCurveClassesNames.


Generated by PasDoc 0.10.0 on 2008-02-25 00:00:38