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ści
Właściwość Opis Wartość lub klasa obiektu Wartość
domyślna
points tablica zawierająca punkty Point będące
wierzchoł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().

Funkcje
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 jako argument.

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();
};

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *