Jak napisać taki program? (motyw z Matrixa)


(Patka668) #1

Witam wszystkich zmagam się z napisaniem programu, który po włączeniu stworzy taka animację. Jestem początkująca programistka i nie wiem czy to jest w ogóle wykonalne, a jeśli tak to czy dam radę napisać to w C++? Jeśli tak to czy ma ktoś jakiś pomysł na ten program?


(pionner) #2

Zapewne potrzebny by był algorytm, który klatka po klatce wykrywa krawędzie w filmie, a następnie odpowiednio podstawia te znaki. Jest to jak najbardziej do zrobienia, ale wątpię, żeby początkujący programista podołał takiemu zadaniu.


(nic ciekawego) #3



w komentarzach masz opisane w jaki sposób uzyskano ten efekt, nawet VLC ma opcję wyświetlania filmu w ASCII. Na androida jest aplikacja która przechwytuję obraz z aparatu i zmienia na znaki. Opcji jest masa. Jeszcze coś online http://www.kickjs.org/example/video_ascii_art/Video_Ascii_Art.html. Może coś wydedukujesz :wink:


(Patka668) #4

Zastanawiałam się czy mogę w jakiś sposób przekształcić kod z Matrixa , żeby wypisał mi taką animację. Czy w ten sposób dam radę to zrobić?


(hindus) #5

Zadając takie pytanie myślę, że mogę śmiało odpowiedzieć - nie dasz rady tego zrobić. Nie teraz, nie dopóki nie zrozumiesz jak działa dokładnie przekształcanie bitmapy na tekst ASCII. Najważniejsza różnica?
Kod który podesłałaś wypisuje po prostu losowe ciągi literek "jak w Matrixie"
Wideo w ASCII nie polegają na losowym doborze literek, tylko takim, żeby zgadzała się jasność pojedynczego piksela. Czyli algorytm (wymyślony na szybko) mógłby działać w ten sposób, że przygotowujemy sobie tablicę znaków posortowanych w kolejności od takiego który zajmuje najmniej pikseli powierzchni na ekranie (spacja = brak białych pikseli) do takiego który zajmuje najwięcej (pewnie to będzie #). Resztę liter przypisujemy pomiędzy tymi znakami zależnie od zajmowanej przez nie przestrzeni.
Następnie idziemy zgodnie z krokami:

  1. Pobierz bitmapę - kolejną klatkę filmu
  2. Dopasuj jej rozdzielczość do rozdzielczości (w znakach) na ekranie
  3. Zamień obraz na czarno biały i dla każdego piksela:
    a) pobierz znak zgodnie z jasnością.
    b) Wypisz na ekranie wybrany znak

(pocolog) #6

Moim zdaniem taki obraz byłby nadal mało czytelny. Lepiej byłoby obniżyć rozdzielczość obrazka do x*8, a następnie każdy układ pikseli 8x8 dopasowywać do najbardziej podobnej litery. To faktycznie ma mało wspólnego z losowaniem znaków rand-em :smiley: