Пример #1
0
 private bool IsValid()
 {
     if (NbPoints >= 3)   // Is at least a triangle, 3 coordinates
     {
         for (int i = 0; i < NbPoints; i++)
         {
             ZZCoordinate previousPoint = (ZZCoordinate)Coordonnees[ZZFunctions.nmod(i - 1, NbPoints)], anglePoint = (ZZCoordinate)Coordonnees[i], nextPoint = (ZZCoordinate)Coordonnees[(i + 1) % NbPoints];
             double       alpha = ZZMath.AngleFrom3Points(previousPoint, anglePoint, nextPoint);
             if (alpha == 0)
             {
                 return(false);            // The angle formed by the 3 points isn't 0 degrees
             }
         }
         return(true);
     }
     return(false);
 }
Пример #2
0
        public Polygon Extend(double extentionSize)
        {
            if (IsValid())
            {
                List <Coordonnees> newCoordCollection = new List <Coordonnees>();
                for (int i = 0; i < NbPoints; i++)
                {
                    ZZCoordinate previousPoint = (ZZCoordinate)Coordonnees[ZZFunctions.nmod(i - 1, NbPoints)], anglePoint = (ZZCoordinate)Coordonnees[i], nextPoint = (ZZCoordinate)Coordonnees[(i + 1) % NbPoints];
                    double       alpha = ZZMath.AngleFrom3Points(previousPoint, anglePoint, nextPoint), beta = (180 - alpha) / 2.0;
                    double       slopeAngle    = ZZMath.SlopeAngle(previousPoint, anglePoint) + beta;
                    double       distanceToAdd = extentionSize / Math.Cos(ZZMath.ToRadians(beta));

                    double newX = anglePoint.X + distanceToAdd * Math.Cos(ZZMath.ToRadians(slopeAngle));
                    double newY = anglePoint.Y + distanceToAdd * Math.Sin(ZZMath.ToRadians(slopeAngle));
                    newCoordCollection.Add(new Coordonnees(newX, newY));
                }
                return(new Polygon(newCoordCollection, BackgroundColor, BorderColor, Oppacity));
            }
            return(this);
        }