singlepost

Ещё раз олимпиада << На главную или назад  

Помогите, кто может с задачей //olympiads.ru/zaoch/2009/problems/e.shtml
другие решил, а эту просто без понятия как решить, ввиду того, что не дружу с геометрией.Хотябы подскажите как решать, заранее спасибо.

8 ответов в теме “Ещё раз олимпиада”

  1. 8
    Александр Кручинин ответил:

    Il Andreyka IlВообще любая точка будет лежать на радиусе, если её соединить с центром окружности.
    Строя перпендикуляр к радиусу мы найдём самую удалённую касательную, которая и будет одной стороной треугольника
    #5Николай ⇒∜ԒƸѶƾ ȞĂ ⇐♔ Басалаев
    Насчёт формул по геометрии – ну самую удалённую точку найти просто – расстояние от центра клумбы до окружности дерева + радиус дерева
    найдя эту точку можно к ней найти перпендикуляр – не охота объяснять, кидаю сюда готовую функцию:

    //1-ый параметр формула входной линии, 2 – точка от которой необходимо построить перпендикуляр
    возвращает формулу линии
    F_LINE MakePerpendicularLine(F_LINE f_line,double xy)
    {
    F_LINE f;
    double y,y1,x,x1;

    if (f_line.b==1)
    {
    y=f_line.b1*xy+f_line.b2;
    y1=y-(10)/f_line.b1;
    f=MakeLine(xy,y,(xy+10),y1);
    }
    if (f_line.b==2)
    {
    x=f_line.b1*xy+f_line.b2;
    x1=x-(10)/f_line.b1;
    f=MakeLine(x,xy,x1,(xy+10));
    }

    return f;
    }

    struct F_LINE
    {
    int k1;//тест
    int b;//показывает y=f(x) или x=f(y)
    double b1,b2;параметры линии y=b1*x+b2
    };

    F_LINE MakeLine(double x1,double y1,double x2,double y2)
    {
    F_LINE f;
    f.k1=3;
    //вычисляем координаыт линии от i3 к i4
    f.b=1;
    if (absf(x1-x2)<absf(y1-y2)) f.b=2;
    if (f.b==1)
    {
    //y=f(x);
    f.b1=(double)(y2-y1)/(x2-x1);
    f.b2=(double)y1-(double)x1*f.b1;
    }
    if (f.b==2)
    {
    //x=f(y);
    f.b1=(double)(x2-x1)/(y2-y1);
    f.b2=(double)x1-(double)y1*f.b1;
    }
    return f;
    }
    Александр {Desembra} Лищенер
    наверное можно сделать круче если подумать хорошо :) На то она и олимпиада

  2. 7
    Антон Кононов ответил:

    Леонид, я нарисовал на бумажке ваш вариант…
    и он оказался лучше моего :)

    и действительно похоже на правду

  3. 6
    Леонид Максимов ответил:

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

    ЗЫ: не считал и не доказывал, что это всегда даст ответ, но похоже на правду.

  4. 5
    Александр Лищенер ответил:

    Александр, не, там круче
    помоему все можно сделать красивше)
    и помоему я сделал))
    в течение недели отправлю, если 100 получу, выложу решение

  5. 4
    Николай Басалаев ответил:

    А не могли бы подсказать ещё формулы по геометрии, чтобы найти эти точки.

  6. 3
    Il Il ответил:

    2. построить перпендикуляр к радиусу в этой точке

    самая удаленная точка и так будет лежать на радиусе или что-то не так?

  7. 2
    Александр Кручинин ответил:

    По-моему надо
    1. сначала определить наиболее удалённую точку на окружностях деревьев от центра клумбы.
    2. построить перпендикуляр к радиусу в этой точке и определить, где эта прямая будет пересекаться с окружностью клумбы. Это будет первый отрезок треугольника.
    3. Найти 3-ю точку треугольника

    Третью точку можно найти путём переборавозможных точек на оставшейся части дуги (для ускорения использовать метод дихотомии – деления пополам).
    Ну или как-то ещё продумать

  8. 1
    Il Il ответил:

    щас гляну)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.