Exemplo n.º 1
0
        /// <summary>
        /// Vykreslení limitních čar pro otáčení nohy
        /// </summary>
        /// <param name="g">grafika</param>
        /// <param name="mid">střed otáčení nohy</param>
        /// <param name="rotation">rotace ve stupnich</param>
        private void legLimitLinePaint(Graphics g, Point mid, int rotation)
        {
            Point startPoint = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation, baseWidth / 12);
            Point endPoint   = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation, baseWidth / 2);
            Pen   pen        = new Pen(Color.Black, 2);

            pen.DashStyle = DashStyle.Dot;
            g.DrawLine(pen, startPoint, endPoint);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Callback pro změnu stavu páčky gamepadu pro přímý pohyb
        /// </summary>
        /// <param name="x">x souřadnice joysticku od -100 do 100</param>
        /// <param name="y">y souřadnice joysticku od -100 do 100</param>
        private void joystickDirectMoveChanged(int x, int y)
        {
            Point corectedPoint = MathLibrary.convertPointToCircle(x, y, 0, 0, 101);

            moveRobot(corectedPoint.X, corectedPoint.Y);
            if (!(joystick is MainWindow))
            {
                controllView.moveDirectMoveJoystick(corectedPoint.X, corectedPoint.Y);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Vykreslení konce šipky kol znázorňující pohyb
        /// </summary>
        /// <param name="g">grafika</param>
        /// <param name="mid">střed kola</param>
        /// <param name="rotation">rotace kola ve stupnich</param>
        /// <param name="circleWidth">průměr kola</param>
        /// <param name="speed">rychlost pohybu kola</param>
        private void endOfArrowPaint(Graphics g, Point mid, int rotation, int circleWidth, int speed)
        {
            Point endPointArrow   = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation, circleWidth * 3 + (speed / 5) + 4 - 20);
            Point arrowLeftPoint  = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation - 15, circleWidth * 2 + (speed / 5) - 20);
            Point arrowRightPoint = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation + 15, circleWidth * 2 + (speed / 5) - 20);

            Point[] triangl = new Point[3];
            triangl[0] = endPointArrow;
            triangl[1] = arrowLeftPoint;
            triangl[2] = arrowRightPoint;
            g.FillPolygon(Brushes.Orange, triangl);
        }
Exemplo n.º 4
0
 private void joystickMouseMoveHandler(MouseEventArgs e, Point location, PictureBox box, Action <int, int> stickObserver)
 {
     if (MathLibrary.isPointInCircle(e.X, e.Y, joystickR, joystickR, joystickR))
     {
         location = e.Location;
         box.Invalidate();
         if (enabledStick)
         {
             stickObserver((int)Math.Floor((e.X - joystickR) / ((double)joystickR / 100)), (int)Math.Floor((e.Y - joystickR) / ((double)joystickR / 100)));
         }
     }
     else
     {
         Cursor.Position = box.PointToScreen(MathLibrary.convertPointToCircle(e.X, e.Y, joystickR, joystickR, joystickR - 2));
     }
 }
Exemplo n.º 5
0
 private void panelForJoystick_MouseDown(object sender, MouseEventArgs e)
 {
     if (e.Button == MouseButtons.Left)
     {
         if (MathLibrary.isPointInCircle(e.X, e.Y, joystickR, joystickR, joystickR))
         {
             Cursor.Hide();
             if (sender.Equals(panelForDirectMoveJoystick))
             {
                 joystickMouseDownHandler(e, stickDirectMoveLocation, panelForDirectMoveJoystick, stickDirectMoveObserver);
             }
             else
             {
                 joystickMouseDownHandler(e, stickMoveLocation, panelForMoveJoystick, stickMoveObserver);
             }
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Vykreslení šipky kol znázorňující pohyb
        /// </summary>
        /// <param name="g">grafika</param>
        /// <param name="mid">střed kola</param>
        /// <param name="rotation">rotace kola ve stupnich</param>
        /// <param name="circleWidth">průměr kola</param>
        /// <param name="speed">rychlost pohybu kola</param>
        /// <param name="front">příznak zda se jedná o šipku pro pohyb dopředu</param>
        private void arrowPaint(Graphics g, Point mid, int rotation, int circleWidth, int speed, bool front)
        {
            Color color = Color.Black;

            if (speed > 0)
            {
                color = Color.Orange;
                endOfArrowPaint(g, mid, rotation, circleWidth, speed);
            }
            else if (front)
            {
                color = Color.Red;
            }
            Point startPoint = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation, circleWidth - 1);
            Point endPoint   = MathLibrary.getPointOnLine(mid.X, mid.Y, rotation, circleWidth * 3 + (speed / 5) - 20);

            g.DrawLine(new Pen(color, 4), startPoint, endPoint);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Pohne s robotem v daném rádiusu
        /// </summary>
        /// <param name="x">x souřadnice joysticku od -100 do 100</param>
        /// <param name="y">y souřadnice joysticku od -100 do 100</param>
        private void moveRobotInRadius(int x, int y)
        {
            double radiusCircleDistance = x;

            if (radiusCircleDistance > 5 || radiusCircleDistance < -5)
            {
                radiusCircleDistance = MathLibrary.changeScaleLog(radiusCircleDistance, 0, Math.Sign(radiusCircleDistance) * 100, Math.Sign(radiusCircleDistance) * 2000, Math.Sign(radiusCircleDistance) * 60);
            }
            else
            {
                radiusCircleDistance = 99999;
            }
            double speed = MathLibrary.getPointsDistance(0, 0, x, y);

            if (y > 0)
            {
                speed = -speed;
            }
            robot.moveInRadius(radiusCircleDistance, speed);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Vykreslení celého nohy robota
        /// </summary>
        /// <param name="e">Paint event</param>
        /// <param name="Z">zdvih</param>
        /// <param name="ZK">rotace nohy</param>
        /// <param name="R">rotace kola</param>
        /// <param name="P">rychlost kola</param>
        /// <param name="xC">korelace umístění na x souřadnici (-1,1)</param>
        /// <param name="yC">korelace umístění na y souřadnici (-1,1)</param>
        /// <param name="rC">korelace otočení nohy ve stupních</param>
        private void legPaint(PaintEventArgs e, int Z, int ZK, int R, int P, int xC, int yC, int rC)
        {
            var g = e.Graphics;

            g.SmoothingMode = SmoothingMode.AntiAlias;
            Pen   pen         = new Pen(Color.LightSlateGray, 8 + ((-1) * Z / 10));
            Point firstPoint  = new Point(canvasMid.X + ((baseWidth / 2) * xC), canvasMid.Y + ((baseWidth / 2) * yC));
            Point secondPoint = MathLibrary.getPointOnLine(canvasMid.X + ((baseWidth / 2) * xC), canvasMid.Y + ((baseWidth / 2) * yC), ZK + rC, baseWidth);

            g.DrawLine(pen, firstPoint, secondPoint);
            bool reverse = false;

            if (xC * yC > 0)
            {
                reverse = true;
            }
            wheelPaint(g, secondPoint, ZK + rC - R + 93, P, reverse);
            legLimitLinePaint(g, firstPoint, rC - 45);
            legLimitLinePaint(g, firstPoint, rC + 45);
            wheelLimitLinePaint(g, secondPoint, ZK + rC - 180);
            wheelLimitLinePaint(g, secondPoint, ZK + rC - xC * yC * 90);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Pohne s robotem směrem a rychlostí podle dané polohy joysticku
        /// </summary>
        /// <param name="x">x souřadnice od -100 do 100</param>
        /// <param name="y">y souřadnice od -100 do 100</param>
        private void moveRobot(int x, int y)
        {
            int angle = (int)MathLibrary.getAngle(0, 0, 100, 0, x, y);

            robot.move(angle, (int)MathLibrary.getPointsDistance(0, 0, x, y));
        }