![]() |
|
|
![]()
|
|
| Математик |
|
|||
|
Unregistered |
Помогите написать алгоритм. Задание:
Можна ли с круглой заготовки радиуса r вырезать две прямоугольные пластины с размерами a*b і c*d? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну и в чем проблема? Берем тот что больше, вкладываем, отрезаем от круга остатний сектор и смотрим укладывается ли в нем вторая деталя...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Для ответа "можна" надо, чтобы фигура, образованная двумя прямоугольниками, могла быть вписана в окружность радиуса r.
Присоединённый файл ( Кол-во скачиваний: 2 )
r.JPG |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
podval
Определение радиуса описанной окружности - имхо более сложная задача. Хотя тоже простая -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Kaskad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 24.9.2004 Репутация: нет Всего: 3 |
Уточню,кладываем большой так, чтобы его две вершени лежали на окружности(тогда оставшийся свободный кусок круга вместит максимально возможный второй прямоугольник) -------------------- Well come to America! |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Ну и как он определит, помещается оставшийся кусок или нет? |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
||||
|
||||
| Математик |
|
|||
|
Unregistered |
Чесно говоря, как найти А1-D2 понятия не имею
|
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
По теореме Пифагора -------------------- Теперь при чем :P |
|||
|
||||
| Математик |
|
|||
|
Unregistered |
Я в школе плохо учился! Можно конкретную формулу?!
|
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
A1-C1 + A2-C2 - один катет
(A1-B1 + A2-B2) / 2 - второй катет A1-D2 - гипотенуза Я немного подумал... Существует некий диапазон значений при которых данным методом задача не решается Это сообщение отредактировал(а) Perchilla - 28.10.2004, 19:39 |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Чтобы уж окончательно запудрить всем мозги вот другое решение:
Приложим обе вершины большей стороны большего прямоугольника к окружности. Пусть центр окружности будет в начале координат, а одна из вершин большего прямоугольника в точке (R;0): Теперь найдем координаты точки A1 (A1M- это у нас высота, следовательно A1M = A1(y) ; M(x) = A1(x) ). Пусть α = угол A1-O-B1. Не буду разворачивать последнюю формулу, тут и так все понятно Теперь достроим больший прямоугольник и найдем координаты остальных точек: Составим систему уравнений из уравнений окружностей с центрами A1 и B1, и длинами A1C1 и B1C1 соответственно. Это нам нужно для того, чтобы найти точки пересечения двух окружностей, одна из которых будет С1. получим две точки, но выберем ту, что ближе к центру основной окружности. Аналогично находим координаты D1. Теперь построим второй прямоугольник. Идеальным расположением для данной задачи будет большей стороной вплотную к первому прямоугольнику посередине. Примерно так: Для начала найдем координаты точки 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. Таким образом получаем 2 пересечения окружности и прямой – 2 точки A2 и B2. Аналогично большому прямоугольнику находим координаты точек C2 и D2, только из двух возможных точек выбираем те, что дальше от большого прямоугольника. Теперь мы знаем координаты всех точек обоих прямоугольников. Нам надо выяснить есть ли среди них те, что лежат вне окружности. Если нет, то оба прямоугольника в нее влезают. Это можно выяснить, например вычислением расстояния от центра окружности, до заданной точки, и если расстояние меньше или равно радиусу окружности, то влезает. Вот например как найти расстояние от центра до С1 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Perchilla
Во ты заморочился... в то время как
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: нет Всего: 73 |
Сколько смотрел и так и сяк - не нашёл такого... -------------------- Теперь при чем :P |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Задача решается. Окружность радиуса r находится в центре координат (т.О).
![]() (Смотри рисунок) Один прямоугольник имеет стороны 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. Это сообщение отредактировал(а) Alex101 - 29.10.2004, 11:12 -------------------- С уважением, А. Фролов. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |