Processing 2 - Uniwersytet Śląski
Transkrypt
Processing 2 - Uniwersytet Śląski
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 2 3 size(200, 200); noFill(); smooth(); 4 5 bezier(10, 10, 50, 100, 70, 80, 150, 20); 6 7 8 9 10 11 beginShape(); vertex(20, 180); bezierVertex(50, 100, 80, 120, 130, 150); bezierVertex(150, 130, 170, 90, 190, 120); 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, punktów kontrolnych. x3, y3, x4, y4 – współrzędne kolejnych 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, punktów kontrolnych. x3, y3, x4, y4 – współrzędne kolejnych 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 parametrów). beginShape i endShape (wywołane bez 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 2 3 size(200, 200); noFill(); smooth(); 4 5 curve(100, 40, 100, 60, 150, 60, 230, -80); 6 7 8 9 10 11 12 13 14 15 beginShape(); curveVertex(20, 180); curveVertex(50, 100); curveVertex(80, 120); curveVertex(110, 150); curveVertex(130, 130); curveVertex(140, 90); curveVertex(170, 120); 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); – współczynnik skali w obu kierunkach, sx – współczynnik skali w kierunku x, sy – współczynnik skali w kierunku y . s Skalowanie void scale(float s); void scale(float sx, float sy); – współczynnik skali w obu kierunkach, sx – współczynnik skali w kierunku x, sy – współczynnik skali w kierunku y . s Ścinanie void shearX(float kx); void shearY(float ky); kx – kąt (w radianach) ścięcia wokół osi x, ścięcia wokół osi y . ky – kąt (w radianach) 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 4 fill(255, 0, 0); // czerwony rect(0, 0, 50, 50); 5 6 7 8 9 pushMatrix(); translate(40, 40); fill(0, 255, 0); // zielony rect(0, 0, 50, 50); 10 11 12 13 14 translate(10, 0); fill(255, 255, 0); // zolty rect(0, 0, 20, 20); popMatrix(); 15 16 17 fill(0, 0, 255); // niebieski rect(0, 0, 20, 20); 18 19 20 21 translate(40, 0); fill(255, 0, 255); // rozowy rect(0, 0, 20, 20);