Пример #1
0
        //[MO 10.03.2020] funkcja chwilowo wyłączona do poprawnej kompilacji

        /*internal static void DrawBezierCurve(cSegment xSegment, cSegment xSegment_Next, PaintEventArgs e) {
         * //funkcja rysująca łuk po wybraniu boku
         * //xNumber - numer segmentu
         * //xSegments - nazwa listy segmentów
         *
         * float pCenterX;                                       //punkt X środka segmentu
         * float pCenterY;                                       //punkt Y środka segmentu
         * float pControl_1X;                                    //punkt X punktu kotrolnego 1 do rysowania łuku 1:4 odcinka segmentu
         * float pControl_1Y;                                    //punkt Y punktu kotrolnego 1 do rysowania łuku
         * float pControl_2X;                                    //punkt X punktu kotrolnego 2 do rysowania łuku
         * float pControl_2Y;                                    //punkt Y punktu kotrolnego 2 do rysowania łuku
         * double pVectNormalX;                                  //X wektora prostopadłego do segmenty, do przesunięcia punktów kontrolnych
         * double pVectNormalY;                                  //Y wektora prostopadłego do segmenty, do przesunięcia punktów kontrolnych
         *
         * // f(x)=0
         * if ((xSegments[xNumber].Point.X - xSegments[xNumber+1].Point.X == 0)) {
         *  pVectNormalX = Math.Abs((xSegments[xNumber + 1].Point.Y - xSegments[xNumber].Point.Y) / 4);
         *  pVectNormalY = 0;
         * }
         * // f(y)=0
         * else if ((xSegments[xNumber].Point.Y - xSegments[xNumber + 1].Point.Y == 0)) {
         *  pVectNormalX = 0;
         *  pVectNormalY = Math.Abs((xSegments[xNumber + 1].Point.X - xSegments[xNumber].Point.X) / 4);
         * }
         * // f(y)=ax+b
         * else {
         *  int pIncreaseVector = 50;
         *  pVectNormalX = Math.Abs((xSegments[xNumber].Point.Y - xSegments[xNumber + 1].Point.Y) /
         *                    (xSegments[xNumber].Point.X - xSegments[xNumber + 1].Point.X)) * pIncreaseVector;
         *  pVectNormalY = pIncreaseVector;
         * }
         * pCenterX = (xSegments[xNumber].Point.X + xSegments[xNumber+1].Point.X) / 2;
         * pCenterY = (xSegments[xNumber].Point.Y + xSegments[xNumber+1].Point.Y) / 2;
         *
         * Console.WriteLine(" S: (" + pCenterX + " ; " + pCenterY + ") ");
         * SetCheckCirclePoint(mCircleCenter, (int)pCenterX, (int)pCenterY);
         *
         * //przesunięcie środka segmentu o wektor
         * //w zależności od ćwiartki w której się znajduję środek koła,
         * //na którym opisana jest figura
         * if (mCheckCirclePoint == 1) {
         *  pCenterX = pCenterX + (float)pVectNormalX;
         *  pCenterY = pCenterY + (float)pVectNormalY;
         * } else if (mCheckCirclePoint == 2) {
         *  pCenterX = pCenterX - (float)pVectNormalX;
         *  pCenterY = pCenterY + (float)pVectNormalY;
         * } else if (mCheckCirclePoint == 3) {
         *  pCenterX = pCenterX - (float)pVectNormalX;
         *  pCenterY = pCenterY - (float)pVectNormalY;
         * } else if (mCheckCirclePoint == 4) {
         *  pCenterX = pCenterX + (float)pVectNormalX;
         *  pCenterY = pCenterY - (float)pVectNormalY;
         * } else {
         *  pCenterX = pCenterX + (float)pVectNormalX;
         *  pCenterY = pCenterY - (float)pVectNormalY;
         * }
         *
         * pControl_1X = (xSegments[xNumber].Point.X + pCenterX) / 2;
         * pControl_1Y = (xSegments[xNumber].Point.Y + pCenterY) / 2;
         * pControl_2X = (pCenterX + xSegments[xNumber+1].Point.X) / 2;
         * pControl_2Y = (pCenterY + xSegments[xNumber+1].Point.Y) / 2;
         *
         * PointF start = new PointF(xSegments[xNumber].Point.X, xSegments[xNumber].Point.Y);
         * PointF pControlPoint1 = new PointF(pControl_1X, pControl_1Y);
         * PointF pControlPoint2 = new PointF(pControl_2X, pControl_2Y);
         * PointF end = new PointF(xSegments[xNumber+1].Point.X, xSegments[xNumber+1].Point.Y);
         * Pen pBluePen = new Pen(Color.Blue, 3);
         *
         * e.Graphics.DrawBezier(pBluePen, start, pControlPoint1, pControlPoint2, end);
         *
         * }*/

        internal static void SetCheckCirclePoint(cPoint xCircleCenter, int xSegmentPointX, int xSegmentPointY)
        {
            //fukcja ustawiająca int pCheckCirclePoint w zależności od tego w której ćwiartce znajduje się środek segmentu
            //xCircleCenter -
            //xSegmentPointX -
            //xSegmentPointY -

            int pQuarterOfCoordinateSystem = new int();

            if (xCircleCenter.X <= xSegmentPointX && xCircleCenter.Y <= xSegmentPointY)
            {
                pQuarterOfCoordinateSystem = 1;
            }
            else if (xCircleCenter.X > xSegmentPointX && xCircleCenter.Y <= xSegmentPointY)
            {
                pQuarterOfCoordinateSystem = 2;
            }
            else if (xCircleCenter.X > xSegmentPointX && xCircleCenter.Y > xSegmentPointY)
            {
                pQuarterOfCoordinateSystem = 3;
            }
            else if (xCircleCenter.X <= xSegmentPointX && xCircleCenter.Y > xSegmentPointY)
            {
                pQuarterOfCoordinateSystem = 4;
            }
            else
            {
                Console.WriteLine("Błąd liczenia ćwiartki");
            }

            mCheckCirclePoint = pQuarterOfCoordinateSystem;
        }
Пример #2
0
        //klasa tworząca listy segmentów, do rysowania figur geometrycznych.
        // 1.Prostokąt - GetPolygon_Rect
        // 2.Wielokąt Foremny - GetPolygon_Regular



        public static cPolygon GetPolygon_Rect(cPoint xPoint, int xWidth, int xHeight)
        {
            //funkcja dodająca 4 cSegmenty do listy, z której powstaje prostokąt
            //xPoint - współrzędne punktu bazowego
            //xWidth - szerokość prostokąta
            //xHeight - wysokość prostokąta

            cPolygon pPolygon_Rect;
            cSegment pSegment;

            pPolygon_Rect = new cPolygon();

            pSegment = GetSegment(0, 0, xPoint, 1);
            pPolygon_Rect.AddSegment(pSegment, 0);

            pSegment = GetSegment(xWidth, 0, xPoint, 2);
            pPolygon_Rect.AddSegment(pSegment, 1);

            pSegment = GetSegment(xWidth, -xHeight, xPoint, 3);
            pPolygon_Rect.AddSegment(pSegment, 2);

            pSegment = GetSegment(0, -xHeight, xPoint, 4);
            pPolygon_Rect.AddSegment(pSegment, 3);

            pPolygon_Rect.ShowSegmentsList();

            return(pPolygon_Rect);
        }
Пример #3
0
        //internal int Type { get { return mType; } set { mType = value; } }



        public cSegment(cPoint xPointOfSegment, int xNumberOfSegment)
        {
            //xPointOfSegment - pierwszy punkt danego cSegmentu
            //xNumberOfSegment - numer danego cSegmentu

            this.mPoint  = xPointOfSegment;
            this.mNumber = xNumberOfSegment;
        }
Пример #4
0
        public static cSegment GetSegment(int xOffsetX, int xOffsetY, cPoint xPoint, int xNumber)
        {
            //funkcja zwracająca segment
            //xOffsetX - przesunięcie względem osi X
            //xOffsetY - przesunięcie względem osi Y
            //xPoint - współrzędne punktu bazowego
            //xNumber - numer segmentu

            cPoint   pPoint;
            PointF   pPointHelper;
            cSegment pSegment;

            pPointHelper = new PointF(xPoint.X + xOffsetX, xPoint.Y + xOffsetY);
            pPoint       = new cPoint(pPointHelper);
            pSegment     = new cSegment(pPoint, xNumber);

            return(pSegment);
        }
Пример #5
0
        private void btnDrawRectangle_Click(object sender, EventArgs e)
        {
            //funkca tworząca poligon prostokąta

            double pRect_Height, pRect_Width;               //przeskalowana wysokość, szerokość prostokąta
            cPoint pStartPoint;                             //punkt bazowy

            CalculateScale();

            pStartPoint   = new cPoint(new PointF());
            pRect_Width   = int.Parse(txtWidth.Text) * (mScale);
            pRect_Height  = int.Parse(txtHeight.Text) * (mScale);
            pStartPoint.X = (pnlCanvas.Width - (int)pRect_Width) / 2;
            pStartPoint.Y = (pnlCanvas.Height - (int)pRect_Height) / 2 + (int)pRect_Height;

            mPolygon_Rect = cPolygonFactory.GetPolygon_Rect(pStartPoint, (int)pRect_Width, (int)pRect_Height);

            this.pnlCanvas.Refresh();
        }
Пример #6
0
        private void btnDrawRegularPolygon_Click(object sender, EventArgs e)
        {
            //funkca tworząca poligon wielokąta foremnego

            double pBaseAngle;                              //kąt pomiędzy: punkt1 segmentu - środek koła - punkt2 segmentu
            cPoint pCircleCenter;                           //punkt - środek okręgu
            double pRadiusOfCircle;                         //przeskalowany promień koła

            CalculateScale();

            pCircleCenter   = new cPoint(new PointF());
            pCircleCenter.X = pnlCanvas.Width / 2;
            pCircleCenter.Y = pnlCanvas.Height / 2;
            pRadiusOfCircle = double.Parse(txtDiameter.Text) / 2 * (mScale);
            pBaseAngle      = 360 / int.Parse(txtSlides.Text); //dodać blokadę dzielenia przez 0

            cDrawingAdapter.CircleCenter = pCircleCenter;

            mPolygon_Regular = cPolygonFactory.GetPolygon_Regular(pCircleCenter, (int)pRadiusOfCircle, -pBaseAngle);

            this.pnlCanvas.Refresh();
        }
Пример #7
0
        public static cPolygon GetPolygon_Regular(cPoint xCircleCenter, int xRadius, double xAngle)
        {
            //funkcja dodająca segmenty do listy, z której powstaje wielokąt foremny
            //xCircleCenter - środek koła, na którym wpisana jest figura
            //xRadius - promień koła w który jest wpisana figura
            //xAngle - kąt pomiędzy [punktem pPoint - środkiem koła xCircleCenter - punktem pPoint(z kolejnego segmentu)]

            double   pAngleTemp;                            //wartość kąta pomiędzy punktem pierwszego segmentu - środkiem koła - punktem kolejnego segmentu
            double   pAngleTotal;                           //kąt pAngleTemp przedstawiony w radianach
            double   pCosinusOfAngleTotal;                  //cosunus kąta pAngleTemp
            int      pNumber;                               //numer danego segmentu
            cPolygon pPolygon_Regular;
            cSegment pSegment;
            double   pSinusOfAngleTotal;                    //sinus kąta pAngleTemp
            double   pTotalSegments;                        //liczba wszystkich boków figury
            double   pAngleIncremental;

            pNumber          = 0;
            pTotalSegments   = 360 / Math.Abs(xAngle);
            pPolygon_Regular = new cPolygon();

            for (pAngleIncremental = 0; pAngleIncremental <= 360 - Math.Abs(xAngle); pAngleIncremental += Math.Abs(xAngle))
            {
                pAngleTemp           = xAngle / 2 + (Math.Abs(xAngle)) * pNumber;
                pAngleTotal          = (pAngleTemp * (Math.PI)) / 180;
                pCosinusOfAngleTotal = Math.Cos(pAngleTotal);
                pSinusOfAngleTotal   = Math.Sin(pAngleTotal);
                pNumber++;

                pSegment = GetSegment((int)(xRadius * pSinusOfAngleTotal), (int)(xRadius * pCosinusOfAngleTotal),
                                      xCircleCenter, pNumber);

                pPolygon_Regular.AddSegment(pSegment, pNumber - 1);
            }

            return(pPolygon_Regular);
        }