objetsAdd/CCercleAdd.js

/*
 * 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 { chaineNombre, distancePointPoint, getStr, zero } from '../kernel/kernel'
import CCercle from '../objets/CCercle'
import NatObj from '../types/NatObj'

export default CCercle

CCercle.prototype.distancePoint = function (xp, yp, masquage) {
  if (!(this.existe) || (masquage && this.masque)) return -1
  else return this.distancePointPourSurface(xp, yp)
}

CCercle.prototype.distancePointPourSurface = function (xp, yp) {
  if (!this.existe) return -1
  else {
    const distance = distancePointPoint(this.centreX, this.centreY, xp, yp)
    return Math.abs(distance - this.rayon)
  }
}

/**
 * Fonction servant à savoir si un point est par définition sur un cercle ou un arc de cercle.
 * @param {CPt} po Le point testé
 * @returns {boolean}
 */
CCercle.prototype.contientParDefinition = function (po) {
  return false
}

/**
 * Fonction utilisée pour générer un nom pour le protocole de la figure
 * @returns {string} Le nom généré
 */
CCercle.prototype.genereNom = function () {
  CCercle.ind++
  return getStr('rcerc') + CCercle.ind
}

CCercle.prototype.coincideAvec = function (p) {
  if (p.getNature() !== NatObj.NCercle) return false
  return zero(this.centreX - p.centreX) && zero(this.centreY - p.centreY) &&
    zero(this.rayon - p.rayon)
}

CCercle.prototype.tikz = function (dimf, nomaff, coefmult, bu) {
  if (this.horsFenetre) return ''
  const list = this.listeProprietaire
  const x1 = list.tikzXcoord(this.centreX, dimf, bu)
  const y1 = list.tikzYcoord(this.centreY, dimf, bu)
  const ray = list.tikzLongueur(this.rayon, dimf, bu)
  return '\\draw ' + this.tikzLineStyle(dimf, coefmult) + '(' + chaineNombre(x1, 3) + ',' + chaineNombre(y1, 3) + ') circle ' +
    '(' + chaineNombre(ray, 3) + ');'
}

/**
 * Fonction servant uniquement pour les exercices de construction
 * Pour que this soit considéré comme isométrique à un cercle, this et p doivent être de classe CCercleOA, CCercleOR ou CCercleOAB,
 * leurs centres doivent avoir le même nom et leur rayons presque égaux
 * @param {CElementBase} p
 * @returns {boolean}
 */
CCercle.prototype.isIsomTo = function (p) {
  if (!this.estCercleParCentre() || !p.estCercleParCentre()) return false
  return (this.o.nom === p.o.nom) && zero(p.rayon - this.rayon)
}