Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > надо решить задачу мне


Автор: Математик 24.10.2004, 15:53
Помогите написать алгоритм. Задание:
Можна ли с круглой заготовки радиуса r вырезать две прямоугольные пластины с размерами a*b і c*d?

Автор: Akina 25.10.2004, 08:37
Ну и в чем проблема? Берем тот что больше, вкладываем, отрезаем от круга остатний сектор и смотрим укладывается ли в нем вторая деталя...

Автор: podval 25.10.2004, 13:08
Для ответа "можна" надо, чтобы фигура, образованная двумя прямоугольниками, могла быть вписана в окружность радиуса r.

Автор: Akina 25.10.2004, 18:03
podval
Определение радиуса описанной окружности - имхо более сложная задача. Хотя тоже простая :D .

Автор: Kaskad 26.10.2004, 22:02
Цитата(Akina @ 25.10.2004, 08:37)

Ну и в чем проблема? Берем тот что больше, вкладываем, отрезаем от круга остатний сектор и смотрим укладывается ли в нем вторая деталя...


Уточню,кладываем большой так, чтобы его две вершени лежали на окружности(тогда оставшийся свободный кусок круга вместит максимально возможный второй прямоугольник) :thumbs-up

Автор: S.A.P. 26.10.2004, 22:14
Цитата(Kaskad @ 26.10.2004, 22:02)

тогда оставшийся свободный кусок круга вместит максимально возможный второй прямоугольник

Ну и как он определит, помещается оставшийся кусок или нет?

Автор: S.A.P. 26.10.2004, 22:57
Как решил бы я
http://musorka.nm.ru/krug.PNG
Оба прямоугольника влезают в окружность если A1-D1, A2-D2 и А1-D2 меньше диаметра окружности.

Надеюсь как все расстояния найти знаешь :) .

Автор: Математик 28.10.2004, 17:48
Чесно говоря, как найти А1-D2 понятия не имею :(

Автор: Ignat 28.10.2004, 17:56
Цитата

Чесно говоря, как найти А1-D2 понятия не имею

По теореме Пифагора :hehe

Автор: Математик 28.10.2004, 18:07
Я в школе плохо учился! Можно конкретную формулу?! :sample

Автор: S.A.P. 28.10.2004, 18:43
A1-C1 + A2-C2 - один катет
(A1-B1 + A2-B2) / 2 - второй катет
A1-D2 - гипотенуза

Я немного подумал... Существует некий диапазон значений при которых данным методом задача не решается :( . Вобщем я тебе мозги запудрил, нечайно :) .

Автор: S.A.P. 28.10.2004, 22:50
Чтобы уж окончательно запудрить всем мозги вот другое решение:

Приложим обе вершины большей стороны большего прямоугольника к окружности. Пусть центр окружности будет в начале координат, а одна из вершин большего прямоугольника в точке (R;0):
http://musorka.nm.ru/alg/1.PNG
Теперь найдем координаты точки A1 (A1M- это у нас высота, следовательно A1M = A1(y) ; M(x) = A1(x) ). Пусть α = угол A1-O-B1.
http://musorka.nm.ru/alg/2.PNG
Не буду разворачивать последнюю формулу, тут и так все понятно :)

Теперь достроим больший прямоугольник и найдем координаты остальных точек:
http://musorka.nm.ru/alg/3.PNG
Составим систему уравнений из уравнений окружностей с центрами A1 и B1, и длинами A1C1 и B1C1 соответственно. Это нам нужно для того, чтобы найти точки пересечения двух окружностей, одна из которых будет С1.
http://musorka.nm.ru/alg/4.PNG
получим две точки, но выберем ту, что ближе к центру основной окружности.
Аналогично находим координаты D1.

Теперь построим второй прямоугольник. Идеальным расположением для данной задачи будет большей стороной вплотную к первому прямоугольнику посередине.
Примерно так:
http://musorka.nm.ru/alg/5.PNG
Для начала найдем координаты точки E, являющейся центром отрезка С1-D1:
E(x)=C(x)+(D(x)-C(x))/2
E(y)=C(y)+(D(y)-C(y))/2

Чтобы найти координаты точек A2, B2 можно решить систему уравнений из прямой, проходящей через точки С1 и D1, и уравнения окружности, центр которой является точка E, а радиус – A2-E.
http://musorka.nm.ru/alg/6.PNG
Таким образом получаем 2 пересечения окружности и прямой – 2 точки A2 и B2.

Аналогично большому прямоугольнику находим координаты точек C2 и D2, только из двух возможных точек выбираем те, что дальше от большого прямоугольника.

Теперь мы знаем координаты всех точек обоих прямоугольников. Нам надо выяснить есть ли среди них те, что лежат вне окружности. Если нет, то оба прямоугольника в нее влезают.
Это можно выяснить, например вычислением расстояния от центра окружности, до заданной точки, и если расстояние меньше или равно радиусу окружности, то влезает.
Вот например как найти расстояние от центра до С1
http://musorka.nm.ru/alg/7.PNG


Автор: Akina 29.10.2004, 08:39
Perchilla
Во ты заморочился... в то время как
Цитата
Оба прямоугольника влезают в окружность если A1-D1, A2-D2 и А1-D2 меньше диаметра окружности.
есть почти правильное решение - только слово "меньше" надо заменить на "не больше". И после корректировки - самое вычислительнобыстрое.

Автор: Ignat 29.10.2004, 09:38
Цитата(Perchilla @ 28.10.2004, 19:43)

Я немного подумал... Существует некий диапазон значений при которых данным методом задача не решается

Сколько смотрел и так и сяк - не нашёл такого...

Автор: Alex101 29.10.2004, 10:38
Задача решается. Окружность радиуса r находится в центре координат (т.О).
user posted image
http://alex101f.mail333.com/pic1.gif
Один прямоугольник имеет стороны L и H (L >= H), второй l и h (l >= h).
Поместим первый прямоугльник в окружность так, чтобы вершины на стороне L касались окружности. Расстояние по оси OY до сторон длиной L будет соответственно a и b, a+b=H. Причем, b может быть отрицательным в случае a>H (Ну и Бог с ним).
a:=SQRT(r*r-L*L/4);
b:=H-a;
Тогда расстояние от O до дальней стороны l второго прямоугольника
R1:=h+b;
Тогда расстояние от точки O до дальней вершины второго прямоугльника (жирная линия) будет равно
SQRT(R1*R1+l*l/4);
оно должно быть меньше или равно радиусу окружности r.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)