Задачи на построение углов

При имитации построения угла используются механизмы "построения" точки и соединения отрезком двух именованных точек.

Программный код задач на построение разбивается на две содержательные части: сценарии, обеспечивающие интерактивное рисование, и сценарии проверки ответа.

Пример - №264.

Условие задачи:

Начертите угол, равный 75о, и отделите от него угол, равный 55о. Найдите второй угол.

Рисование

Рабочая область Flash-документа показана на рисунке 1.


Рисунок 1

Экземпляр mc1 видеоклипа Page содержит сценарий "замены" курсора карандашом (см здесь). В ключевом кадре главной временной шкалы свойствам _visible (видимость) объектов dot1, tx1, ln0, mes (сообщение об ошибке) присваиваются значения false (чтобы их не было видно при запуске). Сценарий, отвечающий за добавление новых точек, находится в экземпляре кнопки PageButton, изображение в кадре Hit которого совпадает с mc1.

В ключевом кадре основной временной шкалы определяются пользовательские функции вычисления расстояния между двумя точками и угла поворота линии, соединяющей две точки (т.е. соответствующего экземпляра видеоклипа Line), от вертикальной оси, а также, функции "рисования" точки и "проведения" линии.

Функции рисования точки и проведения линии аналогичны приведенным здесь.

Проверка ответа

Проверка ответа заключается в установлении соответствия между тем, что нарисовано и тем, что написано. Например, если в экземпляре mcans присутствует утверждение "РABC=15о", следует проверить:

  • имеются ли в области построения точки A, B, C;
  • равен ли угол ABC пятнадцати градусам (с заданной точностью);
  • соединены ли эти точки линиями так, чтобы имел место соответствующий угол.

    Функции, используемые для проверки ответа, определены в ключевом кадре временной шкалы.

    //Проверяет, равен ли косинус угла между векторами d2 d1 и d2 d3 величине size
    function checkAngle (d1, d2, d3, size)
    {
       var res = false;
       scx = (d1._x-d2._x)*(d3._x-d2._x);
       scy = (d1._y-d2._y)*(d3._y-d2._y);
       scp = scx+scy;         //скалярное произведение (d1d2, d2d3)
       norma = Math.sqrt((d1._x-d2._x)*(d1._x-d2._x)+(d1._y-d2._y)*(d1._y-d2._y));
       normb = Math.sqrt((d3._x-d2._x)*(d3._x-d2._x)+(d3._y-d2._y)*(d3._y-d2._y));
       if (Math.abs(scp/(norma*normb)-size)<0.03)
            {  res = true;  }
       return res;
    }
    //Проверяет, соединены ли d1, d2, d3 линиями так, чтобы образовывался угол с вершиной d2
    function isAngle (d1, d2, d3)
    {
       var res1 = 0;
       var res2 = 0;
       for (var i = 0; i<lnum; i++)
       {
          if ((Lines[i] == d1+d2) || (Lines[i] == d2+d1))
               {  res1 = 1;  }
          if ((Lines[i] == d3+d2) || (Lines[i] == d2+d3))
               {  res2 = 1;  }
       }
       return res1*res2;
    }
    //Общая проверка утверждения номер nm
    function checkAnswer (nm)
    {
       var res = false;
       var str = mcans["ans"+nm.toString()];         //str - имя угла в утверждении номер nm
       var nums = new Array(0, 0, 0);
       var nam = new Array(str.charAt(0), str.charAt(1), str.charAt(2));
       for (var i = 1; i<=4; i++)         //Проверка наличия соответствующих точек
       {
          for (var j = 0; j<3; j++)
          {
             if (_root["tx"+i.toString()].a1 == nam[j])
             {
                nums[j] = i;
                j = 3;
             }
          }
       }
       if (nums[0]*nums[1]*nums[2] != 0)          //Если все три точки построены
       {         //Образуют ли точки нужный угол? Соединены ли линиями в нужном порядке?
          if ((isAngle(nam[0], nam[1], nam[2]) == 1) && checkAngle(_root["dot"+nums[0].toString()], _root["dot"+nums[1].toString()], _root["dot"+nums[2].toString()], Math.cos(angles[nm-1])))
               {  res = true;  }
       }
       return res;
    }
    //Формирование ответа
    function MakeAnswer ()
    {
       ansarr = new Array(0, 0, 0);      //ansarr[i] соответствует i-тому утверждению
       for (var i = 1; i<=3; i++)
       {
          if (checkAnswer(i))      {  ansarr[i-1] = 1;  }
          else   {  ansarr[i-1] = 0; }
       }
       answer = ansarr.join(",")+","+mcans.ans4.toString();
    }

    Сценарий передачи ответа размещён в экземпляре mcans видеоклипа Answer и имеет вид:

    onClipEvent (mouseMove)
    {
       _root.MakeAnswer();
       fscommand ("1", _root.answer);
    }

    Открыть фильм в новом окне


    Назад
    К содержанию
    Далее