Podstawy Processingu Diana Domańska Uniwersytet Śląski
Krzywe W Processingu dostępne są dwa rodzaje krzywych kubicznych: krzywe Béziera, krzywe Catmulla-Roma.
Krzywe W Processingu dostępne są dwa rodzaje krzywych kubicznych: krzywe Béziera, krzywe Catmulla-Roma. Do rysowania krzywej Béziera służy funkcja: void bezier(int x1, int y1, int cx1, int cy1, int cx2, int cy2, int x2, int y2); gdzie x1, y1, x2, y2 współrzędne punktów kontrolnych, które są interpolowane, cx1, cy1, cx2, cy2 współrzędne punktów kontrolnych kontrolujących kształt krzywej.
Drugim sposobem rysowania krzywej Béziera jest użycie funkcji: void beziervertex(int cx1, int cy1, int cx2, int cy2, int x2, int y2); pomiędzy funkcjami beginshape, endshape (obie funkcje wywołane bez parametrów). Za pomocą tej funkcji jesteśmy w stanie rysować krzywe sklejane. Pierwsze wywołanie funkcji beziervertex musi być poprzedzone wywołaniem funkcji vertex, kolejne wywołania funkcji beziervertex będą brały ostatni punkt z poprzedniego wywołania funkcji.
Dokładność rysowania krzywej Béziera void bezierdetail(int d); gdzie d dokładność (rozdzielczość), dodatnia liczba im większa tym krzywa będzie rysowania dokładniej.
Dokładność rysowania krzywej Béziera void bezierdetail(int d); gdzie d dokładność (rozdzielczość), dodatnia liczba im większa tym krzywa będzie rysowania dokładniej. Obliczenie współrzędnej (x lub y) na krzywej int bezierpoint(int a, int b, int c, int d, float t); gdzie a, b, c, d współrzędne (x lub y) kolejnych punktów kontrolnych, t wartość parametru, dla którego określamy punkt na krzywej, liczba z [0,1].
Obliczanie współrzędnej (x lub y) stycznej do krzywej w danym punkcie int beziertangent(int a, int b, int c, int d, float t); gdzie a, b, c, d współrzędne (x lub y) kolejnych punktów kontrolnych, t wartość parametru, dla którego określamy styczną do krzywej, liczba z [0,1].
1 size(200, 200); 2 nofill(); 3 smooth(); 4 5 bezier(10, 10, 50, 100, 70, 80, 150, 20); 6 7 beginshape(); 8 vertex(20, 180); 9 beziervertex(50, 100, 80, 120, 130, 150); 10 beziervertex(150, 130, 170, 90, 190, 120); 11 endshape();
Krzywą Catmulla-Roma rysujemy za pomocą funkcji: void curve(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); gdzie x1, y1, x2, y2, x3, y3, x4, y4 współrzędne kolejnych punktów kontrolnych.
Krzywą Catmulla-Roma rysujemy za pomocą funkcji: void curve(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); gdzie x1, y1, x2, y2, x3, y3, x4, y4 współrzędne kolejnych punktów kontrolnych. Podobnie jak w przypadku krzywej Béziera istnieje drugi sposób rysowania krzywej Catmulla-Roma. Kolejne punkty kontrolne krzywej definiowane są poprzez wywołanie funkcji: void curvevertex(int x, int y); pomiędzy wywołaniami funkcji beginshape i endshape (wywołane bez parametrów).
Dokładność rysowania krzywej Catmulla-Roma void curvedetail(int d); gdzie d dokładność (rozdzielczość), dodatnia liczba im większa tym krzywa będzie rysowania dokładniej.
Dokładność rysowania krzywej Catmulla-Roma void curvedetail(int d); gdzie d dokładność (rozdzielczość), dodatnia liczba im większa tym krzywa będzie rysowania dokładniej. Obliczenie współrzędnej (x lub y) na krzywej int curvepoint(int a, int b, int c, int d, float t); gdzie a, b, c, d współrzędne (x lub y) kolejnych punktów kontrolnych, t wartość parametru, dla którego określamy punkt na krzywej, liczba z [0,1].
Obliczanie współrzędnej (x lub y) stycznej do krzywej w danym punkcie int curvetangent(int a, int b, int c, int d, float t); gdzie a, b, c, d współrzędne (x lub y) kolejnych punktów kontrolnych, t wartość parametru, dla którego określamy styczną do krzywej, liczba z [0,1].
1 size(200, 200); 2 nofill(); 3 smooth(); 4 5 curve(100, 40, 100, 60, 150, 60, 230, -80); 6 7 beginshape(); 8 curvevertex(20, 180); 9 curvevertex(50, 100); 10 curvevertex(80, 120); 11 curvevertex(110, 150); 12 curvevertex(130, 130); 13 curvevertex(140, 90); 14 curvevertex(170, 120); 15 endshape();
Podstawowe transformacje 2D Translacja void translate(int x, int y); void translate(float x, float y); x, y współrzędne wektora translacji.
Podstawowe transformacje 2D Translacja void translate(int x, int y); void translate(float x, float y); x, y współrzędne wektora translacji. Rotacja wokół początku układu współrzędnych void rotate(float k); k kąt obrotu (w radianach).
Skalowanie void scale(float s); void scale(float sx, float sy); s współczynnik skali w obu kierunkach, sx współczynnik skali w kierunku x, sy współczynnik skali w kierunku y.
Skalowanie void scale(float s); void scale(float sx, float sy); s współczynnik skali w obu kierunkach, sx współczynnik skali w kierunku x, sy współczynnik skali w kierunku y. Ścinanie void shearx(float kx); void sheary(float ky); kx kąt (w radianach) ścięcia wokół osi x, ky kąt (w radianach) ścięcia wokół osi y.
Macierze przekształceń i operacje na ich stosie Wypisanie aktualnej macierzy przekształcenia void printmatrix();
Macierze przekształceń i operacje na ich stosie Wypisanie aktualnej macierzy przekształcenia void printmatrix(); Ustawienie macierzy identyczności (resetowanie macierzy przekształcenia) void resetmatrix();
Macierze przekształceń i operacje na ich stosie Wypisanie aktualnej macierzy przekształcenia void printmatrix(); Ustawienie macierzy identyczności (resetowanie macierzy przekształcenia) void resetmatrix(); Wymnożenie bieżącej macierzy przekształcenia przez podaną macierz void applymatrix(float n00, float n01, float n02, float n10, float n11, float n12); n00-n12 współczynniki macierzy (podawane wierszowo).
Umieszczenie bieżącej macierzy przekształceń na stosie void pushmatrix();
Umieszczenie bieżącej macierzy przekształceń na stosie void pushmatrix(); Zdjęcie macierzy ze szczytu stosu i ustawienie jej jako bieżącej macierzy przekształcenia void popmatrix();
1 size(100, 100); 2 3 fill(255, 0, 0); // czerwony 4 rect(0, 0, 50, 50); 5 6 pushmatrix(); 7 translate(40, 40); 8 fill(0, 255, 0); // zielony 9 rect(0, 0, 50, 50); 10 11 translate(10, 0); 12 fill(255, 255, 0); // zolty 13 rect(0, 0, 20, 20); 14 popmatrix(); 15 16 fill(0, 0, 255); // niebieski 17 rect(0, 0, 20, 20); 18 19 translate(40, 0); 20 fill(255, 0, 255); // rozowy 21 rect(0, 0, 20, 20);