Spisu treści:

Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga): 8 kroków
Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga): 8 kroków

Wideo: Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga): 8 kroków

Wideo: Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga): 8 kroków
Wideo: Poczuj przepływ energii dostatku. Zrób ćwiczenie i medytację, by wejść w wibrację obfitości. 2024, Czerwiec
Anonim
Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga)
Interesujące wskazówki dotyczące programowania dla projektanta - uruchom swoje zdjęcie (część druga)

Matematyka dla większości z was wydaje się bezużyteczna. Najczęściej używane w naszym codziennym życiu to po prostu dodawanie, odejmowanie, mnożenie i dzielenie. Jednak jest zupełnie inaczej, jeśli możesz tworzyć za pomocą programu. Im więcej wiesz, tym lepszy wynik uzyskasz.

Krok 1: ruch i funkcja

Pokażę Ci kilka nieznanych zdjęć, które pobudzą Twój gust.

Co to jest? Teraz po prostu zachowaj to pytanie jako pierwsze, a drugie będziesz je znać i używać.

W ostatnim rozdziale nauczyliśmy się konfiguracji funkcji i rysowania funkcji, co może sprawić, że statyczna grafika stanie się dynamiczna. Jednak ten format ruchu jest zbyt prosty. Wykorzystamy wiedzę o funkcjach, którą opanowaliśmy wcześniej, aby uruchomić naszą grafikę z własnym charakterem.

Ile funkcji możesz rozpoznać na powyższych zdjęciach? Jaki mają związek z ruchem? Teraz weźmy z niej funkcję kwadratową, dodajmy losowo kilka parametrów i zobaczmy, co się stanie. Na przykład y = x² / 100.

Tak wygląda obraz funkcji. Skopiuj poniższy kod.

[cceN_cpp theme="świt"] float x, y; void setup(){ size(300, 300); tło(0); x = 0; } void draw(){ stroke(255); obrysWaga(2); y = pow(x, 2) / 100,0; //Funkcja pow powróci do n-tej potęgi liczby oznaczenia. (x, 2) reprezentuje kwadrat x. Pierwszym parametrem jest liczba podstawowa, a drugim indeks. punkt(x, y); x++; } [/cceN_cpp]

Efekt biegania

Następnie wybierz funkcję sin. Wzór: y = 150 + sin(x).

Skopiuj następujący kod.

[cceN_cpp theme="świt"] float x, y; void setup(){ size(300, 300); tło(0); x = 0; } void draw(){ y = wysokość/2 + sin(radiany(x)) * 150; //Funkcja radian przekształca x na kąt. x++; udar (255); obrysWaga(2); punkt(x, y); } [/cceN_cpp]

Efekt biegania

Taką grafikę otrzymujemy po operowaniu kodem. I to są ich ślady ruchu. W porównaniu do poprzedniego wynik jest oczywisty. Obraz funkcji w rzeczywistości odpowiada torze ruchu! To dość proste. Musisz tylko zamienić wartość x, y na współrzędne. Pierwsza ścieżka, którą narysowaliśmy, jest równoważna grafice funkcji y = x²/100. Druga ścieżka jest równoważna grafice funkcji y = 150 + sin(x). Ale w programie kierunek osi y jest przeciwny. Tak więc, w porównaniu z oryginalną grafiką, tor będzie do góry nogami. Teraz chyba musisz mieć wrażenie, że niektóre trudne pytania, które od dawna dręczą Cie w głowie, są rozwiązywane natychmiast. To niesamowite, że te fantastyczne funkcje, których nauczyliśmy się wcześniej, można wykorzystać do sterowania ruchem grafiki!

Krok 2: funkcja pisania

Poniżej wymieniłem kilka często używanych funkcji. Mam nadzieję, że pomogą nam one przetłumaczyć funkcje na kod rozpoznawalny przez komputer.

Dlatego poniższy wzór w programie należy zapisać w następujący sposób:

y = x² → y = pow(x, 2) lub y = sq(x)

y = x³ → y = pow(x, 3)

y = xⁿ → y = pow(x, n)

y = 4ⁿ → y = pow(4, n)

y =logₑ² → y = log(2)

y = e² → y = exp(2)

y = √5 → y = sqrt(5)

Możesz także losowo zapisać funkcję do programu i zobaczyć, jak będzie wyglądać jej ścieżka ruchu. Pamiętaj, aby wziąć pod uwagę zakres pola wartości i domenę definicji, w przeciwnym razie grafika zniknie z ekranu.

Funkcja trygonometryczna

Przejdźmy teraz dalej, aby poznać niektóre zapisy funkcji trygonometrycznych.

Należy zwrócić uwagę, że w programie jako wejście parametru funkcji względem kąta przyjmuje się radiany. W ten sposób sin90° zostanie zapisane w sin(PI/2). Jeśli nie znasz tej metody, możesz użyć funkcji randian, aby wcześniej przekształcić kąt na radiany, a następnie napisać sin(radians(90)).

Użycie stopni funkcji jest stosunkowo odwrotne. Potrafi przekształcić radian w kąt. Wprowadź print(stopnie(PI/2)) bezpośrednio do pola edycji i zobacz, co otrzymasz.

Krok 3: Kontroluj ruch graficzny za pomocą funkcji trygonometrycznej

Oto przypadek, w którym możesz zobaczyć rzeczywisty efekt ruchu grafiki.

[cceN_cpp theme="świt"] float x, y; void setup(){ size(700, 300); } void draw(){ background(234, 113, 107); y = sin(radiany(x)) * 150 + 150; x++; noStroke(); elipsa(x, y, 50, 50); } [/cceN_cpp]

Funkcja grzech jest funkcją okresową. Jego minimalna wartość to -1, a maksymalna to 1. Wysokość ekranu to 300. W odniesieniu do y = sin(radiany(x)) * 150 + 150, dlatego zakres zmian wartości y będzie dobrze kontrolowany w granicach 0 do 300.

Kręcące się koło

Cóż, w końcu doszliśmy do najważniejszej części tego rozdziału. Jak narysować ścieżkę okręgu w programie? Jak korzystać z funkcji, aby to wyświetlić? Pokażę wam jeszcze raz dwa zdjęcia, które widzieliśmy na początku tego artykułu.

W rzeczywistości wizualnie ujawnili związek między współrzędną obwodu a funkcją trygonometryczną. Ruch na powyższych rysunkach napędzany jest stale rosnącą zmienną niezależną θ. Po lewej stronie znajduje się obraz funkcji sin i cos, a po prawej punkt wykonujący ruch okrężny po zmapowaniu. Czy to nie jest bardzo mądre? To już nie jest tajemnicze. Możesz użyć kodu, aby to zrealizować.

Prosty przykład:

[cceN_cpp theme="świt"] float x, y, r, R, kąt; void setup(){ size(300, 300); r = 20; //Średnica okręgu R = 100; //Promień ścieżki ruchu x = 0; kąt = 0; y = wysokość/2; } void draw(){ background(234, 113, 107); przetłumacz(szerokość/2, wysokość/2); //Przenieś oryginalny punkt na środek ekranu. noStroke(); x = R * cos(kąt); y = R * sin(kąt); elipsa(x,y,r,r); kąt += 0,05; } [/cceN_cpp]

Wyglądać! Pojawia się wirujący okrąg! Tutaj zmienna niezależna nie jest już w stałym wzroście bitu, stając się kątem (równe θ na rysunku). To oznacza kąt. Wśród nich xy mają stosunkowo pomnożony współczynnik R, co prowadzi do wydłużenia promienia ruchu okręgu (R oznacza promień). Jeśli nie ma mnożyć R, jego droga ruchu będzie ograniczona w zakresie od -1 do 1.

Dlaczego nie użyć rosnącego x? Zgodnie z właściwością samej funkcji, dowolny x w domenie definicji ma jedyne y, które do niego pasuje. Tak więc w płaskim układzie współrzędnych wymiaru prostokątnego nie można znaleźć „prostej funkcji” do bezpośredniego rysowania okręgu. Oznacza to, że nie możemy już używać tego formatu.

y = (Nieznane wyrażenie x?);

x++;

Więc musimy zmienić nasz pomysł. Wybierz inny kąt jako zmienną niezależną, a następnie użyj funkcji sin i cos, aby przekształcić go we współrzędną poziomą i pionową.

x = R * cos(kąt);

y = R * sin(kąt);

kąt += 0,05;

Niektórzy z was mogą się zastanawiać, dlaczego może wyświetlać ścieżkę ruchu koła. Zgodnie z definicją funkcji trygonometrycznej możemy łatwo wytłumaczyć tę funkcję jako stosunek strony przeciwnej do przeciwprostokątnej; funkcja cos jest stosunkiem przyprostokątnej do przeciwprostokątnej. Bez względu na to, gdzie znajduje się punkt okręgu, r (promień) pozostanie niezmieniony. Dlatego możemy wywnioskować wyrażenie współrzędnej x i współrzędnej y.

Ponieważ nie jest to wskazówka matematyczna, przestanę pokazywać Ci więcej wiedzy na temat funkcji trygonometrycznych. Jeśli chcecie to wiedzieć lub po prostu o tym zapomnicie, możecie spróbować ponownie przejrzeć to sami.

Oczywiście wszystko jest w porządku, jeśli nie możesz tego w pełni zrozumieć. Musisz tylko wiedzieć, jak go używać, aby narysować okrąg. To też jest rodzaj „pomysłu programistycznego”. Później często będziemy odwoływać się do niektórych istniejących modułów wykonanych przez innych, aby zrealizować określony rodzaj funkcji. Tylko nie zmuszaj się do szczegółowego poznania tego.

Jednak funkcje sin i cos są wspólne. Jeśli chcesz tworzyć kreacje na wyższym poziomie, lepiej postaraj się to dokładnie poznać. Jeśli samo to pytanie może skłonić nas do zdobycia większej wiedzy matematycznej, czekają na ciebie ciekawsze rzeczy.

Są to obrazy ściśle związane z funkcją trygonometryczną.

Krok 4: Układ współrzędnych ruchu

Wszystkie poprzednie efekty dotyczą graficznych zmian współrzędnych. Sam układ współrzędnych jest statyczny. Właściwie możemy przesunąć współrzędną, aby zrealizować efekt ruchu. To tak, jakby ludzie na plaży obserwowali innych ludzi w łodzi. Dla osób na łodzi łódź jest statyczna. Ale co, jeśli sama łódź się porusza, to ludzie w łodzi poruszają się razem z nią. Pierwsze przypadki dotyczą „ludzi biegających na łodzi”. Właściwie łódź się nie porusza. Poniżej przedstawiono niektóre typowe funkcje zmiany układu współrzędnych.

Funkcja tłumaczenia

Funkcja translate, o której mówiliśmy wcześniej, służy do przesuwania układu współrzędnych grafiki w poziomie.

Wywołaj format:

przetłumacz(a, b)

Pierwszy parametr oznacza ruch w kierunku dodatnim osi x dla pikseli. Drugi parametr oznacza ruch w kierunku dodatnim osi y dla pikseli b.

Porównaj dwa kody i spróbuj znaleźć różnicę. (Aby uprościć kod, możemy usunąć rozmiar funkcji, szerokość i wysokość ekranu są domyślnie ustawione na 100.)

Zanim użyjemy:

elipsa (0, 0, 20, 20);

Po użyciu:

przetłumacz (50, 50);

elipsa (0, 0, 20, 20);

Funkcja obracania

Wywołaj format:

obracać(a)

Służy do obracania układu współrzędnych. Gdy parametr jest dodatni, wybierze oryginalny punkt jako punkt środkowy i obróci się w kierunku zgodnym z ruchem wskazówek zegara. Wprowadzanie parametrów jest takie samo jak funkcja trygonometryczna do używania radianów.

Przed użyciem:

elipsa (50, 50, 20, 20);

Po użyciu:

obróć(radiany(30));

elipsa (50, 50, 20, 20);

Efekt w programie polega na tym, że okrąg obraca się wokół punktu środkowego współrzędnych w kierunku zgodnym z ruchem wskazówek zegara o 30 stopni.

Skala funkcji

Wywołaj format:

skala(a)

Ta funkcja może pomniejszyć układ współrzędnych. Wartość dotyczy skalowania. Gdy parametr przekracza 1, powiększ; jeśli jest mniejszy niż 1, pomniejsz.

Przed użyciem:

elipsa (0, 0, 20, 20);

Po użyciu:

skala(4);

elipsa (0, 0, 20, 20);

Okrąg na powyższym obrazku jest czterokrotnie powiększony w stosunku do pierwotnego rozmiaru. Możesz także użyć dwóch parametrów, aby osobno pomniejszyć kierunki osi x i osi y.

skala(4, 2);

elipsa (0, 0, 20, 20);

Superpozycja funkcji transformacji

Tutaj superpozycja dotyczy zmian w stosunku do obecnego układu współrzędnych. Innymi słowy, efekty mogą się nakładać.

przetłumacz(40, 10);

przetłumacz(10, 40);

elipsa (0, 0, 20, 20);

Jego efekt końcowy będzie równy

przetłumacz (50, 50);

elipsa (0, 0, 20, 20);

To samo, co funkcja obracania

obróć(radiany(10));

obróć(radiany(20));

elipsa (50, 50, 20, 20);

Równa

obróć(radiany(30));

elipsa (50, 50, 20, 20);

Zarówno funkcja skalowania, jak i obracania centruje się na oryginalnym punkcie, aby skalować i obracać. Jeśli chcemy uzyskać efekt rotacji z centralną pozycją (50, 50), musimy myśleć w odwrotny sposób. Najpierw przesuń oryginalny punkt do pozycji (50, 50), a następnie dodaj funkcję transformacji obrotowej. Na koniec namaluj swoją grafikę na oryginalnym punkcie.

Przed użyciem:

elipsa (50, 50, 50, 20);

Po użyciu:

przetłumacz (50, 50);

obróć(radiany(45));

elipsa (0, 0, 50, 20); //Aby zobaczyć zmianę kąta obrotu, stworzyliśmy owal.

To może wydawać się kręte. Po prostu musisz więcej ćwiczyć, wtedy to zrozumiesz. (Możesz również spróbować zmienić kolejność funkcji przetłumacz i obróć, aby zobaczyć różnicę.)

Ruch poziomy i ruch kołowy

W poniższych przypadkach będziemy realizować efekt ruchu poprzez zmianę układu współrzędnych. Jednocześnie chciałbym prosić o odniesienie się do przykładu z poprzedniego rozdziału. W większości przypadków, aby uzyskać pewien efekt, można użyć zupełnie innej metody.

Krok 5: Ruch poziomy

[cceN_cpp theme="świt"]

int x, y; void setup(){ size(300, 300); x = 0; y = wysokość/2; } void draw(){ background(234, 113, 107); noStroke(); przetłumacz(x, y); elipsa (0, 0, 50, 50); x++; } [/cceN_cpp]

Współrzędna okręgu nie ulega zmianie, ale zmienia się jej układ współrzędnych.

Ruch obrotowy

[cceN_cpp theme="świt"] float r, R, kąt; void setup(){ size(300, 300); r = 20; //Wymiar okręgu R = 100; //Promień ścieżki ruchu } void draw(){ background(234, 113, 107); przetłumacz(szerokość/2, wysokość/2); //Przenieś oryginalny punkt do środka ekranu. obróć(kąt); noStroke(); elipsa (0, R, r, r); kąt += 0,05; } [/cceN_cpp]

Czy nie jest to o wiele bardziej przejrzyste i prostsze niż funkcja trygonometryczna? Możesz mieć tutaj pytanie. Weźmy na przykład kod rotacyjny. Oczywiście powyższa funkcja transformacji jest względna i umożliwia nakładanie się. Jeśli do funkcji rysowania napiszemy translate(szerokość/2, wysokość/2), nie oznacza to, że za każdym razem, gdy rysowana funkcja działa raz, układ współrzędnych przesunie się o odległość w prawym dolnym kierunku od pierwotnej podstawy? Rozsądnie nie pozostanie w centrum ekranu na zawsze.

Możesz zrozumieć w ten sposób. Gdy kod w funkcji rysowania zakończy operację od dołu do dołu, układ współrzędnych powróci do stanu początkowego przy drugiej operacji. Oryginalny punkt układu współrzędnych będzie domyślnie powracał do lewego górnego rogu. Jeśli więc chcemy, aby układ współrzędnych zmieniał się w sposób ciągły, parametry kąta w funkcji obracania powinny stale zwiększać jego wartość.

Dostęp do statusu współrzędnych

Czasami nie chcemy, aby zmiana stanu układu współrzędnych była oparta na poprzednim. W tym momencie musimy użyć funkcji pushMatrix i popMatrix. Te dwie funkcje zwykle występują w parze. Funkcja pushMatrix jest przed popMatrix. Nie można ich używać wyłącznie, inaczej pójdzie nie tak.

Przykład:

[cceN_cpp theme="świt"] pushMatrix(); //Zapisz status układu współrzędnych translate(50, 50); elipsa (0, 0, 20, 20); popMatrix(); //Odczytaj status układu współrzędnych rect(0, 0, 20, 20); [/cceN_cpp]

W tym przykładzie, przed użyciem translate(50, 50), używamy funkcji pushMatrix. do przechowywania aktualnego stanu układu współrzędnych. Jest to jednocześnie stan początkowy. Gdy narysujemy okrąg, a następnie zaimplementujemy popMatrix, wróci on do tego stanu. W tym momencie zaimplementuj funkcję rect, przekonasz się, że nie ucierpiała ona od wpływu funkcji translate zamiast tego rysuje kwadrat w lewym górnym rogu oryginalnego punktu.

Poza tym funkcje pushMatrix i popMatrix umożliwiają zagnieżdżanie.

Na przykład

pushMatrix();

pushMatrix();

popMatrix();

popMatrix();

Aby intuicyjnie pokazać jej związek, wybieramy format skondensowany.

Ruch łączony czy ruch w ruchu?

Teraz zaczyna się druga fala ważnej części. Po prostu spróbuj iść do przodu. Wcześniej używaliśmy metafory łodzi i ludzi. Czy zastanawiałeś się kiedyś, co jeśli sprawimy, że zarówno ludzie, jak i łódź się poruszą, jakie odczucia będą mieli ludzie na plaży?

Jak połączyć ruch poziomy z ruchem obrotowym układu współrzędnych. Chodzi o to, aby poruszać się tylko w jednym kierunku.

[cceN_cpp theme="świt"] int x, y; kąt pływania; void setup(){ size(300, 300); tło (234, 113, 107); noStroke(); x = 0; //Gdy początkowa wartość x wynosi 0, możemy pominąć to zdanie kodu. Podczas deklarowania zmiennej domyślną wartością jest 0. y = 0; //Tak samo jak powyżej. kąt = 0; //Tak samo jak powyżej. } void draw(){ kąt += 0,25; y--; przetłumacz(szerokość/2, wysokość/2); pushMatrix(); obróć(kąt); elipsa(x, y, 5, 5); popMatrix(); } [/cceN_cpp]

I jest ruch okrężny i skalowanie układu współrzędnych.

[cceN_cpp theme="świt"] float x, y, kąt; void setup(){ size(300, 300); tło (234, 113, 107); noStroke(); } void draw(){ kąt += 0,01; x = sin(kąt) * 100; y = cos(kąt) * 100; przetłumacz(szerokość / 2, wysokość / 2); pushMatrix(); skala (1 + 0,1 * grzech (kąt * 10)); elipsa(x, y, 5, 5); popMatrix(); } [/cceN_cpp]

Nie daj się oszukać! Okrąg faktycznie wykonuje ruch okrężny. Nietrudno to zrozumieć, jeśli porównamy to do skalowania kamerą wideo. Kamera wideo stale porusza się do przodu lub do tyłu, kręcąc punkt w ruchu kołowym.

Zaskoczony? To są proste podstawowe funkcje. Ale przy różnych kombinacjach możemy stworzyć tak wiele różnych efektów. Do tej pory moja ekspozycja ustaje, aby zostawić trochę miejsca na twoje eksploracje.

Krok 6: Kompleksowe użytkowanie

Niedługo dobiega końca dla tego rozdziału. W ostatnich dwóch rozdziałach przedstawiłem podstawową metodę ruchu graficznego. Wierzę, że możesz mieć głębsze zrozumienie tego w porównaniu do twoich początkowych pomysłów. Na koniec, oto gotowy przykład w celach informacyjnych.

[cceN_cpp theme="świt"] float x1, y1, x2, y2, r, R; kąt pływania1, kąt2; void setup(){ size(300, 300); r = 12; R = 120; kąt1 = 0; kąt2 = PI/4; } void draw(){ background(234, 113, 107); noStroke(); przetłumacz(szerokość / 2, wysokość / 2); kąt1 += 0,02; kąt2 += 0,06; x1 = R *sin(kąt1); y1 = R* cos(kąt1); x2 = R/2 *sin(kąt2); y2 = R/2 *cos(kąt2); elipsa(x1, y1, r/2, r/2); elipsa(x2, y2, r, r); elipsa(-x1, -y1, r/2, r/2); elipsa(-x2, -y2, r, r); elipsa(x1, -y1, r/2, r/2); elipsa(x2, -y2, r, r); elipsa(-x1, y1, r/2, r/2); elipsa(-x2, y2, r, r); udar (255); obrysWaga(3); linia(x1, y1, x2, y2); linia(-x1, -y1, -x2, -y2); linia(x1, -y1, x2, -y2); linia(-x1, y1, -x2, y2); } [/cceN_cpp]

Ten przykład nie zawiera żadnej wiedzy wykraczającej poza nasz poprzedni rozdział wprowadzony.

O jakie punkty pasuje? Które linie pasują? Też nie mogę tego rozgryźć. Ale pamiętam, że wywodzi się z małej części kodu.

Taka jest natura jego ruchu. Pozostałe linie to tylko efekt lustra. Jeśli będziesz postępować zgodnie z tymi wskazówkami, możesz stworzyć zaktualizowaną wersję i dodać kontroler do swojej grafiki, aby zmienić status ruchu grafiki w czasie rzeczywistym.

Interesujący punkt programowania polega na tym, że możesz projektować lub łączyć przepisy. Jednak to, jaki będzie ostateczny program, zależy od twoich umiejętności. Zazwyczaj projektanci mają potężną wyobraźnię graficzną. Możesz naszkicować obraz w głowie, a następnie spróbować przetłumaczyć go na kod. Możesz także zacząć od samego kodu i przepisów, projektować funkcje i zmienne według własnego uznania. Pamiętaj, że przetwarzanie to twój szkic, a kod to twoje pędzle! Po prostu swobodnie rozpylaj swoje pomysły!

Krok 7: KONIEC

Na koniec w naszym rozdziale wróćmy do pytania, które zachowaliśmy przez długi czas od początku. Jaki jest sens poświęcania tyle wysiłku na zrobienie zdjęcia za pomocą programu? Po zapoznaniu się z tym rozdziałem przekonasz się, że jest tak wiele metod gry, które czekają na odkrycie.

[cceN_cpp theme="świt"] float browX, earD, eyeD, faceD; void setup(){ size(500, 500); } void draw(){ background(200, 0, 0); browX = 150 + sin(liczba ramek / 30,0) *20; earD = 180 + grzech(liczba ramek / 10,0) *20; eyeD = 60 + sin(liczba ramek/30.0) *50; lica D = 300; obrysWaga(8); elipsa(175, 220, Ucho, UchoD); elipsa(szerokość - 175, 220, ucho, uchoD); rect(100, 100, faceD, faceD); linia(browX, 160, 220, 240); linia(szerokość-browX, 160, szerokość-220, 240); fill(random(255), random(255), random(255)); elipsa(175, 220, okoD, okoD); elipsa(szerokość-175, 220, okoD, okoD); wypełnić(255); punkt(szerokość/2, wysokość/2); trójkąt(170 - cos(liczba ramek / 10,0)* 20, 300 - sin(liczba ramek / 10,0) *20, szerokość - (170 + cos(liczba ramek / 10,0) *20), 300 + sin(liczba ramek / 10,0) * 20, 250, 350); } [/cceN_cpp]

Czy to nie magia dla dynamicznej grafiki? Tutaj nie pokazuję zbyt wielu przypadków. Możesz zaprojektować znacznie lepszy efekt niż ja. Zaletą rysowania za pomocą programu jest to, że możesz bawić się każdym pikselem. Ponieważ grafika nie jest bitmapą, każdy kluczowy punkt grafiki jest kontrolowany. Może realizować pewne efekty, których inne oprogramowanie nie może zrealizować.

Jeśli masz serce, które chce wszystko złamać i połączyć na nowo, program studiów bardzo Ci pomoże w realizacji tego pomysłu.

Ten artykuł pochodzi od projektantki Wenzy.

Krok 8: Odczyty względne:

Interesujące wskazówki dotyczące programowania dla projektanta - przetwarzanie początkowego dotyku

Interesujące wskazówki dotyczące programowania dla projektanta - stwórz swój pierwszy program do przetwarzania

Interesujące wskazówki dotyczące programowania dla projektanta - zrób zdjęcie (część pierwsza)

Jeśli masz jakieś pytania, możesz wysłać e-mail na adres [email protected].

Ten artykuł pochodzi z:

Zalecana: