Помогите, кто может с задачей //olympiads.ru/zaoch/2009/problems/e.shtml
другие решил, а эту просто без понятия как решить, ввиду того, что не дружу с геометрией.Хотябы подскажите как решать, заранее спасибо.
Помогите, кто может с задачей //olympiads.ru/zaoch/2009/problems/e.shtml
другие решил, а эту просто без понятия как решить, ввиду того, что не дружу с геометрией.Хотябы подскажите как решать, заранее спасибо.
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
28 октября 2009 в 8:04
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} Лищенер
наверное можно сделать круче если подумать хорошо На то она и олимпиада
28 октября 2009 в 8:03
Леонид, я нарисовал на бумажке ваш вариант…
и он оказался лучше моего
и действительно похоже на правду
27 октября 2009 в 22:04
если не ошибаюсь, то надо провести касательную к обоим деревьям и из точек пересечения ее с клумбой провести еще по касательной к каждому из деревьев.
ЗЫ: не считал и не доказывал, что это всегда даст ответ, но похоже на правду.
27 октября 2009 в 22:02
Александр, не, там круче
помоему все можно сделать красивше)
и помоему я сделал))
в течение недели отправлю, если 100 получу, выложу решение
27 октября 2009 в 19:02
А не могли бы подсказать ещё формулы по геометрии, чтобы найти эти точки.
27 октября 2009 в 18:04
2. построить перпендикуляр к радиусу в этой точке
самая удаленная точка и так будет лежать на радиусе или что-то не так?
27 октября 2009 в 18:02
По-моему надо
1. сначала определить наиболее удалённую точку на окружностях деревьев от центра клумбы.
2. построить перпендикуляр к радиусу в этой точке и определить, где эта прямая будет пересекаться с окружностью клумбы. Это будет первый отрезок треугольника.
3. Найти 3-ю точку треугольника
Третью точку можно найти путём переборавозможных точек на оставшейся части дуги (для ускорения использовать метод дихотомии – деления пополам).
Ну или как-то ещё продумать
27 октября 2009 в 18:01
щас гляну)