/*
* Created by yvesb on 10/10/2016.
*/
/*
* MathGraph32 Javascript : Software for animating online dynamic mathematics figures
* https://www.mathgraph32.org/
* @Author Yves Biton (yves.biton@sesamath.net)
* @License: GNU AGPLv3 https://www.gnu.org/licenses/agpl-3.0.html
*/
import CPolygone from '../objets/CPolygone'
import { chaineNombre, getStr, zero } from '../kernel/kernel'
import NatObj from '../types/NatObj'
import Vect from '../types/Vect'
export default CPolygone
CPolygone.prototype.infoHist = function () {
return getStr('Polygone') + ' ' + this.nomSommetsPolygone()
}
CPolygone.prototype.nomSommetsPolygone = function () {
let stb = ''
for (let i = 0; i < this.nombrePoints - 1; i++) stb += this.colPoints[i].pointeurSurPoint.nom
return stb
}
CPolygone.prototype.coincideAvec = function (p) {
let ptp1, ptp2, i, j, resultat
if (p.getNature() !== NatObj.NPolygone) return false
let nombrePoints = this.colPoints.length
if (nombrePoints !== p.colPoints.length) return false
// On regarde si un polynôme a déjà été créé avec les mêmes sommets
// dans le même ordre. On ne regarde pas le dernier sommet qui
// est le même que le premier}
nombrePoints--
j = 0
do {
resultat = true
i = 0
while (resultat && (i <= nombrePoints - 1)) {
ptp1 = this.colPoints[i].pointeurSurPoint
ptp2 = p.colPoints[(i + j) % nombrePoints].pointeurSurPoint
resultat = ptp1.coincideAvec(ptp2)
i++
}
j++
}
while ((j !== nombrePoints) && !resultat)
if (resultat) return true
// On regarde en tournant dans l'autre sens
j = 0
do {
resultat = true
i = 0
while (resultat && (i <= nombrePoints - 1)) {
ptp1 = this.colPoints[nombrePoints - 1 - i].pointeurSurPoint
ptp2 = p.colPoints[(i + j) % nombrePoints].pointeurSurPoint
resultat = ptp1.coincideAvec(ptp2)
i++
}
j++
}
while ((j !== nombrePoints) && !resultat)
return resultat
}
/**
*
* @returns {string}
*/
CPolygone.prototype.getNom = function () {
return getStr('Polygone') + ' ' + this.nomSommets()
}
/**
* Fonction renvoyant true si this a des côtés de même longueurs que p (qui doit être un polygone)
* Sert uniquement pout certains exercices de construction
* @param {CElementGraphique} p
* @returns {boolean}
*/
CPolygone.prototype.isIsomTo = function (p) {
let ptp0, ptp1, ptp2, ptp3, vect1, vect2, norm1, norm2, i, j, resultat
function nomsEgaux (p0, p1, p2, p3) {
return ((p0.nom === p2.nom) && (p1.nom === p3.nom)) || ((p0.nom === p3.nom) && (p1.nom === p2.nom))
}
if (p.getNature() !== NatObj.NPolygone) return false
let nombrePoints = this.colPoints.length
if (nombrePoints !== p.colPoints.length) return false
nombrePoints--
j = 0
do {
resultat = true
i = 0
while (resultat && (i <= nombrePoints)) {
ptp0 = this.colPoints[i].pointeurSurPoint
ptp1 = this.colPoints[(i + 1) % nombrePoints].pointeurSurPoint
ptp2 = p.colPoints[(i + j) % nombrePoints].pointeurSurPoint
ptp3 = p.colPoints[(i + j + 1) % nombrePoints].pointeurSurPoint
vect1 = new Vect(ptp0, ptp1)
vect2 = new Vect(ptp2, ptp3)
norm1 = vect1.norme()
norm2 = vect2.norme()
resultat = nomsEgaux(ptp0, ptp1, ptp2, ptp3) && zero(Math.abs(norm1 - norm2))
i++
}
j++
}
while ((j !== nombrePoints) && !resultat)
if (resultat) return true
// On regarde en tournant dans l'autre sens
j = 0
do {
resultat = true
i = 0
while (resultat && (i <= nombrePoints)) {
ptp0 = this.colPoints[(2 * nombrePoints - 1 - i) % nombrePoints].pointeurSurPoint
ptp1 = this.colPoints[(2 * nombrePoints - 2 - i) % nombrePoints].pointeurSurPoint
ptp2 = p.colPoints[(i + j) % nombrePoints].pointeurSurPoint
ptp3 = p.colPoints[(i + j + 1) % nombrePoints].pointeurSurPoint
vect1 = new Vect(ptp0, ptp1)
vect2 = new Vect(ptp2, ptp3)
norm1 = vect1.norme()
norm2 = vect2.norme()
resultat = nomsEgaux(ptp0, ptp1, ptp2, ptp3) && zero(Math.abs(norm1 - norm2))
i++
}
j++
}
while ((j !== nombrePoints) && !resultat)
return resultat
}
CPolygone.prototype.tikz = function (dimf, nomaff, coefmult, bu) {
let i; let x; let y
const list = this.listeProprietaire
let ch = '\\draw ' + this.tikzLineStyle(dimf, coefmult) + '('
for (i = 0; i < this.nombrePoints - 1; i++) {
x = list.tikzXcoord(this.absPoints[i], dimf, bu)
y = list.tikzYcoord(this.ordPoints[i], dimf, bu)
ch += chaineNombre(x, 3) + ',' + chaineNombre(y, 3) + ')--('
}
i = this.nombrePoints - 1
x = list.tikzXcoord(this.absPoints[i], dimf, bu)
y = list.tikzYcoord(this.ordPoints[i], dimf, bu)
ch += chaineNombre(x, 3) + ',' + chaineNombre(y, 3) + ')--cycle;'
return ch
}