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:
Math.round(Math.sqrt(Math.pow(x1 - x2,2) + Math.pow(y1 - y2,2)))
Dzięki czemu wiem ile obrazków ma znajdować się w danej lini.
Nastepnie za pomocą petli rysuje te obrazki:
for(var d = 0; d < Math.round(length/ribbon_size); d++) { canvas.drawImage(this, line.x1 + (d * ribbon_size), line.y1 - Math.round(ribbon_size/2), ribbon_size, ribbon_size); }
Problem polega na tym, że niektóre linie są ustawione pod różnym katem. Wiem, że do tego słuzy funkcja:
canvas.rotate(radians);
Znalazłem skrypt który na podstawie współrzędnych oblicza kąt (w radianach):
Math.atan2(-(line.y2 - line.y1), (line.x2 - line.x1))
Po połączeniu wszystkiego:
var length = Math.round(Math.sqrt(Math.pow(line.x1 - line.x2,2) + Math.pow(line.y1 - line.y2,2))); var theta = Math.atan2(-(line.y2 - line.y1), (line.x2 - line.x1)); canvas.save(); canvas.rotate(theta); for(var d = 0; d < Math.round(length/ribbon_size); d++) { canvas.drawImage(this, line.x1 + (d * ribbon_size), line.y1 - Math.round(ribbon_size/2), ribbon_size, ribbon_size); } canvas.restore();
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.