65 lines
5.1 KiB
Plaintext
65 lines
5.1 KiB
Plaintext
\b;Упражнение
|
||
Достигните финишной площадки (25 м перед вами) как можно быстрее, используя инструкцию \c;motor( , )\n;. В конце движения вы должны будете постепенно снизить свою скорость, или бот подорвется на \l;минах\u object\mine;.
|
||
|
||
Вы можете ничего больше не писать кроме \c;\l;move\u cbot\move;(25);\n;, это должно сработать просто идеально. Тем не менее, это упражнение преследует цель изучить использование инструкции \c;\l;motor\u cbot\motor;\n;.
|
||
|
||
Эта инструкция запрашивает два значения:
|
||
1) Скорость левостороннего мотора.
|
||
2) Скорость правостороннего мотора.
|
||
|
||
\s;\c; motor( left, right );
|
||
\n;
|
||
Значения должны быть между -1 и 1:
|
||
-1 = полная тяга назад
|
||
0 = стоп
|
||
1 = полная тяга вперед
|
||
|
||
Например, \c;motor(0.5, 0.5);\n; будет двигать машину вперед на среднем ходу, пока она не получит дальнейших инструкций.
|
||
|
||
С помощью инструкции \c;motor(0.5, 0.6);\n;, можно заставить бота двигаться вперед на среднем ходу, одновременно медленно поворачиваясь влево: правосторонний мотор движется немного быстрее (\c;0.6\n;), чем левосторонний мотор (\c;0.5\n;).
|
||
|
||
\b;Обший принцип
|
||
Чтобы переместиться вперед точно на 25 метров и остановиться, вы должны двигаться первые 23 метра на полной скорости, а после этого снизить скорость на последнем отрезке длиной два метра.
|
||
\l;Переменная\u cbot\var; \l;position\u cbot\object; в любой момент сообщает вам о текущей позиции бота, а инструкция \c;\l;distance\u cbot\dist;( , );\n; выдает расстояние между двумя точками. Лучший способ узнать ваше текущее положение заключается в сохранении текущей позиции перед тем, как задать \l;переменную\u cbot\var;. Например, переменную, которая называется \c;start\n;. После этого вы сможете высчитать расстояние между начальной позицией и вашей текущей позицией: \c;distance(позиция, старт)\n;.
|
||
|
||
\b;Программа
|
||
1) задание переменных
|
||
\s;\c; point start;
|
||
\s; float len;
|
||
\n;
|
||
2) сохранение стартовой позиции
|
||
\s;\c; start = position;
|
||
\n;
|
||
3) start full throttle :
|
||
\s;\c; motor(1, 1);
|
||
\n;
|
||
4) Бесконечный цикл \c;\l;while\u cbot\while;\n;:
|
||
\s;\c; while ( true )
|
||
\s; {
|
||
\s; len = distance(позиция, старт);
|
||
\s; if ( len > 25-2 )
|
||
\s; {
|
||
\s; motor( меньше, чем раньше ! );
|
||
\s; }
|
||
\s; }
|
||
\n;
|
||
Пока расстояние между стартовой и текущей позициями меньше 23 метров, инструкция в скобках после \c;\l;if\u cbot\if;\n; выполняться не будет, поэтом моторы будут продолжать на максимальной мощности, как им и было приказано инструкцией \c;\l;motor\u cbot\motor;(1,1);\n;.
|
||
|
||
Чтобы постепенно снизить скорость, скорость моторов должна быть пропорциональной оставшемуся расстоянию:
|
||
o \c;2.0\n; метра осталось -> скорость = \c;1.00\n; (максимум)
|
||
o \c;1.5\n; метра осталось -> скорость = \c;0.75\n;
|
||
o \c;1.0\n; метр остался -> скорость = \c;0.50\n;
|
||
o \c;0.5\n; метра осталось -> скорость = \c;0.25\n;
|
||
o \c;0.0\n; метров осталось -> скорость = \c;0.00\n; (стоп)
|
||
|
||
\image tdragst1 12 6;
|
||
Вы можете использовать следующее \l;выражение\u cbot\expr; \c;(25-len)/2\n; чтобы высчитать значение для инструкции скорости, которая должна быть дана моторам.
|
||
|
||
Теперь вы должны сложить все это вместе и проверить программу.
|
||
|
||
\b;Комментарий
|
||
Вы можете использовать значения больше 1 для инструкции \c;\l;motor\u cbot\motor;();\n;, но от этого бот быстрее двигаться не будет.
|
||
|
||
\t;См. также
|
||
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.
|