/// <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); }
/// <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); }
/// <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); }
/// <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); }