Muszę wiedzieć, jak narysować wielokąty na płótnie. Bez używania jQuery lub czegoś podobnego.
javascript
css
html
canvas
CyanPrime
źródło
źródło
Odpowiedzi:
Utwórz ścieżkę za pomocą
moveTo
ilineTo
( demo na żywo ):źródło
z http://www.scienceprimer.com/drawing-regular-polygons-javascript-canvas :
Poniższy kod narysuje sześciokąt. Zmień liczbę boków, aby utworzyć różne regularne wielokąty.
źródło
cxt.save();
cxt.fillStyle = "#FF000";
cxt.fill();
cxt.restore();
Możesz wypełnić kształt.var angle = i * 2 * Math.PI / shape.currentSides + rotation
dodane do wartości cos i sin zadziałały dla mnie ... jeszcze raz dziękujęsin
icos
wywołaj i zmieńYcenter +
naYcenter -
w obu miejscach (pozostawiając to jako sumę, a nie różnicę wartości powoduje, że zaczyna się od punktu na dole powstałego kształtu). Nie jestem mądrym człowiekiem, jeśli chodzi o trygonometrię, więc bierz to z przymrużeniem oka; ale to osiągnęło to, co chciałem przynajmniej.źródło
for
metodę waniliową JavaScript . Ta jedna linia kodu tak bardzo uprościła sprawę. Zwykle używam jQuery,.each()
ale jego aplikacja jest znacznie mniej wszechstronna.var
, w powyższym kodzieitem
jest zanieczyszczenie globalnej przestrzeni nazw. Wszystko jest w jednej linii, co zmniejsza czytelność. Jeśli nie zależy Ci na czytelności, równie dobrze możesz usunąć nawiasy klamrowe.źródło
Oto funkcja, która obsługuje nawet rysowanie zgodnie z ruchem wskazówek zegara / przeciwnie do ruchu wskazówek zegara, dzięki której kontrolujesz wypełnienia za pomocą niezerowej reguły nawijania.
Oto pełny artykuł o tym, jak to działa i nie tylko.
źródło
Możesz użyć metody lineTo () tak samo jak: var objctx = canvas.getContext ('2d');
jeśli nie chcesz wypełniać wielokąta, użyj metody stroke () zamiast wypełnienia ()
Możesz również sprawdzić: http://www.authorcode.com/draw-and-fill-a-polygon-and-triangle-in-html5/
dzięki
źródło
Oprócz @canvastag użyj
while
pętli, którashift
moim zdaniem jest bardziej zwięzła:źródło
Aby utworzyć prosty sześciokąt bez potrzeby tworzenia pętli, wystarczy użyć funkcji beginPath (). Upewnij się, że plik canvas.getContext ('2d') jest równy ctx, jeśli nie, to nie zadziała.
Lubię też dodawać zmienną o nazwie czasy, której mogę użyć do skalowania obiektu, jeśli zajdzie taka potrzeba, ale nie muszę zmieniać każdej liczby.
źródło
Dla osób poszukujących regularnych wielokątów:
Posługiwać się:
źródło