示例#1
0
        /// <summary>
        /// Constructeur de la classe PointAttention
        /// </summary>
        /// <param name="vect">Vecteur fourni mentionné dans le fichier de données</param>
        /// <param name="tps">Temps depuis le début de l'enregistrement</param>
        public PointAttention(Vecteur2 vect, double tps)
        {
            _tempsEcoule = tps;

            _PAX = vect.A;
            _PAY = vect.B;

            _coordPA = initialiseCoordPA(vect);
        }
示例#2
0
        /// <summary>
        /// Méthode qui permet de déterminer les pixels qui sont dans une ellipse de centre le point d'attention de référence
        /// L'ellipse étant la zone d'attention
        /// </summary>
        /// <param name="screenDistance">Distance à l'écran</param>
        /// <param name="logicalHeight">Hauteur logique en px</param>
        /// <param name="logicalWidth">Longueur logique en px</param>
        /// <param name="physicalHeight">Hauteur physique en m</param>
        /// <param name="physicalWidth">Longueur logique en m</param>
        /// <param name="userY">Y du PA</param>
        public void pixelsEllipse(double screenDistance, double logicalHeight, double logicalWidth, double physicalHeight, double physicalWidth, double userY)
        {
            // Le PA avec lequel on fait le calcul devient el PA de référence :
            PAref = this._coordPA;
            //Largeur (première coordonnée) et hauteur (seconde coordonnée) de l'ellipse (à calculer dans le constructeur)
            dimEllipse = trouveEllipse(screenDistance, logicalHeight, logicalWidth, physicalHeight, physicalWidth, userY);

            // Recherche de la liste des pixels associés
            List<Vecteur2> laListe = new List<Vecteur2>();

            // Pour cela on réduit la zone de recherche des pixels pour trouver ceux qui sont dans l'ellipse
            int min_x = (int)Math.Floor(_coordPA.A - dimEllipse.A);
            int min_y = (int)Math.Floor(_coordPA.B - dimEllipse.B);// + Image.dimensionsBandeauLignes);
            int max_x = min_x + (int)dimEllipse.A * 2;
            int max_y = min_y + (int)dimEllipse.B * 2;// +Image.dimensionsBandeauCol;

            for (int y = min_y; y < max_y; y++)
                for (int x = min_x; x < max_x; x++)
                    if (dansEllipse(translatePixel(x, y)))
                        laListe.Add(new Vecteur2(x,y));

            // on met à jour la liste de pixels de référence
            pixelsRef = laListe;
        }
示例#3
0
        /// <summary>
        /// Méthode qui définit si un pixel est dans une ellispe ou non, de centre (0,0,0)
        /// </summary>
        /// <param name="pixel">Pixel à déterminé</param>
        /// <returns>Booléen qui indique si le pixel est dans l'ellipse ou non</returns>
        public bool dansEllipse(Vecteur2 pixel)
        {
            // On détermine l'équation de la droite y=a*x passant par le pixel et le centre de l'ellipse, dans le repère de l'ellipse
            // Calcul du coef directeur coef
            double coef = (pixel.B) / (pixel.A);

            // L'ellipse a pour équation (x^2/a^2)+(y^2/b^2)=1
            // On cherche le point M(x,y) appartenant au contour de l'ellipse et à la droite
            // Calcul du discriminant de x^2*[(1/a^2)+(coef^2/b^2)]-1=0
            double facteurX = 1 / Math.Pow(dimEllipse.A, 2) + Math.Pow(coef, 2) / Math.Pow(dimEllipse.B, 2);
            double discrim = 4 * facteurX;
            // Calcul d'une des deux solutions de x possibles (peu importe laquelle)
            double x1 = Math.Sqrt(discrim) / (2 * facteurX);
            // On cherche la coordonnée y correspondant à cette solution grâce à l'équation de départ;
            double y1 = coef * x1;

            // Calcul la distance de ce point au centre
            double dSol = Math.Sqrt(Math.Pow(x1, 2) + Math.Pow(y1, 2));
            // On calcule la distance du pixel au centre
            double dPix = Math.Sqrt(Math.Pow(pixel.A, 2) + Math.Pow(pixel.B, 2));

            // On compare les deux distances et on conclut sur l'appartenance du pixel à l'ellipse
            if (dPix <= dSol)
                return true;
            else
                return false;
        }
示例#4
0
 /// <summary>
 /// Méthode qui trouve le bon point d'attention à partir du "mauvais"
 /// </summary>
 /// <param name="vect">Le vecteur mauvais PA</param>
 /// <returns>Le bon vecteur PA</returns>
 public Vecteur2 initialiseCoordPA(Vecteur2 vect)
 {
     return new Vecteur2(vect.A + dimEllipse.A / 2, vect.B + dimEllipse.B / 2);
     // On a besoin de valeurs rondes donc on arrondit
 }
示例#5
0
 /// <summary>
 /// Méthode de calcul de distance
 /// </summary>
 /// <param name="other">Vecteur dont on veut calculer </param>
 /// <returns></returns>
 public double Distance(Vecteur2 other)
 {
     return Math.Sqrt((other.A - this.A) * (other.A - this.A) + (other.B - this.B) * (other.B - this.B));
 }