Klasa StarPolygon
Klasa opisująca wielokąt (wielobok) gwiaździsty. Dziedziczy po Figure
.
Konstruktor
0 lub 4 argumenty.
var starpolygon = new StarPolygon()
. Przyjmuje punkt Point
P(0,0) stanowiący środek wielokąta, sides – liczba boków (wierzchołków) wielokąta = 0, k – co ile boków, r – promień okręgu opisanego na wielokącie = 0.0.
var starpolygon = new StarPolygon(new Point(x,y), sides, k, r)
. Przyjmuje punkt Point
stanowiący środek wielokąta, sides – liczba boków (wierzchołków) wielokąta, k – co ile wierzchołków, r – promień okręgu opisanego na wielokącie.
Właściwości
Właściwość | Opis | Wartość lub klasa obiektu | Wartość domyślna |
---|---|---|---|
points | tablica zawierająca punkty Point będącewierzchołkami wielokąta. Punkty wyznaczane są przez algorytm, chyba, że konstruktor jest wywołany bez argumentów. Punkty ułożone są w kolejności występowania na wielokącie. |
Array |
[] |
center | punkt Point wyznaczający środek wielokąta
|
Point |
– |
sides | liczba boków/wierzchołków wielokąta | liczba całkowita | – |
k | co ile wierzchołków | liczba całkowita 0 < k < sides – 1 | 0 |
r | promień okręgu opisanego na wielokącie | liczba rzeczywista | – |
Funkcje
Funkcja
draw()
:
– obliczana jest liczba występujących figur. Figur jest
tyle jaki jest największy wspólny dzielnik (sides, k).
– po
podzieleniu długości tabeli punktów przez liczbę figur otrzymujemy
liczbę elementów w każdej figurze.
– tworzymy nową tabelę
punktów, w której punkty ułożone są w kolejności wykreślania.
– wykreślamy tyle figur ile ich jest, każda figura zamknięta jest
poleceniem
closePath()
.
Typ zwracany | Nazwa | Opis | Przykład |
---|---|---|---|
StarPolygon |
deepclone() |
Tworzy głęboką kopię tego wielokąta. | Rysowanie wielokąta gwiaździstego |
Point |
barycenter() |
Zwraca punkt Point będący środkiem (ciężkości)tego wielokąta. |
|
void |
draw(context) |
Obliczana jest nowa tabela, która sortuje tabelę tak, że wierzchołki występują teraz w kolejności wykreślania. Odrysowuje ten wielokąt na kontekście context podanym jakoargument. |
Listing
// StarPolygon - wielokąt gwiaździsty // Liczba argumentów // 0 Tworzy wielokąt zerowy z jednym punktem P(0,0) i //promieniu (0,0) // 4 środek P(x,y), liczba boków, co ile, promień; var StarPolygon = function() { this.points = []; var len = arguments.length; if (len == 0) { this.center = new Point(0, 0);// środek wielokąta this.sides = 0;// liczba boków this.k = 0; // co ile wierzchołków this.r = 0; // promień okręgu opisanego this.points[0] = new Point(0.0, 0.0); } else if (len == 4) { this.center = new Point(arguments[0].x, arguments[0].y) this.sides = arguments[1];// liczba boków this.k = arguments[2] this.r = arguments[3];// promień okręgu opisanego this.points[0] = new Point(arguments[0].x + this.r, arguments[0].y); for (var i = 1; i < this.sides; i++) { this.points[i] = new Point(arguments[0].x + this.r * Math.cos(i * 2 * Math.PI / this.sides), arguments[0].y + this.r * Math.sin(i * 2 * Math.PI / this.sides)); } } }; StarPolygon.prototype = new Figure(); StarPolygon.prototype.deepclone = function() { var figure = new StarPolygon(); figure.globalAlpha = this.globalAplpha; figure.globalCompositeOperation = this.globalCompositeOperation; figure.strokeStyle = this.strokeStyle; figure.fillStyle = this.fillStyle; figure.shadowOffsetX = this.shadowOffsetX; figure.shadowOffsetY = this.shadowOffsetY; figure.shadowBlur = this.shadowBlur; figure.shadowColor = this.shadowColor; figure.lineWidth = this.lineWidth; figure.lineCap = this.lineCap; figure.lineJoin = this.lineJoin; figure.miterLimit = this.miterLimit; figure.lineDashOffset = this.lineDashOffset; figure.lineDashSegments = []; for (var i = 0; i < this.lineDashSegments.length; i++) { figure.lineDashSegments[i] = this.lineDashSegments[i]; } figure.fill = this.fill; figure.stroke = this.stroke; figure.points = []; for (var i = 0; i < this.points.length; i++) { figure.points[i] = new Point(this.points[i].x, this.points[i].y); } figure.center = new Point(this.center.x, this.center.y); figure.sides = this.sides; figure.r = this.r; figure.k = this.k; return figure; }; StarPolygon.prototype.barycenter = function() { return new Point(this.center.x, this.center.y); }; StarPolygon.prototype.draw = function(context) { context.save(); context.beginPath(); this.setProps(context); var n = this.points.length; var k = this.k; var ilefigur = nwd2(n, k); var ileelem = n / ilefigur; var points1 = sortCyclic(this.points, k); if (ilefigur == 1) { context.moveTo(points1[0].x, points1[0].y) for (var i = 1; i < n; i++) { context.lineTo(points1[i].x, points1[i].y); } context.closePath(); } else { for (var j = 0; j < n; j += ileelem) { context.moveTo(points1[j].x, points1[j].y) for (var m = j; m < j + ileelem - 1; m++) { context.lineTo(points1[m + 1].x, points1[m + 1].y) } context.closePath(); } } if (this.stroke == true) { context.stroke(); } if (this.fill == true) { context.fill(); } context.restore(); };