Klasa IrregPolygon
Klasa opisująca wielokąt (wielobok) nieregularny. Dziedziczy po Figure
.
Konstruktor
0, 1 albo wiele argumentów.
var ipolygon = new IrregPolygon();
. Tworzy wielokąt zerowy zawierający jeden punkt Point
P(0,0) . Tworzy wielokąt na bazie tego punktu.
var ipolygon = new IrregPolygon(new Array(new Point(x1,y1), new Point(x2,y2), new Point(x3,y3), new Point(x4,y4)))
. Przyjmuje tablicę zawierającą pewną liczbę punktów Point
. Tworzy wielokąt na bazie tych punktów.
var ipolygon = new Rectangle(new Point(x1,y1), new Point(x2,y2), new Point(x3,y3), new Point(x4,y4)).
Tworzy tablicę punktów narożnikowych. Tworzy wielokąt na bazie tych punktów.
Właściwości
Właściwość | Opis | Wartość lub klasa obiektu | Wartość domyślna |
---|---|---|---|
points | tablica zawierająca cztery punkty Point tworzące ten prostokąt |
Array |
[] |
Funkcje
Typ zwracany | Nazwa | Opis | Przykład |
---|---|---|---|
liczba rzeczywista | area() |
Oblicza i zwraca pole powierzchni tegowielokąta. | Rysowanie wielokąta nieregularnego Rysowanie wielokąta nieregularnego (2) Obliczanie punktu ciężkości wielokąta nieregularnego |
liczba rzeczywista | perimeter() |
Oblicza i zwraca obwód tego wielokąta.. | |
IrregPolygon |
deepclone() |
Tworzy głęboką kopię tego wielokąta. | |
Point |
barycenter() |
Zwraca punkt Point będący środkiem (ciężkości)tego wielokąta. |
|
void |
draw(context) |
Odrysowuje ten wielokąt na kontekście context podanym jako argument. |
Listing
var IrregPolygon = function() { this.points = []; var len = arguments.length; if (len == 1) { for (var i = 0; i < arguments[0].length; i++) { this.points[i] = new Point(arguments[0][i].x, arguments[0][i].y); } } else { for (var i = 0; i < len; i++) { this.points[i] = new Point(arguments[i].x, arguments[i].y); } } }; IrregPolygon.prototype = new Figure(); IrregPolygon.prototype.deepclone = function() { var figure = new IrregPolygon(); 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); } return figure; }; IrregPolygon.prototype.barycenter = function() { var cv1 = document.getElementById("testcanvas"); var ctx1 = cv1.getContext("2d"); var w = cv1.width; var h = cv1.height; var barray = this.deepclone(); var len = barray.points.length; barray.draw(ctx1); var last; var triangle; var segment; var centrum; var area = 0.0; var areax = 0.0 var areay = 0.0; while (len > 2) { last = len - 1; triangle = new Triangle(barray.points[0], barray.points[1], barray.points[last]); segment = new Segment(barray.points[1], barray.points[last]); centrum = segment.barycenter(); if (ctx1.isPointInPath(centrum.x, centrum.y)) { var arear = triangle.area(); area += arear; var bary = triangle.barycenter(); areax += (bary.x * arear); areay += (bary.y * arear); barray.points.shift(); len = barray.points.length; } else { triangle = new Triangle(barray.points[last], barray.points[0], barray.points[last - 1]); segment = new Segment(barray.points[0], barray.points[last - 1]); centrum = segment.barycenter(); var arear = triangle.area(); area += arear; var bary = triangle.barycenter(); areax += (bary.x * arear); areay += (bary.y * arear); barray.points.pop(); len = barray.points.length; } } return new Point(areax / area, areay / area); }; IrregPolygon.prototype.area = function() { var cv1 = document.getElementById("testcanvas"); var ctx1 = cv1.getContext("2d"); var w = cv1.width; var h = cv1.height; var barray = this.deepclone(); var len = barray.points.length; barray.draw(ctx1); var last; var triangle; var segment; var centrum; var area = 0.0; while (len > 2) { last = len - 1; triangle = new Triangle(barray.points[0], barray.points[1], barray.points[last]); segment = new Segment(barray.points[1], barray.points[last]); centrum = segment.barycenter(); if (ctx1.isPointInPath(centrum.x, centrum.y)) { var arear = triangle.area(); area += arear; barray.points.shift(); len = barray.points.length; } else { triangle = new Triangle(barray.points[last], barray.points[0], barray.points[last - 1]); segment = new Segment(barray.points[0], barray.points[last - 1]); var arear = triangle.area(); area += arear; barray.points.pop(); len = barray.points.length; } } return area; }; IrregPolygon.prototype.perimeter = function() { var len = this.points.length; var perimeter = distance(this.points[len - 1], this.points[0]); for (var i = 0; i < len - 1; i++) { perimeter += distance(this.points[i], this.points[i + 1]); } return perimeter; }; IrregPolygon.prototype.draw = function(context) { context.save(); context.beginPath(); this.setProps(context); context.moveTo(this.points[0].x, this.points[0].y); for (var i = 1; i < this.points.length; i++) { context.lineTo(this.points[i].x, this.points[i].y); } context.closePath(); if (this.stroke == true) { context.stroke(); } if (this.fill == true) { context.fill(); } context.restore(); };