예제 #1
0
        private void CommandInit_Click(object sender, EventArgs e)
        {
            CommandStart.Enabled = true;

            //радиусы колес
            R1 = float.Parse(TextR1.Text, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo); //неподвижное
            R  = float.Parse(TexTR.Text, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);  //колесо подвижное

            if (R > R1)
            {
                MessageBox.Show("Радиус внутреннего колеса должен быть меньше радиуса наружного!", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                Fimax   = float.Parse(TextFiMax.Text, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
                DeltaFi = float.Parse(TextDeltaFi.Text, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);
                //размеры полей отображения
                XBase = (float)Round(R1 + 1.2);
                YBase = (float)Round(R1 + 1.2);
                InitAxis();

                //Колесо неподвижное
                Xo1            = 0;
                Yo1            = 0;
                Axis1.Pix_type = 3;
                Axis1.Pix_Size = 2 * R1 / XBase;
                Axis1.PixDraw(Xo1, Yo1, Color.Black, 1);

                //Колесо подвижное
                Xo             = R1 - R;
                Yo             = 0;
                Axis1.Pix_Size = 2 * R / XBase;
                Axis1.PixDraw(Xo, Yo, Color.Blue, 2);

                //Начальные координаты точки А
                Xa = R1;
                Ya = 0;
                //радиус
                Axis1.Pix_color = Color.Black;
                Axis1.Line(Xa, Ya, Xo, Yo, 2);
                Axis1.DinToPic();

                m  = R / R1;
                Fi = 0;

                //Отображение траектории точки А
                while (Fi < Fimax)
                {
                    X = (float)((R1 - R) * Cos(m * Fi) + R * Cos(Fi - m * Fi));
                    Y = (float)((R1 - R) * Sin(m * Fi) - R * Sin(Fi - m * Fi));
                    Axis2.PixDraw(X, Y, Color.Black, 0);
                    Fi = Fi + DeltaFi;
                }
                ;

                Fi = 0;
            }
        }
예제 #2
0
        private void Timer1_Tick(object sender, EventArgs e)
        {
            Lambda = 0;


            while (Lambda < LambdaA)
            {
                X = (float)(Fi - Lambda * Sin(Fi));
                Y = (float)(1 - Lambda * Cos(Fi));
                Axis2.PixDraw(X, Y, Color.Black, 0);
                Lambda = Lambda + DeltaLambda;
            }
            ;

            Xo = (float)Fi;
            Yo = 1;

            //новые координаты точки А
            Xa = (float)(Fi - LambdaA * Sin(Fi));
            Ya = (float)(1 - LambdaA * Cos(Fi));

            //рисуем точку траектории в статический буфер
            Axis1.Pix_type = 1;
            Axis1.Pix_Size = (float)(0.01 * (YBase / XBase));
            Axis1.PixDraw(Xa, Ya, Color.Red, 1);

            //рисуем колесо в динамический буфер
            Axis1.Pix_type = 3;
            Axis1.Pix_Size = 2 / XBase;
            Axis1.PixDraw(Xo, Yo, Color.Red, 2);

            //рисуем радиус в динамический буфер
            Axis1.Pix_color = Color.Blue;
            Axis1.Line(Xa, Ya, Xo, Yo, 2);

            //отображаем общую картинку
            Axis1.DinToPic();
            Fi = Fi + DeltaFi;
        }