Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Canvas] Nachylenie lini złożonej z obrazków
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
markuz
Witam,

Posiadam kolejny i już ostatni problem do rozwiązania. Jako iż matematyka nie jest moją najmocniejszą stroną zwracam się do Was o radę.
Mam linię którą chce narysowac za pomocą obrazków. Linia posiada x1, y1, x2, y2.

Na podstawie współrzędnych obliczam długość wektora:
[JAVASCRIPT] pobierz, plaintext
  1. Math.round(Math.sqrt(Math.pow(x1 - x2,2) + Math.pow(y1 - y2,2)))
[JAVASCRIPT] pobierz, plaintext

Dzięki czemu wiem ile obrazków ma znajdować się w danej lini.
Nastepnie za pomocą petli rysuje te obrazki:
[JAVASCRIPT] pobierz, plaintext
  1. for(var d = 0; d < Math.round(length/ribbon_size); d++) {
  2. canvas.drawImage(this, line.x1 + (d * ribbon_size), line.y1 - Math.round(ribbon_size/2), ribbon_size, ribbon_size);
  3. }
[JAVASCRIPT] pobierz, plaintext


Problem polega na tym, że niektóre linie są ustawione pod różnym katem. Wiem, że do tego słuzy funkcja:
[JAVASCRIPT] pobierz, plaintext
  1. canvas.rotate(radians);
[JAVASCRIPT] pobierz, plaintext

Znalazłem skrypt który na podstawie współrzędnych oblicza kąt (w radianach):
[JAVASCRIPT] pobierz, plaintext
  1. Math.atan2(-(line.y2 - line.y1), (line.x2 - line.x1))
[JAVASCRIPT] pobierz, plaintext


Po połączeniu wszystkiego:
[JAVASCRIPT] pobierz, plaintext
  1. var length = Math.round(Math.sqrt(Math.pow(line.x1 - line.x2,2) + Math.pow(line.y1 - line.y2,2)));
  2. var theta = Math.atan2(-(line.y2 - line.y1), (line.x2 - line.x1));
  3. canvas.save();
  4. canvas.rotate(theta);
  5. for(var d = 0; d < Math.round(length/ribbon_size); d++) {
  6. canvas.drawImage(this, line.x1 + (d * ribbon_size), line.y1 - Math.round(ribbon_size/2), ribbon_size, ribbon_size);
  7. }
  8. canvas.restore();
[JAVASCRIPT] pobierz, plaintext


Rysowane są tylko linie poziome, reszty nie widac na canvas.
Ma ktoś jakiś pomysl?

Edit. Problem może tkwić w punkcie według którego jest nachylana dana linia. tzn. canvas.translate(x, y); Aczkolwiek nadal nie wiem dokładnie ocb.
trueblue
Przyda się? http://www.p01.org/releases/Drawing_lines_in_JavaScript/
markuz
Raczej nie. W podanym linku rysuje gość linie, bez tła i to w czystym HTML. Znalazłem coś podobnego: http://jsfiddle.net/m1erickson/R278u/, ale to nadal nie to samo - chociaz będę kombinował.

Gotowe rozwiązanie:

kod: http://jsfiddle.net/bb6D2/
podgląd: http://jsfiddle.net/bb6D2/show/

Dzisiaj dopisałem rysowanie tła z obrazków na podstawie krzywej Bezier'a, może komuś się przyda:
http://jsfiddle.net/pNSLT/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.