• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program rysujący gwiazde (JS+CANVAS) - wyjasnienie dziłania

Object Storage Arubacloud
+2 głosów
1,240 wizyt
pytanie zadane 30 stycznia 2016 w JavaScript przez MlodyJavaS Użytkownik (500 p.)
function RysujGwiazde(cx, cy, ilosc_rogow, zewnetrzny_promien, wewnetrzny_promien) {
                var ctx = document.getElementById("my_canvas").getContext('2d');

                var rot = Math.PI / 2 * 3;
                
                var x = cx;
                
                var y = cy;
                var step = Math.PI / ilosc_rogow;
                

                ctx.strokeSyle = "#000";
                ctx.beginPath();
                ctx.moveTo(cx, cy - zewnetrzny_promien);
                for (i = 0; i < ilosc_rogow; i++) {
                    x = cx + Math.cos(rot) * zewnetrzny_promien;
                    y = cy + Math.sin(rot) * zewnetrzny_promien;
                    ctx.lineTo(x, y);
                    rot = rot + step;

                    x = cx + Math.cos(rot) * wewnetrzny_promien;
                    y = cy + Math.sin(rot) * wewnetrzny_promien;
                    ctx.lineTo(x, y);
                    rot = rot + step;
                }
                ctx.lineTo(cx, cy - zewnetrzny_promien);
                ctx.closePath();
                ctx.lineWidth = 5;
                ctx.strokeStyle = '#f2ac31';
                ctx.stroke();
                ctx.fillStyle = 'yellow';
                ctx.fill();

            }
 RysujGwiazde(100,100,5,10,30);

Prosze o wyjasnienie dziłania tego programu, został on lekko zmodyfikowany (zrodlo stackoverflow)

 

1 odpowiedź

+2 głosów
odpowiedź 30 stycznia 2016 przez Comandeer Guru (601,550 p.)
function RysujGwiazde(cx, cy, ilosc_rogow, zewnetrzny_promien, wewnetrzny_promien) {
	var ctx = document.getElementById("my_canvas").getContext('2d'); // pobieramy kontekst canvas do rysowania

	var rot = Math.PI / 2 * 3; // kąt rozwarcia gwiazdy (?)

	var x = cx; // punkt początkowy na osi X (ctx służy jako układ współrzędnych)

	var y = cy; // punkt początkowy na osi Y
	var step = Math.PI / ilosc_rogow; // co ile ma być kolejny czubek

	ctx.strokeSyle = "#000"; // jaki kolor ma mieć kontur
	ctx.beginPath(); // zaczęcie rysowania (rozpoczęcie ścieżki)
	ctx.moveTo(cx, cy - zewnetrzny_promien); // narysowanie pierwszej linii
	// cała pętla to rysowanie poszczególnych czubków – de facto czysta matematyka
	for (i = 0; i < ilosc_rogow; i++) {
		x = cx + Math.cos(rot) * zewnetrzny_promien;
		y = cy + Math.sin(rot) * zewnetrzny_promien;
		ctx.lineTo(x, y);
		rot = rot + step;
 
		x = cx + Math.cos(rot) * wewnetrzny_promien;
		y = cy + Math.sin(rot) * wewnetrzny_promien;
		ctx.lineTo(x, y);
		rot = rot + step;
	}
	ctx.lineTo(cx, cy - zewnetrzny_promien); // narysowanie ostatniej linii…
	ctx.closePath(); // …i zakończenie rysowania (zamknięcie ścieżki)
	ctx.lineWidth = 5; // ustawienie nowej grubości linii…
	ctx.strokeStyle = '#f2ac31'; // …i jej koloru
	ctx.stroke(); // narysowanie jej
	ctx.fillStyle = 'yellow'; // ustawienie koloru wypełnienia
	ctx.fill(); // wypełnienie przygotowanego konturu
 
}

W sumie to jest głównie matematyka, nie JS ;)

komentarz 30 stycznia 2016 przez MlodyJavaS Użytkownik (500 p.)
Dzieki bardzo, a dalbys rade pomoc mi w animacji tej gwiazdy ?

Potrzebuje zeby krecila sie wzgledem swojego srodka.
komentarz 30 stycznia 2016 przez Comandeer Guru (601,550 p.)

Bardzo dawno nic nie pisałem na canvas, więc średnio… Zresztą: tu trzeba dużo liczyć ;) Nie wiem, czy nie szybciej byłoby Ci to zrobić na SVG + CSS. Jeśli jednak chcesz na canvas, to zapoznaj się z requestAnimationFrame.

Podobne pytania

0 głosów
1 odpowiedź 253 wizyt
pytanie zadane 22 października 2019 w JavaScript przez DeaDHanter Nowicjusz (210 p.)
+1 głos
1 odpowiedź 639 wizyt
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 12 lipca 2018 w JavaScript przez Gapcio Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...