Дверь и шкаф, "Горе от ума"(С) |
Дверь и шкаф, "Горе от ума"(С) |
sheka |
13.09.2010 17:37
Сообщение
#1
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Вопрос: возможно ли пронести шкаф a*b*c через дверь p*q?
Мое решение: write ( min(a,min(b,c)) < min(p,q)) and (a+b+c-min(a,min(b,c))-max(a,max(b,c)) < max(p,q) ); Можно как-то оптимизировать? Учитывая, что паскаль я вижу впервые, и что я функции, по идее, знать не должен программа растягивается до некультурной длины. |
sheka |
13.09.2010 19:12
Сообщение
#2
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
маленький упс.. там же можно еще и в плоскостях шкаф передвигать наверное..
|
Unconnected |
13.09.2010 19:46
Сообщение
#3
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Для протаскивания шкафа нужно, чтобы 2 из 3х его параметров удовлетворяли двери. Можно упорядочить стороны по возрастанию и взять первые 2 числа, а потом их уже сравнивать с дверью.. Правда, широкий низкий шкаф, который просто так по ширине не проходит, можно пронести, немного повернув его)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
sheka |
13.09.2010 21:40
Сообщение
#4
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Готово. Чуть позже постараюсь выложить объяснения.
procedure TForm1.Button1Click(Sender: TObject); Сообщение отредактировано: sheka - 14.09.2010 1:55 |
Lapp |
14.09.2010 2:20
Сообщение
#5
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Ребят, раздел - Алгоритмы! Программа - не есть алгоритм, она есть его реализация. Если вы кладете тут программу, то только как демонстрацию ранее приведенного алгоритма!
Даю возможность исправить ошибку задним числом.. )) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
14.09.2010 11:51
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> sqrt(a*a+b*b)*sin(arctan(2*a*b/(a*a-b*b))+arctan(sqrt(a*a+b*b-q*q)/q))
То есть ты решил учесть поворот? Мне кажется, тут какая-то лажа. Потому что второе слагаемое arctan(sqrt(...)) имеет не ту размерность. Кстати, sin(arctan(x)) = x/sqrt(sqr(x)+1), причём корень тут берётся. т.е. можно выражение очень упростить. Первое слагаемое (sqrt(a*a+b*b)*sin(arctan(2*a*b/(a*a-b*b))) сожмётся до 2ab/sqrt(aa+bb) -------------------- |
sheka |
14.09.2010 22:11
Сообщение
#7
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
TarasBer, там же, как ты сам и говорил, сумма арктангенсов. а еще играться с триногометрией.. я думаю там не проще будет.
Lapp, как мне сегодня рассказывали, программа - один из вариантов представления алгоритма. Я бы с удовольствием выложил алгоритм, но его надо сначало красиво переписать))) Сделаю чуть позже. TarasBer, проверяй, пожалуйста. Вроде все чики пики. Я вчера ночером по миллиметрам линейкой считал: ____________.rar ( 176.59 килобайт ) Кол-во скачиваний: 519 Сообщение отредактировано: sheka - 14.09.2010 22:13 |
TarasBer |
15.09.2010 11:37
Сообщение
#8
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А, второй арктангенс под синусом. Понял.
Тогда так sin(x+y)=sinxcosy+sinycosx= (2abq+(a2-b2)sqrt(a2+b2-q2))/(a2+b2)sqrt(a2+b2) После умножения на sqrt(a2+b2) из знаменателя исчезает корень: if p*(a*a+b*b)>= 2*a*b*q+(a*a+b*b)*sqrt(a*a+b*b-q*q) then... Кстати, в таком виде формула уже не вылетает при a=b. Но симметрии всё равно пока нет. Надо дальше думать. -------------------- |
TarasBer |
15.09.2010 15:50
Сообщение
#9
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
После симметризации условие принимает вид такой:
(p2+q2)*(a2+b2)-4pqab>= (a2+b2)*(a2+b2)-4abab. -------------------- |
sheka |
20.09.2010 0:53
Сообщение
#10
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
alpha := arctan(sqrt(a*a+b*b-q*q)/q); Добавил такие ограничения, вроде уже при всех входных данных должно работать. С первого раза как-то забыл проверить.. TarasBer, можешь подробнее расписать, не могу уловить ход размышлений Lapp, вот только добрался, и написал "алгоритм" Сообщение отредактировано: sheka - 20.09.2010 0:54 |
sheka |
20.09.2010 20:57
Сообщение
#11
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Вот никак не могу понять, откуда из вот этого
Цитата p*(a*a+b*b)>= 2*a*b*q+(a*a+b*b)*sqrt(a*a+b*b-q*q) берется вот это:Цитата После симметризации условие принимает вид такой: (p2+q2)*(a2+b2)-4pqab>= (a2+b2)*(a2+b2)-4abab. |
TarasBer |
23.09.2010 18:17
Сообщение
#12
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Переносим 2*a*b*q налево, возводим в квадрат.
Потом, после приведения подобных, делим обе части на (a*a+b*b). Добавлено через 2 мин. Только не из p*(a*a+b*b)>= 2*a*b*q+(a*a+b*b)*sqrt(a*a+b*b-q*q) а из p*(a*a+b*b)>= 2*a*b*q+(a*a-b*b)*sqrt(a*a+b*b-q*q) -------------------- |
sheka |
27.09.2010 1:07
Сообщение
#13
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
TarasBer, что это за умное слово "симметризация" ? Нигде не могу его найти
Интересует потому, что вроде в таком виде оно действительно симметрично, но правая часть будет ведь проще без ее, симметризации. |
TarasBer |
27.09.2010 17:30
Сообщение
#14
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Нет такого термина, это я для наглядности сказал.
Да, правая часть может быть записана как sqr(a2-b2), но в таком виде неравенство выглядит интереснее. -------------------- |
Текстовая версия | 27.09.2024 10:42 |