/*
var GlissiereMale = function()
{
//==========================
//Constructeur issu de l'heritage
//==========================
DemiLiaison.call(this);
//==========================
//Variables Membres
//==========================
//Définition
this._genre = "male"; //Permet de discriminer la liaison "male" et la liaison "femelle"
//Caractéristiques géométriques de la liaison
this._longueur=100; // Longueur de la tige mâle
//==========================
//getter/setter
//==========================
// Longueur de la tige
this.longueur=function(r)
{
if(typeof(l)!='undefined')
{
this._longueur=l;
//Met à jour les couleur directement sur les graphismes
// ... à faire
}
return this._longueur;
}
//==========================
//Autres fonctions membres
//==========================
//ECRASE L'ANCIENNE
//Fonction qui met à jour la couleur des graphismes de la liaison (appelée avec this.couleur() en setter)
this.updateCouleurGraphismes = function(_coul)
{
this.children[0].graphics._stroke.style = _coul;
}
//ECRASE L'ANCIENNE
//Fonction qui met à jour l'épaisseur des graphismes de la liaison (appelée avec this.epaisseur() en setter)
this.updateEpaisseurGraphismes = function(_ep)
{
// À FAIRE
}
//ECRASE L'ANCIENNE
//Ajoute (dans la grosse matrice K et F globale) la sous partie liée à la liaison
this.remplisSysteme_liaison = function(K,F)
{
var O1L1 = this.O1L1();
var O2L2 = this.demiSoeur().O1L1();
var L1L2 = this.L1L2();
var k = this._k
var kRot = this._kRot;
var n1 = this.classe().numero(); //Numéro de la CE
var n2 = this.demiSoeur().classe().numero() // Numéro de la CE de la demi-Soeur
var alpha1 = this.getAbsoluteRotation(); // En degrés
var alpha2 = (this.demiSoeur().getAbsoluteRotation()); // Orientation de la direction de la demi-soeur (absolu)
//console.log("alpha1 = "+alpha1+" ; alpha2 ="+alpha2)
var sina2 = Math.sin(alpha2*Math.PI/180);
var cosa2 = Math.cos(alpha2*Math.PI/180);
var B = O1L1.x*cosa2 + O1L1.y*sina2;
var C = O1L1.x*sina2 + O1L1.y*cosa2;
var D = L1L2.x*sina2 + L1L2.y*cosa2;
//NOTE : il faudra peut être condenser les lignes suivantes
var KK = [ [-k*sina2*sina2, k*sina2*cosa2, k*sina2*(O1L1.y*sina2+O1L1.x*cosa2), k*sina2*sina2, -k*sina2*cosa2, -k*sina2*(O2L2.y*sina2+O2L2.x*cosa2) ],
[k*cosa2*sina2, -k*cosa2*cosa2, -k*cosa2*(O1L1.y*sina2+O1L1.x*cosa2), -k*cosa2*sina2, k*cosa2*cosa2, k*cosa2*(O2L2.y*sina2+O2L2.x*cosa2) ],
[k*B*sina2 - kRot, -k*B*cosa2, -k*(B*B+C*D), -k*B*sina2+kRot, k*B*cosa2, k*B*(O2L2.y*sina2+O2L2.x*cosa2) ]
]
//var FF = [k*L1L2.x,k*L1L2.y,k*(O1L1.x*L1L2.y-O1L1.y*L1L2.x)]
var FF = [k*sina2*(-L1L2.x*sina2+L1L2.y*cosa2), -k*cosa2*(-L1L2.x*sina2+L1L2.y*cosa2), -k*B*(-L1L2.x*sina2+L1L2.y*cosa2)-kRot*(alpha2-alpha1)]
//On recopie dans les bonnes lignes de K et F
for(var i=0; i<3 ; i++) // Pour chacune des 3 lignes
{
// Recopiage
//K.set([3*n1+i,3*n1], K.get([3*n1+i,3*n1])+KK[i][0])
K.ajouteVal( 3*n1+i , 3*n1, KK[i][0])
K.ajouteVal( 3*n1+i , 3*n1+1, KK[i][1])
K.ajouteVal( 3*n1+i , 3*n1+2, KK[i][2])
K.ajouteVal( 3*n1+i , 3*n2, KK[i][3])
K.ajouteVal( 3*n1+i , 3*n2+1, KK[i][4])
K.ajouteVal( 3*n1+i , 3*n2+2, KK[i][5])
F.ajouteVal( 3*n1+i, FF[i])
}
// AJOUTE DE LA MOTORISATION
if(this._pilotee && ACTION == "simule")
{
// A faire
}
return {K:KK,F:FF}
}
//Fonction qui sert de consigne angulaire, dans le cas où c'est une piloté
this.consigneAngulaire=function()
{
var t=schema.tSimulation();
var omega = 2*math.pi*0.1 //vitesse angulaire
return math.sin(omega*t)*90
}
//==========================
//Graphismes
//==========================
this._ligne=new createjs.Shape();
this._ligne.graphics.setStrokeStyle(this._epaisseur).beginStroke(this._couleur).moveTo(-this._longueur/2.,0).lineTo(this._longueur/2.,0);
this.addChild(this._ligne);
//Les shapes n'ont pas de bornes. Alors on va en créer
this.setBounds(-this._longueur/2.,this._epaisseur/2.,this._longueur/2.,-this._epaisseur/2.)
}
GlissiereMale.prototype = Object.create(DemiLiaison.prototype);//On recopie le prototype de DemiLiaison
GlissiereMale.prototype.constructor = GlissiereMale;//On recopie le constructeur de Noeud dans son prototype
*/
/**
* Demi-liaison "Glissière" désignée comme mâle
* @extends DemiLiaison
*/
class GlissiereMale extends DemiLiaison
{
// **********************************************************
/*
* Constructeur
*/
constructor()
{
// Héritage (constructeur parent)
super() // Rappelle le constructeur parent
// MAJ membres
this._genre = "male"; //Permet de discriminer la liaison "male" et la liaison "femelle"
// GRAPHISMES
this._ligne = new createjs.Shape();
this._ligne.graphics.setStrokeStyle(this._epaisseur).beginStroke(this._couleur).moveTo(-this._longueur/2.,0).lineTo(this._longueur/2.,0);
this.addChild(this._ligne);
//Les shapes n'ont pas de bornes. Alors on va en créer
this.setBounds(-this._longueur/2.,this._epaisseur/2.,this._longueur/2.,-this._epaisseur/2.)
}
// MEMBRES **********************************************************
/** Longueur de la tige (de base) mâle qui passe dans la liaison
@type {Number} */
_longueur = 100 ;
/** Dessin de la ligne mâle
@type {createjs.Shape} */
_ligne = new createjs.Shape();
// getter/setter ****************************************************
/** GETTER / SETTER de la longueur de la tige mâle.
@param {Number} [l] - [OPTIONNEL] Nouvelle valeur de longueur de la tige mâle (en px).
@return {Number} La longueur courante (nouvelle valeur si setter)
*/
longueur(l)
{
if(typeof(l)!='undefined')
{
this._longueur = l ;
//Met à jour les dimensions directement sur les graphismes
// ... à faire
}
return this._longueur ;
}
//==========================
//Autres fonctions membres
//==========================
/** (ECRASE L A FONCTION ABSTRAITE) Fonction qui met à jour la couleur des graphismes de la liaison (appelée avec this.couleur() en setter)
@param {String} _coul - Couleur (de préférence de la forme "#RRVVBB").
*/
updateCouleurGraphismes(_coul)
{
this.children[0].graphics._stroke.style = _coul;
}
/** (ECRASE L A FONCTION ABSTRAITE) Fonction qui met à jour l'épaisseur des graphismes de la liaison (appelée avec this.epaisseur() en setter)
@param {Number} _ep - Epaisseur (en px)
*/
updateEpaisseurGraphismes(_ep)
{
// À FAIRE
}
/** (ECRASE L A FONCTION ABSTRAITE) Ajoute (= modifie en place dans les grosses matrices K et F globales) la sous partie liée à la liaison. Écrase la méthode abstraite mère.
@param {Array} K - Référence vers la matrice K générale du système global.
@param {Array} F - Référence vers le vecteur F second membre du système global (vecteur en ligne, à une dimension)
@return {Object} {K: , F :} Objet représentant les PETITES matrices du système, liées à la liaison (Attention, ce ne sont pas les matrices globales)
*/
remplisSysteme_liaison(K,F)
{
var O1L1 = this.O1L1();
var O2L2 = this.demiSoeur().O1L1();
var L1L2 = this.L1L2();
var k = this._k
var kRot = this._kRot;
var n1 = this.classe().numero(); //Numéro de la CE
var n2 = this.demiSoeur().classe().numero() // Numéro de la CE de la demi-Soeur
var alpha1 = this.getAbsoluteRotation(); // En degrés
var alpha2 = (this.demiSoeur().getAbsoluteRotation()); // Orientation de la direction de la demi-soeur (absolu)
//console.log("alpha1 = "+alpha1+" ; alpha2 ="+alpha2)
var sina2 = Math.sin(alpha2*Math.PI/180);
var cosa2 = Math.cos(alpha2*Math.PI/180);
var B = O1L1.x*cosa2 + O1L1.y*sina2;
var C = O1L1.x*sina2 + O1L1.y*cosa2;
var D = L1L2.x*sina2 + L1L2.y*cosa2;
//NOTE : il faudra peut être condenser les lignes suivantes
var KK = [ [-k*sina2*sina2, k*sina2*cosa2, k*sina2*(O1L1.y*sina2+O1L1.x*cosa2), k*sina2*sina2, -k*sina2*cosa2, -k*sina2*(O2L2.y*sina2+O2L2.x*cosa2) ],
[k*cosa2*sina2, -k*cosa2*cosa2, -k*cosa2*(O1L1.y*sina2+O1L1.x*cosa2), -k*cosa2*sina2, k*cosa2*cosa2, k*cosa2*(O2L2.y*sina2+O2L2.x*cosa2) ],
[k*B*sina2 - kRot, -k*B*cosa2, -k*(B*B+C*D), -k*B*sina2+kRot, k*B*cosa2, k*B*(O2L2.y*sina2+O2L2.x*cosa2) ]
]
//var FF = [k*L1L2.x,k*L1L2.y,k*(O1L1.x*L1L2.y-O1L1.y*L1L2.x)]
var FF = [k*sina2*(-L1L2.x*sina2+L1L2.y*cosa2), -k*cosa2*(-L1L2.x*sina2+L1L2.y*cosa2), -k*B*(-L1L2.x*sina2+L1L2.y*cosa2)-kRot*(alpha2-alpha1)]
//On recopie dans les bonnes lignes de K et F
for(var i=0; i<3 ; i++) // Pour chacune des 3 lignes
{
// Recopiage
//K.set([3*n1+i,3*n1], K.get([3*n1+i,3*n1])+KK[i][0])
K.ajouteVal( 3*n1+i , 3*n1, KK[i][0])
K.ajouteVal( 3*n1+i , 3*n1+1, KK[i][1])
K.ajouteVal( 3*n1+i , 3*n1+2, KK[i][2])
K.ajouteVal( 3*n1+i , 3*n2, KK[i][3])
K.ajouteVal( 3*n1+i , 3*n2+1, KK[i][4])
K.ajouteVal( 3*n1+i , 3*n2+2, KK[i][5])
F.ajouteVal( 3*n1+i, FF[i])
}
// AJOUTE DE LA MOTORISATION
if(this._pilotee && ACTION == "simule")
{
// A faire
}
return {K:KK,F:FF}
}
/** Fonction qui calcule le score (= la distance) entre chaque demi liaison pivot (écrase la fonction abstraite)
@ return {Number} Score
*/
getScore()
{
return 0;
// A FAIRE
}
}